<?php

namespace App\Danoral\Entidades;

use Illuminate\Support\Facades\DB;

use App\Danoral\U;

use App\Danoral\ModelBase;
use App\Danoral\Entidades\EDato;
use App\Danoral\Entidades\EDatoView;
use App\Danoral\Entidades\EDatoType;
use App\Danoral\Cuotas\CuotaView;

use App\Console\Commands\MigrarEntidadesEdifApto;
use App\Console\Commands\MigrarEntidadesJSON;

use App\Http\Resources\EntidadLite as EntidadLiteResource;
use App\Http\Resources\EntidadEdif as EntidadEdifResource;
use App\Http\Resources\EntidadApto as EntidadAptoResource;
use Laravel\Sanctum\HasApiTokens;



class Entidad extends ModelBase
{
    use HasApiTokens;
    
    protected $table = 'admin.entidades';
    protected $primaryKey = 'idE';
    public $incrementing = false;
    public $timestamps = false;

    protected $appends = array(
        'codE',
        'nameE',
        'edatos',
        'subE',
        'codESuper',
    );

    public $codE = '';
    public $nameE = '';
    public $edatos = [];
    public $subE = [];
    public $iconE = 'entidad';

    public function getCodEAttribute()      { return $this->codE; }
    public function getNameEAttribute()     { return $this->nameE; }
    public function getEdatosAttribute()    { return $this->edatos; }
    public function getSubEAttribute()      { return $this->subE; }
    public function getCodSuperEAttribute() { return $this->codESuper; }

    public static $types = [
          2 => 'Edificio',
          3 => 'Apto',
          4 => 'Persona',
          5 => 'Nomina',
        100 => 'Danoral'
    ];

    public $alicuota;
    public $direccionE;
    public $RIF_nro;

    public $codCliente;
    public $statusEA;

    public function EDatosClass(){
        return $this->hasMany(EDato::class, 'idE');
    }
    public function ESuper(){
        return $this->hasMany(Entidad::class, 'idESuper', 'idE');
    }
    public function CuotasView(){
        return $this->hasMany(CuotaView::class, 'idE');
    }
    public function getTypeE_str(){
        return (isset(Entidad::$types[$this->typeE])?Entidad::$types[$this->typeE]:'');
    }

    //iElemento
    public function getIdEL()   { return $this->idE; }
    public function getNameEL() { return $this->nameE; }
    public function getCodEL()  { return $this->codE; }
    public function getClassEL(){ return Entidad::class; }
    public function getTypeEL() { return $this->getTypeE_str(); }
    public function getIconEL() { return $this->iconE; }

    public function getDatosE() {
        return json_decode($this->datose);
    }

    public function getDato($datoType){
        if(isset($this->edatos[$datoType]->valueED)){
            return $this->edatos[$datoType]->valueED;
        }else{
            return null;
        }
    }

    public function loadSub(){
        $subE = Entidad::Where([
            ['idESuper', $this->idE],
        ])
        ->orderBy(DB::raw("FORMAT('%10s', \"datose\"->'cod'->>'value')::bytea"), 'asc')
        ->get();

        $this->subE = EntidadLiteResource::collection($subE);

    }
    /**
     * Carga los datos desde el JSON datose en la tabla entidades
     */
    public function loadDatosE(){
        $datose = json_decode($this->datose);
            
        $this->codE         = isset($datose->cod->value)?$datose->cod->value:'';
        $this->nameE        = isset($datose->name->value)?$datose->name->value:'';
        $this->alicuota     = isset($datose->alicuota->value)?$datose->alicuota->value:'';
        $this->RIF_nro      = isset($datose->rif_numero->value)?$datose->rif_numero->value:'';
        $this->direccionE   = isset($datose->direccion_general->value)?$datose->direccion_general->value:'';

        switch($this->typeE){
            case 2: //edif
                $this->iconE = 'buildings';
                break;

            case 3: //apto
                $this->iconE = 'aptos';
                $this->codCliente   = isset($datose->apto_cod_cliente->value)?$datose->apto_cod_cliente->value:'';
                $this->statusEA     = isset($datose->apto_status->value)?$datose->apto_cod_cliente->value:'';
                break;
        }

    }

