<?php

namespace Predial\Http\Controllers;

use Illuminate\Support\Collection;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\File;
use Predial\ArchivoIgac;
use Predial\Tercero;
use Predial\PerfilTercero;
use Predial\Predio;
use Predial\Avaluo;
use Predial\Area;
use Predial\PropietarioPredio;
use Predial\Propietario;
use Predial\DestinoEconomico;

class ArchivoPlanoController extends Controller{

    public function view_plano(){
        return view('plano.index');
    }
    /*
    function DescargarArchivo($fichero){

        $basefichero = basename($fichero);

        header( “Content-Type: application/octet-stream”);

        header( “Content-Length: “.filesize($fichero));

        header( “Content-Disposition:attachment;filename=” .$basefichero.””);
        readfile($fichero);
    }*/

    public function cargarArchivoPlanoI(Request $request){
        try {
            
            $sql = "";
            $file    = $request->file('txtArchivo');
            

            $content =File::get($file);
            //var_dump($content);
            $line    = array();
            $hoy = date('Y-m-d');

            $hoy = trim($hoy, '"');
            $fecha_div2 = explode("-", $hoy);
            $anio2 = $fecha_div2[0];

            $tarifa = DB::table('gr_tarifa as tar')
                        ->select('tar.id_unico as idtar')
                        ->where('tar.anio', '=', $anio2)
                        ->get();
            if(count($tarifa)<=0){

                flash()->overlay('No existen tarifas para la vigencia '.$anio2.' , por favor registrelas.', 'Información');
                return back();
            }else{
            	
                $borraP = DB::table('gr_archivo_igac')
                                ->delete();
                            
                $borraR = DB::table('gp_tercero_predio')
                        ->delete();

        		$borraP = DB::table('gr_propietarios')
                        ->delete();
                
                foreach (explode("\n" ,$content) as $key=>$data) {

                    $line[$key] = explode(" ",$data);

                    

                    $dep        = substr($data,0,2);   
                    $mun        = substr($data,2,3);    
                    $cod_comple = substr($data,5,25);   
                    $tipo_reg   = substr($data,30,1);  
                    $orden_p    = substr($data,31,3);  
                    $num_p      = substr($data,34,3);  
                    $nom_pr     = substr($data,37,100); 
                    $estado_c   = substr($data,137,1); 
                    
                    $t_doc      = substr($data,138,1); 
                    $iden       = substr($data,139,12); 
                    $dir        = substr($data,151,100);
                    $comuna     = substr($data,251,1);
                    $dest_eco   = substr($data,252,1);
                    $hect       = 0;
                    $met2       = substr($data,253,15);
                    $areac      = substr($data,268,6);
                    $valor      = substr($data,274,15);
                    $esp        = "";
                    $fecha      = substr($data,289,8);
                    $annoA      = substr($data,293,4);
                    $cod_igaca  = substr($data,297,15);
                    $cod_hom    = substr($data,312,13);

                   
                    $new = new ArchivoIgac();
                    $new->cod_comp_igac = $cod_comple;
                    $new->cod_depar     = $dep;
                    $new->cod_muni      = $mun;
                    $new->cod_igac      = $cod_comple;
                    $new->separador     = $tipo_reg;
                    $new->orden_prop    = $orden_p;
                    $new->num_prop      = $num_p;
                    $new->nom_propi     = $nom_pr;
                    $new->campo_x       = $estado_c;
                    $new->tipo_doc      = $t_doc;
                    $new->identificacion= $iden;
                    $new->direccion     = $dir;
                    $new->dest_econo    = $dest_eco;
                    $new->hectareas     = $hect;
                    $new->metro_2       = $met2;
                    $new->area_const    = $areac;
                    $new->valor         = $valor;
                    $new->campo_esp     = $comuna;
                    $new->fecha         = $fecha;
                    $new->anioA         = $annoA;
                    $new->codigo_anterior= $cod_igaca;
                    $new->nupre         = $cod_hom;

                    if(!empty($cod_comple)){
                        $new->save();
                    }
                }
                
                
                #INICIA EL PROCESO DE VERIFICACION DE TARCEROS
                $ap = new ArchivoPlanoController();
        		$ap->estadopredio();
                //$ap->terceropredio();
                
                
                flash()->overlay('Información guardada correctamente', 'Información');
                return back();
            }
        } catch (Exception $e) {
            die($e->gteMessage());
        }
    }


    

