Untitled

mail@pastecode.io avatar
unknown
php
2 months ago
12 kB
5
Indexable
Never
<?php

namespace App\Http\Livewire;

use App\Models\Cursada;
use App\Models\CursadaCursante;
use App\Models\Cursante;
use App\Models\Curso;
use App\Models\Examen;
use App\Models\Prestador;
use App\Models\Sucursal;
use App\Models\UnidadEvaluadora;
use App\Models\Evaluador;
use App\Models\User;
use Carbon\Carbon;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;
use Livewire\Component;
use Illuminate\Http\Request;

class FormCursadas extends Component
{
    public $cursada_id;
    public $cursada;
    // Propiedades de Cursada::class
    public $fecha_hora;
    public $evaluador_id;
    public $curso_id;
    public $aula_id = '';

    public $sucursal_id = '';
    public $prestador_id = '';


    // Otros
    public $sucursal;

    public $prestadores;
    public $modal_dni;

    public $sucursales;
    public $lista_sucursales = [];

    public $unidades;
    public $lista_unidades = [];

    public $choferes;
    public $cursos;
    public $evaluadores;

    public $cursante_linti = NULL;
    public $lista_pagos_cursante_linti = [];
    public $pago_seleccionado;
    public $empresa_id = '';

    public $mensaje_error;

    // Cursante
    public $cursantes;
    public $lista_cursantes = [];

    protected $rules = [
        'fecha_hora' => 'required',
        'aula_id' => 'required',
        'curso_id' => 'required'
    ];

    public function mount($cursada_id = NULL)
    {
        $this->unidades = UnidadEvaluadora::with('aulas')->get();
        $this->cursos = Curso::all();
        $this->prestadores = Prestador::all();
        $this->sucursales = Sucursal::all();
        $this->cursantes = Cursante::all();

        if (Auth::user()->hasRole('administrador')) {
            $this->evaluadores = Evaluador::all();
        } else if (Auth::user()->hasRole('prestador')) {
            $this->lista_unidades = Auth::user()->sucursal->unidadesEvaluadoras;

            $this->evaluadores = Evaluador::select('evaluadores.*')
                        ->leftJoin('sucursales', 'sucursales.id', 'evaluadores.sucursal_id')
                        ->where('sucursales.prestador_id', Auth::user()->sucursal->prestador_id)
                        ->get();

            $this->prestador_id = Auth::user()->sucursal->prestador->id;
            $this->seleccionarPrestador($this->prestador_id);
            $this->empresa_id = Auth::user()->sucursal->prestador->empresa_id_linti;
        } else {
            $this->lista_unidades = Auth::user()->sucursal->unidadesEvaluadoras;
            $this->evaluadores = Evaluador::where('sucursal_id', Auth::user()->sucursal_id)->get();
            $this->prestador_id = Auth::user()->sucursal->prestador->id;
            $this->sucursal_id = Auth::user()->sucursal->id;
            $this->empresa_id = Auth::user()->sucursal->prestador->empresa_id_linti;
        }

        if ($cursada_id) {
            $this->cursada = Cursada::find($cursada_id);
            $this->cargarCursada();
        } else {
            $this->cursada = new Cursada;
        }
    }

    public function render()
    {
        return view('livewire.form-cursadas');
    }

    public function cargarCursada()
    {
        $this->fecha_hora = $this->cursada->fecha_hora->format('Y-m-d H:i');
        $this->curso_id = $this->cursada->curso_id;
        $this->evaluador_id = $this->cursada->evaluador_id;

        $this->prestador_id = $this->cursada->aula->unidadEvaluadora->sucursal->prestador->id;
        $this->seleccionarPrestador($this->prestador_id);
        $this->sucursal_id = $this->cursada->aula->unidadEvaluadora->sucursal->id;
        $this->seleccionarSucursal($this->sucursal_id);
        $this->aula_id = $this->cursada->aula->id;

        foreach ($this->cursada->cursadaCursantes as $cursada_cursante) {
            $cursante = $cursada_cursante->cursante;
            $examen = $cursada_cursante->examen;
            $this->lista_cursantes []= [
                [
                    'id'        =>  $cursante->id,
                    'nombre'    =>  $cursante->nombre,
                    'apellido'  =>  $cursante->apellido,
                    'dni'       =>  $cursante->dni
                ],
                [
                    'idPago'            =>  $examen->nro_boleta,
                    'idPagoItem'        =>  $examen->nro_item,
                    'codEstadoPago'     =>  $examen->estado_pago,
                    //'cursadaCursanteId' =>  $cursada_cursante->id
                ]
            ];
        }
    }