    public function loadDatos($edatosLD = null){

        if(is_null($edatosLD)){
            $this->edatos = [];
            foreach($this->EDatosClass as $ed){
                $this->edatos[$ed->typeED] = $ed;
            }
        }else{
            $this->edatos = $edatosLD;
        }

        if(isset($this->edatos[EDatoType::$DATO_TYPE_NAME]->valueED)){
            $this->nameE = $this->edatos[EDatoType::$DATO_TYPE_NAME]->valueED;
        }
        if(isset($this->edatos[EDatoType::$DATO_TYPE_ALICUOTA]->valueED)){
            $this->alicuota = $this->edatos[EDatoType::$DATO_TYPE_ALICUOTA]->valueED;
        }
        if(isset($this->edatos[EDatoType::$DATO_TYPE_DIRECCION]->valueED)){
            $this->direccionE = $this->edatos[EDatoType::$DATO_TYPE_DIRECCION]->valueED;
        }
        if(isset($this->edatos[EDatoType::$DATO_TYPE_RIF_NRO]->valueED)){
            $this->RIF_nro = $this->edatos[EDatoType::$DATO_TYPE_RIF_NRO]->valueED;
        }

        switch($this->typeE){
            case 2: //edif
                if(isset($this->edatos[EDatoType::$DATO_TYPE_EDIF_COD]->valueED)){
                    $this->codE = $this->edatos[EDatoType::$DATO_TYPE_EDIF_COD]->valueED;
                }
                $this->iconE = 'buildings';
                break;

            case 3: //apto
                if(isset($this->edatos[EDatoType::$DATO_TYPE_APTO_COD]->valueED)){
                    $this->codE = $this->edatos[EDatoType::$DATO_TYPE_APTO_COD]->valueED;
                }
                $this->iconE = 'aptos';

                if(isset($this->edatos[EDatoType::$DATO_TYPE_APTO_COD_CLIENTE]->valueED)){
                    $this->codCliente = $this->edatos[EDatoType::$DATO_TYPE_APTO_COD_CLIENTE]->valueED;
                }
                if(isset($this->edatos[EDatoType::$DATO_TYPE_APTO_STATUS]->valueED)){
                    $this->statusEA = $this->edatos[EDatoType::$DATO_TYPE_APTO_STATUS]->valueED;
                }

                break;
        }
    }
    
    public function getSubE_cod($codSubE){
        return Entidad::where([
            ['idESuper', $this->idE],
            ['datose->cod->value', $codSubE], //cod.subE
        ])->first();
    }

    public static function getEdif($idE){
        $e_edif = DB::connection('mysql_danoral')
            ->table('entidades')
            ->leftJoin('entidadesedif', 'entidades.id_Entidad', '=', 'entidadesedif.id_Entidad')
            ->where([
                ['entidades.id_Entidad', $idE],
            ])
            ->first();

        return $e_edif;
    }

    public static function getApto($idE){
        $e_apto = DB::connection('mysql_danoral')
            ->table('entidades')
            ->leftJoin('entidadesapto', 'entidades.id_Entidad', '=', 'entidadesapto.id_Entidad')
            ->where([
                ['entidades.id_Entidad', $idE],
            ])
            ->first();

        return $e_apto;

    }

    public static function getApto_codCliente($codCliente){
        $e_apto = DB::connection('mysql_danoral')
            ->table('entidades')
            ->leftJoin('entidadesapto', 'entidades.id_Entidad', '=', 'entidadesapto.id_Entidad')
            ->where([
                ['entidadesapto.codCliente_EA', $codCliente],
            ])
            ->first();

        return $e_apto;

    }

