<?php

#Actualizado
class rolesModelo extends Modelo
{
    private $atIdUsuario;
    private $atIdEmpleado;
    public function __construct()
    {
        parent::__construct();
        $this->atIdUsuario = Session::metObtener('idUsuario');
        $this->atIdEmpleado = Session::metObtener('idEmpleado');
    }


    public function metListarConceptos()
    {
        $registro = $this->_db->query(
            "SELECT 
                         concepto.*
                        ,depEncargada.ind_dependencia as nombre_dependencia_encargada
                        ,conceptoPadre.categoria as nombre_concepto_padre
                   FROM 
                        ca_a001_concepto_ticket as concepto
                   LEFT JOIN a004_dependencia as depEncargada on concepto.dependencia_encargada = depEncargada.pk_num_dependencia
                   LEFT JOIN ca_a001_concepto_ticket as conceptoPadre on concepto.fk_num_ticket_padre = conceptoPadre.pk_num_concepto
                 Order by fk_num_ticket_padre asc"
        );
        $registro->setFetchMode(PDO::FETCH_ASSOC);


        return $registro->fetchAll();
    }
    public function metListarRoles()
    {
        $registro = $this->_db->query(
            "SELECT 
                        rol.*
                        , CONCAT(personaEmisor.ind_nombre1,' ',personaEmisor.ind_apellido1) as nombre_Funcionario_Emisor
                        , dependenciaUsuario.ind_dependencia as nombreDependenciaUsuario
                   FROM 
                        ca_a002_rol_ticket as rol
                   
                   left join rh_b001_empleado as rhb001UsuEmisor on rol.fk_a018_num_seg_funcionario_asignado = 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 relacionEmpleado on rhb001UsuEmisor.pk_num_empleado = relacionEmpleado.fk_rhb001_num_empleado     
                   left join a004_dependencia as dependenciaUsuario on relacionEmpleado.fk_a004_num_dependencia = dependenciaUsuario.pk_num_dependencia
                 
                  Order by rol.pk_num_rol desc"
        );
        $registro->setFetchMode(PDO::FETCH_ASSOC);
        return $registro->fetchAll();
    }
    public function metGetDependenciaUsuarioLogeado($usuario){
    $registro = $this->_db->query(
        "SELECT 
                         empleado.pk_num_seguridad_usuario
                        , dependenciaUsuario.ind_dependencia as nombreDependenciaUsuario
                        ,dependenciaUsuario.pk_num_dependencia as idDependenciaUsuario
                   FROM 
                        a018_seguridad_usuario as empleado
                   left join rh_b001_empleado as codEmpleado on empleado.fk_rhb001_num_empleado = codEmpleado.pk_num_empleado         
                   left join rh_c076_empleado_organizacion as relacionEmpleado on codEmpleado.pk_num_empleado = relacionEmpleado.fk_rhb001_num_empleado            
                   left join a004_dependencia as dependenciaUsuario on relacionEmpleado.fk_a004_num_dependencia = dependenciaUsuario.pk_num_dependencia
                   
                   WHERE empleado.pk_num_seguridad_usuario =$usuario
                   Order by empleado.pk_num_seguridad_usuario desc"
    );

        $registro->setFetchMode(PDO::FETCH_ASSOC);
        return $registro->fetchAll();
    }
    public function metGetRol($pk_num_rol){
        $registro = $this->_db->query(
            "SELECT 
                         rol.*
                        , CONCAT(persona.ind_nombre1,' ',persona.ind_apellido1) as nombre_Funcionario
                        , dependenciaUsuario.ind_dependencia as nombreDependenciaUsuario
                        , CONCAT(personaModifica.ind_nombre1,' ',personaModifica.ind_apellido1) as nombre_Funcionario_Modifica
                   FROM 
                        ca_a002_rol_ticket as rol
                   
                   left join rh_b001_empleado as rhb001UsuEmisor on rol.fk_a018_num_seg_funcionario_asignado = rhb001UsuEmisor.pk_num_empleado
                   left join a003_persona as persona on persona.pk_num_persona = rhb001UsuEmisor.fk_a003_num_persona         
                            
                   left join rh_c076_empleado_organizacion as relacionEmpleado on rhb001UsuEmisor.pk_num_empleado = relacionEmpleado.fk_rhb001_num_empleado            
                   left join a004_dependencia as dependenciaUsuario on relacionEmpleado.fk_a004_num_dependencia = dependenciaUsuario.pk_num_dependencia
                   
                   left join rh_b001_empleado as rhb001UsuModifica on rol.fk_a018_num_seg_funcionario_modifica = rhb001UsuModifica.pk_num_empleado
                   left join a003_persona as personaModifica on personaModifica.pk_num_persona = rhb001UsuModifica.fk_a003_num_persona         
                   
                   WHERE rol.pk_num_rol = $pk_num_rol
                   
                   Order by rol.pk_num_rol desc"
        );
        $registro->setFetchMode(PDO::FETCH_ASSOC);
        return $registro->fetchAll();
    }
    public function metExisteRegistro($idEmpleado)
    {
        $registro = $this->_db->query(
            "SELECT 
                         *
                   FROM 
                        ca_a002_rol_ticket 
                   WHERE fk_a018_num_seg_funcionario_asignado = $idEmpleado
                   
                   "
        );
        $registro->setFetchMode(PDO::FETCH_ASSOC);
        $resultado = $registro->fetchAll();

        $encontrado = -1;
        foreach ($resultado as $fila) {
            $encontrado =  $fila['pk_num_rol'];
            break;
        }


        return $encontrado;
    }
    public function metListarDependencias(){
        $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 metAgregarRol($idEmpleado, $categoriasSeleccionadas){
        $this->_db->beginTransaction();

        $nuevoRol = $this->_db->prepare("
        INSERT INTO
            ca_a002_rol_ticket
        set 
            fk_a018_num_seg_funcionario_asignado=:fk_a018_num_seg_funcionario_asignado,
            atender_conceptos=:atender_conceptos,
            fecha_modificacion = now(),
            fk_a018_num_seg_funcionario_modifica = $this->atIdEmpleado
            
        ");

        $nuevoRol->execute(array(
            'fk_a018_num_seg_funcionario_asignado'=> $idEmpleado,
            'atender_conceptos'=> $categoriasSeleccionadas
        ));

        $idAgregado = $this->_db->lastInsertId();
        $fallaTansaccion = $nuevoRol->errorInfo();


        if (!empty($fallaTansaccion[1]) && !empty($fallaTansaccion[2])) {
            $this->_db->rollBack();
            return $fallaTansaccion;
        } else {

            $this->_db->commit();
            return $idAgregado;
        }

    }
    public function metModificarRol($idRol,$idEmpleado, $categoriasSeleccionadas,$estadoRol){
        $this->_db->beginTransaction();
        $nuevoRol = $this->_db->prepare("
        UPDATE
            ca_a002_rol_ticket
        SET 
            fk_a018_num_seg_funcionario_asignado=:fk_a018_num_seg_funcionario_asignado,
            atender_conceptos=:atender_conceptos,
            estado_rol=:estado_rol,
            fecha_modificacion= now(),
            fk_a018_num_seg_funcionario_modifica=:fk_a018_num_seg_funcionario_modifica
        WHERE 
            pk_num_rol=:pk_num_rol
            
        ");

        $nuevoRol->execute(array(
            'fk_a018_num_seg_funcionario_asignado'=> $idEmpleado,
            'atender_conceptos'=> $categoriasSeleccionadas,
            'estado_rol'=> $estadoRol,
            'pk_num_rol' => $idRol,
            'fk_a018_num_seg_funcionario_modifica' => $idEmpleado
        ));


        $fallaTansaccion = $nuevoRol->errorInfo();

        if (!empty($fallaTansaccion[1]) && !empty($fallaTansaccion[2])) {
            $this->_db->rollBack();
            return $fallaTansaccion;
        } else {

            $this->_db->commit();
            return 1;
        }

    }
    public function metActualizarAsignacionTickets(){

    }
}