<?php
#Actualizado

class categoriaModelo extends Modelo
{
    public function __construct()
    {
        parent::__construct();
    }



    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 pk_num_concepto asc"
        );
        $registro->setFetchMode(PDO::FETCH_ASSOC);
        return $registro->fetchAll();
    }

    public function metGetCategoria($pk_num_categoria){
        $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
                   
                   WHERE concepto.pk_num_concepto = $pk_num_categoria
                 Order by pk_num_concepto asc"
        );
        $registro->setFetchMode(PDO::FETCH_ASSOC);
        return $registro->fetchAll();
    }

    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 metGetLastCategoria($idDependencia){
        $registro = $this->_db->query(
            "select (select COUNT(*) from ca_a001_concepto_ticket where fk_num_ticket_padre > 0 && estado_concepto = 'Activo' && dependencia_encargada = ".$idDependencia.")+1 as resul"
        );
        $registro->setFetchMode(PDO::FETCH_ASSOC);
        $rsp = $registro->fetchAll();
        $rsp = $rsp[0];
        return $rsp;
    }

    public function metAgregarCategoria( $nombreCategoria,$descripcion,$idCategoriaPadre,$prioridad,$idDependencia,$abreviacion_dependencia,$dias_duracion){

        $codigoValue='';
        if($idCategoriaPadre>0){
            $conteo = $this->metGetLastCategoria($idDependencia);
            echo '<pre>';
        print_r($conteo);
        echo '</pre>';
            $codigoValue= $abreviacion_dependencia.$conteo['resul'];

        }


        $this->_db->beginTransaction();
        $nuevaCategoria = $this->_db->prepare("
        INSERT INTO
            ca_a001_concepto_ticket
        set 
            categoria=:nombreCategoria,
            descripcion=:descripcion,
            fk_num_ticket_padre=:fk_num_ticket_padre,
            nivel_prioridad=:nivel_prioridad,
            dependencia_encargada=:dependencia_encargada,
            dias_duracion=:dias_duracion,
            codigo_categoria='".$codigoValue."'
            
        ");

        $nuevaCategoria->execute(array(
            'nombreCategoria'=> $nombreCategoria,
            'descripcion'=> $descripcion,
            'fk_num_ticket_padre'=> $idCategoriaPadre,
            'nivel_prioridad'=> $prioridad,
            'dependencia_encargada'=> $idDependencia,
            'dias_duracion' => $dias_duracion
        ));

        $idAgregado = $this->_db->lastInsertId();
        $fallaTansaccion = $nuevaCategoria->errorInfo();


        if (!empty($fallaTansaccion[1]) && !empty($fallaTansaccion[2])) {
            $this->_db->rollBack();
            return $fallaTansaccion;
        } else {
            $this->_db->commit();
            return $idAgregado;
        }
    }

    public function metModificarCategoria( $idCategoria,$nombreCategoria,$descripcion,$idCategoriaPadre,$prioridad,$idDependencia,$estadoCategoria,$dias_duracion){
        $this->_db->beginTransaction();
        $modificarCategoria = $this->_db->prepare("
        UPDATE
            ca_a001_concepto_ticket
        set 
            categoria=:nombreCategoria,
            descripcion=:descripcion,
            fk_num_ticket_padre=:fk_num_ticket_padre,
            nivel_prioridad=:nivel_prioridad,
            dependencia_encargada=:dependencia_encargada,
            estado_concepto=:estadoCategoria,
            dias_duracion=:dias_duracion
        WHERE
            pk_num_concepto=:pk_num_concepto
            
        ");

        $modificarCategoria->execute(array(
            'nombreCategoria'=> $nombreCategoria,
            'descripcion'=> $descripcion,
            'fk_num_ticket_padre'=> $idCategoriaPadre,
            'nivel_prioridad'=> $prioridad,
            'dependencia_encargada'=> $idDependencia,
            'pk_num_concepto'=> $idCategoria,
            'estadoCategoria' => $estadoCategoria,
            'dias_duracion'=>$dias_duracion
        ));


        $fallaTansaccion = $modificarCategoria->errorInfo();

        if (!empty($fallaTansaccion[1]) && !empty($fallaTansaccion[2])) {
            $this->_db->rollBack();
            return $fallaTansaccion;
        } else {

            $this->_db->commit();
            return 1;
        }

    }
}