    public static function getEdif_cod_old($codEdif){
        $e_edif = DB::connection('mysql_danoral')
            ->table('entidades')
            ->leftJoin('entidadesedif', 'entidades.id_Entidad', '=', 'entidadesedif.id_Entidad')
            ->where([
                ['entidades.cod_Entidad','LIKE',"%$codEdif"],
                ['entidades.id_TipoEntidad', 2],
            ])
            ->first();

        return $e_edif;
    }

    public static function getEdif_idE($idE){
        $e_edif = Entidad::find($idE);

        if($e_edif){
            $e_edif->loadDatos();
            return new EntidadEdifResource($e_edif);
        }
        return null;
    }

    public static function getEdif_cod($codEdif){
        $e_edif = Entidad::where([
            ['admin.entidades_datos.typeED', EDatoType::$DATO_TYPE_EDIF_COD], //cod.edif
            ['admin.entidades_datos.valueED', $codEdif],
        ])
        ->join('admin.entidades_datos', 'admin.entidades.idE', '=', 'admin.entidades_datos.idE')
        ->first();

        if($e_edif){
            $e_edif->loadDatos();
            return new EntidadEdifResource($e_edif);
        }
        return null;
    }

    public static function getApto_cod($idE_edif, $codApto){
        $e_apto = Entidad::where([
                ['admin.entidades_datos.typeED', EDatoType::$DATO_TYPE_APTO_COD], //cod.apto
                [DB::raw('LOWER("admin"."entidades_datos"."valueED")'), strtolower($codApto)],
                ['admin.entidades.idESuper', $idE_edif]
            ])
            ->join('admin.entidades_datos', 'admin.entidades.idE', '=', 'admin.entidades_datos.idE')
            ->first();

        if($e_apto){
            $e_apto->loadDatos();
            return new EntidadAptoResource($e_apto);
        }
        return null;
    }

    public static function getAptos($idESuper){
        $e_aptos = Entidad::where([
                ['idESuper', $idESuper],
            ])
            ->get();

        foreach($e_aptos as $ea){
            $ea->loadDatos();
        }

        return $e_aptos;
    }

    public static function getAptosOld($idE_Padre){
        $e_apto = DB::connection('mysql_danoral')
            ->table('entidades')
            ->leftJoin('entidadesapto', 'entidades.id_Entidad', '=', 'entidadesapto.id_Entidad')
            ->where([
                ['id_TipoEntidad', 3],
                ['cod_Entidad', '<>', ''],
                ['id_EntidadPadre', $idE_Padre],
            ])
            ->orderBy('cod_Entidad', 'asc')
            ->get();

        return $e_apto;

    }

    public static function getSearch($strSearch) {

        $res_ed = EDato::orWhere([
                    ['typeED', EDatoType::$DATO_TYPE_EDIF_COD], //cod.edif
                    ['valueED', $strSearch]
                ])
            ->orWhere([
                    ['typeED', EDatoType::$DATO_TYPE_APTO_COD_CLIENTE], //cod.cliente
                    ['valueED', $strSearch]
                ])
            ->orWhere([
                    ['typeED', EDatoType::$DATO_TYPE_NAME], //nameE
                    [DB::raw('LOWER("valueED")'), 'like', strtolower("%$strSearch%")],
                ])
            ->get();

        $res_search = [];
        foreach($res_ed as $ed){
            $e = Entidad::find($ed->idE);
            $e->loadDatos();

            array_push($res_search, $e);
        }
        return $res_search;
    }

    /** devuleve las entidades dolarizadas */
    public static function getDolarizados(){
        $entidades =  EntidadView::where([
                ['datose->edif_dolarizado->value', '>', 0],
                ['typeE', 2],
                ['enableE', true],
            ])
            ->orderBy(DB::raw("FORMAT('%10s', \"datose\"->'cod'->>'value')::bytea"), 'asc')
            ->get();

        return $entidades;
    }

    /** davuelve las sub entidades de una entidad */
    public function getSubEntidades(){
        $resSubE = [];

        $subE = Entidad::where([
            ['idESuper', $this->idE],
        ])
        ->orderBy(DB::raw("FORMAT('%10s', \"datose\"->'cod'->>'value')::bytea"), 'asc')
        //->orderBy('datose->cod->value', 'asc')
        ->get();

        foreach($subE as $e){
            $subER = $e->getSubEntidades();
            $e->subE = ($subER)?$subER:[];
            $resSubE[] = $e;
        }

        return EntidadLiteResource::collection($resSubE);
    }

