<?php

namespace Predial\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

use Predial\ConceptoPredial;
use Predial\Concepto;
use Predial\TipoConceptoPredial;
use Predial\Tarifa;
use Predial\ConceptoFinanciero;
use Predial\TipoPredio;

class ConceptoPredialController extends Controller{

    public $path = "conceptoPredial.";

    public function index(){
        if(!empty(session()->get('usuario'))){
            $data = DB::table('gr_concepto_predial as cnp')
                        ->select(
                            'cnp.id_unico',
                            'cnt.nombre  as concepto',
                            'tpp.nombre  as tipo_p',
                            'tpc.nombre  as tipo',
                            'tar.nombre  as tarifa',
                            'fin.nombre  as financiero',
                            'cnp.formula as formula',
                            'cnp.xvalor',
                            'cnp.anno'
                        )
                        ->leftJoin(
                            'gr_concepto as cnt',
                            'cnp.id_concepto',
                            '=',
                            'cnt.id_unico'
                        )
                        ->leftJoin(
                            'gr_tipo_concepto_predial as tpc',
                            'cnp.tipo',
                            '=',
                            'tpc.id_unico'
                        )
                        ->leftJoin(
                            'gr_tarifa  as   tar',
                            'cnp.tarifa',
                            '=',
                            'tar.id_unico')
                        ->leftJoin(
                            'gf_concepto as fin',
                            'cnp.concepto_financiero',
                            '=',
                            'fin.id_unico'
                        )
                        ->leftJoin(
                            'gp_tipo_predio as tpp',
                            'cnp.tipo_predio',
                            '=',
                            'tpp.id_unico'
                        )
                        ->orderBy('cnp.anno', 'asc')
                        ->orderBy('cnt.nombre', 'asc')
                        ->get();
            return view($this->path.'index')
                   ->with('data', $data);
        }else{
            return redirect("CerrarSesion");
        }
    }

    public function create(){
        if(!empty(session()->get('usuario'))){
            $concepto  = Concepto::all();
            $tipo      = TipoConceptoPredial::all();
            $tarifa    = Tarifa::all();
            $conceptoF = ConceptoFinanciero::all();
            $tipo_pd   = TipoPredio::all();
            return view($this->path.'create')
                   ->with('concepto', $concepto)
                   ->with('tipo', $tipo)
                   ->with('tarifa', $tarifa)
                   ->with('conceptoF', $conceptoF)
                   ->with('tipoPredio', $tipo_pd);
        }else{
            return redirect("CerrarSesion");
        }
    }

    public function store(Request $request){
        try {
            $new = new ConceptoPredial();
            $new->timestamps          = false;
            $new->anno                = $request->txtAnno;
            $new->id_concepto         = $request->sltConcepto;
            $new->tipo                = $request->sltTipo;
            $new->tarifa              = $request->sltTarifa;
            $new->concepto_financiero = $request->sltConceptoFinanciero;
            $new->tipo_predio         = $request->sltTipoPredio;
            $new->formula             = $request->txtFormula;
            $new->xvalor              = $request->optXValor;
            $new->save();

            flash()->overlay('Información guardada correctamente', 'Información');

            return redirect('ListarConceptoPredio');
        } catch (Exception $e) {
            return "Fatal error = ".$e->getMessage();
        }
    }

    public function show($id_unico){
        if(!empty(session()->get('usuario'))){
            try {
                $id        = decrypt($id_unico);
                $data      = ConceptoPredial::find($id);

                $tipo      = TipoConceptoPredial::find($data->tipo);
                $tipos     = DB::table('gr_tipo_concepto_predial')
                                ->select('id_unico', 'nombre')
                                ->where('id_unico', '!=', $data->tipo)
                                ->orderBy('nombre', 'asc')
                                ->get();

                $concepto  = Concepto::find($data->id_concepto);
                $conceptos = DB::table('gr_concepto')
                                ->select('id_unico', 'nombre')
                                ->where('id_unico', '!=', $data->id_concepto)
                                ->orderBy('nombre', 'asc')
                                ->get();

                $con_fin   = ConceptoFinanciero::find($data->concepto_financiero);
                $con_fins  = DB::table('gf_concepto')
                                ->select('id_unico', 'nombre')
                                ->where('id_unico', '!=', $data->concepto_financiero)
                                ->orderBy('nombre', 'asc')
                                ->get();
                $cons_fn   = ConceptoFinanciero::all();

                $tarifa    = Tarifa::find($data->tarifa);
                if(empty($data->tarifa)){
                    $tarifas = Tarifa::all();
                }else{
                    $tarifas   = DB::table('gr_tarifa')
                                    ->select('id_unico', 'nombre')
                                    ->where('id_unico', '!=', $data->tarifa)
                                    ->orderBy('nombre', 'asc')
                                    ->get();

                }

                $tipoPdio  = TipoPredio::find($data->tipo_predio);
                if(!empty($data->tipo_predio)){
                    $tipoPdios = DB::table('gp_tipo_predio')
                                    ->select('id_unico', 'nombre')
                                    ->where('id_unico', '!=', $data->tipo_predio)
                                    ->orderBy('nombre', 'asc')
                                    ->get();
                }else{
                    $tipoPdios = TipoPredio::all();
                }

                return view($this->path.'edit')
                            ->with('data', $data)
                            ->with('tipo', $tipo)
                            ->with('tipos', $tipos)
                            ->with('concepto', $concepto)
                            ->with('conceptos', $conceptos)
                            ->with('confin', $con_fin)
                            ->with('confins', $con_fins)
                            ->with('tarifa', $tarifa)
                            ->with('tarifas', $tarifas)
                            ->with('tipoPredio', $tipoPdio)
                            ->with('tiposPredios', $tipoPdios)
                            ->with('cons_fn', $cons_fn);
            } catch (Exception $e) {
                return "Fatal error = ".$e->getMessage();
            }
        }else{
            return redirect("CerrarSesion");
        }
    }

    public function edit(Request $request){
        try {
            $upd                       = ConceptoPredial::findOrFail($request->id_unico);
            $upd->timestamps           = false;
            $upd->anno                = $request->txtAnno;
            $upd->id_concepto          = $request->sltConcepto;
            $upd->tipo                 = $request->sltTipo;
            $upd->tarifa               = $request->sltTarifa;
            $upd->concepto_financiero  = $request->sltConceptoFinanciero;
            $upd->tipo_predio          = $request->sltTipoPredio;
            $upd->formula              = $request->txtFormula;
            $upd->xvalor               = $request->optXValor;
            $upd->save();

            flash()->overlay('Información modificada correctamente', 'Información');

            return redirect('ListarConceptoPredio');
        } catch (Exception $e) {
            return "Fatal error = ".$e->getMessage();
        }
    }

    public function destroy($id_unico){
        try {
            $id   = decrypt($id_unico);
            $del  = ConceptoPredial::findOrFail($id);
            $del->delete();
            flash()->overlay('Información eliminada correctamente', 'Información');
            return redirect('ListarConceptoPredio');
        } catch (Exception $e) {
            return "Fatal error = ".$e->getMessage();
        }
    }
}
