<?php namespace App\Http\Controllers;

use App\Custom\SQLConnection; 
use App\Custom\Misc;
use App\Custom\Mailer;
use Session;
use DateTime;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\Request;
use DB;
use stdClass;
use App\Http\Controllers\ImperiumEmailController;
use App\Http\Controllers\EmailController;

class ImperiumDocumentos extends Controller {

    public static function verificacionDocumentos() { 
        $status = !empty(Request::input('status')) ? Request::input('status') : 'PENDIENTES';
        return view('/imperium/verificacion_documentos')->with(compact(['status']));
    }

    public static function verificacionDocumentosData() {
        $cliente = Session::get('usuario')->cliente['client_id'];
        $status = !empty(Request::input('status')) ? Request::input('status') : 'PENDIENTES';
        //var_dump($cliente); var_dump($status); die(); 
        $docs = SQLConnection::backendStoreProcedure('Imperium_vista_cliente', array($cliente, $status, null, null, null, null, null, null, null), 'select');

        $periodos = [];
        $secciones = []; 
        $acceso = [];
        $nomdocs = [];
        
        $per = [];
        $sec = [];
        $acc = [];
        $nomdoc = [];
        foreach($docs as $doc) {
             if(!in_array($doc->nombre_tipo_doc, $nomdoc)) {
                $nomdoc[] = $doc->nombre_tipo_doc;
            }
            if(!in_array($doc->periodo, $per)) {
                $per[] = $doc->periodo;
            }
            if(!in_array($doc->nombre_seccion, $sec)) {
                $sec[] = $doc->nombre_seccion;
            }
            if(!in_array($doc->ci_killer, $acc)) {
                $acc[] = $doc->ci_killer;
            }
        }
        arsort($per, 0);
        foreach($per as $p) {
            $periodos[] = array('periodo' => $p, 'periodo_my' => substr($p,0,4).'-'.substr($p,4,2));
        }

        asort($sec,0);
        foreach($sec as $s) {
            $secciones[] = array('nombre_seccion' => $s);
        }
        asort($nomdoc,0);
        foreach($nomdoc as $s) {
            $nomdocs[] = array('nombre_documento' => $s);
        }

        foreach($acc as $a) {
            $acceso[] = array('acceso' => ($a == 1) ? 'SI' : 'NO');
        }

    
        return json_encode( array('docs' => $docs, 'periodos' => $periodos, 'secciones' => $secciones, 'acceso' => $acceso, 'nomdocs' => $nomdocs) );
    }


    ////    Vista del documento/contenido del modalDocumento
    public static function verificacionDocumentosDoc() {
        $doc_id = Request::input('doc_id');
        //$doc_id = 4974767335; 
        $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento', array($doc_id), 'selectOne');
        //echo(var_dump($doc));die();
        // EJEMPLO TIPO DOC 1010 / DOC ID 4971245516
        //$campos_doc = SQLConnection::backendStoreProcedure('Imperium_campos_documentos', array('LISTARCAMPOS', "1010", "4971245516"), 'select');
        //$valores_campos = SQLConnection::backendStoreProcedure('Imperium_campos_documentos', array('VALORES', "1010", "4971245516"), 'select');
        // Campos de un formulario que se creará en la vista.
        $campos_doc = SQLConnection::backendStoreProcedure('Imperium_campos_documentos', array('LISTARCAMPOS', $doc->tipo_doc, $doc_id), 'select');
        // Valores de todos los campos de un formulario según el documento.
        $valores_campos = SQLConnection::backendStoreProcedure('Imperium_campos_documentos', array('VALORES', $doc->tipo_doc, $doc_id), 'select');
        //echo(var_dump(array($campos_doc)));
        $planes_pago_modif = SQLConnection::backendStoreProcedure('Imperium_planes_pago', array('LISTARPLANES', NULL, $doc_id, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
		NULL, NULL, NULL), 'select');
        //  Ruta donde se envian los archivos subidos.
        //$cod_ruta = env('RUTA_DOCUMENTOS_IMPERIUM') . '/' . $doc->doc_path;
        if(count($planes_pago_modif) == 0) {
            $planes_pago = array();
            $monto_planes = 0;
            $monto_cancelado = 0;
        }
        else {
            $planes = self::modificarPlanes($planes_pago_modif);
            $planes_pago = self::modificarConcepto($planes);
            $doc = self::modificarNotificacion($doc);
            $monto_planes = self::montoTotal($planes_pago);
            $monto_cancelado = self::montoAbonado($planes_pago);
        }

        if(!($doc->prox_vencer == 1 && $doc->estado_doc == 'I' && $doc->doc_version > 0)) {
            if(Session::get("usuario")->username == "sa" || Session::get("usuario")->username == "kevin.cisneros") {
                $permiso = true;
            }
            else {
                $permiso = false;
            }

            //$doc_url = Misc::getDocUrl($doc_id);        

            /* $files = Misc::docUrls($doc_id);
            $doc_url = $files[$doc->doc_version]; */

              $files = []; 
            for ($x = 0; $x <= $doc->doc_version; $x+=1) {
                $files[$x] =  Misc::getDocUrl($doc_id,$x); 
            }
            $doc_url = $files[$doc->doc_version];
            $hijos = NULL;
            if ($doc->es_doc_lista > 0) {
                $hijos = SQLConnection::backendStoreProcedure('Imperium_Datos_Documentos_Hijos', array($doc_id), 'select');
            }

            $aux = NULL;
            if ($doc->doc_version > 0) {
                // Todos los documentos de reemplazo para mostrar el historial en caso que el estado sea verificado
                $aux = SQLConnection::backendStoreProcedure('Imperium_datos_documento_reemplazo', array($doc_id, -1), 'select');
            }
            return view('/imperium/documento_verificar')->with(compact(['doc', 'doc_url', 'hijos', 'files', 'aux', 'campos_doc', 'valores_campos', 'planes_pago', 'monto_planes', 'monto_cancelado', 'permiso']));
        }
        else {
            if(Session::get("usuario")->username == "sa" || Session::get("usuario")->username == "kevin.cisneros") {
                $permiso = true;
            }
            else {
                $permiso = false;
            }

            $dv = $doc->doc_version;
            $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento_reemplazo', array($doc_id, 0), 'selectOne');
            $doc_reemp = SQLConnection::backendStoreProcedure('Imperium_datos_documento_reemplazo', array($doc_id, $dv), 'selectOne');
            $doc_url = Misc::getDocUrl($doc_id);        
            $doc_url_reemp = Misc::getDocUrl($doc_id, $dv);
            $hijos = NULL;
            if ($doc->es_doc_lista > 0) {
                $hijos = SQLConnection::backendStoreProcedure('Imperium_Datos_Documentos_Hijos', array($doc_id), 'select');
            }
            return view('/imperium/documento_verificar_reemplazo')->with(compact(['doc', 'doc_reemp', 'doc_url', 'doc_url_reemp', 'hijos', 'campos_doc', 'valores_campos', 'planes_pago', 'monto_planes', 'monto_cancelado', 'permiso']));            
        }
    }