    public static function dolarizar($codEdif, $mesDesde, $ano = null) {
        if(empty($codEdif)){return 0;}

        $conexion_danoral = (new Entidad)->getCN_jsys($ano, $mesDesde);
        echo "conexion danoral: $conexion_danoral" .PHP_EOL;

        //Edificio
        $e_edif = DB::connection($conexion_danoral)
        ->table('entidades')
        ->leftJoin('entidadesedif', 'entidades.id_Entidad', '=', 'entidadesedif.id_Entidad')
        ->Where([
            ['id_TipoEntidad', 2],
            ['cod_Entidad', 'LIKE', "%$codEdif%"],
        ])
        ->first();
    
        //actualizar dolarizado_EE
        if($e_edif){
            $idE = SyncEntidades::cambioID_edif($e_edif->id_Entidad);
            echo print_r($e_edif);

            echo PHP_EOL;

            echo $idE .PHP_EOL;

            $rows = DB::connection($conexion_danoral)
            ->table('entidadesedif')
            ->where([
                ['id_Entidad', $e_edif->id_Entidad],
            ])
            ->update(['dolarizado_EE' => 3]);

        echo "Actualizado dolarizados_EE: $rows".PHP_EOL;
        }else{
            return 0;
        }

        //migrar entidades edif-apto
        $migEEA = new MigrarEntidadesEdifApto();
        $migEEA->migrar($codEdif, $ano);

        //crear dato dolarizado desde
        echo "Crear dato Dolarizado desde $mesDesde (1056)" . PHP_EOL;
        DB::table('admin.entidades_datos')
        ->updateOrInsert([
                'idE'       => $idE,
                'typeED'    => 1056,
            ],[
                'valueED'   => "$ano-$mesDesde-01",
            ]
        );

        //regenerar JSON
        echo "Regenerando JSON" . PHP_EOL;
        $mJSON = new MigrarEntidadesJSON;
        $mJSON->migrarJSON($idE);
        
        echo "::: FIN" . PHP_EOL;
        
    }

