HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux ip-172-31-42-149 5.15.0-1084-aws #91~20.04.1-Ubuntu SMP Fri May 2 07:00:04 UTC 2025 aarch64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/vhost/disk-apps/agile-selling-wpb/app/Http/Controllers/ZonesController.php
<?php

namespace App\Http\Controllers;

use Excel;
use App\Zone;
use App\Seat;
use App\Door;
use App\Letter;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;

use Box\Spout\Common\Entity\Row;
use Box\Spout\Common\Entity\Style\Color;
use Box\Spout\Common\Entity\Style\CellAlignment;
use Box\Spout\Writer\Common\Creator\Style\StyleBuilder;
use Box\Spout\Reader\Common\Creator\ReaderEntityFactory;
use Box\Spout\Writer\Common\Creator\WriterEntityFactory;

class ZonesController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $zones = Zone::whereNull('zone_id')->get();
        $doors = Door::where('active', true)->get();
        $letters = Letter::all();
        foreach ($zones as $zone) {
            $zone->childs = $this->getChlids($zone->id,"controller");
        }
        return view('zones.list', compact('zones','doors', 'letters'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('zones.create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        if (!Zone::where([['name', $request->input('name')],['zone_id', $request->input('zone_id')]])->first()) {
            if ($zone = Zone::create($request->all())) {
                return response(array("r" => true, "type" => "success", "title" => "", "m" => __('messages.created_successfully'), "data" => $zone->id));
            } else {
                return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_creating'), "data" => null));
            }
        } else {
            return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.already_exists', ['name' => $request->input('name')]), "data" => null));
        }
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        return redirect()->back();
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        $team = Zone::findOrFail($id);
        return view('zones.edit', compact('team'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        if (!Zone::where([['id', '!=', $id], ['name', $request->input('name')], ['zone_id', $request->input('zone_id')]])->first()) {
            if (Zone::where('id', $id)->update($request->except('zone_id'))) {
                return response(array("r" => true, "type" => "success", "title" => "", "m" => __('messages.updated_successfully'), "data" => null));
            } else {
                return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_updating'), "data" => null));
            }
        } else {
            return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.already_exists', ['name' => $request->input('name')]), "data" => null));
        }
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        try {
            if (Zone::where('id', $id)->delete()) {
                return response(array("r" => true, "type" => "success", "title" => "", "m" => __('messages.deleted_successfully'), "data" => null));
            } else {
                return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_removing'), "data" => null));
            }
        } catch (\Illuminate\Database\QueryException $e) {
            return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.delete_relation_data'), "data" => null));
        }
    }

    /**
     * Remove the specified seat.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroySeat($id)
    {
        try {
            if (Seat::where('id', $id)->delete()) {
                return response(array("r" => true, "type" => "success", "title" => "", "m" => __('messages.deleted_successfully'), "data" => null));
            } else {
                return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_removing'), "data" => null));
            }
        } catch (\Illuminate\Database\QueryException $e) {
            return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.delete_relation_data'), "data" => null));
        }
    }

    public function getChlids($zone_id, $origin = 'api')
    {
        $childs = Zone::where('zone_id', $zone_id)->with('zone')->get();
        if($origin == "api"){
            return response(array("r" => true, "type" => "success", "title" => "", "m" => "", "data" => $childs));
        }
        return $childs;
    }

    public function getSeats($zone_id)
    {
        $seats = Seat::where('zone_id', $zone_id)->with('letter')->orderBy('code', 'desc')->get();
        return response(array("r" => true, "type" => "success", "title" => "", "m" => "", "data" => $seats));
    }

    public function createSeat(Request $request)
    {
        if (Seat::create($request->all())) {
            return response(array("r" => true, "type" => "success", "title" => "", "m" => __('messages.created_successfully'), "data" => null));
        } else {
            return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_creating'), "data" => null));
        }
    }

    public function editSeat(Request $request,$seat_id)
    {
        if (Seat::where('id', $seat_id)->update($request->except('zone_id'))) {
            return response(array("r" => true, "type" => "success", "title" => "", "m" => __('messages.updated_successfully'), "data" => null));
        } else {
            return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => __('messages.error_updating'), "data" => null));
        }
    }

    public function export()
    {
        $writer = WriterEntityFactory::createXLSXWriter();
        $writer->openToBrowser("sillas.xlsx");
        $sheet = $writer->getCurrentSheet();
        $sheet->setName(__('Sillas'));
        $style = (new StyleBuilder())
           ->setFontBold()
           ->setFontSize(10)
           ->setFontColor(Color::BLACK)
           ->setShouldWrapText()
           ->setCellAlignment(CellAlignment::CENTER)
           ->setBackgroundColor(Color::rgb(245, 245, 245))
           ->build();
        $defaultStyle = (new StyleBuilder())
            ->setFormat('@')
            ->build();
        $cells = [
            WriterEntityFactory::createCell(__('Número de la silla'), $defaultStyle),
            WriterEntityFactory::createCell(__('Id Sector'), $defaultStyle),
            WriterEntityFactory::createCell(__('Id Letra'), $defaultStyle),
        ];

        $singleRow = WriterEntityFactory::createRow($cells,$style);
        $writer->addRow($singleRow);

        $seats = Seat::orderBy('zone_id', 'asc')->orderBy('letter_id', 'asc')->orderBy('code','asc')->get();
        foreach ($seats as $seat) {
            $value = [$seat->code, $seat->zone_id, $seat->letter_id];
            $rowFromValue = WriterEntityFactory::createRowFromArray($value, $defaultStyle);
            $writer->addRow($rowFromValue);
        }

        // add sheet ids zones
        $writer->addNewSheetAndMakeItCurrent();
        $sheet = $writer->getCurrentSheet();
        $sheet->setName(__('Sector'));
        $cells_zone = [
            WriterEntityFactory::createCell(__('id')),
            WriterEntityFactory::createCell(__('Nombre')),
        ];
        $singleRow_zone = WriterEntityFactory::createRow($cells_zone);
        $writer->addRow($singleRow_zone);
        $zones = Zone::where('is_saleable', true)->with('zone')->orderBy('id','asc')->get();
        foreach ($zones as $zone) {
            $value = [$zone->id,$zone->zone->name . " - " . $zone->name];
            $rowFromValue_zones = WriterEntityFactory::createRowFromArray($value);
            $writer->addRow($rowFromValue_zones);
        }
        // end sheet ids zones

        // add sheet ids letters
        $writer->addNewSheetAndMakeItCurrent();
        $sheet = $writer->getCurrentSheet();
        $sheet->setName(__('Letra'));
        $cells_letter = [
            WriterEntityFactory::createCell(__('id')),
            WriterEntityFactory::createCell(__('Nombre')),
        ];
        $singleRow_letter = WriterEntityFactory::createRow($cells_letter);
        $writer->addRow($singleRow_letter);
        $letters = Letter::all();
        foreach ($letters as $letter) {
            $value = [$letter->id,$letter->name];
            $rowFromValue_letters = WriterEntityFactory::createRowFromArray($value);
            $writer->addRow($rowFromValue_letters);
        }
        // end sheet ids letters
        $writer->close();
    }

    public function getValueRow($cells,$index = false)
    {
        if($index !== false){
            return $cells[$index]->getValue();
        }
        return $cells->getValue();
    }

    public function validateCell($cells,$cnt)
    {
        try {
            foreach ($cells as $key => $cell) {
                $value = $this->getValueRow($cell);
                if($key == 0 && !$value || $key == 0 && $value == ""){
                    $this->msj_rollback_import = __('messages.cell_empty', ['column' => __('Número de la silla'), 'cell' => $cnt]);
                    return false;
                    break;
                }

                if($key == 1 && intval($value) < 6 || $key == 1 && !Zone::where('id', $value)->first()){
                    $this->msj_rollback_import = __('messages.cell_empty', ['column' => __('Id Sector'), 'cell' => $cnt]);
                    return false;
                    break;
                }

                if($key == 2 && !Letter::where('id', $value)->first()){
                    $this->msj_rollback_import = __('messages.cell_empty', ['column' => __('Id Letra'), 'cell' => $cnt]);
                    return false;
                    break;
                }
            }
            $seat = new \stdClass();
            $seat->code = $this->getValueRow($cells,0);
            $seat->zone_id = $this->getValueRow($cells,1);
            $seat->letter_id = $this->getValueRow($cells,2);
            $seat->active = true;
            return json_decode(json_encode($seat), true);
        } catch (\Throwable $e) {
            return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => $e->getMessage(), "data" => null));
        }
    }

    public function import(Request $request)
    {
        try {
            Schema::disableForeignKeyConstraints();
            Seat::truncate();
            Schema::enableForeignKeyConstraints();
            DB::beginTransaction();
            $reader = ReaderEntityFactory::createXLSXReader();
            $reader->open($request->importSeats);
            $cnt = 0;
            foreach ($reader->getSheetIterator() as $key_sheet => $sheet) {
                if($key_sheet == 1){
                    foreach ($sheet->getRowIterator() as $row) {
                        if($cnt > 0){
                            $cells = $row->getCells();
                            if($seat = $this->validateCell($cells,$cnt+1)){
                                $current_seat = Seat::create($seat);
                            }else{
                                DB::rollback();
                                return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => $this->msj_rollback_import, "data" => null));
                                break;
                            }
                        }
                        $cnt++;
                    }
                }
            }
            DB::commit();
            $reader->close();
            return response(array("r" => true, "type" => "success", "title" => "", "m" => __('messages.import_successfully', ["cnt" => $cnt-1]), "data" => null));
        } catch (\Throwable $th) {
            DB::rollback();
            return response(array("r" => false, "type" => "error", "title" => "Oops...", "m" => $th->getMessage(), "data" => null));
        }
    }
}