    ////    Proceso de reconocimiento de CUITS de un PDF
    public static function reconocerCUIT() {
        $doc_id = Request::input('doc_id');

        $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento', array($doc_id), 'selectOne');

        $type = '';

        $columns = [];

        if($doc->validar_cuit > 0) {

            $type = 'C';



            // $col = new stdClass;

            // $col->type = 'string';

            // $col->title = 'Ya Verificado';

            // $col->index = 'verificado';

            // $col->align = 'center';

            // $col->cellAlign = 'center';

            // $columns[] = $col;

            

            $col = new stdClass;

            $col->type = 'select';

            $col->id = 'chk_nomina';

            $col->index = 'doc_id';

            $col->title = 'contrat';

            $col->align = 'center';

            $col->cellAlign = 'center';

            $col->width = 40;

            $columns[] = $col;



            $col = new stdClass;

            $col->type = 'string';

            $col->title = 'Documento';

            $col->index = 'nombre_tipo_doc';

            $col->align = 'left';

            $col->cellAlign = 'left';

            $col->flex = 1;

            $columns[] = $col;

        }

        else if ($doc->validar_lista_cuil > 0) {

            $type = 'E';



            // $col = new stdClass;

            // $col->type = 'string';

            // $col->title = 'Ya Verificado';

            // $col->index = 'verificado';

            // $col->align = 'center';

            // $col->cellAlign = 'center';

            // $columns[] = $col;



            $col = new stdClass;

            $col->type = 'select';

            $col->id = 'chk_nomina';

            $col->index = 'empleado';

            $col->title = 'empleados';

            $col->align = 'center';

            $col->cellAlign = 'center';

            $col->width = 40;

            $col->headerCheckBox = true;

            $columns[] = $col;



            $col = new stdClass;

            $col->type = 'string';

            $col->title = 'Empleado';

            $col->index = 'nombre_persona';

            $col->align = 'left';

            $col->cellAlign = 'left';

            $col->flex = 1;

            $columns[] = $col;



            $col = new stdClass;

            $col->type = 'string';

            $col->title = 'Identificación';

            $col->index = 'taxid';

            $col->align = 'center';

            $col->cellAlign = 'center';

            $col->width = 150;

            $columns[] = $col;

        }

        else if ($doc->validar_lista_dominios > 0) {

            $type = 'V';



            // $col = new stdClass;

            // $col->type = 'string';

            // $col->title = 'Ya Verificado';

            // $col->index = 'verificado';

            // $col->align = 'center';

            // $col->width = 70;

            // $col->cellAlign = 'center';

            // $columns[] = $col;



            $col = new stdClass;

            $col->id = 'chk_nomina';

            $col->type = 'select';

            $col->title = 'vehiculos';

            $col->align = 'center';

            $col->cellAlign = 'center';

            $col->width = 40;

            $columns[] = $col;



            $col = new stdClass;

            $col->type = 'string';

            $col->title = 'Vehículo';

            $col->index = 'nombre_vehiculo';

            $col->align = 'left';

            $col->cellAlign = 'left';

            $col->flex = 1;

            $columns[] = $col;



            $col = new stdClass;

            $col->type = 'string';

            $col->title = 'Dominio';

            $col->index = 'dominio';

            $col->align = 'center';

            $col->cellAlign = 'center';

            $col->width = 100;

            $columns[] = $col;

        }

        $hijos = SQLConnection::backendStoreProcedure('Imperium_Datos_Documentos_Hijos', array($doc_id), 'select');

        // foreach($hijos as $key => $hijo)

        // {

        //     $hijos[$key]->verificado = new stdClass;

        //     if ($hijo->checked == '1')

        //     {

        //         $hijos[$key]->verificado = 'si'; 

        //     }

        //     else

        //     {

        //         $hijos[$key]->verificado = 'no'; 

        //     }

        // }

        //  Si el documento tiene empleados y el campo cuit_found es distinto a NULL, entonces
        //  se comparan los cuits de empleados con los cuits del campo cuit_found.
        if($type == 'E' && $doc->cuit_found != NULL) {
            $hijos = self::modificarHijos($hijos, $doc->cuit_found);
        }

        // $verificado = [];

        // $verificado[] = array('verificado' => 'si');

        // $verificado[] = array('verificado' => 'no');

        return json_encode( array('columns' => $columns, 'data' => $hijos, 'type' => $type, 'es_doc_lista' => $doc->es_doc_lista));

        //return json_encode( array('columns' => $columns, 'data' => $hijos, 'type' => $type, 'es_doc_lista' => $doc->es_doc_lista, 'verificado' => $verificado));
    }