    public static function actualizarEdif($e){
        $u = new U;
        $u->isEcho = false;
        $u->eLinea('ActualizarEdif: INICIO -----------------------------------');

        $idE = SyncEntidades::cambioID_edif($e->id_Entidad);

        $u->eLinea('DB:updateOrInsert: admin.entidades Edif ');    
        DB::table('admin.entidades')
            ->updateOrInsert(
                [
                    'idE'       => $idE
                ],
                [
                    'typeE'     => 2,
                    'enableE'   => $e->activo_Entidad,
                    'idESuper'  => SyncEntidades::cambioID_edif($e->id_EntidadPadre),
                ]
            );

        $u->eLinea('generando array datose edif');        
        $datose = [
            ['idE' => $idE, 'typeED' => 1100, 'valueED' => trim($e->nombre_Entidad)],
            ['idE' => $idE, 'typeED' => 1006, 'valueED' => trim($e->RIF_Entidad)],
            ['idE' => $idE, 'typeED' => 1007, 'valueED' => trim($e->nombreRIF_EE)],
            ['idE' => $idE, 'typeED' => 1036, 'valueED' => $e->RIF_valido_Entidad],
            ['idE' => $idE, 'typeED' => 1029, 'valueED' => trim($e->direccion_EE)],
            ['idE' => $idE, 'typeED' => 1041, 'valueED' => trim($e->cod_Entidad)],
            ['idE' => $idE, 'typeED' => 1042, 'valueED' => $e->Intereses_EE],
            ['idE' => $idE, 'typeED' => 1043, 'valueED' => $e->PorcInt_Edif_EE],
            ['idE' => $idE, 'typeED' => 1044, 'valueED' => $e->PorcInt_Admni_EE],
            ['idE' => $idE, 'typeED' => 1045, 'valueED' => $e->MesesDesdeInt_EE],
            ['idE' => $idE, 'typeED' => 1046, 'valueED' => $e->formatoRecibo_EE],
            ['idE' => $idE, 'typeED' => 1047, 'valueED' => $e->porc6_EE],
            ['idE' => $idE, 'typeED' => 1048, 'valueED' => $e->comboProvincial_EE],
            ['idE' => $idE, 'typeED' => 1049, 'valueED' => $e->montoFijo_EE],
            ['idE' => $idE, 'typeED' => 1050, 'valueED' => $e->fechaIngreso_EE],
            ['idE' => $idE, 'typeED' => 1051, 'valueED' => $e->alicuota_EE],
            ['idE' => $idE, 'typeED' => 1052, 'valueED' => $e->NIT_EE],
            ['idE' => $idE, 'typeED' => 1053, 'valueED' => $e->dolarizado_EE],
        ];

        $u->eLinea('DB:updateOrInsert: admin.entidades_datos desde datose');    
        foreach ($datose as $dE) {
            $typeED = $dE['typeED'];
            $valueED = $dE['valueED'];

            if (!empty($valueED)) {
                DB::table('admin.entidades_datos')
                ->updateOrInsert(
                    [
                        'idE'       => $idE,
                        'typeED'    => $typeED
                    ],
                    [
                        'valueED'   => $valueED
                    ]
                );
            }
        }

        $u->eLinea('DB:consulta entidades aptos');
        //Apartamentos
        $e_apto = DB::connection('mysql_danoral')
            ->table('entidades')
            ->leftJoin('entidadesapto', 'entidades.id_Entidad', '=', 'entidadesapto.id_Entidad')
            ->where([
                ['id_TipoEntidad', 3],
                ['cod_Entidad', '<>', ''],
                ['id_EntidadPadre', $e->id_Entidad],
            ])
            ->get();

        $u->eLinea('actualizacion Aptos: INICIO');    
        $i_apto_edif = 0;
        foreach ($e_apto as $a) {
            $i_apto_edif++;

            $u->eLinea(trim($a->id_Entidad ." | ". trim($a->cod_Entidad)));

            $idE_a = SyncEntidades::cambioID_apto($a->id_Entidad);

            DB::table('admin.entidades')
                ->updateOrInsert(
                    [
                        'idE' => $idE_a
                    ],
                    [
                        'typeE' => 3,
                        'enableE' => $a->activo_Entidad,
                        'idESuper' => $idE,
                    ]
                );

            $datosA = [
                ['idE' => $idE_a, 'typeED' => 1100, 'valueED' => trim($a->nombre_Entidad)],
                ['idE' => $idE_a, 'typeED' => 1006, 'valueED' => trim($a->RIF_Entidad)],
                ['idE' => $idE_a, 'typeED' => 1036, 'valueED' => $a->RIF_valido_Entidad],
                ['idE' => $idE_a, 'typeED' => 1012, 'valueED' => $a->email_EA],
                ['idE' => $idE_a, 'typeED' => 1013, 'valueED' => trim($a->telefonos_EA)],
                ['idE' => $idE_a, 'typeED' => 1051, 'valueED' => $a->alicuota_EA],
                ['idE' => $idE_a, 'typeED' => 1061, 'valueED' => $a->status_EA],
                ['idE' => $idE_a, 'typeED' => 1062, 'valueED' => $a->statusUbicacion_EA],
                ['idE' => $idE_a, 'typeED' => 1063, 'valueED' => trim($a->codVal_EA)],
                ['idE' => $idE_a, 'typeED' => 1064, 'valueED' => trim($a->codCliente_EA)],
                ['idE' => $idE_a, 'typeED' => 1065, 'valueED' => $a->cobroIntereses_EA],
                ['idE' => $idE_a, 'typeED' => 1066, 'valueED' => trim($a->cod_Entidad)],
            ];

            foreach ($datosA as $dA) {
                $typeED =  $dA['typeED'];
                $valueED = $dA['valueED'];
                $labelED = null;

                if (!empty($valueED)) {
                    DB::table('admin.entidades_datos')
                        ->updateOrInsert(
                            [
                                'idE'       => $idE_a,
                                'typeED'    => $typeED,
                                'labelED'   => $labelED,
                            ],
                            [
                                'valueED'   => $valueED
                            ]
                        );
                }
            }

            //entidades datos web
            $ed_web = DB::connection('mysql_danoral')
                ->table('versio6_web.datos_entidad')
                ->join('entidades', 'versio6_web.datos_entidad.id_Entidad', '=', 'entidades.id_Entidad')
                ->where([
                    ['entidades.activo_Entidad', true],
                    ['estatus', 1],
                    ['entidades.id_Entidad', $a->id_Entidad]
                ])
                ->orderBy('versio6_web.datos_entidad.fecha', 'asc')
                ->get();

            foreach ($ed_web as $ed) {

                switch($ed->tipo_dato){
                    case 1: //telefono celular
                        $typeED     = 1013;
                        $labelED    = 4010;
                    break;

                    case 2: //telefono fijo
                        $typeED     = 1013;
                        $labelED    = 4011;
                    break;

                    case 3: //correo
                        $typeED     = 1012;
                        $labelED    = 4510;
                    break;
                }
                $statusED = 1;
                $valueED = $ed->valor_dato;
                $dateED = $ed->fecha;

                if (!empty($valueED)) {
                    DB::table('admin.entidades_datos')
                        ->updateOrInsert(
                            [
                                'idE'       => $idE_a,
                                'typeED'    => $typeED,
                                'labelED'   => $labelED,
                            ],
                            [
                                'valueED'   => $valueED,
                                'dateED'    => $dateED,
                                'statusED'  => $statusED
                            ]
                        );

                }
            }
        }
        
        $u->eLinea('DB:updateOrInsert: Actualizar fecha actualizacion');
        DB::table('admin.entidades_datos')
        ->updateOrInsert(
            [
                'idE' => $idE,
                'typeED' => 9100
            ],
            [
                'valueED' => date("Y-m-d H:i:s")
                ]
            );
            
        
        $u->eLinea('Entidad::actualizarEdifJSON -> datose');
        Entidad::actualizarEdifJSON($idE);

        $u->eLinea('ActualizarEdif: FIN    -----------------------------------');

        return $u->logList;

    }

