<?php

namespace App\Http\Controllers;

use App\Custom\SQLConnection;
use App\Custom\Misc;

use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Request;

use stdClass;
use Illuminate\Support\Carbon;

#use LynX39\LaraPdfMerger\PdfManage;

class DocsController extends Controller {

    public static function verificacionDocumentos() {
        $status = !empty(Request::input('status')) ? Request::input('status') : 'PENDIENTES';
        /* $fecha_desde;
        $busqueda_cliente; */
        $clientesImperium = SQLConnection::backendStoreProcedure('LED_Clientes', array('SELECT', NULL, NULL, NULL, NULL, 0, env('IMPE_PRODUCTO')), 'select');
        if (isset($_POST["desde_fecha"]) and !empty(Request::input("desde_fecha")) and Request::input("desde_fecha") != null) {
            $fecha_desde = Request::input("desde_fecha");
            $busqueda_cliente = Request::input('cliente_busqueda');
            return view('/documentos/verificacion_documentos')->with(compact(['status', 'fecha_desde', 'clientesImperium', 'busqueda_cliente']));
        } else {
            return view('/documentos/verificacion_documentos')->with(compact(['status', 'clientesImperium']));
        }
    }



    public static function verificacionDocumentosData() {
        $status = !empty(Request::input('status')) ? Request::input('status') : 'PENDIENTES';
        /* $fecha_desde;
        $cliente_busqueda; */
        if (isset($_POST["desde_fecha"]) and !empty(Request::input("desde_fecha")) and Request::input("desde_fecha") != null) {
            $fecha_desde = str_replace("-", "", Request::input("desde_fecha"));
            //$fecha_hasta = str_replace("-", "", Request::input('hasta_fecha'));
            $cliente_busqueda = Request::input("cliente_busqueda");
        } else {
            $fecha_desde = null;
            $fecha_hasta = null;
            $cliente_busqueda = null;

        }
        //$docs = SQLConnection::backendStoreProcedure('backend_documentos', array($status, null, null, null, null, null, null, null), 'select');
        //$docs = SQLConnection::backendStoreProcedure('Imperium_vista_admin_2', array($status, null, null, null, null, null, null, null), 'select');
        $docs = SQLConnection::backendStoreProcedure('backend_verificacion_led_docs', array($status, null, null, null, $fecha_desde, $fecha_desde, null, null, $cliente_busqueda), 'select');

        // dd($docs);
        $periodos = [];
        $secciones = [];
        $acceso = [];
        $parcial = [];
        $complejidad = [];
        $per = [];
        $sec = [];
        $acc = [];
        $ser = [];
        $fam = [];
        $cli = [];
        $par = [];
        $comple = [];
        $clientes = [];
        $servicios = [];
        $familias = [];
        foreach ($docs as $key => $doc) {
            $docs[$key]->servicio = new stdClass;
            $docs[$key]->servicio = 'IMPERIUM';
            $docs[$key]->contratista = $doc->nombre_contratista_1/* . '<br>'. $doc->numero_1*/ ;

            if ($doc->nombre_contratista_1 == $doc->nombre_contratista && $doc->numero_1 == $doc->numero) {
                $docs[$key]->subcontratista = null;
            } else {
                $docs[$key]->subcontratista = $doc->nombre_contratista /*. '<br>'. $doc->numero*/ ;
            }

            $docs[$key]->empleado = $doc->nombre_empleado /*. '<br>' . $doc->numero_e*/ ;
            $docs[$key]->vehiculo = $doc->nombre_vehiculo /*. '<br>' . $doc->dominio*/ ;

            if (!in_array($docs[$key]->servicio, $ser)) {
                $ser[] = $docs[$key]->servicio;
            }
            if (!in_array($docs[$key]->nombre_familia, $fam)) {
                $fam[] = $docs[$key]->nombre_familia;
            }
            if (!in_array($doc->nombre_cliente, $cli)) {
                $cli[] = $doc->nombre_cliente;
            }
            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;
            }
            if (!in_array($doc->codigo_complejidad, $comple)) {
                $comple[] = $doc->codigo_complejidad;
            }
        }