    ////    Actualiza los valores del formulario existente
    public static function updValores() {
		$doc_id = $_POST["doc_id"];
		$doc = SQLConnection::backendStoreProcedure('Imperium_Datos_Documento', array($doc_id), 'selectOne');
		$tipo_doc = $doc->tipo_doc;
		
		//	EJEMPLO TIPO DOC 1010 / DOC ID 4971245516
		//$valores_campos = SQLConnection::backendStoreProcedure('Imperium_campos_documentos', array('VALORES', "1010", "4971245516"), 'select');
		
        $campos_doc = SQLConnection::backendStoreProcedure('Imperium_campos_documentos', array('LISTARCAMPOS', $tipo_doc, $doc_id), 'select');

		//	Valores de todos los campos de un formulario según el documento.
		$valores_campos = SQLConnection::backendStoreProcedure('Imperium_campos_documentos', array('VALORES', $tipo_doc, $doc_id), 'select');

        //echo(var_dump($valores_campos));die();

		
        /*if($valores_campos == NULL) {*/
			$campos_upd = count($campos_doc);
			foreach ($campos_doc as $key => $value) {
				if ($value->tipo_dato == "N") {
					$contenido = $value->campo_tipo_doc;
					if($_POST["$contenido"] == "") {
						$actualizar = 0;
					}
					else {
						$actualizar = $_POST["$contenido"];
					}
					$update = SQLConnection::backendStoreProcedure('Imperium_campos_documentos', array('UPDVALORES', $tipo_doc, $doc_id, $contenido, $actualizar), 'selectOne');
				}
				else if ($value->tipo_dato == "T") {
					$contenido = $value->campo_tipo_doc;
					if($_POST["$contenido"] == "") {
						$actualizar = "";
					}
					else {
						$actualizar = $_POST["$contenido"];
					}
					$update = SQLConnection::backendStoreProcedure('Imperium_campos_documentos', array('UPDVALORES', $tipo_doc, $doc_id, $contenido, NULL, NULL, $actualizar), 'selectOne');
				}
			     else if ($value->tipo_dato == "D" || $value->tipo_dato == "F" || $value->tipo_dato == "H" ) {
					$contenido = $value->campo_tipo_doc;
                    if($_POST["$contenido"] == "") {
                        $actualizar = "";
                    }
                    else {
                        $actualizar = $_POST["$contenido"];
                    }
                    if ($actualizar == "") { $actualizar = null; }
					$update = SQLConnection::backendStoreProcedure('Imperium_campos_documentos', array('UPDVALORES', $tipo_doc, $doc_id, $contenido, NULL, $actualizar, NULL), 'selectOne');
				}
			}
			return 1;
		/*}
		else {
			$campos_upd = count($valores_campos);
			foreach ($campos_doc as $key => $value) {
				for ($i=1; $i < $campos_upd+1; $i++) {
					if ($value->tipo_dato == "N") {
						if($_POST["$i"] == "") {
							$actualizar = 0;
						}
						else {
							$actualizar = $_POST["$i"];
						}
						$update = SQLConnection::backendStoreProcedure('Imperium_campos_documentos', array('UPDVALORES', $tipo_doc, $doc_id, $i, $actualizar), 'selectOne');
					}
					else if ($value->tipo_dato == "T") {
						if($_POST["$i"] == "") {
							$actualizar = "";
						}
						else {
							$actualizar = $_POST["$i"];
						}
						$update = SQLConnection::backendStoreProcedure('Imperium_campos_documentos', array('UPDVALORES', $tipo_doc, $doc_id, $i, NULL, NULL, $actualizar), 'selectOne');
					}
					else if ($value->tipo_dato == "D") {
						if($_POST["$i"] == "") {
							$actualizar = "";
						}
						else {
							$actualizar = $_POST["$i"];
						}
						$update = SQLConnection::backendStoreProcedure('Imperium_campos_documentos', array('UPDVALORES', $tipo_doc, $doc_id, $i, NULL, $actualizar, NULL), 'selectOne');
					}
				}
			}
			return 1;
		}
        */

		//	Comentario para pruebas del documento
		//echo(var_dump($doc));
	}