    public static function actualizarEdifJSON($idESuper){

        $entidades = Entidad::where([
                ['idESuper', $idESuper],
                ['typeE', 3],
            ])
            ->orWhere([
                ['idE', $idESuper]
            ])
            ->orderBy('idE', 'asc')
            ->get();

        $iE = 1;
        $iED = 0;
        $countE = count($entidades);
        $countPorc = ($countE>20)?$countE/20:1;

        foreach($entidades as $e){

            $e->loadDatos();
            $datose = [];
            foreach($e->edatos as $ed){
                $dato = [];

                if($ed->typeED == 1041){
                    $ed->typeED = 1066;
                }

                $dato['type'] = $ed->typeED;
                $dato['value'] = $ed->valueED;

                if(isset($ed->labelED)) { $dato['label']    = $ed->labelED;  }
                if(isset($ed->dateED))  { $dato['date']     = $ed->dateED;   }
                if(isset($ed->statusED)){ $dato['status']   = $ed->statusED; }

                $edt = EDatoType::firstWhere('typeED', $ed->typeED);

                if(isset($edt->selectorED)){
                    $selector = $edt->selectorED;
                }else{
                    $selector = "s-$ed->typeED";
                }

                $datose[$selector] = $dato;

                $iED++;
            }
            
            $datose_json = json_encode($datose, JSON_UNESCAPED_UNICODE);

            $e->datose = $datose_json;
            $e->save();

            $iE++;
        };
    }

