<?php

namespace Predial\Http\Controllers;

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

use Predial\Tarifa;
use Predial\EstratoPredio;
use Predial\ley44;
use Predial\TipoBase;

class TarifaController extends Controller{

    public $path = "tarifas.";

    public function index(){
        if(!empty(session()->get('usuario'))){
            $data = DB::table('gr_tarifa as tar')
                        ->select(
                            'tar.id_unico', 'tar.nombre', 'tar.anio', 'tar.codigotarifa as  codigo', 'tar.limiteinferior',
                            'tar.limitesuperior', 'tar.porcentajeincremento', 'tar.porcentajesobretasa',
                            'tar.porcentajeimpuestoambiental', 'tar.baseimpuesto', 'tar.baseambiental', 'tar.ley44',
                            'tar.tipobaserango', 'tar.tipobaseambiental', 'tar.tipobasecalculo', 'tar.valor', 'tar.estrato',
                            'est.nombre as estnombre', 'ley.nombre as nomley', 'tpb.nombre as nombase', 'tpa.nombre as nomamb',
                            'tpc.nombre as nomcal'
                        )
                        ->leftJoin('gp_estrato as est', 'tar.estrato', '=', 'est.id_unico')
                        ->leftJoin('gr_ley_44 as ley', 'tar.ley44', '=', 'ley.id_unico')
                        ->leftJoin('gr_tipo_base as tpb', 'tar.tipobaserango', '=', 'tpb.id_unico')
                        ->leftJoin('gr_tipo_base as tpa', 'tar.tipobaseambiental', '=', 'tpa.id_unico')
                        ->leftJoin('gr_tipo_base as tpc', 'tar.tipobasecalculo', '=', 'tpc.id_unico')
                        ->orderBy('tar.anio', 'desc')
                        ->get();
            return view($this->path.'index')->with('data', $data);
        }else{
            return redirect("CerrarSesion");
        }
    }

    public function create(){
        if(!empty(session()->get('usuario'))){
            $estratos = EstratoPredio::all();
            $ley      = ley44::all();
            $tipobaserango     = DB::table('gr_tipo_base')->select('id_unico', 'nombre')->where('clase_tipo_base', '=',1)->get();
            $tipobaseambiental = DB::table('gr_tipo_base')->select('id_unico', 'nombre')->where('clase_tipo_base', '=',2)->get();
            $tipobasecalculo   = DB::table('gr_tipo_base')->select('id_unico', 'nombre')->where('clase_tipo_base', '=',3)->get();
            return view($this->path.'create', compact(['tipobaserango', 'tipobaseambiental', 'tipobasecalculo']))->with('estratos', $estratos)
                   ->with('ley', $ley);
        }else{
            return redirect("CerrarSesion");
        }
    }

    public function store(Request $request){
        try {
            $new = new Tarifa();
            $new->nombre                       = $request->txtNombre;
            $new->anio                         = $request->txtAnno;
            $new->codigotarifa                 = $request->txtCodigo;
            $new->limiteinferior               = $request->txtLimiteI;
            $new->limitesuperior               = $request->txtLimiteS;
            $new->porcentajeincremento         = $request->txtPorcentajeI;
            $new->porcentajesobretasa          = $request->txtPorcentajeS;
            $new->porcentajeimpuestoambiental  = $request->txtPorcentajeIAm;
            $new->baseimpuesto                 = $request->txtBaseI;
            $new->baseambiental                = $request->txtBaseA;
            $new->ley44                        = $request->sltLey;
            $new->tipobaserango                = $request->sltTipoBaseRango;
            $new->tipobaseambiental            = $request->sltTipoBaseAmbiental;
            $new->tipobasecalculo              = $request->sltTipoBaseCalculo;
            $new->valor                        = $request->txtValor;
            $new->estrato                      = $request->sltEstrato;
            $new->save();

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

            return redirect("ListarTarifasPredio");
        } catch (Exception $e) {
            return "Fatal Error = ".$e->getMessage();
        }
    }

    public function show(){

    }