        arsort($per, 0);
        foreach ($per as $p) {
            $periodos[] = array('periodo' => $p, 'periodo_my' => substr($p, 4, 2) . '-' . substr($p, 0, 4));
        }

        /* DROPDOWN DE COMPLEJIDAD PARA LA FANCY */

        asort($comple, 0);
        foreach ($comple as $com) {
            $complejidad[] = array('codigo_complejidad' => $com);
        }
        asort($sec, 0);
        foreach ($sec as $s) {
            $secciones[] = array('nombre_seccion' => $s);
        }

        foreach ($acc as $a) {
            $acceso[] = array('acceso' => ($a == 1) ? 'SI' : 'NO');
        }

        $parciales = [];
        $parciales = Misc::etiquetas();
        foreach ($parciales as $s) {
            $parcial[] = array('parcial' => $s);
        }
        arsort($ser, 0);
        foreach ($ser as $s) {
            $servicios[] = array('servicio' => $s);
        }
        asort($fam, 0);
        foreach ($fam as $f) {
            if ($f !== NULL) {
                $familias[] = array('nombre_familia' => $f);
            }
        }
        asort($cli, 0);
        foreach ($cli as $c) {
            $clientes[] = array('nombre_cliente' => $c);
        }

        return json_encode(array('docs' => $docs, 'periodos' => $periodos, 'secciones' => $secciones, 'complejidad' => $complejidad, 'acceso' => $acceso, 'parcial' => $parcial, 'servicios' => $servicios, 'clientes' => $clientes, 'familias' => $familias));
    }



    public static function verificacionDocumentosData0() {
        $status = !empty(Request::input('status')) ? Request::input('status') : 'PENDIENTES';
        //$docs = SQLConnection::backendStoreProcedure('backend_documentos', array($status, null, null, null, null, null, null, null), 'select');
        $docs = SQLConnection::backendStoreProcedure('Imperium_vista_admin_2', array($status, null, null, null, null, null, null, null), 'select');
        $periodos = [];
        $secciones = [];
        $acceso = [];
        $parcial = [];
        $per = [];
        $sec = [];
        $acc = [];
        $ser = [];
        $cli = [];
        $par = [];

        foreach ($docs as $key => $doc) {

            $docs[$key]->servicio = new stdClass;
            $docs[$key]->servicio = 'IMPERIUM';
            $docs[$key]->contratista = $doc->nombre_contratista_1 . '<br>' . $doc->numero_1;

            if ($doc->nombre_contratista_1 == $doc->nombre_contratista && $doc->numero_1 == $doc->numero) {
                $docs[$key]->subcontratista = null;
            } else {

                $docs[$key]->subcontratista = $doc->nombre_contratista . '<br>' . $doc->numero;
            }

            $docs[$key]->empleado = $doc->nombre_empleado . '<br>' . $doc->numero_e;
            $docs[$key]->vehiculo = $doc->nombre_vehiculo . '<br>' . $doc->dominio;

            if (!in_array($docs[$key]->servicio, $ser)) {

                $ser[] = $docs[$key]->servicio;
            }

            if (!in_array($doc->nombre_cliente, $cli)) {

                $cli[] = $doc->nombre_cliente;
            }

            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;
            }

            if (!in_array($doc->aprobacion_parcial, $par)) {

                $par[] = $doc->aprobacion_parcial;
            }

        }
        arsort($per, 0);
        foreach ($per as $p) {
            $periodos[] = array('periodo' => $p, 'periodo_my' => substr($p, 4, 2) . '-' . substr($p, 0, 4));
        }

        asort($sec, 0);
        foreach ($sec as $s) {
            $secciones[] = array('nombre_seccion' => $s);
        }

        foreach ($acc as $a) {
            $acceso[] = array('acceso' => ($a == 1) ? 'SI' : 'NO');
        }

        foreach ($par as $a) {
            $parcial[] = array('parcial' => ($a == 1) ? 'SI' : 'NO');
        }

        arsort($ser, 0);

        foreach ($ser as $s) {
            $servicios[] = array('servicio' => $s);
        }

        asort($cli, 0);

        foreach ($cli as $c) {
            $clientes[] = array('nombre_cliente' => $c);
        }

        return json_encode(array('docs' => $docs, 'periodos' => $periodos, 'secciones' => $secciones, 'acceso' => $acceso, 'parcial' => $parcial, 'servicios' => $servicios, 'clientes' => $clientes));
    }



    public static function pdfDocumento() {
        $doc_id = Request::input('doc_id');
        $doc_version = !empty(Request::input('doc_version')) ? Request::input('doc_version') : 0;

        $doc_url = Misc::getDocUrl($doc_id, $doc_version);
        $pdf_url = !empty($doc_url) ? $doc_url . '?rnd=' . time() : NULL;

        $vista = \View::make('/documentos/documento_pdf')->with(compact(['pdf_url']))->render();
        return json_encode(array('view' => $vista, 'url' => $doc_url, 'doc_id' => $doc_id));
    }

    //    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;
    }

    //    Monto total de los planes
    private static function montoTotal($planes) {
        $dev = NULL;
        //  Recorro los planes
        for ($i = 0; $i < count($planes); $i++) {
            //  Estados de planes 
            $nuevo_estado = self::estadosOriginales($planes[$i]->estado);
            //  Si el estado es distinto de "REEMPLAZADO", entonces sumo los montos totales de los planes
            if ($nuevo_estado != 'G') {
                $dev += $planes[$i]->monto_total;
            }
        }
        return $dev;
    }

    //    Monto abonado de los planes
    private static function montoAbonado($planes) {
        $dev = NULL;
        //  Recorro los planes
        for ($i = 0; $i < count($planes); $i++) {
            //  Estados de planes
            $nuevo_estado = self::estadosOriginales($planes[$i]->estado);
            //  Si el estado es distinto de "REEMPLAZADO", entonces sumo los montos abonados de los planes
            if ($nuevo_estado != 'G') {
                $dev += $planes[$i]->importe_cancelado;
            }
        }
        return $dev;
    }

    //    Modificacion de valores de conceptos
    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;
    }

    //    Vista de detalles del documento
    public static function replicarNomina() {
        $contratista = Request::input('contratista');
        $periodo_de = Request::input('periodo_de');
        $periodo_a = Request::input('periodo_a');
        $doc = null;
        $doc = SQLConnection::backendStoreProcedure('Imperium_replicar_nomina', array($contratista, $periodo_de, $periodo_a), 'selectOne');
        return $doc;
    }


    public static function verificacionDocumentosDoc() {
        $doc_id = Request::input('doc_id');

        $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento', array($doc_id), 'selectOne');

        // Directorio del documento
        $path = env('PATH_DOCUMENTOS') . '/' . $doc->doc_path;

        // 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');
        //echo(var_dump(array($campos_doc)));die();

        // 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($valores_campos)));die();

        $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::iconosEstado($planes_pago_modif);
            $planes_pago = self::modificarConcepto($planes);
            $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)) {

            //  Permiso para el boton Borrar documento (por ahora no hace nada). // Kevin 16/09/2021
            if (Session::get("usuario")->username == "sa" || Session::get("usuario")->username == "kevin.cisneros") {
                $permiso = true;
            } else {
                $permiso = false;
            }
            // ------------------------------------------------------------------------------------   //

            $files = [];

            for ($x = 0; $x <= $doc->doc_version; $x += 1) {
                $files[$x] = Misc::getDocUrl($doc_id, $x);
            }

            $doc_url = $files[$doc->doc_version];

            if ($doc_url != '') {
                $cmdline_python = env('PDFREAD') . ' ' . $doc_id . ' ' . "/var/www/html/" . $cod_ruta . $doc_url;
            } else {
                $cmdline_python = env('PDFREAD') . ' ' . $doc_id . ' ' . "/var/www/html/" . $cod_ruta;
            }

            $hijos = NULL;

            if ($doc->es_doc_lista > 0) {
                $hijos = SQLConnection::backendStoreProcedure('Imperium_Datos_Documentos_Hijos', array($doc_id), 'select');
            }

            $ultima_nomina = NULL;
            if ($doc->validar_lista_cuil > 0 && empty($hijos)) {
                $ultima_nomina = SQLConnection::backendStoreProcedure('Imperium_max_periodo', array($doc->contratista, 'E'), 'selectOne');
            }

            $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('/documentos/documento_verificar')->with(compact(['doc', 'doc_url', 'hijos', 'files', 'aux']));
            $vista = \View::make('/documentos/documento_verificar')->with(compact(['doc', 'doc_url', 'hijos', 'files', 'aux', 'campos_doc', 'valores_campos', 'permiso', 'planes_pago', 'cod_ruta', 'monto_planes', 'monto_cancelado', 'cmdline_python', 'ultima_nomina']));
            return $vista;
        } else {

            $usuarios_permitidos = array();

            if (Session::get("usuario")->username == "sa" || Session::get("usuario")->username == "kevin.cisneros") {
                array_push($usuarios_permitidos, Session::get("usuario")->username);
            }

            for ($i = 0; $i < count($usuarios_permitidos); $i++) {
                if ($usuarios_permitidos[$i] == Session::get("usuario")->username) {
                    $permiso = true;
                } else {
                    $permiso = false;
                }
            }

            // Directorio del documento
            $path = env('PATH_DOCUMENTOS') . '/' . $doc->doc_path;

            // 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');
            $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('/documentos/documento_verificar_reemplazo')->with(compact(['doc', 'doc_reemp', 'doc_url', 'doc_url_reemp', 'hijos']));            
            $vista = \View::make('/documentos/documento_verificar_reemplazo')->with(compact(['doc', 'doc_reemp', 'doc_url', 'doc_url_reemp', 'hijos', 'campos_doc', 'valores_campos', 'permiso', 'planes_pago', 'cod_ruta']));
            return $vista;
        }

    }

    //    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"];
                              }
                              var_dump ($i . ' - '. $actualizar);
                              //$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"];
                              }
                              var_dump ($i . ' - '. $actualizar);

                              //$update = SQLConnection::backendStoreProcedure('Imperium_campos_documentos', array('UPDVALORES', $tipo_doc, $doc_id, $i, NULL, NULL, $actualizar), 'selectOne');
                          }
                          else if ($value->tipo_dato == "D" || $value->tipo_dato == "F") {
                              if($_POST["$i"] == "") {
                                  $actualizar = "";
                              }
                              else {
                                  $actualizar = $_POST["$i"];
                              }
                              var_dump ($i . ' - '. $actualizar);

                              //$update = SQLConnection::backendStoreProcedure('Imperium_campos_documentos', array('UPDVALORES', $tipo_doc, $doc_id, $i, NULL, $actualizar, NULL), 'selectOne');
                          }
                      }
                  }
                  return 2;
                  die(); 
              }*/

        //	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 {
            //  CONTROL DE ERROR
            $error_control = SQLConnection::control_erores('DocsController', 'updPlan', 'El número de plan ingresado por el usuario debe ser distinto a un número de plan existente.');
            return 1;
        }
    }

    //    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;
    }

    //    Proceso de Reconocimiento de CUITS 
    public static function procesarPDF() {
        $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, 'verificado' => $verificado));
    }

    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 = '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;
        }
        //Kevin
        $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';
            }

        }
        //echo(var_dump($hijos));die();
        $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, 'verificado' => $verificado));
    }

    public static function actualizarFechaVigenciaPrueba() {
        $msg = 'Prueba de Fecha de vigencia.';
        return json_encode(array('result' => 0, 'message' => $msg));
    }

    public static function actualizarFechaVigencia() {

        $rslt = 0;

        $msg = 'Fecha de vigencia actualizada.';



        $doc_id = Request::input('doc_id');

        $fecha_vigencia = Request::input('fecha_vigencia');
        $timestamp = Carbon::createFromFormat('d/m/Y', $fecha_vigencia)->format('Y-m-d');

        $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento', array($doc_id), 'selectOne');
        //$fecha_vigencia_new = substr($fecha_vigencia, 6, 8) . '-' . substr($fecha_vigencia, 3, 2) . '-' . substr($fecha_vigencia, 0, 2);

        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,$timestamp, Session::get('usuario')->user_id), 'selectOne');

            }
            else {
                $temp = SQLConnection::backendStoreProcedure('Imperium_Actualizar_Fecha_Vigencia', array($doc_id, 0,$timestamp, Session::get('usuario')->user_id), 'selectOne');
            }
        }
        else {
            $rslt = 1;
            $msg = 'Documento inexistente.';    
        }
        //
        return json_encode( array('result' => $rslt, 'message' => $msg) );   
    }

    
    public static function actualizarFechaVigencia03122024() {
        $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');
        //$fecha_vigencia_new = substr($fecha_vigencia, 6, 8) . '-' . substr($fecha_vigencia, 3, 2) . '-' . substr($fecha_vigencia, 0, 2);

        if (!empty($doc)) {
            if ($doc->prox_vencer == 1 && $doc->doc_version > 0) {
                // Cambio sólo la vigencia del registro de reemplaz
                $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 && $doc->prox_vencer == 1) {

            $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento_reemplazo', array($doc_id, $doc->doc_version), 'selectOne');

        }

        return view('/documentos/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 && $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');
            }
            // NUEVO -> WILLY
            self::liberaAsignacion($doc_id);
        } 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('/documentos/rechazar_documento_confirm')->with(compact(['doc', 'motivo_rechazo']));
        return view('/documentos/rechazar_documento_confirm')->with(compact(['doc']));
    }

    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');
        //echo(var_dump(array($msg, $doc_id, $motivo_rechazo, $doc)));

        if (!empty($doc)) {

            if (strlen(trim($motivo_rechazo)) > 3) {
                //return array($msg, $doc_id, $motivo_rechazo);
                
                $temp = SQLConnection::backendStoreProcedure('Imperium_Rechazar_Documento', array($doc_id, $motivo_rechazo, Session::get('usuario')->user_id), 'selectOne');
                // NUEVO -> WILLY
                self::liberaAsignacion($doc_id);
                
                /// Enviar el mail de rechazo : debo pasar el ID de contraparte que tiene asociado a LED

                /* if ($doc->contraparte > 0) {
                    // 01/03/2021, se cambio al 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('/documentos/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 cambio al 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);
                    } */
                }

            } 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('/documentos/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('/documentos/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 cambio al 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);
    }

    public static function revertir() {
        $doc_id = Request::input('doc_id');
        $usuario = Session::get("usuario")->user_id;
        SQLConnection::backendStoreProcedure('Imperium_Revertir_Documento', array($doc_id, $usuario));
        echo json_encode(array("error" => 0, "mensaje" => "revertido"));
    }

    // NUEVO -> WILLY
    public static function liberaAsignacion($doc_id = null) {
        $doc_id = $doc_id ?? Request::input('doc_id');
        $user_id = Session::get("usuario")->user_id;
        
        // como se que es imperium o led?
        $p_plataforma = env('IMPE_PRODUCTO');
        
        $parametros = [
            'p_accion' => 'LIBERA',
            'p_plataforma' => $p_plataforma,
            'p_doc_id' => $doc_id,
            'p_user_id' => $user_id,
            'p_tiempo' => env('TIEMPO_A_CONTEMPLAR_IMPERIUM'),
            'p_error' => 0,
            'p_mensaje' => ''
        ];
        
        $resultado = SQLConnection::backendStoreProcedure('LN_docs_chequeo', array_values($parametros), 'selectOne');
        return json_encode(array('result' => $resultado));
    }
}