    ////    Eliminar documento dañado
    public static function eliminarDoc() {
        $doc_id = $_POST["doc_id"];
        $doc = SQLConnection::backendStoreProcedure('Imperium_Datos_Documento', array($doc_id), 'selectOne');
        $doc_version = $doc->doc_version;

        $doc_url = Misc::getDocUrl($doc_id, $doc_version);

        if($doc_url != null) {

            //  BORRAR EL DOCUMENTO.

            return 1;
        }
        else {
            //  HAY UN ERROR CON LA RUTA O NO EXISTE AÚN.
            $error_control = SQLConnection::control_erores('DocsController', 'eliminarDoc', 'No existe o hay un error con la ruta en donde se encuentra el documento.');
            return 5;
        }
    }

    ////    Edita y actualiza el plan seleccionado
    public static function updPlan() {
        $campos_upd = array();
        $doc_id = NULL;
        $id_plan = NULL;
        $modified = NULL;
        $modified_by = NULL;
        $estado = NULL;
        $user_id = Session::get("usuario")->user_id;
        foreach ($_POST as $key => $value) {
            if($key != "_token" && $key != "doc_id" && $key != "id_plan" && $key != "created"
            && $key != "created_by" && $key != "modified" && $key != "modified_by" && $key != "estado") {
                //array_push($campos_upd, $key);
                array_push($campos_upd, $value);
            }
            if($key == "doc_id") {
                $doc_id = $value;
            }
            if($key == "id_plan") {
                $id_plan = $value;
            }
            if($key == "modified") {
                $modified = $value;
            }
            if($key == "modified_by") {
                $modified_by = $value;
            }
            if($key == "estado") {
                $estado = isset($value) ? $value : "S";
            }
        }

        //	Modifica la fecha para enviarse a la base de datos. (aaaa-mm-dd)
		$modif = $campos_upd[2];
		$modif_fecha = substr($modif, 6) . "-" . substr($modif, 3, 2) . "-" . substr($modif, 0, 2);
		$campos_upd[2] = $modif_fecha;

        //  Crea la fecha de vigencia de un plan
        $fecha_consolidacion = $campos_upd[2];
		$cant_meses = $campos_upd[1];
		for ($i=0; $i < $cant_meses+1; $i++) { 
			$sumo_mes = date("d-m-Y",strtotime($fecha_consolidacion."+ $i month"));	
		}
		$ultimo_mes = date("Y-m-t", strtotime($sumo_mes));
		$fecha_vigencia = $ultimo_mes;

        //  Estado a actualizar
        $estado_upd = self::estadosOriginales($estado);

        //  Deteccion del error de numero del plan
        $nro_plan = $campos_upd[0];

		$planes_pago_modif = SQLConnection::backendStoreProcedure('Imperium_planes_pago', array('LISTARPLANES', NULL, $doc_id, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
		NULL, NULL, NULL), 'select');

		$error = 0;

		for ($i=0; $i < count($planes_pago_modif); $i++) { 
			if($planes_pago_modif[$i]->id_plan != $id_plan) {
				if($planes_pago_modif[$i]->nro_plan == $nro_plan) {
					$error = 1;
				}
			}
		}

        //  Verifica si hay error o no
        if($error == 0) {
            //  Actualizacion del plan.
            $update_plan = SQLConnection::backendStoreProcedure('Imperium_planes_pago', array('UPDPLAN', $id_plan, 
            $doc_id, $campos_upd[0], $campos_upd[1], $campos_upd[2], $campos_upd[3], $campos_upd[4], 
            $campos_upd[5], $campos_upd[6], $campos_upd[7], $campos_upd[8], $user_id, $estado_upd, $fecha_vigencia), 'select');

            $planes_pago_modif = SQLConnection::backendStoreProcedure('Imperium_planes_pago', array('LISTARPLANES', NULL, $doc_id, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
            NULL, NULL, NULL), 'select');

            //  Agrega los iconos con su leyenda correspondiente para mostrarse en la fancy.
            $planes = self::iconosEstado($planes_pago_modif);

            $planes_pago = self::modificarConcepto($planes);

            return $planes_pago;
        }
        else {
            return 1;
        }
    }