    public function edit($id_unico){
        try {
            if(!empty(session()->get('usuario'))){
                $id  = decrypt($id_unico);
                $data = DB::table('gr_tarifa as tar')
                            ->select(
                                'tar.id_unico', 'tar.nombre', 'tar.anio', 'tar.codigotarifa as  codigo', 'tar.limiteinferior',
                                'tar.limitesuperior', 'tar.porcentajeincremento', 'tar.porcentajesobretasa',
                                'tar.porcentajeimpuestoambiental', 'tar.baseimpuesto', 'tar.baseambiental', 'tar.ley44',
                                'tar.tipobaserango', 'tar.tipobaseambiental', 'tar.tipobasecalculo', 'tar.valor', 'tar.estrato',
                                'est.nombre as estnombre', 'ley.nombre as nomley', 'tpb.nombre as nombase', 'tpa.nombre as nomamb',
                                'tpc.nombre as nomcal'
                            )
                            ->leftJoin('gp_estrato as est', 'tar.estrato', '=', 'est.id_unico')
                            ->leftJoin('gr_ley_44 as ley', 'tar.ley44', '=', 'ley.id_unico')
                            ->leftJoin('gr_tipo_base as tpb', 'tar.tipobaserango', '=', 'tpb.id_unico')
                            ->leftJoin('gr_tipo_base as tpa', 'tar.tipobaseambiental', '=', 'tpa.id_unico')
                            ->leftJoin('gr_tipo_base as tpc', 'tar.tipobasecalculo', '=', 'tpc.id_unico')
                            ->where('tar.id_unico', '=', $id)
                            ->first();
                $estratos          = DB::table('gp_estrato')->select('id_unico', 'nombre')->where('id_unico', '!=', $data->estrato)->get();
                $ley               = DB::table('gr_ley_44')->select('id_unico', 'nombre')->where('id_unico', '!=', $data->ley44)->get();
                $tipobaserango     = DB::table('gr_tipo_base')->select('id_unico', 'nombre')->where('id_unico', '!=', $data->tipobaserango)->where('clase_tipo_base', '=',1)->get();
                $tipobaseambiental = DB::table('gr_tipo_base')->select('id_unico', 'nombre')->where('id_unico', '!=', $data->tipobaseambiental)->where('clase_tipo_base', '=',2)->get();
                $tipobasecalculo   = DB::table('gr_tipo_base')->select('id_unico', 'nombre')->where('id_unico', '!=', $data->tipobasecalculo)->where('clase_tipo_base', '=',3)->get();

                return view($this->path."edit")->with('data', $data)->with('estratos', $estratos)
                       ->with('ley', $ley)->with('tipobaserango', $tipobaserango)->with('tipobaseambiental', $tipobaseambiental)
                       ->with('tipobasecalculo', $tipobasecalculo);
            }else {
                return redirect("CerrarSesion");
            }
        } catch (Exception $e) {
            return "Fatal Error = ".$e->getMessage();
        }
    }

    public function update(Request $request){
        try {
            $upd = Tarifa::find($request->id_unico);
            $upd->nombre                       = $request->txtNombre;
            $upd->anio                         = $request->txtAnno;
            $upd->codigotarifa                 = $request->txtCodigo;
            $upd->limiteinferior               = $request->txtLimiteI;
            $upd->limitesuperior               = $request->txtLimiteS;
            $upd->porcentajeincremento         = $request->txtPorcentajeI;
            $upd->porcentajesobretasa          = $request->txtPorcentajeS;
            $upd->porcentajeimpuestoambiental  = $request->txtPorcentajeIAm;
            $upd->baseimpuesto                 = $request->txtBaseI;
            $upd->baseambiental                = $request->txtBaseA;
            $upd->ley44                        = $request->sltLey;
            $upd->tipobaserango                = $request->sltTipoBaseRango;
            $upd->tipobaseambiental            = $request->sltTipoBaseAmbiental;
            $upd->tipobasecalculo              = $request->sltTipoBaseCalculo;
            $upd->valor                        = $request->txtValor;
            $upd->estrato                      = $request->sltEstrato;
            $upd->save();

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

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

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

    public function copiarTarifa(){

        try{

            $hoy = date('Y-m-d');
            $hoy = trim($hoy, '"');
            $fecha_div2 = explode("-", $hoy);
            $anio2 = $fecha_div2[0];
            $anioa = $anio2 - 1;
            $tarifaAnt = DB::table('gr_tarifa as tar')
                            ->select('tar.nombre as nom',
                                    'tar.codigotarifa as codta',
                                    'tar.limiteinferior as lin',
                                    'tar.limitesuperior as lsup',
                                    'tar.porcentajeincremento as pin',
                                    'tar.porcentajesobretasa as psob',
                                    'tar.porcentajeimpuestoambiental as piam',
                                    'tar.baseimpuesto as bimp',
                                    'tar.baseambiental as bamb',
                                    'tar.ley44 as ley',
                                    'tar.tipobaserango as tbra',
                                    'tar.tipobaseambiental as tbamb',
                                    'tar.tipobasecalculo as tbcal',
                                    'tar.valor as va',
                                    'tar.estrato as est')
                            ->where('tar.anio', '=', $anioa)
                            ->get();
            
            if(count($tarifaAnt)<=0){
                flash()->overlay('No existen tarifas de la vigencia '.$anioa, 'Información');
            }else{                                

                foreach ($tarifaAnt as $tari) {                    
                    $new = new Tarifa();
                    $new->nombre                       = $tari->nom;
                    $new->anio                         = $anio2;
                    $new->codigotarifa                 = $tari->codta;
                    $new->limiteinferior               = $tari->lin;
                    $new->limitesuperior               = $tari->lsup;
                    $new->porcentajeincremento         = $tari->pin;
                    $new->porcentajesobretasa          = $tari->psob;
                    $new->porcentajeimpuestoambiental  = $tari->piam;
                    $new->baseimpuesto                 = $tari->bimp;
                    $new->baseambiental                = $tari->bamb;
                    $new->ley44                        = $tari->ley;
                    $new->tipobaserango                = $tari->tbra;
                    $new->tipobaseambiental            = $tari->tbamb;
                    $new->tipobasecalculo              = $tari->tbcal;
                    $new->valor                        = $tari->va;
                    $new->estrato                      = $tari->est;
                    $new->save();                    
                }

                flash()->overlay('Información guardada correctamente.', 'Información');
                
               
            }                
        }catch(Exception $e){
            return "Fatal Error =".$e->getMessage();
        }
    }

}