    public function seleccionarPrestador($prestador_id)
    {
        $this->limpiarModal();
        $this->lista_cursantes = [];

        $prestador = $this->prestadores->filter(function($prestador) use ($prestador_id) {
            return $prestador->id == $prestador_id;
        })->first();

        if (!$prestador) {
            $this->empresa_id = NULL;
            return;
        }

        $this->empresa_id = $prestador->empresa_id_linti;

        $this->lista_sucursales = [];
        $this->aula_id = '';
        foreach ($this->sucursales as $sucursal) {
            if ($sucursal->prestador_id == $prestador_id) {
                $this->lista_sucursales []= $sucursal;
            }
        }
    }

    public function seleccionarSucursal($sucursal_id)
    {
        $this->lista_unidades = [];
        $this->aula_id = '';
        foreach ($this->unidades as $unidad) {
            if ($unidad['sucursal_id'] == $sucursal_id) $this->lista_unidades []= $unidad;
        }
    }

    public function agregarCursante()
    {

    }

    public function submit()
    {
        if ($this->cursada->fecha_hora && $this->cursada->fecha_hora <= Carbon::now()->format('Y-m-d H:i')) {
            $this->mensaje_error = 'La cursada no puede editarse porque se encuentra en proceso';
            $this->cargarCursada();
            return;
        }

        $this->mensaje_error = '';
        $this->validate();

        if (count($this->lista_cursantes) == 0) {
            //$this->mensaje_error = "Debe seleccionar al menos un cursante.";
            //return;
        }

        // Crear Cursada

        $this->cursada->fecha_hora      = $this->fecha_hora;
        $this->cursada->evaluador_id    = $this->evaluador_id;
        $this->cursada->curso_id        = $this->curso_id;
        $this->cursada->aula_id         = $this->aula_id;
        $this->cursada->usuario_id      = Auth::user()->id;        
        $this->cursada->save();
        

        $lista_eliminar_cursada_cursantes = [];
        foreach ($this->cursada->cursadaCursantes as $cursada_cursante) {
            $cursada_cursante->examen->delete();
            $cursada_cursante->delete();
        }


        // Crear CursadaCursante y Examen        
        foreach ($this->lista_cursantes as $lista_cursante) {
            $cursante = Cursante::findOrFail($lista_cursante[0]['id']);

            if (CursadaCursante::where('cursada_id', $this->cursada->id)->where('cursante_id', $cursante->id)->first()) continue;

            $cursada_cursante = CursadaCursante::create([
                'cursada_id'    =>  $this->cursada->id,
                'cursante_id'   =>  $cursante->id,
                'usuario_id'    =>  Auth::user()->id
            ]);

            $examen = Examen::create([
                'nro_boleta'            =>  $lista_cursante[1]['idPago'],
                'nro_item'              =>  $lista_cursante[1]['idPagoItem'],
                'estado_pago'           =>  $lista_cursante[1]['codEstadoPago'],
                'cursada_cursante_id'   =>  $cursada_cursante->id
            ]);
        }

        return redirect()->route('admin.cursadas.show', $this->cursada->id);
    }