    ////    Agrega iconos de estado del plan (auxiliar)
    private static function iconosEstado($lista) {
        for ($i=0; $i < count($lista); $i++) { 
            switch ($lista[$i]->estado) {
                case 'V':
                    $lista[$i]->estado = "<span class='circle' title='VIGENTE' style='background:#63b68c;'>&nbsp</span> VIGENTE";
                    break;
                case 'G':
                    $lista[$i]->estado = "<span class='circle' title='REEMPLAZADO' style='background:#929292;'>&nbsp</span> REEMPLAZADO";
                    break;
                case 'A':
                    $lista[$i]->estado = "<span class='circle' title='ATRASADO' style='background:#fcf80f;'>&nbsp</span> ATRASADO";
                    break;
                case 'B':
                    $lista[$i]->estado = "<span class='circle' title='CUMPLIDO' style='background:#005dff;'>&nbsp</span> CUMPLIDO";
                    break;
                case 'R':
                    $lista[$i]->estado = "<span class='circle' title='CAÍDO' style='background:#A72B2A;'>&nbsp</span> CAÍDO";
                    break;
				case NULL:
					$lista[$i]->estado = "<span class='circle' title='SIN ESTADO' style='background:#000000;'>&nbsp</span> SIN ESTADO";
                    break;
                case 'S':
                    $lista[$i]->estado = "<span class='circle' title='SIN ESTADO' style='background:#000000;'>&nbsp</span> SIN ESTADO";
                    break;
            }
        }
        return $lista;
    }

    ////    Cambia el estado modificado a su estado original que proviene del store (auxiliar)
    private static function estadosOriginales($estado) {
		switch ($estado) {
			case "<span class='circle' title='VIGENTE' style='background:#63b68c;'>&nbsp</span> VIGENTE":
				$estado = 'V';
				break;
			case "<span class='circle' title='REEMPLAZADO' style='background:#929292;'>&nbsp</span> REEMPLAZADO":
				$estado = 'G';
				break;
			case "<span class='circle' title='ATRASADO' style='background:#fcf80f;'>&nbsp</span> ATRASADO":
				$estado = 'A';
				break;
			case "<span class='circle' title='CUMPLIDO' style='background:#005dff;'>&nbsp</span> CUMPLIDO":
				$estado = 'B';
				break;
			case "<span class='circle' title='CAÍDO' style='background:#A72B2A;'>&nbsp</span> CAÍDO":
				$estado = 'R';
				break;
			case "<span class='circle' title='SIN ESTADO' style='background:#000000;'>&nbsp</span> SIN ESTADO":
				$estado = NULL;
				break;
        }
        return $estado;
    }

    private static function montoTotal($planes) {
        $dev = NULL;
        for ($i=0; $i < count($planes); $i++) { 
            $nuevo_estado = self::estadosOriginales($planes[$i]->estado);
			if($nuevo_estado != 'G') {
				$dev += $planes[$i]->monto_total;
			}
        }
        return $dev;
    }

    private static function montoAbonado($planes) {
        $dev = NULL;
        for ($i=0; $i < count($planes); $i++) { 
            $nuevo_estado = self::estadosOriginales($planes[$i]->estado);
			if($nuevo_estado != 'G') {
				$dev += $planes[$i]->importe_cancelado;
			}
        }
        return $dev;
    }

    private static function modificarConcepto($planes) {
        for ($i=0; $i < count($planes); $i++) { 
            switch ($planes[$i]->concepto_consolidado) {
                case '100':
                    $planes[$i]->concepto_consolidado = 'Aportes y Contribuciones de seguridad social';
                    break;
                    
                case '301':
                    $planes[$i]->concepto_consolidado = 'Aportes de seguridad social';
                    break;
                
                case '351':
                    $planes[$i]->concepto_consolidado = 'Contribuciones de seguridad social';
                    break;
            }
        }
        return $planes;
    }

