<?php

/*****************************************************************************************************************************************
 * DEV: CONTRALORIA DE ESTADOS
 * PROYECTO: SISTEMA INTEGRAL ADMINISTRATIVO DE CONTRALORIAS DE ESTADOS
 * MODULO: index
 * PROCESO: index del sistema
 * PROGRAMADORES:
 * | # |          NOMBRES Y APELLIDOS              |               CORREO               |          TELEFONO              |
 * | 1 |          Irvin Lezama                   |i.lezama@contraloriamonagas.gob.ve   |        0424-9371200           |
 * |   |                                           |                                    |                                |
 * |___|___________________________________________|____________________________________|________________________________|
 *
 * VERSION
 *
 * |          PROGRAMADOR                  |          FECHA          |       VERSION      |
 * |               #1                      |        03-08-2015       |         1.0        |
 * |                                       |                         |                    |
 * |_______________________________________|_________________________|____________________|
 *
 *****************************************************************************************************************************************/
class solicitudModelo extends Modelo
{
    private $atIdUsuario;
    private $atIdEmpleado;

    public $myRol;
    public $myInfo;

    public function __construct()
    {
        parent::__construct();
        $this->atIdUsuario = Session::metObtener('idUsuario');
        $this->atIdEmpleado = Session::metObtener('idEmpleado');
        $this->myRol = $this->metGetRolFuncionario();
        $this->myInfo = $this->metGetCargoUserLogeado();
        $this->myInfo['logeadoIsJefe']= 0;
        $this->myInfo['logeadoIsAssigned']= 0;
        $this->myInfo['logeadoIsSoporte']= 0;
        $this->myInfo['logeadoIsEmisorTicket']= 0;
        if(strstr($this->myInfo['puestoPersonaLogeada'], 'JEFE')  || strstr($this->myInfo['puestoPersonaLogeada'], 'DIRECTOR') ) {
            $this->myInfo['logeadoIsJefe'] = 1;
        }
        $this->myInfo['isMaximaAutoridad'] = strstr($this->myInfo['puestoPersonaLogeada'], 'CONTRALOR') || strstr($this->myInfo['puestoPersonaLogeada'], 'DIRECTOR GENERAL') ? 1 : 0;

    }


    public function metGetCargoUserLogeado($num_Empleado = null){

        $empleado = $this->atIdEmpleado;
        if(isset($num_Empleado)){
            $empleado=$num_Empleado;
        }

        $registro = $this->_db->query("
                    SELECT rhb001.* 
                         , puesto.ind_descripcion_cargo as puestoPersonaLogeada
                         , empOrg.fk_a004_num_dependencia as dependenciaDeEmpleadoLogeado
                         , CONCAT(persona.ind_nombre1,' ',persona.ind_apellido1) as nombre_funcionario
                         ,persona.ind_cedula_documento as numero_cedula
                         ,persona.ind_foto as urlFoto
                         ,persona.pk_num_persona as idPersona
                    FROM rh_b001_empleado as rhb001
                    
                    left JOIN rh_c005_empleado_laboral as empleadoLaboral ON empleadoLaboral.fk_rhb001_num_empleado = rhb001.pk_num_empleado
                    left join a003_persona as persona on rhb001.fk_a003_num_persona = persona.pk_num_persona
                    left JOIN rh_c063_puestos as puesto ON puesto.pk_num_puestos = empleadoLaboral.fk_rhc063_num_puestos_cargo
                    left join rh_c076_empleado_organizacion as empOrg on rhb001.pk_num_empleado = empOrg.fk_rhb001_num_empleado
                    
                    WHERE rhb001.pk_num_empleado = " . $empleado . " ");
        $registro->setFetchMode(PDO::FETCH_ASSOC);

        $resultado  = $registro->fetchAll();
        $resultado = $resultado[0];

        return $resultado;
    }

    public function metListarTicketSoporte() {
        $arraySubCategorias = explode(",", $this->myRol['atender_conceptos']);

        $arraySubCategorias = array_map(function ($valor) {
            return str_replace("Todos", "", trim($valor));
        }, $arraySubCategorias);



        $whereClause="";
        $whereJefeDepartamento="";

        foreach ($arraySubCategorias as $idCategoria){
            if (strstr($idCategoria, 'Todos') === false) {
                $whereClause = $whereClause .  " Solic.fk_num_concepto_Ticket = " . $idCategoria ." or";
            }
        } $whereClause = substr($whereClause, 0, strlen($whereClause) - 2);


        if($this->myInfo['logeadoIsJefe'] == 1 ){
            $whereJefeDepartamento = " or ( concepto.dependencia_encargada = ".$this->myInfo['dependenciaDeEmpleadoLogeado']."  )";
        }


        $solicitud = $this->_db->query(
            "
          SELECT
			Solic.*
			, CONCAT(personaEmisor.ind_nombre1,' ',personaEmisor.ind_apellido1) as nombre_Funcionario_Emisor
		    , CONCAT(personaAprueba.ind_nombre1,' ',personaAprueba.ind_apellido1) as nombre_Funcionario_Aprueba
            , concepto.*
            , empOrg.fk_a004_num_dependencia as dependenciaDeEmpleadoLogeado
                                    
          FROM
           ca_b001_solicitud as Solic
          
          left join rh_b001_empleado as rhb001UsuEmisor on Solic.fk_a018_num_seg_funcionario_Emisor = rhb001UsuEmisor.pk_num_empleado
          left join a003_persona as personaEmisor on personaEmisor.pk_num_persona = rhb001UsuEmisor.fk_a003_num_persona
          left join rh_b001_empleado as rhb001UsuAprueba on Solic.fk_a018_num_seg_funcionario_Aprobado = rhb001UsuAprueba.pk_num_empleado
          left join a003_persona as personaAprueba on personaAprueba.pk_num_persona = rhb001UsuAprueba.fk_a003_num_persona
          left join ca_a001_concepto_ticket as concepto on Solic.fk_num_concepto_Ticket = concepto.pk_num_concepto
          left join rh_c076_empleado_organizacion as empOrg on rhb001UsuEmisor.pk_num_empleado = empOrg.fk_rhb001_num_empleado
          left join rh_c076_empleado_organizacion as empOrgLogeado on empOrgLogeado.fk_rhb001_num_empleado  = '" . $this->atIdEmpleado . "'
          left join ca_c001_asignacion_funcionario_solicitud as asignado on Solic.pk_num_solicitud = asignado.fk_numSolicitud
          
           
          
          WHERE ( " . $whereClause . " " . $whereJefeDepartamento . " )
                and ( Solic.estado != 'Esperando Aprobacion' and Solic.estado != 'Pausado' and Solic.estado != 'Rechazado' )
	      group BY 
	            Solic.pk_num_solicitud 
	      desc
			"
        );



        $solicitud->setFetchMode(PDO::FETCH_ASSOC);
        return $solicitud->fetchAll();
    }
    public function metListarSolicitud()
    {
        $solicitud = $this->_db->query(
            "
          SELECT
			Solic.*
			, CONCAT(personaEmisor.ind_nombre1,' ',personaEmisor.ind_apellido1) as nombre_Funcionario_Emisor
		    , CONCAT(personaAprueba.ind_nombre1,' ',personaAprueba.ind_apellido1) as nombre_Funcionario_Aprueba
            , EmpOrgEmisor.fk_a004_num_dependencia as dependenciaEmisor
            , concepto.*
            , empOrg.fk_a004_num_dependencia as dependenciaDeEmpleadoLogeado
           , puesto.ind_descripcion_cargo as puestoPersonaLogeada
            , empleadoLaboral.fk_rhb001_num_empleado as pkNum_PersonaLogeada
                                    
          FROM
           ca_b001_solicitud as Solic

          left join rh_b001_empleado as rhb001UsuEmisor on Solic.fk_a018_num_seg_funcionario_Emisor = rhb001UsuEmisor.pk_num_empleado
          left join rh_c076_empleado_organizacion as EmpOrgEmisor on  rhb001UsuEmisor.pk_num_empleado =  EmpOrgEmisor.fk_rhb001_num_empleado   
          left join a003_persona as personaEmisor on personaEmisor.pk_num_persona = rhb001UsuEmisor.fk_a003_num_persona
         	
          
          left join rh_b001_empleado as rhb001UsuAprueba on Solic.fk_a018_num_seg_funcionario_Aprobado = rhb001UsuAprueba.pk_num_empleado
          left join a003_persona as personaAprueba on personaAprueba.pk_num_persona = rhb001UsuAprueba.fk_a003_num_persona
          
          left join ca_a001_concepto_ticket as concepto on Solic.fk_num_concepto_Ticket = concepto.pk_num_concepto
          left join rh_c076_empleado_organizacion as empOrg on rhb001UsuEmisor.pk_num_empleado = empOrg.fk_rhb001_num_empleado
          
          left JOIN rh_c005_empleado_laboral as empleadoLaboral ON empleadoLaboral.fk_rhb001_num_empleado = '" . $this->atIdEmpleado . "'
          left JOIN rh_c063_puestos as puesto ON puesto.pk_num_puestos = empleadoLaboral.fk_rhc063_num_puestos_cargo
          left join rh_c076_empleado_organizacion as empOrgLogeado on empOrgLogeado.fk_rhb001_num_empleado  = '" . $this->atIdEmpleado . "'
          
          left join ca_c001_asignacion_funcionario_solicitud as asignacion on  Solic.pk_num_solicitud = asignacion.fk_numSolicitud
           
          
          WHERE     
                    Solic.fk_a018_num_seg_funcionario_Emisor='" . $this->atIdEmpleado . "'
			    or 
			        Solic.fk_a018_num_seg_funcionario_Aprobado ='" . $this->atIdEmpleado . "'
			    or (
                        (  
                          lower ('" . $this->myInfo['puestoPersonaLogeada'] . "') like lower ('%jefe%') or 
                          lower ('" . $this->myInfo['puestoPersonaLogeada'] . "') like lower ('%director%') 
                        )
                        and
                         '" . $this->myInfo['dependenciaDeEmpleadoLogeado'] . "' = EmpOrgEmisor.fk_a004_num_dependencia
			       )  
			    or ( 
			            asignacion.fk_a018_num_seg_funcionario_Receptor = '" . $this->atIdEmpleado . "' 
			            && asignacion.estado_asignacion = 'Activo' 
			       )  
	      group BY 
	            Solic.pk_num_solicitud 
	      DESC
			"
        );

        $solicitud->setFetchMode(PDO::FETCH_ASSOC);
        $resultado =  $solicitud->fetchAll();

        foreach($resultado as $ticket){
            $ticket['puestoPersonaLogeada'] = $this->myInfo['puestoPersonaLogeada'];
        }

        return $resultado;
    }
    public function metListarTicketSoporteFiltrado($estado,$desde,$hasta,$dependencia,$categoria,$prioridad,$asignado,$isPadre)

    {
        $whereAsignado="";
        $whereCategoria=" and ( ";
        $whereIsJefe="";

        if(strlen($categoria)>0){
            if($isPadre == 0){ // no es padre, se filtrará por concepto hijo (categoria especifico)
                $whereCategoria = " and concepto.pk_num_concepto = " . $categoria ." ";
            }else{//  es padre, se filtrará por categoria principal
                $whereCategoria = " and concepto.fk_num_ticket_padre = " . $categoria ." ";
            }
        }else{
            if($this->myInfo['logeadoIsJefe'] == 1){
                $whereCategoria = " ";
            }else{
                $arraySubCategorias = explode(",", $this->myRol['atender_conceptos']);

                $arraySubCategorias = array_map(function ($valor) {
                    return str_replace("Todos", "", trim($valor));
                }, $arraySubCategorias);
                foreach ($arraySubCategorias as $idCategoria){
                    if (strstr($idCategoria, 'Todos') === false) {
                        $whereCategoria = $whereCategoria .  " Solic.fk_num_concepto_Ticket = " . $idCategoria ." or";
                    }
                } $whereCategoria = substr($whereCategoria, 0, strlen($whereCategoria) - 2);
                $whereCategoria = $whereCategoria . " ) ";
            }

        }


        $whereDependencia = strlen($dependencia) > 0
            ? "(  EmpOrgEmisor.fk_a004_num_dependencia = " . $dependencia . " "
            : "(  EmpOrgEmisor.fk_a004_num_dependencia like lower ('%".$dependencia."%') ";

        //echo 'Where Autor' . $whereAutor;

        if($asignado == 1){
            $whereAsignado="  or (asignacion.fk_a018_num_seg_funcionario_Receptor = '" . $this->atIdEmpleado . "' 
                                && asignacion.estado_asignacion = 'Activo') )";// or Solic.fk_a018_num_seg_funcionario_Emisor = ". $this->atIdEmpleado ;
        }else{
            $whereAsignado = " )" ;
        }