    public function getCursanteConBoletaDesdeLinti()
    {
        $this->lista_pagos_cursante_linti = [];
        $responseBody = $this->getToken();


        if (!$responseBody) {
            \Log::error("No token");
            return response()->json([
                'message'  => 'No token'
            ], 500);
        }
        $api_url = (getenv('APP_ENV')) == 'local' ? getenv('URL_ST_API_LINTI') : getenv('URL_API_LINTI');
        $api_url_listar = $api_url . '/apai/choferes_boletas_prestadores';
        // =========================================
        $post_input = [
            'token'         => $responseBody['token'],
            'prestador_id'  => Sucursal::find($this->sucursal_id)->prestador_id_linti,
            'dni'           => $this->modal_dni,
            'item_id'       => Curso::find($this->curso_id)->curso_id_linti
        ];
        \Log::info("Datos enviados");
        \Log::info($post_input);
        $headers = [];  
        $response = Http::withHeaders($headers)->post($api_url_listar, $post_input);
        $statusCode = $response->status();
        $responseBody = json_decode($response->getBody(), true);
        \Log::info($responseBody);
        if ($statusCode == 500) {
            Log::info("ERROR 500");
        } else {
            if (isset($responseBody['data']) && $responseBody['ok'] == true) {

                $this->cursante_linti = collect([
                    'nombre'    => $responseBody['data'][0]['nombre'],
                    'apellido'  => $responseBody['data'][0]['apellido'],
                    'dni'       => $responseBody['data'][0]['dni'],
                    'sucursal'  => $responseBody['data'][0]['sucursal']
                ]);
    
                $this->lista_pagos_cursante_linti = $responseBody['data'];
            } else {
                Log::info("ERROR AL TRAER PAGOS");
                Log::info($statusCode);
                Log::info($responseBody);
            }
        }
    }
    
    private function getToken()
    {
        $api_url = (getenv('APP_ENV')) == 'local' ? getenv('URL_ST_API_LINTI') : getenv('URL_API_LINTI');
        $api_ul_generar = $api_url . '/apitoken';

        // Datos para el _token ====================

        $post_input = [
            'username' => getenv('USER_API_LINTI'),
            'password' => getenv('PASSWORD_API_LINTI')
        ];

        \Log::error($post_input);

        $headers = [];  
        $response = Http::withHeaders($headers)->post($api_ul_generar, $post_input);
        $statusCode = $response->status();
        $responseBody = json_decode($response->getBody(), true);
        return $responseBody;
    }

    public function limpiarModal()
    {
        $this->cursante_linti = null;
        $this->lista_pagos_cursante_linti = [];
        $this->modal_dni = null;
        $this->pago_seleccionado = null;
    }

    public function crearCursanteDesdeLinti()
    {
        $examenes_con_pago = Examen::whereNroItem($this->pago_seleccionado)->get();

        if (count($examenes_con_pago) == 3) {
            $this->mensaje_error = "El pago seleccionado ya esta asociado a otras cursadas.";
            return;
        }

        $nuevo_cursante = Cursante::whereDni($this->cursante_linti['dni'])->first();
        if ($this->cursante_linti && !$nuevo_cursante) {
            $nuevo_cursante = Cursante::create([
                'nombre'    =>  $this->cursante_linti['nombre'],
                'apellido'  =>  $this->cursante_linti['apellido'],
                'dni'       =>  $this->cursante_linti['dni']
            ]);
        }
        
        $pagoSeleccionado = null;
        
        foreach ($this->lista_pagos_cursante_linti as $pago) {
            if ($pago['idPagoItem'] == $this->pago_seleccionado) {
                $pagoSeleccionado = $pago;
                break;
            }
        }

        $no_esta_en_lista = true;

        foreach ($this->lista_cursantes as $cursante) {
            if ($cursante[1]['idPagoItem'] == $pagoSeleccionado['idPagoItem']) {
                $no_esta_en_lista = false;
            }
        }

        if($no_esta_en_lista) {
            $this->lista_cursantes []= [
                $nuevo_cursante,
                $pagoSeleccionado
            ];
        }

        $this->limpiarModal();
    }

    public function eliminarCursanteDeLista($dni)
    {
        $nueva_lista_cursante = [];
        foreach ($this->lista_cursantes as $cursante) {
            if ($cursante[0]['dni'] != $dni) {
                $nueva_lista_cursante []= $cursante;
            }
        }        
        $this->lista_cursantes = [];
        $this->lista_cursantes = $nueva_lista_cursante;
    }
}
Leave a Comment