    ////    Agrega iconos de estado del plan (auxiliar)
    private static function modificarPlanes($lista, $fecha_nueva="") {
		for ($i=0; $i < count($lista); $i++) { 
            switch ($lista[$i]->estado) {
                case 'V':
                    $lista[$i]->estado = "<span class='circle' title='VIGENTE' style='background:#63b68c;'>&nbsp</span> VIGENTE";
                    break;
                case 'G':
                    $lista[$i]->estado = "<span class='circle' title='REEMPLAZADO' style='background:#929292;'>&nbsp</span> REEMPLAZADO";
                    break;
                case 'A':
                    $lista[$i]->estado = "<span class='circle' title='ATRASADO' style='background:#fcf80f;'>&nbsp</span> ATRASADO";
                    break;
                case 'B':
                    $lista[$i]->estado = "<span class='circle' title='CUMPLIDO' style='background:#005dff;'>&nbsp</span> CUMPLIDO";
                    break;
                case 'R':
                    $lista[$i]->estado = "<span class='circle' title='CAÍDO' style='background:#A72B2A;'>&nbsp</span> CAÍDO";
                    break;
				case NULL:
					$lista[$i]->estado = "<span class='circle' title='SIN ESTADO' style='background:#000000;'>&nbsp</span> SIN ESTADO";
                    break;
				case 'S':
					$lista[$i]->estado = "<span class='circle' title='SIN ESTADO' style='background:#000000;'>&nbsp</span> SIN ESTADO";
					break;
            }
			if($lista[$i]->fecha_vigencia == NULL) {
				$lista[$i]->fecha_vigencia = $fecha_nueva;
			}
		}
        return $lista;
    }

    //  Modifica los recursos de empleados a partir de la comparacion con el campo cuit_found
    private static function modificarHijos($hijos, $cuits) {
        //  Array de cuits encontrados. Vienen del campo cuit_found del documento.
        $cuits = explode(',', $cuits);
        for ($i=0; $i < count($hijos); $i++) {
            //  Solo verifico los recursos que tienen el campo checked = 0. Es decir, los recursos que
            //  llegan de la base de datos sin el check activo.
            if($hijos[$i]->checked == "0") {
                //  Si coincide algún CUIT de los empleados con los cuit_found, entonces
                //  cambia el valor de checked = 1.
                if(in_array($hijos[$i]->identificacion, $cuits)) {
                    $hijos[$i]->checked = "1";
                }
            }
        }
        return $hijos;
    }