    /** actualiza solo edicicios (sin aptos) */
    public static function actualizarEdificios() {
        $u = new U;
        $u->isEcho = true;
        $u->eLinea('ActualizarEdificios: INICIO -----------------------------------');
        $conexion_danoral = (new Entidad)->getCN_jsys(null, null);
        $u->eLinea("conexion danoral: $conexion_danoral");

        //Edificio
        $e_edif = DB::connection($conexion_danoral)
        ->table('entidades')
        ->leftJoin('entidadesedif', 'entidades.id_Entidad', '=', 'entidadesedif.id_Entidad')
        ->Where([
            ['id_TipoEntidad', 2],
        ])
        ->orderBy('cod_Entidad')
        ->get();


        foreach($e_edif as $e) {

            $u->eLinea("$e->cod_Entidad - $e->nombre_Entidad");

            $idE = SyncEntidades::cambioID_edif($e->id_Entidad);

            //$u->eLinea('DB:updateOrInsert: admin.entidades Edif ');    
            DB::table('admin.entidades')
                ->updateOrInsert(
                    [
                        'idE'       => $idE
                    ],
                    [
                        'typeE'     => 2,
                        'enableE'   => $e->activo_Entidad,
                        'idESuper'  => SyncEntidades::cambioID_edif($e->id_EntidadPadre),
                    ]
                );
    
            //$u->eLinea('generando array datose edif');        
            $datose = [
                ['idE' => $idE, 'typeED' => 1100, 'valueED' => trim($e->nombre_Entidad)],
                ['idE' => $idE, 'typeED' => 1006, 'valueED' => trim($e->RIF_Entidad)],
                ['idE' => $idE, 'typeED' => 1007, 'valueED' => trim($e->nombreRIF_EE)],
                ['idE' => $idE, 'typeED' => 1036, 'valueED' => $e->RIF_valido_Entidad],
                ['idE' => $idE, 'typeED' => 1029, 'valueED' => trim($e->direccion_EE)],
                ['idE' => $idE, 'typeED' => 1041, 'valueED' => trim($e->cod_Entidad)],
                ['idE' => $idE, 'typeED' => 1042, 'valueED' => $e->Intereses_EE],
                ['idE' => $idE, 'typeED' => 1043, 'valueED' => $e->PorcInt_Edif_EE],
                ['idE' => $idE, 'typeED' => 1044, 'valueED' => $e->PorcInt_Admni_EE],
                ['idE' => $idE, 'typeED' => 1045, 'valueED' => $e->MesesDesdeInt_EE],
                ['idE' => $idE, 'typeED' => 1046, 'valueED' => $e->formatoRecibo_EE],
                ['idE' => $idE, 'typeED' => 1047, 'valueED' => $e->porc6_EE],
                ['idE' => $idE, 'typeED' => 1048, 'valueED' => $e->comboProvincial_EE],
                ['idE' => $idE, 'typeED' => 1049, 'valueED' => $e->montoFijo_EE],
                ['idE' => $idE, 'typeED' => 1050, 'valueED' => $e->fechaIngreso_EE],
                ['idE' => $idE, 'typeED' => 1051, 'valueED' => $e->alicuota_EE],
                ['idE' => $idE, 'typeED' => 1052, 'valueED' => $e->NIT_EE],
                ['idE' => $idE, 'typeED' => 1053, 'valueED' => $e->dolarizado_EE],
            ];
    
            //$u->eLinea('DB:updateOrInsert: admin.entidades_datos desde datose');    
            foreach ($datose as $dE) {
                $typeED = $dE['typeED'];
                $valueED = $dE['valueED'];
    
                if (!empty($valueED)) {
                    DB::table('admin.entidades_datos')
                    ->updateOrInsert(
                        [
                            'idE'       => $idE,
                            'typeED'    => $typeED
                        ],
                        [
                            'valueED'   => $valueED
                        ]
                    );
                }
            }

            $u->eLinea('Entidad::actualizarEdifJSON -> datose');
            Entidad::actualizarEdifJSON($idE);
    

        }

        $u->eLinea('ActualizarEdificios: FIN -----------------------------------');
        
    }
}