    public function estadopredio(){
    	
    	$hoy = date('Y-m-d');
    	
    	# INICIA EL PROCESO DE VERIFICACION DE PREDIOS QUE ESTAN EN LA BASE DE DATOS Y NO ESTAN EN LE IGAC 
        $predioDB = DB::table('gp_predio1 as pre')
                        ->select('pre.codigo_catastral as codC',
                                'pre.id_unico as idp',
                                'p.nombres as nomp')
                        ->leftjoin('gp_tercero_predio as tp', 'tp.predio','=','pre.id_unico')
                        ->leftjoin('gr_propietarios as p', 'tp.tercero','=','p.id_unico')
                        ->get();

        $str = "";
        foreach ($predioDB as $PDB) {                                       //recorre los registros encontrados
            $predioIGAC = DB::table('gr_archivo_igac as igac')
                                ->select('igac.id_unico as id',
                                        'igac.cod_igac as ci',
                                        'igac.nom_propi as noi')
                                ->where('igac.cod_igac', '=', $PDB->codC)
                                ->get();
            if(count($predioIGAC) <= 0){                                    //valida si no encontro el predio en el archivo igac
                $upd = Predio::findOrFail($PDB->idp);
                $upd->timestamps = false;
                $upd->fechacambioestado = $hoy;
                $upd->observecionescambioestado = "Cancelado por cargue de archivo IGAC ".date('d/m/Y');
                $upd->estado = 3;
                $upd->save();

                $idpre = $PDB->idp;
                $cigac = $PDB->codC;
                $nomb  = $PDB->nomp;


                $str .= $idpre."\t".$cigac."\t".$nomb."\r\n";

            } else {
				$upd = Predio::findOrFail($PDB->idp);
                $upd->timestamps = false;
                $upd->fechacambioestado = $hoy;
                $upd->estado = 2;
                $upd->observecionescambioestado = "Actualizado por cargue de archivo IGAC ".date('d/m/Y');
                $upd->save();                    	
            }
        }
        
        
        ################### FINALIZA EL PROCESO DE VERIFIACION DE PREDIOS QUE NO ESTAN EL BD Y ESTAN EN EL IGAC ##############################
        
        
        $ap = new ArchivoPlanoController();
        $ap->terceropredio();
        
    }