	////	Modifica la notificacion a enviar (auxiliar)
	private static function modificarNotificacion($lista) {
		$exp_reg = '/(<br>)+/';
		if(isset($lista->texto_notificacion)) {
			if(preg_match($exp_reg, $lista->texto_notificacion, $matches)) {
				$lista->texto_notificacion = preg_replace($exp_reg, '

', $lista->texto_notificacion);
			}
		}
		return $lista;
	}

    public static function documentosHijos() {
        $doc_id = Request::input('doc_id');
        $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento', array($doc_id), 'selectOne');

        $type = '';

        $columns = [];
        if($doc->validar_cuit > 0) {
            $type = 'C';

            $col = new stdClass;
            $col->type = 'select';
            $col->index = 'doc_id';
            $col->title = '';
            $col->align = 'center';
            $col->cellAlign = 'center';
            $col->width = 40;
            $columns[] = $col;

            $col = new stdClass;
            $col->type = 'string';
            $col->title = 'Documento';
            $col->index = 'nombre_tipo_doc';
            $col->align = 'left';
            $col->cellAlign = 'left';
            $col->flex = 1;
            $columns[] = $col;
        }
        else if ($doc->validar_lista_cuil > 0) {
            $type = 'E';

            $col = new stdClass;
            $col->type = 'select';
            $col->index = 'empleado';
            $col->title = '';
            $col->align = 'center';
            $col->cellAlign = 'center';
            $col->width = 40;
            $col->height = 30;
            $col->headerCheckBox = true;
            $columns[] = $col;

            $col = new stdClass;
            $col->type = 'string';
            $col->title = 'Empleado';
            $col->index = 'nombre_persona';
            $col->align = 'left';
            $col->cellAlign = 'left';
            $col->flex = 1;
            $columns[] = $col;


            $col = new stdClass;
            $col->type = 'string';
            $col->title = 'Identificación';
            $col->index = 'taxid';
            $col->align = 'center';
            $col->cellAlign = 'center';
            $col->width = 150;
            $columns[] = $col;
        }

        else if ($doc->validar_lista_dominios > 0) {
            $type = 'V';

            $col = new stdClass;
            $col->type = 'select';
            $col->title = '';
            $col->align = 'center';
            $col->cellAlign = 'center';
            $col->width = 40;
            $columns[] = $col;

            $col = new stdClass;
            $col->type = 'string';
            $col->title = 'Vehículo';
            $col->index = 'nombre_vehiculo';
            $col->align = 'left';
            $col->cellAlign = 'left';
            $col->flex = 1;
            $columns[] = $col;


            $col = new stdClass;
            $col->type = 'string';
            $col->title = 'Dominio';
            $col->index = 'dominio';
            $col->align = 'center';
            $col->cellAlign = 'center';
            $col->width = 100;
            $columns[] = $col;

        }

      

        $hijos = SQLConnection::backendStoreProcedure('Imperium_Datos_Documentos_Hijos', array($doc_id), 'select');
        return json_encode( array('columns' => $columns, 'data' => $hijos, 'type' => $type, 'es_doc_lista' => $doc->es_doc_lista) );
    }

    public static function actualizarFechaVigencia() {
        $rslt = 0;
        $msg = 'Fecha de vigencia actualizada.';

        $doc_id = Request::input('doc_id');
        $fecha_vigencia = Request::input('fecha_vigencia');
        $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento', array($doc_id), 'selectOne');

        if (!empty($doc)) {
            if ($doc->prox_vencer == 1 AND $doc->doc_version > 0) {
                // Cambio sólo la vigencia del registro de reemplazo
                $temp = SQLConnection::backendStoreProcedure('Imperium_Actualizar_Fecha_Vigencia', array($doc_id, $doc->doc_version, $fecha_vigencia, Session::get('usuario')->user_id), 'selectOne');
            }
            else {

                $temp = SQLConnection::backendStoreProcedure('Imperium_Actualizar_Fecha_Vigencia', array($doc_id, 0, $fecha_vigencia, Session::get('usuario')->user_id), 'selectOne');
            }

        }
        else {
            $rslt = 1;
            $msg = 'Documento inexistente.';    
        }

        return json_encode( array('result' => $rslt, 'message' => $msg) );
    }

    public static function verificarDocumentoConfirm() {
        $doc_id = Request::input('doc_id');
        $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento', array($doc_id), 'selectOne');

        if($doc->doc_version > 0 and $doc->prox_vencer == 1) {
            $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento_reemplazo', array($doc_id, $doc->doc_version), 'selectOne');
        }
        
        return view('/imperium/verificar_documento_confirm')->with(compact(['doc']));
    }

    public static function verificarDocumento() {
        $rslt = 0;
        $msg = 'El documento ha sido verificado';
        $doc_id = Request::input('doc_id');
        $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento', array($doc_id), 'selectOne');

        if (!empty($doc)) {

            
            if ($doc->prox_vencer == 1 AND $doc->doc_version > 0) {
                // verifica doc reemplazo, segundo parámetro del SP en 1
                $temp = SQLConnection::backendStoreProcedure('Imperium_Verificar_Documento', array($doc_id, 1, Session::get('usuario')->user_id), 'selectOne');
            }
            else {
                // verifico doc normal
                $temp = SQLConnection::backendStoreProcedure('Imperium_Verificar_Documento', array($doc_id, 0, Session::get('usuario')->user_id), 'selectOne');
            }
        }
        else {
            $rslt = 1;
            $msg = 'Documento inexistente.';    
        }


        return json_encode( array('result' => $rslt, 'message' => $msg) );
    }

    public static function rechazarDocumentoConfirm() {
        $doc_id = Request::input('doc_id');
        $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento', array($doc_id), 'selectOne');

        if($doc->doc_version > 0) {
            $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento_reemplazo', array($doc_id, $doc->doc_version), 'selectOne');
        }

        return view('/imperium/rechazar_documento_confirm')->with(compact(['doc', 'motivo_rechazo']));
    }
    
    public static function rechazarDocumento() {
        $rslt = 0;
        $msg = 'El documento ha sido rechazado';
        $doc_id = Request::input('doc_id');
        $motivo_rechazo = Request::input('motivo_rechazo');
        $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento', array($doc_id), 'selectOne');

        if (!empty($doc)) {
            if (strlen(trim($motivo_rechazo)) > 3) {
                $temp = SQLConnection::backendStoreProcedure('Imperium_Rechazar_Documento', array($doc_id, $motivo_rechazo, Session::get('usuario')->user_id), 'selectOne');

                /// Enviar el mail de rechazo : debo pasar el ID de contraparte que tiene asociado a LED
                if ($doc->contraparte > 0) {
                    /* 01/03/2021 Se cambia por el EmailController
                    $eml = ImperiumEmailController::enviarMailImperium('DOCUMENTO-RECHAZADO', 'DOCUMENTO-RECHAZADO-SUBJECT', $doc->contraparte, NULL, $doc_id);
                    */
                    $eml = EmailController::enviarMail('EMAIL-IMPE','DOCUMENTO-RECHAZADO', 'DOCUMENTO-RECHAZADO-SUBJECT', $doc->contraparte, NULL,NULL, NULL, $doc_id);
                }

            }
            else {
                $rslt = 2;
                $msg = 'Por favor ingrese un texto consistente para el motivo de rechazo del documento.';        
            }
        }
        else {
            $rslt = 1;
            $msg = 'Documento inexistente.';    
        }
    
    
        return json_encode( array('result' => $rslt, 'message' => $msg) );
    }


    public static function verificarDocumentoParcialConfirm() {
        $doc_id = Request::input('doc_id');
        $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento', array($doc_id), 'selectOne');
        $selected = Request::input('selected');
        $hijos = SQLConnection::backendStoreProcedure('Imperium_Datos_Documentos_Hijos', array($doc_id), 'select');

        $seleccionados = sizeof(explode(',', $selected));
        $totales = sizeof($hijos);

        if($doc->doc_version > 0) {
            $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento_reemplazo', array($doc_id, $doc->doc_version), 'selectOne');
        }

        return view('/imperium/verificar_documento_parcial_confirm')->with(compact(['doc', 'selected', 'seleccionados', 'totales']));       
    }

    public static function verificarDocumentoParcial() {
        $rslt = 0;
        $msg = 'El documento ha sido verificado en forma parcial';
        $doc_id = Request::input('doc_id');
        $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento', array($doc_id), 'selectOne');
        $selected = Request::input('selected');
        $hijos = SQLConnection::backendStoreProcedure('Imperium_Datos_Documentos_Hijos', array($doc_id), 'select');        

        if (!empty($doc)) {
            if (!empty($selected)) {
                if ($doc->periodicidad == 'E' && empty($doc->fecha_vigencia)) {
                    $rslt = 3;
                    $msg = 'Antes de verificar parcial el documento debe indicar la fecha de vigencia del mismo.';    
                } 
                if ($rslt == 0) {
                    $faltantes = SQLConnection::backendStoreProcedure('Imperium_Verificar_Documento_Parcial', array($doc_id, $selected, Session::get('usuario')->user_id), 'selectOne');

                    /// Enviar el mail de aprobacion parcial : debo pasar el ID de contraparte que tiene asociado a LED
                    if ($doc->contraparte > 0) {
                        /* 01/03/2021 Se cambia por el EmailController
                        $eml = ImperiumEmailController::enviarMailImperium('DOCUMENTO-APROBADO-PARCIAL', 'DOCUMENTO-APROBADO-PARCIAL-SUBJECT', $doc->contraparte, NULL, $doc_id, $faltantes->lista_faltantes);
                        */
                        $eml = EmailController::enviarMail('EMAIL-IMPE','DOCUMENTO-APROBADO-PARCIAL', 'DOCUMENTO-APROBADO-PARCIAL-SUBJECT', $doc->contraparte, NULL,NULL, NULL, $doc_id, NULL, $faltantes->lista_faltantes);

                    }

                }
            }
            else {
                $rslt = 2;
                $msg = 'Debe indicarse al menos un recurso/documento para realizar una aprobación parcial.';        
            }
        }
        else {
            $rslt = 1;
            $msg = 'Documento inexistente.';    
        }

        return json_encode( array('result' => $rslt, 'message' => $msg) );
    }


    public static function undoVerificarDocumentoConfirm() {
        $doc_id = Request::input('doc_id');
        $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento', array($doc_id), 'selectOne');
        return view('/imperium/undo_verificar_documento_confirm')->with(compact(['doc']));       
    }

    public static function undoVerificarDocumento() {
        $rslt = 0;
        $msg = 'El documento ha sido colocado en estado ingresado pendiente de verificar.';
        $doc_id = Request::input('doc_id');
        $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento', array($doc_id), 'selectOne');

        if (!empty($doc)) {
            $temp = SQLConnection::backendStoreProcedure('Imperium_Undo_Verificar_Documento', array($doc_id, Session::get('usuario')->user_id), 'selectOne');
        }
        else {
            $rslt = 1;
            $msg = 'Documento inexistente.';    
        }

        return json_encode( array('result' => $rslt, 'message' => $msg) );
    }



    public static function undoRechazarDocumentoConfirm() {
        $doc_id = Request::input('doc_id');
        $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento', array($doc_id), 'selectOne');
        return view('/imperium/undo_rechazar_documento_confirm')->with(compact(['doc']));       
    }

    public static function undoRechazarDocumento() {
        $rslt = 0;
        $msg = 'El documento ha sido colocado en estado ingresado pendiente de verificar.';
        $doc_id = Request::input('doc_id');
        $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento', array($doc_id), 'selectOne');

        if (!empty($doc)) {
            $temp = SQLConnection::backendStoreProcedure('Imperium_Undo_Rechazar_Documento', array($doc_id, Session::get('usuario')->user_id), 'selectOne');
        }
        else {
            $rslt = 1;
            $msg = 'Documento inexistente.';    
        }

        return json_encode( array('result' => $rslt, 'message' => $msg) );
    }

    /// test
    public static function notirechazo() {
        $doc_id = 4960350303;
        $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento', array($doc_id), 'selectOne');
        /* 01/03/2021 Se cambia por el EmailController
        $eml = ImperiumEmailController::enviarMailImperium('DOCUMENTO-RECHAZADO', 'DOCUMENTO-RECHAZADO-SUBJECT', $doc->contraparte, 'luis.prenafeta@gmail.com', $doc_id);
        */
        $eml = EmailController::enviarMail('EMAIL-IMPE','DOCUMENTO-RECHAZADO', 'DOCUMENTO-RECHAZADO-SUBJECT', $doc->contraparte, NULL,'soporte@fidelitas.com.ar', NULL, $doc_id, NULL, NULL);
        
    }

}