HOME


Mini Shell 1.0
La Pieza.DO | Todo lo que buscas!

Bienvenido de nuevo!

Acceso Cuenta Delivery
DIR: /var/www/devs.lapieza.net/app/Http/Controllers/
Upload File :
Current File : /var/www/devs.lapieza.net/app/Http/Controllers/AddressController.php
<?php

namespace App\Http\Controllers;

use App\Models\Address;
use App\Models\City;
use App\Models\State;
use Auth;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

class AddressController extends Controller {
    public function store(Request $request) {

        $validator = Validator::make($request->all(), [
            'address' => ['required'],
            'phone' => [
                'required',
                'regex:/^\+1[0-9]{10}$/',
                // Rule::unique('users')->ignore(auth()->user()->id),
            ],// Agregamos la regla unique para verificar que el número de teléfono no exista en la tabla "users
        ]);
        /*if ($validator->fails()) {
            // Si la validación falla, puedes redirigir o devolver una respuesta con los errores
            flash(translate('Error de validacion, formulario crear direccion.'))->warning();
            return redirect()->back()->withErrors($validator)->withInput();
        }*/

        if ($validator->fails()) {
            $error = $validator->errors()->first();
            return response()->json([
                'state' => 'error',
                'msg' => 'Error de validación, '. $error
            ], 200); // 400 Bad Request
        }
        $addressCount = Address::where('user_id', auth()->user()->id)->count();
        if ($addressCount >= 3) {
            return response()->json([
                'state' => 'error',
                'msg' => 'No puedes tener más de 3 direcciones registradas.'
            ], 200); // 400 Bad Request
        }

        $address = new Address();
        $address->user_id = auth()->user()->id;
        $address->phone = $request->phone;
        $address->address = $request->address;
        $address->country = $request->country;
        $address->state = $request->state;
        $address->city = $request->city;
        $address->postalCode = $request->postalCode;
        $address->latitude = $request->latitude;
        $address->longitude = $request->longitude;
        // Verificar si existe alguna dirección con set_default en 1
        $existingAddress = Address::where('user_id', auth()->user()->id)
            ->where('set_default', 1)
            ->first();
        if ($existingAddress) {
            // Cambiar el set_default de la dirección existente a 0
            $existingAddress->set_default = 0;
            $existingAddress->save();
        }
        $address->set_default = 1;
        $address->save();
        return response()->json([
            'state' => 'success',
            'msg' => 'Dirección creada correctamente'
        ], 200); // 200 OK
        /*flash(translate('Address info Stored successfully'))->success();
        return back();*/
    }

    public function edit($id) {
        $data['address_data'] = Address::findOrFail($id);
        $data['states'] = State::where('status', 1)->where('country_id', $data['address_data']->country_id)->get();
        $data['cities'] = City::where('status', 1)->where('state_id', $data['address_data']->state_id)->get();
        $returnHTML = view('frontend.partials.address_edit_modal', $data)->render();
        return response()->json(array('data' => $data, 'html' => $returnHTML));
    }

    public function update(Request $request, $id) {
        $validator = Validator::make($request->all(), [
            'address' => ['required'],
            'phone' => [
                'required',
                'regex:/^\+1[0-9]{10}$/',
            ],
        ]);
        /*if ($validator->fails()) {
            return redirect()->back()->withErrors($validator)->withInput();
        }*/
        if ($validator->fails()) {
            $error = $validator->errors()->first();
            return response()->json([
                'state' => 'error',
                'msg' => 'Error de validación, '. $error
            ], 200); // 400 Bad Request
        }
        $address = Address::findOrFail($id); // Buscar la dirección actual por su ID
        $address->address = $request->address;
        $address->phone = $request->phone;
        $address->country = $request->country;
        $address->state = $request->state;
        $address->city = $request->city;
        $address->postalCode = $request->postalCode;
        $address->latitude = $request->latitude;
        $address->longitude = $request->longitude;
        $address->save();
        /*flash(translate('Address info updated successfully'))->success();
        return back();*/

        return response()->json([
            'state' => 'success',
            'msg' => 'Dirección editada correctamente'
        ], 200); // 200 OK
    }

    public function destroy($id) {
        $address = Address::findOrFail($id);
        if (!$address->set_default) {
            $address->delete();
            return back();
        }
        flash(translate('Default address cannot be deleted'))->warning();
        return back();
    }

    public function getStates(Request $request) {
        $states = State::where('status', 1)->where('country_id', $request->country_id)->get();
        $html = '<option value="">' . translate("Select State") . '</option>';
        foreach ($states as $state) {
            $html .= '<option value="' . $state->id . '">' . $state->name . '</option>';
        }
        echo json_encode($html);
    }

    public function getCities(Request $request) {
        $cities = City::where('status', 1)->where('state_id', $request->state_id)->get();
        $html = '<option value="">' . translate("Select City") . '</option>';
        foreach ($cities as $row) {
            $html .= '<option value="' . $row->id . '">' . $row->getTranslation('name') . '</option>';
        }
        echo json_encode($html);
    }

    public function set_default($id) {
        foreach (Auth::user()->addresses as $key => $address) {
            $address->set_default = 0;
            $address->save();
        }
        $address = Address::findOrFail($id);
        $address->set_default = 1;
        $address->save();
        return back();
    }
}