<?php

namespace App\Http\Controllers;

use App\UnidadMedida;
use App\Bitacora;
use App\Presupuesto;
use App\Requisicion;
use App\Comentarios;
use App\Departamento;
use App\DepartamentoPuesto;
use App\RequisicionDetalle;
use App\PresupuestoDetalle;
use App\RequisicionFormato;
use App\DepartamentoLimite;
use Carbon\Carbon;
use App\AnioVigencia;
use App\Firma;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Dompdf\Dompdf;
use Illuminate\Support\Facades\Hash;
use App\Mail\RequisicionDeclinada;
use App\Mail\RequisicionPendiente;
use App\Mail\RequisicionAutorizada;
use App\Mail\RequisicionAvisoMateriales;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Collection as Collection;


class RequisicionController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //$persona = json_decode(session('persona'));
        $depto = json_decode(session('departamento'));
        
        if ( $depto->id=='2' || $depto->id=='19' || $depto->id=='7' || $depto->id=='8' || $depto->id=='1') {
            $departamentos = Departamento::where('estado', '1')->orderBy('nombre')->get();
            $requisiciones = Requisicion::latest()->take(20)->where('estado', '10')->without('detalles')->get();
        } else {
            if ( $depto->id=='15' || $depto->id=='18') { //Subdirección Academica y Subdireccion de planeacion
                $departamentos = Departamento::where('referencia_a',$depto->id)->orWhere('id', $depto->id)->where('estado', '1')->orderBy('nombre')->get();
                $requisiciones = Requisicion::latest()->take(20)->where('estado', '10')->whereIn('idDepartamento', $departamentos->modelKeys())->without('detalles')->get();
            } else {
                $departamentos = Departamento::where('id',$depto->id)->get();
                $requisiciones = Requisicion::latest()->take(20)->where('idDepartamento', $depto->id)->where('estado', '!=', '1')->without('detalles')->get();
            }
        }

        return view('requisicion.listado.principal')
                    ->with('requisiciones', $requisiciones )
                    ->with('departamentos', $departamentos)
                    ->with('no_pag', false);
    }

    public function filtro(Request $request){
        $data = $request->all();
        
        $requisiciones = Requisicion::latest()->take(100)->without('detalles')->where(function($query) use ($data){
            if ($data['filtro_departamento']!=null) { $query = $query->where('idDepartamento',$data['filtro_departamento']); }
            if ($data['filtro_estado']!=null) { 
                $estados = explode(',', $data['filtro_estado']);
                $query = $query->whereIn('estado', $estados); 
            }
            
            if ($data['filtro_total']!=null && $data['filtro_condicion_total']!=null) { 
                $query = $query->where('total', $data['filtro_condicion_total'],$data['filtro_total']); }
            if ($data['filtro_palabra']!=null) { $query = $query->where('justificacion', 'like', '%'.$data['filtro_palabra'].'%' ); }
            if ($data['filtro_fecha_inicio']!=null && $data['filtro_fecha_termino']!=null) { 
                $query = $query->whereBetween('created_at', [ $data['filtro_fecha_inicio'], $data['filtro_fecha_termino'] ]); 
            } else {
                if ($data['filtro_fecha_inicio']!=null) {
                    $query = $query->whereDate('created_at', $data['filtro_fecha_inicio']); 
                }
            }
        })->where(function ($query) use ($data){
            if ($data['filtro_folio']!=null) { 
                $query = $query->where('folio',$data['filtro_folio']); 
                $query = $query->orWhere('id', $data['filtro_folio']); 
            }
        })->where('estado', '!=', '1')->paginate(100);
        //})->toSql();
        //dd($requisiciones);
        
        return view('requisicion.listado.contenido')
                    ->with('requisiciones', $requisiciones )->with('no_pag', true);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //falta validar para los diferentes años
        $depto = json_decode(session('departamento'));
        return view('requisicion.nuevo')
                    ->with('unidades', UnidadMedida::orderBy('nombre')->get() )
                    ->with('presupuestos', Presupuesto::whereHas('detalles')->where('departamento_id', $depto->id )->with('accion')->without('departamento')->orderBy('accion_id')->where('anio_id','2022')->get() )
                    ->with('limite', DepartamentoLimite::where( 'departamento_id', $depto->id )->where('anio_id','2022')->first() );
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request) {
        $data = $request->all();
        $persona = json_decode(session('persona'));
        $depto = json_decode(session('departamento'));

        if ( ( $data['bandera']=='firma' && Hash::check(md5($data['password']), $persona->password) ) || ($data['bandera']=='borrador') ) {    
            $aux = DB::transaction(function () use ($data, $persona, $depto) {
                $requi = Requisicion::create(['fechaNecesita'=>$data['fecha_necesita'], 'contempladoPoa' => $data['contemplados'], 'justificacion' => $data['justificacion'], 'estado'=>'2', 'total'=>$data['total'], 'idDepartamento'=>$depto->id, 'idPersonal'=>$persona->id, 'idFormato'=>'1' ]);

                $t = json_decode($data['detalles']);
                $estado = 0;
                foreach ($t as $d) {
                    if ($data['bandera']=='firma') {
                        $estado = 1;
                        $p = PresupuestoDetalle::find($d->detalle);
                        $p->requisicion = $p->requisicion+$d->costo;
                        $p->disponible = $p->disponible-$d->costo;
                        $p->save();
                    }
                    RequisicionDetalle::create(['cantidad'=>$d->cantidad, 'costo'=>$d->costo, 'descripcion'=>$d->descripcion, 'estado'=>$estado, 'idPartida'=>$d->partida, 'idPresupuestoDetalle'=>$d->detalle, 'idRequisicion'=>$requi->id, 'idUnidad'=>$d->unidad ]);
                }
                
                if ($data['bandera']=='firma') {
                    //Dirección-M.C. David Rafael Trigueros Cazares-Recepción:21-01-2020 1:14 pm-Autorización:21-01-2020, 1:14 pm-Identificador:4262
                    $cadena = $depto->nombre."-".$persona->titulo." ".$persona->nombre." ".$persona->apellido_paterno." ".$persona->apellido_materno."-Recepción:".Carbon::now()->format('d-m-Y h:i A')."-Autorización:".Carbon::now()->format('d-m-Y h:i A')."-Identificador:".$requi->id;
                    $firma = Firma::create(['cadena'=>$cadena, 'idPersonal'=>$persona->id]);
                    
                    $sql = "select folioRequisicion, anio from presupuesto_detalle pd join presupuesto p on pd.presupuesto_id=p.id join anio_vigencia a on a.anio=p.anio_id where pd.id=?;";
                    $folio = DB::select($sql,array($p->id));

                    if ($depto->id=='2') { //Si firma planeación se va a la subdireccion de planeacion
                        $requi->firmaPlaneacion=$firma->id;
                        $requi->estado='5'; 
                        $idDeptoCorreo = "18"; //ID sub ing armando
                    } else { // todos los demas departamentos de van a planeacion
                        if ( $depto->id=='19') { $requi->firmaServicios=$firma->id; }
                        if ( $depto->id=='1' ) { $requi->firmaDireccion=$firma->id; }
                        $requi->estado='6'; 
                        $idDeptoCorreo = "2"; // depto planeacion
                    }
                    $requi->folio = $folio[0]->folioRequisicion+1;
                    $requi->firmaDepartamento=$firma->id;
                    $requi->save();

                    $depto_limite = DepartamentoLimite::where('departamento_id', $requi->idDepartamento)->where('anio_id', $folio['0']->anio)->first();
                    $depto_limite->ejercido = $depto_limite->ejercido+$requi->total;
                    $depto_limite->save();

                    $a = AnioVigencia::where('anio', $folio['0']->anio)->first();
                    $a->folioRequisicion = $folio[0]->folioRequisicion+1;
                    $a->save();

                    $this->correo_autorizar($requi, $idDeptoCorreo);

                    Bitacora::create(['operacion'=>'Se firmo la requisición #'.$requi->id.'.', 'idPersonal'=>$persona->id ]);
                } else {
                    Bitacora::create(['operacion'=>'Se guardo la requisición #'.$requi->id.' como borrador', 'idPersonal'=>$persona->id ]);
                }
            });
            return response()->json(['status'=>'success', 'message'=>'Registro exitoso!!']);
        } else { return response()->json(['status'=>'error', 'message'=>'Las contraseñas no coinciden.']); }
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        $depto = json_decode(session('departamento'));
        return view('requisicion.consultar')->with('requisicion', Requisicion::where('id', $id)->first() );
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function sign($id)
    {
        $depto = json_decode(session('departamento'));
        return view('requisicion.consulta_autorizar')->with('requisicion', Requisicion::where('id', $id)->first() );
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        $depto = json_decode(session('departamento'));
        return view('requisicion.editar')
                ->with('requisicion', Requisicion::where('id', $id)->first() )
                ->with('unidades', UnidadMedida::orderBy('nombre')->get() )
                ->with('presupuestos', Presupuesto::whereHas('detalles')->where('departamento_id', $depto->id )->with('accion')->without('departamento')->orderBy('accion_id')->where('anio_id','2022')->get() )
                ->with('limite', DepartamentoLimite::where( 'departamento_id', $depto->id )->where('anio_id','2022')->first() );
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        $data = $request->all();
        $persona = json_decode(session('persona'));
        $depto = json_decode(session('departamento'));

        if ( ( $data['bandera']=='firma' && Hash::check(md5($data['password']), $persona->password) ) || ($data['bandera']=='borrador') ) {
            $aux = DB::transaction(function () use ($data, $persona, $depto, $id) {
                
                $requi = Requisicion::find($id);
                    $requi->fechaNecesita = $data['fecha_necesita'];
                    $requi->contempladoPoa = $data['contemplados'];
                    $requi->justificacion = $data['justificacion'];
                    $requi->total = $data['total'];
                    $requi->idDepartamento = $depto->id;
                    $requi->idPersonal = $persona->id;
                    $requi->save();

                $t = json_decode($data['detalles']);
                
                foreach ($t as $d) {
                    if ($data['bandera']=='firma') {
                        $p = PresupuestoDetalle::find($d->detalle);
                        $p->requisicion = $p->requisicion+$d->costo;
                        $p->disponible = $p->disponible-$d->costo;
                        $p->save();
                    }
                    $detalle = RequisicionDetalle::updateOrCreate(
                        ['id' => $d->id],
                        ['cantidad'=>$d->cantidad, 'costo'=>$d->costo, 'descripcion'=>$d->descripcion, 'estado'=>'1', 'idPartida'=>$d->partida, 'idPresupuestoDetalle'=>$d->detalle, 'idRequisicion'=>$requi->id, 'idUnidad'=>$d->unidad]
                    );
                }
                $detalles = RequisicionDetalle::where('estado', '0')->where('idRequisicion', $id)->delete();

                //actualiza el estado a que no se han descontado del poa
                if ($data['bandera']=='borrador') { RequisicionDetalle::where('estado', 1)->where('idRequisicion', $id)->update(['estado' => 0]); }
                
                if ($data['bandera']=='firma') {
                    //Dirección-M.C. David Rafael Trigueros Cazares-Recepción:21-01-2020 1:14 pm-Autorización:21-01-2020, 1:14 pm-Identificador:4262
                    $cadena = $depto->nombre."-".$persona->titulo." ".$persona->nombre." ".$persona->apellido_paterno." ".$persona->apellido_materno."-Recepción:".Carbon::now()->format('d-m-Y h:i A')."-Autorización:".Carbon::now()->format('d-m-Y h:i A')."-Identificador:".$requi->id;
                    $firma = Firma::create(['cadena'=>$cadena, 'idPersonal'=>$persona->id]);

                    $sql = "select folioRequisicion, anio from presupuesto_detalle pd join presupuesto p on pd.presupuesto_id=p.id join anio_vigencia a on a.anio=p.anio_id where pd.id=?;";
                    $folio = DB::select($sql,array($p->id));                    
                    if ($requi->folio == 0) {
                        $requi->folio = $folio[0]->folioRequisicion+1;

                        $a = AnioVigencia::where('anio', $folio['0']->anio)->first();
                        $a->folioRequisicion = $folio[0]->folioRequisicion+1;
                        $a->save();
                    }

                    if ($depto->id=='2') { //Si firma planeación se va a la subdireccion de planeacion
                        $requi->firmaPlaneacion=$firma->id;
                        $requi->estado='5'; 
                        $idDeptoCorreo = "18"; //ID sub ing armando
                    } else { // todos los demas departamentos de van a planeacion
                        if ( $depto->id=='19') { $requi->firmaServicios=$firma->id; }
                        if ( $depto->id=='1' ) { $requi->firmaDireccion=$firma->id; }
                        $requi->estado='6'; 
                        $idDeptoCorreo = "2"; // depto planeacion
                    }
                    
                    $requi->firmaDepartamento=$firma->id;
                    $requi->save();

                    $depto_limite = DepartamentoLimite::where('departamento_id', $requi->idDepartamento)->where('anio_id', $folio['0']->anio)->first();
                    $depto_limite->ejercido = $depto_limite->ejercido+$requi->total;
                    $depto_limite->save();

                    $this->correo_autorizar($requi, $idDeptoCorreo);

                    Bitacora::create(['operacion'=>'Se firmo la requisición #'.$requi->id.'.', 'idPersonal'=>$persona->id ]);
                } else {
                    Bitacora::create(['operacion'=>'Se guardo la requisición #'.$requi->id.' como borrador', 'idPersonal'=>$persona->id ]);
                }
            });
            return response()->json(['status'=>'success', 'message'=>'Registro exitoso!!']);
        } else { return response()->json(['status'=>'error', 'message'=>'Las contraseñas no coinciden.']); }
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy(Request $request, $id)
    {
        $persona = json_decode(session('persona'));
        $data = $request->all();
        if ( Hash::check(md5($data['password']), $persona->password) ) {
            $requi = Requisicion::find($id);
            if ($requi->estado=='2' || $requi->estado=='9') {
                $requi->estado='1';
                $requi->save();
                return response()->json(['status'=>'success', 'message'=>'Eliminación correcta.']);
            } else {
                return response()->json(['status'=>'error', 'message'=>'La requisición no se puede eliminar.']);
            }
        } else {
            return response()->json(['status'=>'error', 'message'=>'Las contraseñas no coinciden.']);
        }
    }

    public function cancelar_autorizada(Request $request, $id)
    {
        $persona = json_decode(session('persona'));
        $data = $request->all();
        if ( Hash::check(md5($data['password']), $persona->password) ) {
            $requi = Requisicion::find($id);
            if ($requi->estado=='10') {

                //Regresa el dinero gastado en la requi al presupuesto
                $detalles = RequisicionDetalle::where('idRequisicion', $id)->get();
                
                foreach ($detalles as $d) {
                    $p = PresupuestoDetalle::find($d->idPresupuestoDetalle);
                    $p->requisicion = $p->requisicion-$d->costo;
                    $p->disponible = $p->disponible+$d->costo;
                    $p->save();
                }

                //Actualiza el monto ejercido por el departamento
                $sql = "select folioRequisicion, anio from presupuesto_detalle pd join presupuesto p on pd.presupuesto_id=p.id join anio_vigencia a on a.anio=p.anio_id where pd.id=?;";
                    $folio = DB::select($sql,array($p->id));        

                $depto_limite = DepartamentoLimite::where('departamento_id', $requi->idDepartamento)->where('anio_id', $folio['0']->anio)->first();
                $depto_limite->ejercido = $depto_limite->ejercido-$requi->total;
                $depto_limite->save();

                //Actualiza el estado de la requicion a cancelado
                $requi->estado='11';
                $requi->save();

                return response()->json(['status'=>'success', 'message'=>'Cancelación correcta.']);
            } else {
                return response()->json(['status'=>'error', 'message'=>'La requisición no se puede cancelar.']);
            }
        } else {
            return response()->json(['status'=>'error', 'message'=>'Las contraseñas no coinciden.']);
        }
    }

    public function exportar($id){
        $requisicion = Requisicion::where('id', $id)->first();
        $opc = RequisicionFormato::where('estado', '1')->where('indicador', 'REQUI')->first();
        //retorna la vista html en el navegdor
        //return view('requisicion.exportar')->with("requisicion", $requisicion)->with("opc", $opc);
        $pdf = \PDF::loadView('requisicion/exportar', compact('requisicion', 'opc'))->setPaper('A4', 'landscape');
        //visualiza el pdf en el navegador
        //return $pdf->stream('ejemplo.pdf'); 
        
        //Descarga el pdf en el navegador
        return $pdf->download('requisicion_'.$id.'.pdf');
    }

    public function principal(){
        $depto = json_decode(session('departamento'));
        $puesto = json_decode(session('puesto'));
    
        $requisicionesLocales = Requisicion::where('idDepartamento',$depto->id)->where(function($query) use ($depto, $puesto){
            $query = $query->orWhere('estado', 2);
            $query = $query->orWhere('estado', 9);
        })->without('detalles')->get();

        $requisicionesTramite = Requisicion::where(function($query) use ($depto, $puesto){
            $query = $query->where('idDepartamento',$depto->id);
            $query = $query->whereBetween('estado', [3,8]);
        })->without('detalles')->get();

        
        if ( ($depto->id=='15' || $depto->id=='19' || $depto->id=='18' || $depto->id=='2' || $depto->id=='1') && $puesto->tipo=='1' ) {
            $requisicionesAutorizar = Requisicion::where(function($query) use ($depto, $puesto){
                if ($depto->id=='15'){ $query = $query->orWhere('estado','3'); }
                if ($depto->id=='19'){ $query = $query->orWhere('estado','4'); $query=$query->orWhere('estado','7'); }
                if ($depto->id=='18'){ $query = $query->orWhere('estado','5'); }
                if ($depto->id=='2' ){ $query = $query->orWhere('estado','6'); }
                if ($depto->id=='1' ){ $query = $query->orWhere('estado','8'); }
            })->without('detalles')->get();
        } else {
            $requisicionesAutorizar = Collection::make([]);
        }

        return view('panel_requisicion')
                ->with('locales',  $requisicionesLocales)
                ->with('tramite',  $requisicionesTramite)
                ->with('autorizar',$requisicionesAutorizar);
    }

    public function autorizar(Request $request, $id)
    {
        $data = $request->all();
        $persona = json_decode(session('persona'));
        $depto = json_decode(session('departamento'));
        
        if ( Hash::check(md5($data['password']), $persona->password) ){
            $aux = DB::transaction(function () use ($data, $persona, $depto, $id) {
                
                $comentario = trim($data['comentario']);
                if ($comentario!="") {
                    Comentarios::create(['comentario'=>$comentario, 'idPersonal'=>$persona->id, 'idRequisicion'=>$id ]);
                    $comentario = ", con un comentario.";
                }

                $requi = Requisicion::find($id);

                $cadena = $depto->nombre."-".$persona->titulo." ".$persona->nombre." ".$persona->apellido_paterno." ".$persona->apellido_materno."-Recepción:".$requi->updated_at->format('d-m-Y h:i A')."-Autorización:".Carbon::now()->format('d-m-Y h:i A')."-Identificador:".$id;
                $firma = Firma::create(['cadena'=>$cadena, 'idPersonal'=>$persona->id]);

                switch ($depto->id) {
                    case '15': //Subdirección Academica
                        $requi->estado = $requi->estado=='3' ? '7' : "error"; 
                        $requi->firmaSubdireccion=$firma->id; 
                        $this->correo_autorizar($requi, '19'); 
                    break;

                    case '18': //Subireccion Planeacion
                        $requi->estado = $requi->estado=='5' ? '7' : "error"; 
                        $requi->firmaSubdireccion=$firma->id; 
                        $this->correo_autorizar($requi, '19'); 
                    break;
                    
                    case '19': // Subdirección Servicios Administrativos
                        if ($requi->estado=='7') { 
                            $requi->firmaServicios=$firma->id; 
                            if ($requi->idDepartamento=='1') {
                                $requi->estado = "10";  
                                $this->correo_autorizada($requi, $requi->idDepartamento);   
                            } else {
                                $requi->estado = "8"; 
                                $this->correo_autorizar($requi, '1');    
                            }
                        } elseif( $requi->estado=='4'){
                            $requi->firmaServicios=$firma->id;
                            $requi->firmaSubdireccion=$firma->id;
                            $requi->estado = "8"; 
                            $this->correo_autorizar($requi, '1');   
                        } else { $requi->estado = "error"; }
                    break;
                    
                    case '2' : 
                        if ($requi->departamento->referencia_a=='18') { //mandar a subdireccion de planeacion
                            $requi->estado = $requi->estado=='6' ? '5' : "error"; 
                            $requi->firmaPlaneacion=$firma->id; 
                            $this->correo_autorizar($requi, '18'); 
                        } elseif ($requi->departamento->referencia_a=='15') { //mandar a subdireccion academica
                            $requi->estado = $requi->estado=='6' ? '3' : "error"; 
                            $requi->firmaPlaneacion=$firma->id; 
                            $this->correo_autorizar($requi, '15'); 
                        } elseif ( (($requi->departamento->referencia_a=='1') && ($requi->idDepartamento=='15' || $requi->idDepartamento=='18')) || ($requi->departamento->referencia_a=='0') ) {
                            $requi->estado = $requi->estado=='6' ? '7' : "error"; 
                            $requi->firmaPlaneacion=$firma->id; 
                            $this->correo_autorizar($requi, '19'); 
                        } elseif ( $requi->idDepartamento=='19' ) {
                            $requi->estado = $requi->estado=='6' ? '8' : "error"; 
                            $requi->firmaPlaneacion=$firma->id; 
                            $this->correo_autorizar($requi, '1'); 
                        } elseif ( $requi->departamento->referencia_a=='19' ){ // Mandar sub servicios administrativos
                            $requi->estado = $requi->estado=='6' ? '4' : "error"; 
                            $requi->firmaPlaneacion=$firma->id; 
                            $this->correo_autorizar($requi, '19'); 

                        }
                    break;
                    
                    case '1' : 
                        $requi->estado = $requi->estado=='8' ? '10': "error"; 
                        $requi->firmaDireccion=$firma->id; 
                        $this->correo_autorizada($requi, $requi->idDepartamento);
                    break;
                }
                $requi->save();

                
                Bitacora::create(['operacion'=>'Se autorizó la requisición #'.$requi->id."".$comentario.'.', 'idPersonal'=>$persona->id ]);
                
            });
            return response()->json(['status'=>'success', 'message'=>'Registro exitoso!!']);
        } else { return response()->json(['status'=>'error', 'message'=>'Las contraseñas no coinciden.']); }
    }

    public function declinar(Request $request, $id)
    {
        $data = $request->all();
        $persona = json_decode(session('persona'));
        $depto = json_decode(session('departamento'));
        
        if ( Hash::check(md5($data['password']), $persona->password) ){
            $aux = DB::transaction(function () use ($data, $persona, $depto, $id) {
                
                $comentario = trim($data['comentario']);
                
                Comentarios::create(['comentario'=>$comentario, 'idPersonal'=>$persona->id, 'idRequisicion'=>$id ]);
                //$comentario = ", con un comentario.";

                $requi = Requisicion::find($id);
                $requi->estado='9';
                if ($requi->firmaDepartamento>0) { Firma::find($requi->firmaDepartamento)->delete(); }
                if ( $requi->firmaSubdireccion>0 && ($requi->firmaSubdireccion==$requi->firmaServicios) ) { 
                    Firma::find($requi->firmaSubdireccion)->delete(); 
                } else {
                    if ( $requi->firmaSubdireccion>0 ) { Firma::find($requi->firmaSubdireccion)->delete(); }
                    if ($requi->firmaServicios>0 && $requi->firmaDepartamento!=$requi->firmaServicios) { Firma::find($requi->firmaServicios)->delete(); }
                }
                if ($requi->firmaPlaneacion>0) { Firma::find($requi->firmaPlaneacion)->delete(); }
                if ($requi->firmaDireccion>0 && $requi->firmaDireccion!=$requi->firmaDepartamento) { Firma::find($requi->firmaDireccion)->delete(); }
                $requi->firmaDepartamento='0';
                $requi->firmaSubdireccion='0';
                $requi->firmaPlaneacion='0';
                $requi->firmaServicios='0';
                $requi->firmaDireccion='0';
                $requi->save();

                $detalles = RequisicionDetalle::where('idRequisicion', $id)->get();
                foreach ($detalles as $d) {
                    $p = PresupuestoDetalle::find($d->idPresupuestoDetalle);
                    $p->requisicion = $p->requisicion-$d->costo;
                    $p->disponible = $p->disponible+$d->costo;
                    $p->save();    

                    $d->estado='0';
                    $d->save();
                }

                $sql = "select anio from presupuesto_detalle pd join presupuesto p on pd.presupuesto_id=p.id join anio_vigencia a on a.anio=p.anio_id where pd.id=?;";
                $folio = DB::select($sql,array($p->id));

                $depto_limite = DepartamentoLimite::where('departamento_id', $requi->idDepartamento)->where('anio_id', $folio['0']->anio)->first();
                $depto_limite->ejercido = $depto_limite->ejercido-$requi->total;
                $depto_limite->save();

                $correo = DB::select("select correo from departamento_puesto dp join puesto p on dp.puesto_id=p.id join personal per on per.id=dp.personal_id where departamento_id=? and p.tipo='1' and dp.estado='1';", [$requi->idDepartamento]);
                Mail::to($correo[0]->correo)->send(new RequisicionDeclinada($requi, $comentario));
                //Mail::to('caroll231g@gmail.com')->send(new RequisicionDeclinada($requi, $comentario));
                
                Bitacora::create(['operacion'=>'Se autorizó la requisición #'.$requi->id.", con un comentario ".$comentario.'.', 'idPersonal'=>$persona->id ]);
                
            });
            return response()->json(['status'=>'success', 'message'=>'Registro exitoso!!']);
        } else { return response()->json(['status'=>'error', 'message'=>'Las contraseñas no coinciden.']); }
    }

    public function correo_autorizar($requi, $idDepto){
        $correo = DB::select("select correo from departamento_puesto dp join puesto p on dp.puesto_id=p.id join personal per on per.id=dp.personal_id where departamento_id=? and p.tipo='1' and dp.estado='1';", [$idDepto]);
        Mail::to($correo[0]->correo)->send(new RequisicionPendiente($requi));
        //Mail::to('caroll231g@gmail.com')->send(new RequisicionPendiente($requi));
    }

    public function correo_autorizada($requi, $idDepto){ //firmada por todos los departamentos
        $correo = DB::select("select correo from departamento_puesto dp join puesto p on dp.puesto_id=p.id join personal per on per.id=dp.personal_id where departamento_id=? and p.tipo='1' and dp.estado='1';", [$idDepto]);
        Mail::to($correo[0]->correo)->send(new RequisicionAutorizada($requi));
        //Mail::to('caroll231g@gmail.com')->send(new RequisicionAutorizada($requi));
        
        $jefe_mate = DepartamentoPuesto::where('departamento_id', '8')->where('puesto_id', '23')->with('personal')->first();
        Mail::to($jefe_mate->personal->correo)->send(new RequisicionAvisoMateriales($requi));
        //Mail::to('caroll231g@gmail.com')->send(new RequisicionAvisoMateriales($requi));
    }

}