    public function terceropredio(){
    	
    	$hoy = date('Y-m-d');
    	$compania = session()->get('compania');
        
        
        $predi = DB::table('gr_archivo_igac as ai')
                    ->select('ai.tipo_doc as td',
                        'ai.identificacion as i',
                        'ai.nom_propi as np',
                        'ai.id_unico as  iid',
                        'ai.campo_x as cx',
                        'ai.direccion as dir')
                    ->get();
                           
        foreach ($predi as $prop) {                         //recorre los registros enconctrados

            if($prop->td == "X"){
                $tipo =  6;
            }elseif($prop->td == "N"){
                $tipo = 2;
            }else{
                $tipo = 1;
            }
            $new = new Propietario();               //ingresa los valores a la tabla tercero
            $new->nombres               = $prop->np;
            $new->tipoidentificacion    = $tipo;
            $new->numero                = $prop->i;
            $new->dcasadaVida           = $prop->cx;
            $new->direccion             = $prop->dir;
            $new->save();

            $idter = DB::table('gr_propietarios')->max('id_unico');

            $terigac = DB::table('gr_archivo_igac as aig')
                           ->where('aig.id_unico', '=', $prop->iid)
                           ->update(['aig.id_tercero'=> $idter]);

        } 
        #FINALIZA EL PROCESO DE VERIFICACION DE TERCEROS
		#INICIA EL RPOCESO DE REGISTRO DE TERCERO_PREDIO
        $terI = DB::table('gr_archivo_igac as ga')
                    ->select('ga.id_tercero as it',
                            'ga.cod_igac as ci',
                            'ga.tipo_doc as td',
                            'ga.orden_prop as op')
                    ->get();

        foreach($terI as $P){

            $predDB = DB::table('gp_predio1 as pdo')
                            ->select('pdo.id_unico as pri')
                            ->where('pdo.codigo_catastral', '=', $P->ci)
                            ->get();
            if(count($predDB) > 0){

                foreach ($predDB as $pdb) {

                    if($P->op == "001"){
                        $prop = 0;
                        $porc = 100;
                    }else{
                        $prop = 1;
                        $porc = 0;
                    }


                    $new = new PropietarioPredio();
                    $new->tercero       = $P->it;
                    $new->predio        = $pdb->pri;
                    $new->propietario   = $prop;
                    $new->orden         = $P->op;
                    $new->porcentaje    = $porc;
                    $new->timestamps = false;

                    $new->save();
                }

            }

        }
        
        $ap = new ArchivoPlanoController();
        $ap->avaluo();
        
    }
    public function avaluo(){
 
    	$hoy = date('Y-m-d');
    	$hoy = trim($hoy, '"');
        $fecha_div2 = explode("-", $hoy);
        $anio2 = $fecha_div2[0];
    	
    	# INICIA EL PROCESO DE CARGUE DE LOS AVALUOS DEL ARCHI IGAC A LA TABLA AVALUOS  
        $tarifav = DB::table('gr_tarifa as tar')
                        ->select('tar.id_unico as tid',
                                'tar.codigotarifa as codt')
                        ->where('tar.anio', '=',  $anio2)
                        ->get();
        $indicador = 0;
        foreach ($tarifav as $t) {

            $prediot = DB::table('gp_predio1 as pr')
                        ->select('pr.id_unico as pid',
                                'pr.tipo_predio as tp',
                                'pr.codigo_catastral as cc')
                        ->leftjoin('gp_tipo_predio as tpre', 'pr.tipo_predio', '=', 'tpre.id_unico')
                        ->where('tpre.codigo', '=',$t->codt)
                        ->get();

            foreach ($prediot as $p) {

                $igac = DB::table('gr_archivo_igac as ig')
                            ->select('ig.valor as v')
                            ->where('ig.cod_igac', '=',$p->cc)
                            ->get();

                foreach ($igac as $igc) {

                    $existeT = DB::table('gr_avaluo as ava')
                                    ->select('ava.id_unico as aid')
                                    ->where('ava.predio', '=',$p->pid)
                                    ->where('ava.anno', '=', $anio2)
                                    ->get();
                    if(count($existeT)<=0){

                        $val = (int) $igc->v;
                        $new = new Avaluo();
                        $new->valor      = $val;
                        $new->indicador = $indicador;
                        $new->tarifa     = $t->tid;
                        $new->predio     = $p->pid;
                        $new->anno       = $anio2;
                        $new->save();
                    }
                }
            }
        }
        
        $ap = new ArchivoPlanoController();
        $ap->area();
    }
    
    public function area(){

    	$hoy = date('Y-m-d');
    	$hoy = trim($hoy, '"');
        $fecha_div2 = explode("-", $hoy);
        $anio2 = $fecha_div2[0];
    	
    	
        #INICIA EL PROCESO DE CARGUE DE AREA
        $terI = DB::table('gr_archivo_igac as ga')
                    ->select('ga.cod_igac as ci',
                            'ga.hectareas as h',
                            'ga.metro_2 as mt',
                            'ga.area_const as amt',
                            'ga.anioA as ani')
                    ->distinct()
                    ->get();        
        foreach($terI as $P){            
            $predDB = DB::table('gp_predio1 as pdo')
                            ->select('pdo.id_unico as pri')
                            ->where('pdo.codigo_catastral', '=', $P->ci)
                            ->get();
            $tipoA = 1;
            $unidad = 1;
            $moti = 3;
            if(count($predDB) > 0){                    
                foreach ($predDB as $pdb) {
	                $ar = DB::table('gr_area as a')
	                            ->select('a.id_unico')
	                            ->where('a.predio', '=', $pdb->pri )
	                            ->where('a.anio', '=' , $P->ani)
	                            ->get();
	                    
	                if(count($ar) < 1){
	                    $v =   (int)$P->h;	                      
	                    $new = new Area();
	                    $new->valor             = $v;
	                    $new->anio              = $P->ani;
	                    $new->tipoarea          = $tipoA;
	                    $new->unidadarea        = $unidad;
	                    $new->motivocambioarea  = $moti;
	                    $new->predio            = $pdb->pri;
	                    $new->area_construida   = $P->amt;
	                    $new->area_metros       = $P->mt;
	                    $new->save();

	                    //var_dump($new->save());
	                }        
                    
                }
                    
            }      
            
        }
    }
}
