<?php

namespace App\Http\Controllers\Adecuacion;

use App\{Presupuesto, Departamento, PresupuestoDetalleRestringida, AITemporal, Bitacora, Indicador, AnioVigencia};
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\DB;

class AITemporalController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        return view('adecuacion.interna.temp_listado')->with("movimientos", AITemporal::with('presupuestoDetalleRestringida.presupuesto')->get() );
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {   
        $anio = AnioVigencia::orderBy('anio','desc')->first();
        return view('adecuacion.interna.temp_nueva')
                    ->with('departamentos', Departamento::whereHas('presupuestos', function($query) use ($anio){ 
                                                $query->whereHas('restringidas'); 
                                                $query->where('anio_id',$anio->anio); 
                                            })->orderBy('nombre')->get());
    }
    /**
     * Consulta las claves que tiene el departamento que tienen partidas restringidas
     * @return [json] 
     */
    public function showClave($idDepto)
    {   
        $sql = "select i.id, substr(clave_completa,1,8) as clave, indicador from presupuesto p join accion a on p.accion_id = a.id join indicador i on i.id=a.fk_idIndicador where p.departamento_id=? and exists (select * from presupuesto_detalle_restringidas pd where pd.presupuesto_id=p.id) and anio_id=YEAR(now()) group by i.id";
        $datos = DB::select($sql,array($idDepto));
        return $datos;
    }

    /**
     * Consulta las acciones del indicador (ultimo numero de la clave presupuestal)
     * @return [json] 
     */
    public function showPartida($idIndicador, $idDepto)
    {   
        $sql = "select sp.partida_id, pa.descripcion from indicador i join accion a on i.id=a.fk_idIndicador join presupuesto p on p.accion_id=a.id join presupuesto_detalle_restringidas sp on sp.presupuesto_id=p.id join partida_restringida pa on pa.partida_id=sp.partida_id where i.id=? and p.departamento_id=? GROUP BY partida_id;";
        $datos = DB::select($sql,array($idIndicador, $idDepto));
        return $datos;
    }

    public function showFormulario(Request $request)
    {   
        $data = $request->all();
        //$d = PresupuestoDetalleRestringida::where('presupuesto_id', $data['presupuesto_id'])->where('partida_id', $data['partida_id'])->get();
        $sql = "select sp.id, partida_id, servicio, clave_completa, a.descripcion, disponible from indicador i join accion a on i.id=a.fk_idIndicador join presupuesto p on p.accion_id=a.id join presupuesto_detalle_restringidas sp on sp.presupuesto_id=p.id where i.id=? and p.departamento_id=? and partida_id=?;";
        $datos = DB::select($sql,array($data['indicador'], $data['depto'], $data['partida']));

        $sql = "select p.id, clave_completa, a.descripcion from indicador i join accion a on i.id=a.fk_idIndicador join presupuesto p on p.accion_id=a.id join presupuesto_detalle_restringidas sp on sp.presupuesto_id=p.id where i.id=? and p.departamento_id=? and partida_id=? group by a.id;";
        $claves = DB::select($sql,array($data['indicador'], $data['depto'], $data['partida']));
        return view('adecuacion.interna.temp_formulario')->with('detalles', $datos)->with('claves', $claves);
    }

    /**
     * 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 ( Hash::check(md5($data['password']), $persona->password) ) {    
            $aux = DB::transaction(function () use ($data, $persona) {
                
                $lote = AITemporal::latest('lote')->first();
                if ($lote==null) {
                    $lote = 1;
                } else {
                    $lote = $lote->lote+1;
                }
                $ms = json_decode($data['movimientos']);
                $first = "";
                foreach ($ms as $m) {
                    $d = PresupuestoDetalleRestringida::find($m->id);
                    if ($first=="") { $first=$d; } 
                    $ai = AITemporal::create(['lote'=>$lote, 'autorizado'=>$d->autorizado, 'adecuadoAntes'=>$d->adecuado, 'disponible'=>$d->disponible, 'reduccion'=>$m->reduccion, 'ampliacion'=>$m->ampliacion, 'adecuacionDespues'=>$d->adecuado+$m->ampliacion-$m->reduccion, 'presupuestoDetalleRestringida_id'=>$m->id, 'personal_id'=>$persona->id]);

                    $d->adecuado = $d->adecuado+$m->ampliacion-$m->reduccion;
                    $d->disponible = $d->disponible+$m->ampliacion-$m->reduccion;
                    $d->save();
                }
                $ns = json_decode($data['nuevo']);
                foreach ($ns as $n) {
                    $detalle = PresupuestoDetalleRestringida::create(['partida_id'=>$n->partida, 'servicio'=>$n->servicio, 'fecha_inicio'=>$n->fecha_inicio, 'fecha_termino'=>$n->fecha_final, 'autorizado'=>'0', 'adecuado'=>$n->total, 'subpresupuesto'=>'0', 'requisicion'=>'0', 'ejercido'=>'0', 'disponible'=>$n->total, 'sede'=>$first->sede, 'justificacion'=>$first->justificacion, 'poblacion'=>$first->poblacion, 'objetivo'=>$first->objetivo, 'costo'=>'0', 'participantes'=>'0', 'riesgos'=>$first->riesgos, 'desglose'=>'', 'estado'=>'1', 'presupuesto_id'=>$d->presupuesto_id ]);

                    $ai = AITemporal::create(['lote'=>$lote, 'autorizado'=>'0', 'adecuadoAntes'=>'0', 'disponible'=>$d->disponible, 'reduccion'=>'0', 'ampliacion'=>$n->total, 'adecuacionDespues'=>$n->total, 'presupuestoDetalleRestringida_id'=>$detalle->id, 'personal_id'=>$persona->id]);
                }
                
                Bitacora::create(['operacion'=>'Se guardo una adecuacion interna lote', '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)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}