        $whereFecha = " and ( Solic.fecha_creacion >= '" . $desde . "' and Solic.fecha_creacion <= '" .$hasta."' ) ";


        $whereEstado = strlen($estado)>0
            ? " and Solic.fk_a006_miscelaneo_detalle = ". $estado. " "
            : " and ( 
                        Solic.fk_a006_miscelaneo_detalle != 1225
                        and Solic.fk_a006_miscelaneo_detalle != 1226
                        and Solic.fk_a006_miscelaneo_detalle != 1229 
                        and Solic.fk_a006_miscelaneo_detalle != 1239 
                    )" ;//Evita Tickets Pausados, Rechazado, Cancelado y Esperando aprobación



        $wherePrioridad = strlen($prioridad)>0
            ? " and concepto.nivel_prioridad = " . $prioridad ." "
            : "" ;


        $solicitud = $this->_db->query(
            "
          SELECT
			Solic.*
			, CONCAT(personaEmisor.ind_nombre1,' ',personaEmisor.ind_apellido1) as nombre_Funcionario_Emisor
		    , CONCAT(personaAprueba.ind_nombre1,' ',personaAprueba.ind_apellido1) as nombre_Funcionario_Aprueba
            , EmpOrgEmisor.fk_a004_num_dependencia as dependenciaEmisor
            , concepto.*
            , empOrg.fk_a004_num_dependencia as dependenciaDeEmpleadoLogeado
            , puesto.ind_descripcion_cargo as puestoPersonaLogeada
            , empleadoLaboral.fk_rhb001_num_empleado as pkNum_PersonaLogeada
            , depend.ind_dependencia as dependencia_afectada_Ticket
            

                                    
          FROM
           ca_b001_solicitud as Solic
          LEFT JOIN a004_dependencia as depend on Solic.fk_a004_num_dependencia = depend.pk_num_dependencia  
          left join rh_b001_empleado as rhb001UsuEmisor on Solic.fk_a018_num_seg_funcionario_Emisor = rhb001UsuEmisor.pk_num_empleado
          left join rh_c076_empleado_organizacion as EmpOrgEmisor on  rhb001UsuEmisor.pk_num_empleado =  EmpOrgEmisor.fk_rhb001_num_empleado   
          left join a003_persona as personaEmisor on personaEmisor.pk_num_persona = rhb001UsuEmisor.fk_a003_num_persona
         	
          
          left join rh_b001_empleado as rhb001UsuAprueba on Solic.fk_a018_num_seg_funcionario_Aprobado = rhb001UsuAprueba.pk_num_empleado
          left join a003_persona as personaAprueba on personaAprueba.pk_num_persona = rhb001UsuAprueba.fk_a003_num_persona
          
          left join ca_a001_concepto_ticket as concepto on Solic.fk_num_concepto_Ticket = concepto.pk_num_concepto
          left join rh_c076_empleado_organizacion as empOrg on rhb001UsuEmisor.pk_num_empleado = empOrg.fk_rhb001_num_empleado
          
          left JOIN rh_c005_empleado_laboral as empleadoLaboral ON empleadoLaboral.fk_rhb001_num_empleado = '" . $this->atIdEmpleado . "'
          left JOIN rh_c063_puestos as puesto ON puesto.pk_num_puestos = empleadoLaboral.fk_rhc063_num_puestos_cargo
          left join rh_c076_empleado_organizacion as empOrgLogeado on empOrgLogeado.fk_rhb001_num_empleado  = '" . $this->atIdEmpleado . "'
          
          left join ca_c001_asignacion_funcionario_solicitud as asignacion on  Solic.pk_num_solicitud = asignacion.fk_numSolicitud
          
          
          WHERE 
                ".$whereDependencia."  
                ".$whereAsignado." 
                ".$whereFecha."  
                ".$whereEstado."  
                ".$whereCategoria ."  
                ".$wherePrioridad ."  
			     
	      group BY  
	            Solic.pk_num_solicitud 
	      DESC
			"
        );



        $solicitud->setFetchMode(PDO::FETCH_ASSOC);
        $resultado =  $solicitud->fetchAll();

        $iterador = 0;
        foreach($resultado as $ticket){
            $ticket['puestoPersonaLogeada'] = $this->myInfo['puestoPersonaLogeada'];
            $asignadosArray = $this->metObtenerAsignadosTicketResumido($ticket['pk_num_solicitud']);

            $resultado[$iterador++]['personas_asignadas'] = $asignadosArray;

        }

        return $resultado;
    }
    public function metDataRPInformeMensual($desde,$hasta){
        $arraySubCategorias = explode(",", $this->myRol['atender_conceptos']);

        $arraySubCategorias = array_map(function ($valor) {
            return str_replace("Todos", "", trim($valor));
        }, $arraySubCategorias);

    $whereCategoria ="";

    if($this->myInfo['logeadoIsJefe'] == 1){
        $whereCategoria= "concepto.dependencia_encargada = " . $this->myInfo['dependenciaDeEmpleadoLogeado'];
    }else{
        $whereCategoria = $whereCategoria ."( ";
        foreach ($arraySubCategorias as $idCategoria){
            if (strstr($idCategoria, 'Todos') === false) {
                $whereCategoria = $whereCategoria .  " solicitud.fk_num_concepto_Ticket = " . $idCategoria ." or";
            }
        } $whereCategoria = substr($whereCategoria, 0, strlen($whereCategoria) - 2);
        $whereCategoria = $whereCategoria ." )";
    }


        $solicitud = $this->_db->query("
            SELECT
                concepto.categoria
                ,concepto.codigo_categoria
                ,dependencia.txt_abreviacion
            FROM
	            ca_b001_solicitud AS solicitud
            left join ca_a001_concepto_ticket as concepto on concepto.pk_num_concepto = solicitud.fk_num_concepto_Ticket
            left join a004_dependencia as dependencia on solicitud.fk_a004_num_dependencia = dependencia.pk_num_dependencia
            where ".$whereCategoria." and solicitud.fecha_creacion >= '" . $desde . "' and solicitud.fecha_creacion <= '" . $hasta . "'
        " );

    
        $solicitud->setFetchMode(PDO::FETCH_ASSOC);
        $resultado =  $solicitud->fetchAll();

        return $resultado;
    }
    public function metListarSolicitudFiltrado($estado,$desde,$hasta,$autor,$categoria,$prioridad,$asignado,$isPadre)
    {
        $whereAsignado="";
        $whereCategoria="";
        $whereIsJefe="";

        $whereAutor = strlen($autor) > 0
                            ? "(  Solic.fk_a018_num_seg_funcionario_Emisor =" . $autor . " "
                            : "(  ((  
                                      lower ('" . $this->myInfo['puestoPersonaLogeada'] . "') like lower ('%jefe%') or 
                                      lower ('" . $this->myInfo['puestoPersonaLogeada'] . "') like lower ('%director%') 
                                    )
                                    and
			                            '" . $this->myInfo['dependenciaDeEmpleadoLogeado'] . "' = EmpOrgEmisor.fk_a004_num_dependencia ) ";

        //echo 'Where Autor' . $whereAutor;

        if($asignado == 1){
            $whereAsignado="  or (asignacion.fk_a018_num_seg_funcionario_Receptor = '" . $this->atIdEmpleado . "' 
                                && asignacion.estado_asignacion = 'Activo') )";// or Solic.fk_a018_num_seg_funcionario_Emisor = ". $this->atIdEmpleado ;
        }else{
            $whereAsignado = " )" ;
        }

        $whereFecha = " and ( Solic.fecha_creacion >= '" . $desde . "' and Solic.fecha_creacion <= '" .$hasta."' ) ";


        if((stripos(strtolower($this->myInfo['puestoPersonaLogeada']),"jefe") !== false ||
            stripos(strtolower($this->myInfo['puestoPersonaLogeada']),"director") !== false) ){
            $whereIsJefe = " and ( empOrg.fk_a004_num_dependencia = ".$this->myInfo['dependenciaDeEmpleadoLogeado']."  )";
        }

        $whereEstado = strlen($estado)>0
                            ? " and Solic.fk_a006_miscelaneo_detalle = ". $estado. " "
                            : "" ;

        if(strlen($categoria)>0){
            if($isPadre == 0){ // no es padre, se filtrará por concepto hijo (categoria especifico)
                $whereCategoria = " and concepto.pk_num_concepto = " . $categoria ." ";
            }else{//  es padre, se filtrará por categoria principal
                $whereCategoria = " and concepto.fk_num_ticket_padre = " . $categoria ." ";
            }
        }


        $wherePrioridad = strlen($prioridad)>0
                                ? " and concepto.nivel_prioridad = " . $prioridad ." "
                                : "" ;

      /*echo   $whereAutor;
        echo   $whereAsignado ;
        echo   $whereFecha  ;
        echo   $whereIsJefe;
        echo   $whereEstado ;
        echo   $whereCategoria;
        echo   $wherePrioridad;*/

        $solicitud = $this->_db->query(
            "
          SELECT
			Solic.*
			, CONCAT(personaEmisor.ind_nombre1,' ',personaEmisor.ind_apellido1) as nombre_Funcionario_Emisor
		    , CONCAT(personaAprueba.ind_nombre1,' ',personaAprueba.ind_apellido1) as nombre_Funcionario_Aprueba
            , EmpOrgEmisor.fk_a004_num_dependencia as dependenciaEmisor
            , concepto.*
            , empOrg.fk_a004_num_dependencia as dependenciaDeEmpleadoLogeado
            , puesto.ind_descripcion_cargo as puestoPersonaLogeada
            , empleadoLaboral.fk_rhb001_num_empleado as pkNum_PersonaLogeada
            , depend.ind_dependencia as dependencia_afectada_Ticket
                                    
          FROM
           ca_b001_solicitud as Solic
          LEFT JOIN a004_dependencia as depend on Solic.fk_a004_num_dependencia = depend.pk_num_dependencia  
          left join rh_b001_empleado as rhb001UsuEmisor on Solic.fk_a018_num_seg_funcionario_Emisor = rhb001UsuEmisor.pk_num_empleado
          left join rh_c076_empleado_organizacion as EmpOrgEmisor on  rhb001UsuEmisor.pk_num_empleado =  EmpOrgEmisor.fk_rhb001_num_empleado   
          left join a003_persona as personaEmisor on personaEmisor.pk_num_persona = rhb001UsuEmisor.fk_a003_num_persona
         	
          
          left join rh_b001_empleado as rhb001UsuAprueba on Solic.fk_a018_num_seg_funcionario_Aprobado = rhb001UsuAprueba.pk_num_empleado
          left join a003_persona as personaAprueba on personaAprueba.pk_num_persona = rhb001UsuAprueba.fk_a003_num_persona
          
          left join ca_a001_concepto_ticket as concepto on Solic.fk_num_concepto_Ticket = concepto.pk_num_concepto
          left join rh_c076_empleado_organizacion as empOrg on rhb001UsuEmisor.pk_num_empleado = empOrg.fk_rhb001_num_empleado
          
          left JOIN rh_c005_empleado_laboral as empleadoLaboral ON empleadoLaboral.fk_rhb001_num_empleado = '" . $this->atIdEmpleado . "'
          left JOIN rh_c063_puestos as puesto ON puesto.pk_num_puestos = empleadoLaboral.fk_rhc063_num_puestos_cargo
          left join rh_c076_empleado_organizacion as empOrgLogeado on empOrgLogeado.fk_rhb001_num_empleado  = '" . $this->atIdEmpleado . "'
          
          left join ca_c001_asignacion_funcionario_solicitud as asignacion on  Solic.pk_num_solicitud = asignacion.fk_numSolicitud
           
          
          WHERE 
                ".$whereAutor."  
                ".$whereAsignado." 
                ".$whereFecha."  
                ".$whereIsJefe."  
                ".$whereEstado."  
                ".$whereCategoria ."  
                ".$wherePrioridad ."  
			     
	      group BY 
	            Solic.pk_num_solicitud 
	      DESC
			"
        );


        $solicitud->setFetchMode(PDO::FETCH_ASSOC);
        $resultado =  $solicitud->fetchAll();

        foreach($resultado as $ticket){
            $ticket['puestoPersonaLogeada'] = $this->myInfo['puestoPersonaLogeada'];
        }

        return $resultado;
    }
    public function metListarTicketsSuperior()
    {
        $solicitud = $this->_db->query(
            "
          SELECT
			Solic.*
			, CONCAT(personaEmisor.ind_nombre1,' ',personaEmisor.ind_apellido1) as nombre_Funcionario_Emisor
		    , CONCAT(personaAprueba.ind_nombre1,' ',personaAprueba.ind_apellido1) as nombre_Funcionario_Aprueba
            , EmpOrgEmisor.fk_a004_num_dependencia as dependenciaEmisor
            , concepto.*
            , empOrg.fk_a004_num_dependencia as dependenciaDeEmpleadoLogeado
           , puesto.ind_descripcion_cargo as puestoPersonaLogeada
            , empleadoLaboral.fk_rhb001_num_empleado as pkNum_PersonaLogeada
                                    
          FROM
           ca_b001_solicitud as Solic

          left join rh_b001_empleado as rhb001UsuEmisor on Solic.fk_a018_num_seg_funcionario_Emisor = rhb001UsuEmisor.pk_num_empleado
          left join rh_c076_empleado_organizacion as EmpOrgEmisor on  rhb001UsuEmisor.pk_num_empleado =  EmpOrgEmisor.fk_rhb001_num_empleado   
          left join a003_persona as personaEmisor on personaEmisor.pk_num_persona = rhb001UsuEmisor.fk_a003_num_persona
         	
          
          left join rh_b001_empleado as rhb001UsuAprueba on Solic.fk_a018_num_seg_funcionario_Aprobado = rhb001UsuAprueba.pk_num_empleado
          left join a003_persona as personaAprueba on personaAprueba.pk_num_persona = rhb001UsuAprueba.fk_a003_num_persona
          
          left join ca_a001_concepto_ticket as concepto on Solic.fk_num_concepto_Ticket = concepto.pk_num_concepto
          left join rh_c076_empleado_organizacion as empOrg on rhb001UsuEmisor.pk_num_empleado = empOrg.pk_num_empleado_organizacion
          
          left JOIN rh_c005_empleado_laboral as empleadoLaboral ON empleadoLaboral.fk_rhb001_num_empleado = '" . $this->atIdEmpleado . "'
          left JOIN rh_c063_puestos as puesto ON puesto.pk_num_puestos = empleadoLaboral.fk_rhc063_num_puestos_cargo
          left join rh_c076_empleado_organizacion as empOrgLogeado on empOrgLogeado.fk_rhb001_num_empleado  = '" . $this->atIdEmpleado . "'
          
          left join ca_c001_asignacion_funcionario_solicitud as asignacion on  Solic.pk_num_solicitud = asignacion.fk_numSolicitud
           
          
          WHERE     
                  concepto.nivel_prioridad = 3  
	      group BY 
	            Solic.pk_num_solicitud 
	      DESC
			"
        );

        $solicitud->setFetchMode(PDO::FETCH_ASSOC);
        $resultado =  $solicitud->fetchAll();

        foreach($resultado as $ticket){
            $ticket['puestoPersonaLogeada'] = $this->myInfo['puestoPersonaLogeada'];
        }

        return $resultado;
    }
    public function metObtenerSolicitud($pkNumSolicitud){
        $registro = $this->_db->query(
            "SELECT
		                ticket.*
                        ,CONCAT(personaEmisor.ind_nombre1,' ',personaEmisor.ind_apellido1) as nombre_Funcionario_Emisor
                        ,CONCAT(personaAprueba.ind_nombre1,' ',personaAprueba.ind_apellido1) as nombre_Funcionario_Aprueba
     
                        
                        ,conceptoTicketSubCategoria.pk_num_concepto as pk_num_ticket_SubCategoria
                        ,conceptoTicketSubCategoria.nivel_prioridad as prioridad_SubCategoria
                        ,conceptoTicketSubCategoria.categoria as nombre_SubCategoria
                        ,conceptoTicketSubCategoria.descripcion as descripcion_SubCategoria
                        ,conceptoTicketSubCategoria.fk_num_ticket_padre as id_Ticket_Padre_SubCategoria
                        ,conceptoTicketSubCategoria.dependencia_encargada as dependencia_encargada
                        ,conceptoPadre.categoria as nombre_Padre_categoria
                        ,conceptoPadre.descripcion as descripcion_Padre_Categoria
     
                        ,dependenciaMaestro.ind_dependencia as dependencia_afectada
                        ,activoMaestro.ind_descripcion as nombreActivo
                        ,activoMaestro.cod_codigo_interno as codigoActivo

                        /*, empOrg.fk_a004_num_dependencia as dependenciaDeEmpleadoLogeado*/

                    FROM ca_b001_solicitud  as ticket
                        
                    /*left join a018_seguridad_usuario as a018UsuEmisor on ticket.fk_a018_num_seg_funcionario_Emisor = a018UsuEmisor.pk_num_seguridad_usuario*/
                    left join rh_b001_empleado as rhb001UsuEmisor on ticket.fk_a018_num_seg_funcionario_Emisor = rhb001UsuEmisor.pk_num_empleado
                    left join a003_persona as personaEmisor on personaEmisor.pk_num_persona = rhb001UsuEmisor.fk_a003_num_persona
                    
                    /*left join a018_seguridad_usuario as a018UsuAprueba on ticket.fk_a018_num_seg_funcionario_Aprobado = a018UsuAprueba.pk_num_seguridad_usuario*/
                    left join rh_b001_empleado as rhb001UsuAprueba on ticket.fk_a018_num_seg_funcionario_Aprobado = rhb001UsuAprueba.pk_num_empleado
                    left join a003_persona as personaAprueba on personaAprueba.pk_num_persona = rhb001UsuAprueba.fk_a003_num_persona
                    
                    left join ca_a001_concepto_ticket as conceptoTicketSubCategoria on ticket.fk_num_concepto_Ticket = conceptoTicketSubCategoria.pk_num_concepto
                    left join ca_a001_concepto_ticket as conceptoPadre on conceptoTicketSubCategoria.fk_num_ticket_padre = conceptoPadre.pk_num_concepto
                    
                    left join a004_dependencia as dependenciaMaestro on ticket.fk_a004_num_dependencia = dependenciaMaestro.pk_num_dependencia
					
                    left join  af_b001_activo as activoMaestro on ticket.fk_b001_num_activo = activoMaestro.pk_num_activo
                    
                    /*left join rh_c076_empleado_organizacion as empOrg on empOrg.pk_num_empleado_organizacion = 64*/
                    
                    
                    WHERE ticket.pk_num_solicitud = $pkNumSolicitud
                    Order by 
                        ticket.pk_num_solicitud 
                    DESC
                    "
        );
        $registro->setFetchMode(PDO::FETCH_ASSOC);
        return $registro->fetchAll();
    }
    public function metListarEmpleadosxDependencia($pk_num_dependencia = null)
    {

        $whereDependencia = isset($pk_num_dependencia)
            ? " dependencia.pk_num_dependencia = '" . $pk_num_dependencia . "' "
            : "";
        $solicitud = $this->_db->query(
            "
          SELECT
              CONCAT(persona.ind_nombre1,' ',persona.ind_apellido1) as nombre_Funcionario,
              persona.*,
              empleado.pk_num_empleado,
              dependencia.ind_dependencia
            FROM
              a003_persona as persona 
              INNER JOIN rh_b001_empleado AS empleado ON persona.pk_num_persona = empleado.fk_a003_num_persona
              LEFT JOIN rh_c076_empleado_organizacion AS organizacion ON organizacion.fk_rhb001_num_empleado = empleado.pk_num_empleado
              LEFT JOIN a004_dependencia AS dependencia ON dependencia.pk_num_dependencia = organizacion.fk_a004_num_dependencia
                and empleado.ind_estado_aprobacion = 'ap'
                and empleado.num_estatus = 1
			  where ".$whereDependencia."
	      
			"
        );

        $solicitud->setFetchMode(PDO::FETCH_ASSOC);
        $resultado =  $solicitud->fetchAll();

        return $resultado;
    }
    public function metGetRolFuncionario($idEmpleado = null){

        $empleado = $this->atIdEmpleado;

        if(isset($idEmpleado)){
            $empleado=$idEmpleado;
        }

        $registro = $this->_db->query("
                    SELECT * 
                    FROM ca_a002_rol_ticket
                    WHERE fk_a018_num_seg_funcionario_asignado = " . $empleado . " and estado_rol='Activo'");

        $registro->setFetchMode(PDO::FETCH_ASSOC);
        $resultado = $registro->fetchAll();
        $resultado = $resultado[0];

        return $resultado;
    }
    public function metObtenerAsignadosTicketResumido($pkNumSolicitud){
        $registro = $this->_db->query(
            "SELECT
		                 asig.estado_asignacion
		                ,CONCAT(personaReceptor.ind_nombre1,' ',personaReceptor.ind_apellido1) as nombre_Persona
                        ,rhb001Asignado.pk_num_empleado,
						CASE  WHEN roles.atender_conceptos LIKE CONCAT('%', solicitud.fk_num_concepto_Ticket, '%') 
							  THEN 1  ELSE 0
						END AS is_Soporte 

                    FROM ca_c001_asignacion_funcionario_solicitud as asig	
                    
                    left join rh_b001_empleado as rhb001Asignado on asig.fk_a018_num_seg_funcionario_Receptor = rhb001Asignado.pk_num_empleado
                    left join a003_persona as personaReceptor on personaReceptor.pk_num_persona = rhb001Asignado.fk_a003_num_persona
					left join ca_b001_solicitud as solicitud on asig.fk_numSolicitud = solicitud.pk_num_solicitud
					left join ca_a002_rol_ticket as roles on rhb001Asignado.pk_num_empleado = roles.fk_a018_num_seg_funcionario_asignado
					
                    where asig.fk_numSolicitud = $pkNumSolicitud order by  asig.pk_numAsignacion desc
                    "
        );
        $registro->setFetchMode(PDO::FETCH_ASSOC);
        return $registro->fetchAll();
    }
    public function metObtenerJefesDireccionTecnica(){
        $registro = $this->_db->query(
            "SELECT CONCAT(persona.ind_nombre1,' ',persona.ind_apellido1) as nombre_persona,
                            puesto.ind_descripcion_cargo as cargo FROM rh_c005_empleado_laboral as empleadoL
                            left join rh_c063_puestos as puesto on empleadoL.fk_rhc063_num_puestos_cargo = puesto.pk_num_puestos
                            left join rh_b001_empleado as empleado on empleado.pk_num_empleado = empleadoL.fk_rhb001_num_empleado
                            left join a003_persona as persona on empleado.fk_a003_num_persona = persona.pk_num_persona
                            left join rh_c076_empleado_organizacion as empleadoO on empleado.pk_num_empleado = empleadoO.fk_rhb001_num_empleado
                    where (puesto.pk_num_puestos = 150 and empleado.num_estatus=1) or (puesto.pk_num_puestos = 1 and empleadoO.fk_a004_num_dependencia = 1 and empleado.num_estatus=1)
                    "
        );
        $registro->setFetchMode(PDO::FETCH_ASSOC);
        return $registro->fetchAll();
    }
    public function metObtenerUsuariosAgiandos($pkNumSolicitud){
        $registro = $this->_db->query(
            "SELECT
		                 asig.*
		                ,CONCAT(personaEmisor.ind_nombre1,' ',personaEmisor.ind_apellido1) as nombre_Persona
                        ,personaEmisor.ind_cedula_documento as cedula
                        ,personaEmisor.ind_foto as rutaFoto

                    FROM ca_c001_asignacion_funcionario_solicitud as asig	
                    
                    
                    left join rh_b001_empleado as rhb001UsuEmisor on asig.fk_a018_num_seg_funcionario_Receptor = rhb001UsuEmisor.pk_num_empleado
                    left join a003_persona as personaEmisor on personaEmisor.pk_num_persona = rhb001UsuEmisor.fk_a003_num_persona
					
                    where asig.fk_numSolicitud = $pkNumSolicitud order by  asig.pk_numAsignacion desc
                    "
        );
        $registro->setFetchMode(PDO::FETCH_ASSOC);
        return $registro->fetchAll();
    }
    public function metObtenerInformacionEmpleado($pk_num_empleado){
        $registro = $this->_db->query(
            "select * from vl_rh_persona_empleado_datos_laborales where pk_num_empleado =" . $pk_num_empleado
        );
        $registro->setFetchMode(PDO::FETCH_ASSOC);
        $myRegistro =  $registro->fetchAll();
        $myRegistro = $myRegistro[0];
        return $myRegistro;
    }


    public function metObtenerEstadoTicket($cod_detalle = null){

        $cod_detalle = !isset($cod_detalle)
                            ? ""
                            : $cod_detalle;

        $miscelaneos = $this->_db->query(
            "SELECT
                         estado.pk_num_miscelaneo_detalle as id_Estado,
		                 estado.cod_detalle as codigo_Estado,
		                 estado.ind_nombre_detalle as nombre_Estado,
		                 estado.num_estatus as isActive
                    FROM a006_miscelaneo_detalle as estado
                    
                    where fk_a005_num_miscelaneo_maestro = 162 and cod_detalle like '%".$cod_detalle."%' 
                    "
        );
        $miscelaneos->setFetchMode(PDO::FETCH_ASSOC);
        return $miscelaneos->fetchAll();
    }
    public function metInsertDetalle($idSolicitud, $descripcion, $archivos){

        $this->_db->beginTransaction();

        $nuevoDetalle = $this->_db->prepare(
            "INSERT INTO 
                        ca_c002_detalle_solicitud 
                    SET     
                    fk_num_solicitud=:idSolicitud,
                    fk_a018_num_seg_funcionario_Emisor=:idEmpleado,
                    descripcion=:descripcion
                        
                     "
        );

        $nuevoDetalle->execute(array(
            'idSolicitud' => $idSolicitud,
            'descripcion' => $descripcion,
            'idEmpleado' => $this->atIdEmpleado
        ));


        $fallaTansaccion = $nuevoDetalle->errorInfo();


        if (!empty($fallaTansaccion[1]) && !empty($fallaTansaccion[2])) {
            $this->_db->rollBack();
            return $fallaTansaccion;
        } else {
            $lastIdDetalle =0;
            $lastIdDetalle = $this->_db->lastInsertId();

            $newArchivo = $this->_db->prepare("
                insert into
                    ca_d001_archivos_detalle_solicitud
                set
                 fk_num_detalle=:fk_num_detalle,
                 ruta=:ruta
            ");

            foreach ($archivos['name'] as $key => $nombre) {
                $newArchivo->execute(array(
                    'fk_num_detalle' => $lastIdDetalle,
                    'ruta' => $nombre
                ));
                $fallaTansaccion2 = $newArchivo->errorInfo();
            }


            if (!empty($fallaTansaccion2[1]) && !empty($fallaTansaccion2[2])) {
                $this->_db->rollBack();
                return $fallaTansaccion2;
            } else {
                $this->_db->commit();

                return $lastIdDetalle;
            }

        }

    }
    public function metAprobarRechazarDetalle($idAprueba,$idDetalle,$accion,$numSolicitud,$justificacion,$estadoDetalleRecibido,$estadoTicket){

        $this->_db->beginTransaction();


        $estadoSolicitud =1224;//Activo
        $estadoDetalle ="";

        if(strcasecmp($estadoDetalleRecibido, 'activo') == 0){
            //$estadoSolicitud =$estadoTicket . '. Detalle Esperando Aprob.';

            if(stripos('activo',$estadoTicket)){
                $estadoSolicitud = 1235; // Activo. Detalle Esperando Aprob.
            }else{//Ticket Siendo Atendido
                $estadoSolicitud = 1232; // Siendo Atendido. Detalle Esperando Aprob.
            }

            $estadoDetalle = 'esperando aprobacion';
        }else if ( strcasecmp($accion, 'aprobado') == 0 ){
            //$estadoSolicitud = $estadoTicket . '. Detalle Aprobado';

            if(stripos('activo',$estadoTicket)){
                $estadoSolicitud = 1236; // Activo. Detalle Esperando Aprob.
            }else{//Ticket Siendo Atendido
                $estadoSolicitud = 1233; // Siendo Atendido. Detalle Aprobado
            }


            $estadoDetalle = 'Aprobado';
        }else{
            //$estadoSolicitud =$estadoTicket . '. Detalle Rechazado';

            if(stripos('activo',$estadoTicket)){
                $estadoSolicitud = 1237; // Activo. Detalle Rechazado
            }else{//Ticket Siendo Atendido
                $estadoSolicitud = 1234; // Siendo Atendido. Detalle Rechazado
            }


            $estadoDetalle = 'Rechazado';
        }






        if( strcasecmp($estadoDetalleRecibido, 'esperando aprobacion') == 0 ){
            $registro = $this->_db->prepare(
                "UPDATE   ca_b001_solicitud as solicitud, ca_c002_detalle_solicitud as detalle
                    SET     
                             solicitud.fk_a006_miscelaneo_detalle = ".$estadoSolicitud."
                            ,solicitud.estado = (select ind_nombre_detalle from a006_miscelaneo_detalle where a006_miscelaneo_detalle.pk_num_miscelaneo_detalle = ".$estadoSolicitud.")
                            ,detalle.estado=:estadoDetalle
                            ,detalle.observacion_aprobacion_rechazo=:observacion_aprobacion_rechazo
                            ,detalle.fk_a018_num_seg_funcionario_aprueba=:fk_a018_num_seg_funcionario_aprueba
                            ,detalle.fecha_aprobacion_detalle = NOW()
                    WHERE   
                            solicitud.pk_num_solicitud =:pk_num_solicitud
                    AND     
                            detalle.pk_num_detalle =:pk_num_detalle "
            );

            $registro->execute(array(
                'observacion_aprobacion_rechazo' => $justificacion,
                'fk_a018_num_seg_funcionario_aprueba' => $idAprueba,
                'estadoDetalle' => $estadoDetalle,
                'pk_num_solicitud' => $numSolicitud,
                'pk_num_detalle' => $idDetalle
            ));


        }else if ( strcasecmp($estadoDetalleRecibido, 'activo') === 0  ){


            $registro = $this->_db->prepare(
                "UPDATE   ca_b001_solicitud as solicitud, ca_c002_detalle_solicitud as detalle
                    SET     
                             solicitud.fk_a006_miscelaneo_detalle = ".$estadoSolicitud."
                            ,solicitud.estado = (select ind_nombre_detalle from a006_miscelaneo_detalle where a006_miscelaneo_detalle.pk_num_miscelaneo_detalle = ".$estadoSolicitud.")
                           ,detalle.estado =:estadoDetalle
                           ,detalle.justificacion_aprobacion=:justificacion_aprobacion
                    WHERE   
                            solicitud.pk_num_solicitud =:pk_num_solicitud
                    AND     
                            detalle.pk_num_detalle =:pk_num_detalle "
            );

            $registro->execute(array(
                'justificacion_aprobacion' => $justificacion,
                'estadoDetalle' => $estadoDetalle,
                'pk_num_solicitud' => $numSolicitud,
                'pk_num_detalle' => $idDetalle
            ));
        }

        $fallaTansaccion = $registro->errorInfo();


        if (!empty($fallaTansaccion[1]) && !empty($fallaTansaccion[2])) {
            $this->_db->rollBack();
            return $fallaTansaccion;
        } else {
            $f = $this->_db->commit();
            return $f;

        }


    }
    public function metAprobarRechazarTicket( $usuario,$accion,$numSolicitud,$justificacion){

        $this->_db->beginTransaction();

        $estadoSolicitud =1229; //Rechazado

        if($accion == 'Aprobado'){
            $estadoSolicitud=1238;//Activo
        }


            $registro = $this->_db->prepare(
                "UPDATE   ca_b001_solicitud 
                    
                       SET     
                             fk_a006_miscelaneo_detalle = ".$estadoSolicitud.",
                             estado = (select ind_nombre_detalle from a006_miscelaneo_detalle where a006_miscelaneo_detalle.pk_num_miscelaneo_detalle = ".$estadoSolicitud." ),
                             fecha_modificacion= now(),
                             fecha_aprobacion = now(),
                             fk_a018_num_seg_funcionario_Aprobado=:fk_a018_num_seg_funcionario_Aprobado,
                             observacion_aprobacion_rechazo=:observacion_aprobacion_rechazo 
                       WHERE   
                            pk_num_solicitud =:pk_num_solicitud
                    "
            );

            $registro->execute(array(
                'observacion_aprobacion_rechazo' => $justificacion,
                'fk_a018_num_seg_funcionario_Aprobado' => $usuario,
                'pk_num_solicitud' => $numSolicitud
            ));


        $fallaTansaccion = $registro->errorInfo();


        if (!empty($fallaTansaccion[1]) && !empty($fallaTansaccion[2])) {
            $this->_db->rollBack();
            return $fallaTansaccion;
        } else {
            $this->_db->commit();
            return 1;
        }


    }
    public function metObtenerDetallesSolicitud($pkNumSolicitud)
    {
        $registro = $this->_db->query(
            "SELECT
		                sDetalle.* 
		                ,CONCAT(personaEmisor.ind_nombre1,' ',personaEmisor.ind_apellido1) as nombre_Funcionario_Emisor
                        , puesto.ind_descripcion_cargo as puestoEmisor
		                ,personaEmisor.ind_foto as foto_Funcionario_Emisor
	                    ,CONCAT(personaAprueba.ind_nombre1,' ',personaAprueba.ind_apellido1) as nombre_Funcionario_Aprueba
                        ,EO.fk_a004_num_dependencia as numDependencia
                        ,dependencia.ind_dependencia as nombreDependencia
                        ,dependencia.pk_num_dependencia as pk_num_dependencia
                    FROM ca_c002_detalle_solicitud as sDetalle
						
                   
                    left join rh_b001_empleado as rhb001UsuEmisor on sDetalle.fk_a018_num_seg_funcionario_Emisor = rhb001UsuEmisor.pk_num_empleado
                    left join a003_persona as personaEmisor on personaEmisor.pk_num_persona = rhb001UsuEmisor.fk_a003_num_persona
                    left join rh_c076_empleado_organizacion as EO on rhb001UsuEmisor.pk_num_empleado = EO.fk_rhb001_num_empleado
                    left join a004_dependencia as dependencia on EO.fk_a004_num_dependencia = dependencia.pk_num_dependencia
                        
                    left JOIN rh_c005_empleado_laboral as empleadoLaboral ON empleadoLaboral.fk_rhb001_num_empleado = rhb001UsuEmisor.pk_num_empleado
		            left JOIN rh_c063_puestos as puesto ON puesto.pk_num_puestos = empleadoLaboral.fk_rhc063_num_puestos_cargo    
                        
                    left join rh_b001_empleado as rhb001UsuAprueba on sDetalle.fk_a018_num_seg_funcionario_aprueba = rhb001UsuAprueba.pk_num_empleado
                    left join a003_persona as personaAprueba on personaAprueba.pk_num_persona = rhb001UsuAprueba.fk_a003_num_persona
					
                    where sDetalle.fk_num_solicitud = $pkNumSolicitud
                    order by pk_num_detalle desc"
        );
        $registro->setFetchMode(PDO::FETCH_ASSOC);
        $resultado =  $registro->fetchAll();

        return $resultado;
    }
    public function metEliminarAsignacionUsuario($idSolicitud,$receptor,$subCategoria,$estadoSolicitud){
        $this->_db->beginTransaction();

        $eliminado = $this->_db->prepare("
            UPDATE
                ca_c001_asignacion_funcionario_solicitud
            SET 
                estado_asignacion=:estado_asignacion,
                fecha_modificacion=NOW()
            WHERE
                fk_numSolicitud=:fk_numSolicitud
            AND 
                fk_a018_num_seg_funcionario_Receptor=:fk_a018_num_seg_funcionario_Receptor
            ");

        $eliminado->execute(array(
            'estado_asignacion' => 'Eliminado',
            'fk_numSolicitud' => $idSolicitud,
            'fk_a018_num_seg_funcionario_Receptor' => $receptor
        ));

        $fallaTansaccion = $eliminado->errorInfo();

        if (!empty($fallaTansaccion[1]) && !empty($fallaTansaccion[2])) {
            $this->_db->rollBack();
        } else {
            $this->_db->commit();
            $this->metValidarAsignacionTicket($idSolicitud,$subCategoria,$estadoSolicitud);
        }

    }
    public function metAgregarAsignacionUsuario($idSolicitud,$receptor,$subCategoria,$estadoSolicitud){
        $this->_db->beginTransaction();

        $asignacion = $this->_db->prepare("
    INSERT INTO
        ca_c001_asignacion_funcionario_solicitud
    set 
        fk_numSolicitud=:fk_numSolicitud,
        fechaAsignacion = now(),
        fk_a018_num_seg_funcionario_Emisor=:fk_a018_num_seg_funcionario_Emisor,
        fk_a018_num_seg_funcionario_Receptor=:fk_a018_num_seg_funcionario_Receptor
    ");

        $asignacion->execute(array(
            'fk_numSolicitud' => $idSolicitud,
            'fk_a018_num_seg_funcionario_Emisor' => $this->atIdEmpleado,
            'fk_a018_num_seg_funcionario_Receptor' => $receptor
        ));
        $idAgregado = $this->_db->lastInsertId();
        $fallaTansaccion = $asignacion->errorInfo();


        if (!empty($fallaTansaccion[1]) && !empty($fallaTansaccion[2])) {
            $this->_db->rollBack();

        } else {
            $this->_db->commit();
            $this->metValidarAsignacionTicket($idSolicitud,$subCategoria,$estadoSolicitud);
        }
        return $idAgregado;
    }
    public function metValidarAsignacionTicket($idTicket,$subCategoria,$estadoAnterior){

        $asignados = $this->metObtenerUsuariosAgiandos($idTicket);
        $estado =$estadoAnterior;//Validar que el estado anterior sea el texto(?)
        $encontrado=false;
        foreach ($asignados as $asignado){
            if($asignado['estado_asignacion'] == 'Activo'){

                $rolesFuncAsignado = $this->metGetRolFuncionario($asignado['fk_a018_num_seg_funcionario_Receptor']);
                //$rolesFuncAsignado = $rolesFuncAsignado[0];
                $rolesFuncAsignado = $rolesFuncAsignado['atender_conceptos'];
                $rolesFuncAsignado = explode(",", $rolesFuncAsignado);

                if (in_array($subCategoria, $rolesFuncAsignado)) {

                    if(strpos('aprobado',$estadoAnterior) !== false){
                        $estado=1233; //Siendo Atentido. Detalle Aprobado
                    }else if(strpos('rechazado',$estadoAnterior) !== false){
                        $estado=1234; //Siendo Atentido. Detalle Rechazado
                    }else if(strpos('aprobado',$estadoAnterior) !== false){
                        $estado=1232; //Siendo Atentido. Detalle Esperando Aprob.
                    }else{
                        $estado=1231; //Siendo Atentido
                    }
                    $encontrado=true;
                    break;
                }
            }

        }

        if(strpos('siendo atendido',$estadoAnterior) !== false  && $encontrado == false){

            if(strpos('aprobado',$estadoAnterior) !== false){
                $estado=1236; //Activo. Detalle Aprobado
            }else if(strpos('rechazado',$estadoAnterior) !== false){
                $estado=1237; //Activo. Detalle Rechazado
            }else if(strpos('aprobado',$estadoAnterior) !== false){
                $estado=1235; //Activo. Detalle Esperando Aprob.
            }else{
                $estado=1224; //Activo.
            }


        }
            $this->_db->beginTransaction();

            $validacion = $this->_db->prepare("
                    UPDATE 
                        ca_b001_solicitud
                    set 
                        fk_a006_miscelaneo_detalle = ".$estado.",
                        estado = (select ind_nombre_detalle from a006_miscelaneo_detalle where a006_miscelaneo_detalle.pk_num_miscelaneo_detalle = ".$estado.")
                    where 
                        pk_num_solicitud=:pk_num_solicitud
             ");


            $validacion->execute(array(
                'pk_num_solicitud' => $idTicket
            ));

            $this->_db->commit();

    }
    public function metNuevaSolicitud($idEmpleadoAsignado,$titulo,$nivelPrioridad, $dependencia, $observacion,$subCategoria, $fechaLimite, $ArrayIDSFuncionariosAsignacion)
    {
        $estado=1224;



        if ($nivelPrioridad < 2 || ($nivelPrioridad > 1 && $this->myInfo['logeadoIsJefe'] == 1)) {
            $estado = 1224; //Activo
        } else {
            $estado = 1226; //"Esperando aprobacion";
        }


        $this->_db->beginTransaction();
        $newSolicitud = $this->_db->prepare("
    INSERT INTO
        ca_b001_solicitud
    set 
        titulo=:titulo,
        fk_num_concepto_Ticket=:fk_num_concepto_Ticket,
        fecha_creacion= NOW(),
        fecha_modificacion=NOW(),
        fk_a018_num_seg_funcionario_Emisor=:fk_a018_num_seg_funcionario_Emisor,
        estado = (select ind_nombre_detalle from a006_miscelaneo_detalle where a006_miscelaneo_detalle.pk_num_miscelaneo_detalle = ".$estado." ),
        fk_a006_miscelaneo_detalle = ".$estado." ,
        fecha_Limite=:fecha_Limite,
        observacion=:observacion,
        fk_a004_num_dependencia=:fk_a004_num_dependencia
    ");



        $newSolicitud->execute(array(
            'titulo'=> $titulo,
            'fk_num_concepto_Ticket' => $subCategoria,
            'fk_a018_num_seg_funcionario_Emisor' => $idEmpleadoAsignado!=0?$idEmpleadoAsignado: $this->atIdEmpleado,
            'fecha_Limite' => $fechaLimite,
            'observacion' => $observacion,
            'fk_a004_num_dependencia' => $dependencia
        ));



        $fallaTansaccion = $newSolicitud->errorInfo();


        if (!empty($fallaTansaccion[1]) && !empty($fallaTansaccion[2])) {
            $this->_db->rollBack();
            return $fallaTansaccion;
        } else {

            $idAgregado = $this->_db->lastInsertId();


            if(isset($ArrayIDSFuncionariosAsignacion)){
                $newAsignacion = $this->_db->prepare("
                insert into
                    ca_c001_asignacion_funcionario_solicitud
                set
                    fk_numSolicitud=:fk_numSolicitud,
                    fechaAsignacion=NOW(),
                    fk_a018_num_seg_funcionario_Emisor=:fk_a018_num_seg_funcionarioEmisor,
                    fk_a018_num_seg_funcionario_Receptor=:fk_a018_num_seg_funcionarioReceptor,
                    estado_asignacion='Activo'
            ");

                foreach ($ArrayIDSFuncionariosAsignacion as $funcionario) {
                    $newAsignacion->execute(array(
                        'fk_numSolicitud' => $idAgregado,
                        'fk_a018_num_seg_funcionarioEmisor' => $this->atIdEmpleado,
                        'fk_a018_num_seg_funcionarioReceptor' => $funcionario['idEmpleado']
                    ));
                }
                $falla02 = $newAsignacion->errorInfo();

                if(!empty($falla02[1]) && !empty($falla02[2])){
                    $this->_db->rollBack();
                    return $fallaTansaccion;
                }else{
                    $this->_db->commit();
                    $this->metValidarAsignacionTicket($idAgregado,$subCategoria,$estado);
                }
            }else{
                $this->_db->commit();
            }
        }
        return $idAgregado;
    }
    public function metModificarSolicitud($idSolicitud, $titulo,$estadoSolicitud, $observacion, $conceptoTicket, $dependencia, $activo, $fechaLimite){
        $this->_db->beginTransaction();

        $modificar = $this->_db->prepare("
            UPDATE
                ca_b001_solicitud
            SET 
                titulo=:titulo,
                fk_num_concepto_Ticket=:fk_num_concepto_Ticket,
                fecha_modificacion=NOW(),
                fk_b001_num_activo=:fk_b001_num_activo,
                fecha_Limite=:fecha_Limite,
                observacion=:observacion,
                fk_a004_num_dependencia=:fk_a004_num_dependencia
            WHERE
                pk_num_solicitud=:pk_num_solicitud
                    
        ");

        $modificar->execute(array(
            'titulo' => $titulo,
            'fk_num_concepto_Ticket' =>$conceptoTicket,
            'fk_b001_num_activo' => $activo,
            'fecha_Limite' => $fechaLimite,
            'observacion' => $observacion,
            'fk_a004_num_dependencia' => $dependencia,
            'pk_num_solicitud' => $idSolicitud

        ));

        $fallaTansaccion = $modificar->errorInfo();


        if (!empty($fallaTansaccion[1]) && !empty($fallaTansaccion[2])) {
            $this->_db->rollBack();
            return $fallaTansaccion;
        } else {
            $this->_db->commit();
            $this->metValidarAsignacionTicket($idSolicitud,$conceptoTicket,$estadoSolicitud);
            return 1;
        }

    }
    public function metPausarSolicitud($idSolicitud,$estadoPrevio){
        $this->_db->beginTransaction();
        //1225 Miscelaneo Detalle de Ticket Pausado
        $pausaTicket = $this->_db->prepare("
            UPDATE
                ca_b001_solicitud
            SET 
                fecha_modificacion=NOW(),
                fk_a006_miscelaneo_detalle = 1225, 
                estado = (select ind_nombre_detalle from a006_miscelaneo_detalle where a006_miscelaneo_detalle.pk_num_miscelaneo_detalle = 1225),
                fecha_pausa = now(),
                fk_rhb001_num_empleado_pausa=:fk_rhb001_num_empleado_pausa,
                estado_previo_pausa=:estado_previo_pausa
            WHERE
                pk_num_solicitud=:pk_num_solicitud
                    
        ");

        $pausaTicket->execute(array(
            'pk_num_solicitud' => $idSolicitud,
            'fk_rhb001_num_empleado_pausa' => $this->atIdEmpleado,
            'estado_previo_pausa'=> $estadoPrevio

        ));

        $fallaTansaccion = $pausaTicket->errorInfo();


        if (!empty($fallaTansaccion[1]) && !empty($fallaTansaccion[2])) {
            $this->_db->rollBack();
            return $fallaTansaccion;
        } else {
            $this->_db->commit();
            return 1;
        }

    }
    public function metActivarSolicitud($idSolicitud,$estadoPrevio){
        $this->_db->beginTransaction();

        $nuevoEstado = 1226; //Esperando Aprobacion

        if( strpos('Activo',$estadoPrevio) !== false){

            if(strpos('aprobado',$estadoPrevio) !== false){
                $nuevoEstado=1236; //Activo. Detalle Aprobado
            }else if(strpos('rechazado',$estadoPrevio) !== false){
                $nuevoEstado=1237; //Activo. Detalle Rechazado
            }else if(strpos('aprobado',$estadoPrevio) !== false){
                $nuevoEstado=1235; //Activo. Detalle Esperando Aprob.
            }else{
                $nuevoEstado=1224; //Activo.
            }

        }


        $activarTicket = $this->_db->prepare("
            UPDATE
                ca_b001_solicitud
            SET 
                fecha_modificacion = NOW(),
                fecha_reactivacion = now(),
                estado = (select ind_nombre_detalle from a006_miscelaneo_detalle where a006_miscelaneo_detalle.pk_num_miscelaneo_detalle = ".$nuevoEstado." ),
                fk_a006_miscelaneo_detalle = ".$nuevoEstado.",
                fk_rhb001_num_empleado_pausa =NULL,
                fecha_pausa=NULL,
                estado_previo_pausa = NULL
                
            WHERE
                pk_num_solicitud=:pk_num_solicitud
                    
        ");

        $activarTicket->execute(array(
            'pk_num_solicitud' => $idSolicitud

        ));

        $fallaTansaccion = $activarTicket->errorInfo();

        if (!empty($fallaTansaccion[1]) && !empty($fallaTansaccion[2])) {
            $this->_db->rollBack();
            return $fallaTansaccion;
        } else {
            $this->_db->commit();
            return 1;
        }

    }
    public function metAprobarSolicitud($idSolicitud){
        $this->_db->beginTransaction();

        $aprobarTicket = $this->_db->prepare("
            UPDATE
                ca_b001_solicitud
            SET 
                fecha_modificacion = NOW(),
                fecha_aprobacion = now(),
                fk_a018_num_seg_funcionario_aprobado = ".$this->atIdEmpleado." ,
                fk_a006_miscelaneo_detalle = 1224, 
                estado = (select ind_nombre_detalle from a006_miscelaneo_detalle where a006_miscelaneo_detalle.pk_num_miscelaneo_detalle = 1224)
                
            WHERE
                pk_num_solicitud=:pk_num_solicitud
                    
        ");

        $aprobarTicket->execute(array(
            'pk_num_solicitud' => $idSolicitud,
        ));

        $fallaTansaccion = $aprobarTicket->errorInfo();

        if (!empty($fallaTansaccion[1]) && !empty($fallaTansaccion[2])) {
            $this->_db->rollBack();
            return $fallaTansaccion;
        } else {
            $this->_db->commit();
            return 1;
        }

    }
    public function metCancelarSolicitud($idSolicitud,$justificacion){
        $this->_db->beginTransaction();
        //1239 Es Miscelaneo Detalle de Ticket Cancelado
        $modificar = $this->_db->prepare("
            UPDATE
                ca_b001_solicitud
            SET 
                fecha_modificacion=NOW(),
                fk_a006_miscelaneo_detalle = 1239, 
                estado = (select ind_nombre_detalle from a006_miscelaneo_detalle where a006_miscelaneo_detalle.pk_num_miscelaneo_detalle = 1239),
                justificacion_cancelacion=:justificacion_cancelacion
            WHERE
                pk_num_solicitud=:pk_num_solicitud
                    
        ");

        $modificar->execute(array(
            'pk_num_solicitud' => $idSolicitud,
            'justificacion_cancelacion'=> $justificacion

        ));

        $fallaTansaccion = $modificar->errorInfo();


        if (!empty($fallaTansaccion[1]) && !empty($fallaTansaccion[2])) {
            $this->_db->rollBack();
            return $fallaTansaccion;
        } else {
            $this->_db->commit();
            return 1;
        }

    }
    public function metCerrarTicket($idSolicitud, $justificacion, $resolucion,$archivos,$fuente_solicitud){
        $this->_db->beginTransaction();

        $nuevoEstado = 1227; //Esperando Evaluacion - id Miscelaneo detalle

        if( strpos('inconcluso',$resolucion) !== false){
            $nuevoEstado = 1228; //Inconcluso - id Miscelaneo detalle
        }

        $cierreTicket = $this->_db->prepare("
            UPDATE
                ca_b001_solicitud
            SET 
                fecha_cierre = NOW(),
                fecha_modificacion=NOW(),
                fuente_solicitud=:fuente_solicitud,
                fk_a006_miscelaneo_detalle = ".$nuevoEstado." , 
                estado = (select ind_nombre_detalle from a006_miscelaneo_detalle where a006_miscelaneo_detalle.pk_num_miscelaneo_detalle = ".$nuevoEstado."),
                observacion_Cierre_Ticket=:justificacion,
                fk_a018_num_seg_funcionario_Cierre=:usuarioCierre
            WHERE
                pk_num_solicitud=:pk_num_solicitud
                    
        ");

        $cierreTicket->execute(array(
            'usuarioCierre' =>$this->atIdEmpleado,
            'justificacion' => $justificacion,
            'fuente_solicitud' => $fuente_solicitud,
            'pk_num_solicitud' => $idSolicitud

        ));

        $fallaTansaccion = $cierreTicket->errorInfo();


        if (!empty($fallaTansaccion[1]) && !empty($fallaTansaccion[2])) {
            $this->_db->rollBack();
            return $fallaTansaccion;
        } else {

            $newArchivo = $this->_db->prepare("
                insert into
                    ca_d001_archivos_detalle_solicitud
                set
                 fk_num_solicitud=:fk_num_solicitud,
                 ruta=:ruta
            ");

            foreach ($archivos['name'] as $key => $nombre) {
                $newArchivo->execute(array(
                    'fk_num_solicitud' => $idSolicitud,
                    'ruta' => $nombre
                ));
                $fallaTansaccion2 = $newArchivo->errorInfo();

            }

            if (!empty($fallaTansaccion2[1]) && !empty($fallaTansaccion2[2])) {
                $this->_db->rollBack();
                return $fallaTansaccion2;
            } else {
                $this->_db->commit();
                return 1;
            }

        }

    }
    public function metEvaluarTicket($numTicket,$resolucion){
        $this->_db->beginTransaction();

        //1230 Ticket Cerrado - Id miscelaneo detalle
        $evaluarTicket = $this->_db->prepare("
            UPDATE
                ca_b001_solicitud
            SET 
                fecha_evaluacion = NOW(),
                fecha_modificacion = NOW(),
                fk_a006_miscelaneo_detalle = 1230, 
                estado = (select ind_nombre_detalle from a006_miscelaneo_detalle where a006_miscelaneo_detalle.pk_num_miscelaneo_detalle = 1230),
                respuesta_evaluacion=:respuesta_evaluacion
                
            WHERE
                pk_num_solicitud=:pk_num_solicitud
                    
        ");

        $evaluarTicket->execute(array(
            'respuesta_evaluacion' => $resolucion,
            'pk_num_solicitud' => $numTicket

        ));

        $fallaTansaccion = $evaluarTicket->errorInfo();


        if (!empty($fallaTansaccion[1]) && !empty($fallaTansaccion[2])) {
            $this->_db->rollBack();
            return 0;

        } else {
            $this->_db->commit();
            return 1;
        }

    }
    public function metListarDependenciaVisita()
    {
        $registro = $this->_db->query(
            "SELECT * 
            FROM a004_dependencia
            INNER JOIN cv_b001_registro_visita ON cv_b001_registro_visita.fk_a004_num_dependencia = a004_dependencia.pk_num_dependencia
            GROUP BY a004_dependencia.pk_num_dependencia"
        );
        $registro->setFetchMode(PDO::FETCH_ASSOC);
        return $registro->fetchAll();
    }
    public function metListarCategoriasPrincipales()
    {
        $registro = $this->_db->query(
            "SELECT * 
            FROM ca_a001_concepto_ticket
            Order by pk_num_concepto asc"
        );
        $registro->setFetchMode(PDO::FETCH_ASSOC);
        return $registro->fetchAll();
    }
    public function metListarCategoriasOrdenado()
    {
        $registro = $this->_db->query(
            "SELECT 
                        hijo.pk_num_concepto,
                         hijo.categoria,
                         hijo.fk_num_ticket_padre,
                         hijo.estado_concepto,
                            padre.categoria as nombrePadre
                    FROM ca_a001_concepto_ticket as padre
                    inner  join ca_a001_concepto_ticket as hijo on padre.pk_num_concepto = hijo.fk_num_ticket_padre
                    where padre.fk_num_ticket_padre = 0
                    GROUP BY hijo.pk_num_concepto"
        );
        $registro->setFetchMode(PDO::FETCH_ASSOC);
        return $registro->fetchAll();
    }
    public function metObtenerArchivosDetalle($fk_num_detalle)
    {
        $registro = $this->_db->query(
            "select * from 
             ca_d001_archivos_detalle_solicitud 
         where fk_num_detalle = $fk_num_detalle 
         order by pk_num_archivo desc"
        );
        $registro->setFetchMode(PDO::FETCH_ASSOC);
        return $registro->fetchAll();
    }

    // Metodos Version 1.0    -  Metodos Version 1.0    - Metodos Version 1.0    - Metodos Version 1.0    - Metodos Version 1.0    - Metodos Version 1.0

    public function metVerALL()
    {
        $usuario = $this->_db->query(
            "select * from 
              st_d001_solicitud,
              rh_b001_empleado,
              a003_persona 
              where 
              st_d001_solicitud.fk_rhb001_num_empleado_solicitante=rh_b001_empleado.pk_num_empleado
              and rh_b001_empleado.fk_a003_num_persona=a003_persona.pk_num_persona "
        );
        $usuario->setFetchMode(PDO::FETCH_ASSOC);
        return $usuario->fetchAll();

    }
    // Metodo que permite obtener el nombre de un empleado
    public function metConsultarEmpleado($pkNumEmpleado)
    {
        $empleado = $this->_db->query(
            "select ind_nombre1, ind_nombre2, ind_apellido1, ind_apellido2 from vl_rh_persona_empleado where pk_num_empleado=$pkNumEmpleado"
        );
        $empleado->setFetchMode(PDO::FETCH_ASSOC);
        return $empleado->fetch();
    }
    public function metFechaSolicitud($idRegistro)
    {
        $fecha = $this->_db->query("
          SELECT fecha_solicitud FROM
        st_d001_solicitud WHERE pk_num_solicitud='$idRegistro'
       "
        );
        $fecha->setFetchMode(PDO::FETCH_ASSOC);
        return $fecha->fetch();
    }
    public function metEquipoSolicitud($idRegistro)
    {
        $equipo = $this->_db->query("
          SELECT ind_descripcion,pk_num_activo,pk_num_solicitud,ind_equipo  FROM
        af_b001_activo,st_d001_solicitud WHERE st_d001_solicitud.pk_num_solicitud='$idRegistro' AND af_b001_activo.pk_num_activo=st_d001_solicitud.ind_equipo
       "
        );
        $equipo->setFetchMode(PDO::FETCH_ASSOC);
        return $equipo->fetch();

    }
    public function metEliminar($pk_num_solicitud)
    {
        $this->_db->beginTransaction();
        $this->_db->query(
            "delete from st_d001_solicitud " .
            "where pk_num_solicitud = '$pk_num_solicitud'"
        );
        $this->_db->commit();
    }
    public function metListarTodo()
    {
        $solicitud = $this->_db->query(
            "
          SELECT
			st_d001.*
          FROM
           st_d001_solicitud st_d001
			 LEFT JOIN
          af_b001_activo ON af_b001_activo.pk_num_activo = st_d001.ind_equipo
           LEFT JOIN
          st_d001_modalidad ON st_d001_modalidad.pk_num_modalidad = st_d001.fk_num_modalidad
			   LEFT JOIN
          st_d001_evaluacion ON st_d001_evaluacion.pk_num_evaluacion = st_d001.fk_num_evaluacion
          		
		  
			"
        );
        $solicitud->setFetchMode(PDO::FETCH_ASSOC);
        return $solicitud->fetchAll();
    }
    public function metListarTodov($id_solicitud)
    {
        $solicitud = $this->_db->query(
            "SELECT * FROM  st_d001_solicitud,af_b001_activo,rh_b001_empleado,a003_persona,st_d001_evaluacion,st_d001_modalidad  WHERE af_b001_activo.pk_num_activo=ind_equipo
AND st_d001_solicitud.fk_rhb001_num_empleado_solicitante=rh_b001_empleado.pk_num_empleado
AND rh_b001_empleado.fk_a003_num_persona=a003_persona.pk_num_persona
AND st_d001_solicitud.fk_num_modalidad=st_d001_modalidad.pk_num_modalidad
AND st_d001_solicitud.fk_num_evaluacion=st_d001_evaluacion.pk_num_evaluacion

AND st_d001_solicitud.pk_num_solicitud='$id_solicitud'

"
        );
        $solicitud->setFetchMode(PDO::FETCH_ASSOC);
        return $solicitud->fetchAll();
    }
//Buscar las solicitudes
    public function metBuscarSolicitud($idSolicitud)
    {
        $Solicitud = $this->_db->query(
            "SELECT 
                solicitud.*,
                dependencia.ind_dependencia,
                CONCAT_WS(' ',persona.ind_nombre1,persona.ind_nombre2,persona.ind_apellido1,persona.ind_apellido2) AS funcionario
            FROM 
                st_d001_solicitud AS solicitud 
                INNER JOIN a004_dependencia AS dependencia ON dependencia.pk_num_dependencia = solicitud.fk_a004_num_dependencia 
                INNER JOIN rh_b001_empleado AS empleado ON empleado.pk_num_empleado = solicitud.fk_rhb001_num_empleado_solicitante
                INNER JOIN a003_persona AS persona ON persona.pk_num_persona = empleado.fk_a003_num_persona
            WHERE 
                solicitud.pk_num_solicitud ='" . $idSolicitud . "'"
        );
        $Solicitud->setFetchMode(PDO::FETCH_ASSOC);
        return $Solicitud->fetch();
    }
    public function metDependenciaDependiente($usuario)
    {
        $persona = $this->_db->query(
            "SELECT 
			a004.ind_codinterno,
			a004.ind_dependencia,
			a004.pk_num_dependencia,
		  a019_seguridad_dependencia.fk_a004_num_dependencia AS dependencias
			FROM
			a004_dependencia a004 
			 LEFT JOIN 
		  a019_seguridad_dependencia on a019_seguridad_dependencia.fk_a004_num_dependencia=a004.pk_num_dependencia
			 WHERE 
			 a019_seguridad_dependencia.fk_a018_num_seguridad_usuario=$usuario 
			 AND a019_seguridad_dependencia.fk_a015_num_seguridad_aplicacion='4'
            
			
			"
        );
        $persona->setFetchMode(PDO::FETCH_ASSOC);
        return $persona->fetchAll();
    }

//Buscar la dependencia del solicitante
    public function metBuscarPersona()
    {
        $empleado = $this->_db->query("
          SELECT * FROM 
          rh_b001_empleado,a018_seguridad_usuario,a003_persona
          WHERE 
        a018_seguridad_usuario.fk_rhb001_num_empleado=rh_b001_empleado.pk_num_empleado
          AND
          rh_b001_empleado.fk_a003_num_persona=a003_persona.pk_num_persona
          AND 
          rh_b001_empleado.pk_num_empleado='" . $this->atIdEmpleado . "'"
        );
        $empleado->setFetchMode(PDO::FETCH_ASSOC);
        return $empleado->fetchAll();
    }
    public function metGuardarNueva($fk_a003_num_persona, $ind_equipo, $ind_dependencia, $ind_detalles, $fk_num_tipo_solicitud)
    {
        $this->_db->beginTransaction();
        $registroUnidades = $this->_db->prepare("
          INSERT INTO
            st_d001_solicitud
          SET
          
            fecha_solicitud=NOW(),
            fk_num_modalidad='1',
            ind_equipo=:ind_equipo,
            ind_detalles=:ind_detalles,
            ind_detalles_analista=NULL ,
            ind_detalles_supervisor=NULL ,
            num_estatus='0',
            ind_estatus='Preparado',
            ind_sugerencias=NULL , 
            fk_num_evaluacion='1' ,
            ind_aprobado_por=NULL ,
            ind_ip=NULL ,
            fk_rhb001_num_empleado_asignado=NULL ,
            fk_rhb001_num_empleado_supervisor=NULL ,
            ind_detalles_analista_final=NULL ,
            fk_num_tipo_solicitud=$fk_num_tipo_solicitud,
            fk_num_tipo_soporte=NULL ,
            fk_a004_num_dependencia=:ind_dependencia,
            fk_rhb001_num_empleado_solicitante=:empleado,
            fec_ultima_modificacion=NOW(),
            fk_a018_num_seguridad_usuario='$this->atIdUsuario',
             ind_fecha_inicio=NULL ,
            ind_fecha_fin=NULL 
          ");

        $registroUnidades->execute(array(
            'empleado' => $fk_a003_num_persona,
            'ind_equipo' => $ind_equipo,
            'ind_dependencia' => $ind_dependencia,
            'ind_detalles' => $ind_detalles
        ));

        $idRegistroa = $this->_db->lastInsertId();

        $this->_db->query(
            "update st_d001_solicitud set st_d001_solicitud.num_flag_mantenimiento='1'  where st_d001_solicitud.pk_num_solicitud=last_insert_id()"
        );

        $actSolicitud = $this->_db->query("
                    INSERT INTO
                    st_d002_registro
                    SET 
                        fk_std001_num_relacion='$idRegistroa' ,
                         st_d002_registro.fec_creado = NOW()
                
        ");

        $actSolicitud2 = $this->_db->query("
                    INSERT INTO
                    st_a001_equipo
                    SET 
                        fk_num_activo='$ind_equipo',
                        st_a001_equipo.fec_ultima_modificacion = NOW(),
                        st_a001_equipo.fk_a018_num_seguridad_usuario='$this->atIdUsuario',
                        st_a001_equipo.fk_num_dependencia='$ind_dependencia',
                        st_a001_equipo.ind_estatus='0'
        ");


        $fallaTansaccion = $registroUnidades->errorInfo();

        if (!empty($fallaTansaccion[1]) && !empty($fallaTansaccion[2])) {
            $this->_db->rollBack();
            return $fallaTansaccion;
        } else {
            #$idRegistroa= $this->_db->lastInsertId();
            $this->_db->commit();

        }

        return $idRegistroa;
    }
    public function metActEstadoSolicitud($idSolicitud, $estatus, $campo)
    {

        $this->_db->beginTransaction();
        $actSolicitud1 = $this->_db->prepare("
                  UPDATE
                    st_d001_solicitud
                  SET
                   num_estatus=:num_estatus,
                   fk_a018_num_seguridad_usuario='$this->atIdUsuario',
                    fec_ultima_modificacion=NOW()
                  WHERE
                     pk_num_solicitud='" . $idSolicitud . "'
        ");
        $actSolicitud1->execute(array(
            'num_estatus' => $estatus + 1
        ));

        $actSolicitud2 = $this->_db->query("
                    UPDATE 
                        st_d002_registro
                    SET 
                        $campo = NOW()
                    WHERE 
                        fk_std001_num_relacion = '" . $idSolicitud . "'
        ");

        $error = $actSolicitud1->errorInfo();

        if (!empty($error[1]) && !empty($error[2])) {
            $this->_db->rollBack();
            return $error;
        } else {
            $this->_db->commit();
            return $idSolicitud;
        }
    }
    public function metEquipo()
    {
        $equipo = $this->_db->query(
            "SELECT * FROM rh_b001_empleado,a003_persona,af_b001_activo
WHERE 
             rh_b001_empleado.fk_a003_num_persona=a003_persona.pk_num_persona 
             AND af_b001_activo.fk_a003_num_persona_responsable=a003_persona.pk_num_persona
             AND af_b001_activo.num_flag_activo_tecnologico='1'
          AND rh_b001_empleado.pk_num_empleado='" . $this->atIdEmpleado . "'
          

"
        );
        $equipo->setFetchMode(PDO::FETCH_ASSOC);
        return $equipo->fetchAll();
    }
    public function metTipo()
    {
        $tipo = $this->_db->query(
            "SELECT * FROM st_b002_tipo_solicitud"
        );
        $tipo->setFetchMode(PDO::FETCH_ASSOC);
        return $tipo->fetchAll();
    }
    public function metListarUsuario()
    {
        $usuario = $this->_db->query(
            "SELECT a.pk_num_empleado, b.ind_nombre1, b.ind_apellido1 FROM rh_b001_empleado AS a, a003_persona AS b
             WHERE a.fk_a003_num_persona=b.pk_num_persona  ORDER BY b.ind_nombre1 ASC");
        $usuario->setFetchMode(PDO::FETCH_ASSOC);
        #retorno lo consultado al controlador para ser usado.
        #fetchAll — Devuelve un array que contiene todas las filas del conjunto de resultados
        return $usuario->fetchAll();
    }
    public function metListarDependencia()
    {
        // Consulto las dependencias de la contraloría y se las asigno a la variable $dependencia
        $dependencia = $this->_db->query(
            "SELECT pk_num_dependencia, ind_dependencia, num_piso FROM a004_dependencia ORDER BY ind_dependencia"
        );
        #devuelvo la consulta para ser usada en php con formato json.
        #PDO::FETCH_ASSOC: devuelve un array indexado por los nombres de las columnas del conjunto de resultados.
        $dependencia->setFetchMode(PDO::FETCH_ASSOC);
        #retorno lo consultado al controlador para ser usado.
        #fetchAll — Devuelve un array que contiene todas las filas del conjunto de resultados
        return $dependencia->fetchAll();
    }
    public function metListarEmpleado()
    {
        $listarEmpleado = $this->_db->query(
            "
          SELECT * FROM 
          rh_b001_empleado,a018_seguridad_usuario,a003_persona
          WHERE 
        a018_seguridad_usuario.fk_rhb001_num_empleado=rh_b001_empleado.pk_num_empleado
          AND
          rh_b001_empleado.fk_a003_num_persona=a003_persona.pk_num_persona
          AND 
          rh_b001_empleado.pk_num_empleado='" . $this->atIdUsuario . "'"
        );
        $listarEmpleado->setFetchMode(PDO::FETCH_ASSOC);
        return $listarEmpleado->fetchAll();
    }
    public function metListar()
    {
        $usuarios = $this->_db->query(
            "SELECT *
    FROM a003_persona,af_b001_activo
         WHERE 
        a003_persona.pk_num_persona=af_b001_activo.fk_a003_num_persona_responsable
         ORDER BY ind_nombre1 ASC");
        $usuarios->setFetchMode(PDO::FETCH_ASSOC);
        return $usuarios->fetchAll();
    }


}
