<?php

class caracteristicaObjetoModelo extends Modelo
{
    private $atIdEmpleado;

    public function __construct()
    {
        parent::__construct();
        $this->atIdEmpleado = Session::metObtener('idEmpleado');
    }


    public function metListarTipoObjeto()
    {
        $registro = $this->_db->query(
            "SELECT  
                        pa_c008_tipo_objeto.pk_num_tipo_objeto,
                        pa_c008_tipo_objeto.descripcion as nombre_tipo_objeto,
                        pa_c008_tipo_objeto.estado as estado_tipo_objeto,
                        pa_c004_caracteristica_objeto.pk_num_caracteristica,
                        pa_c004_caracteristica_objeto.descripcion as nombre_caracteristica,
                        pa_c004_caracteristica_objeto.estado as estado_caracteristica
                    FROM pa_c008_tipo_objeto
                    left join pa_c004_caracteristica_objeto on pa_c004_caracteristica_objeto.fk_pac008_tipo_objeto = pa_c008_tipo_objeto.pk_num_tipo_objeto"
        );
        $registro->setFetchMode(PDO::FETCH_ASSOC);
        $resultado= $registro->fetchAll();

        $myResultado = array();
        foreach($resultado as $valor){
            $cont = 0;
            $myResultado[$valor['pk_num_tipo_objeto']]['pk_num_tipo_objeto'] = $valor['pk_num_tipo_objeto'];
            $myResultado[$valor['pk_num_tipo_objeto']]['nombre'] = $valor['nombre_tipo_objeto'];
            $myResultado[$valor['pk_num_tipo_objeto']]['estado'] = $valor['estado_tipo_objeto'];
            $myResultado[$valor['pk_num_tipo_objeto']]['caracteristicas'][$valor['pk_num_caracteristica']]['pk_num_caracteristica'] = $valor['pk_num_caracteristica'];
            $myResultado[$valor['pk_num_tipo_objeto']]['caracteristicas'][$valor['pk_num_caracteristica']]['nombre'] = $valor['nombre_caracteristica'];
            $myResultado[$valor['pk_num_tipo_objeto']]['caracteristicas'][$valor['pk_num_caracteristica']]['estado'] = $valor['estado_caracteristica'];
        }
        return $myResultado;
    }

    public function metListarCaracteristicas()
    {
        $registro = $this->_db->query(
            "select pa_c004_caracteristica_objeto.*,
                        pa_c008_tipo_objeto.pk_num_tipo_objeto,
                        pa_c008_tipo_objeto.descripcion as nombre_tipo_objeto
                    from pa_c004_caracteristica_objeto
                    left join pa_c008_tipo_objeto on pa_c004_caracteristica_objeto.fk_pac008_tipo_objeto = pa_c008_tipo_objeto.pk_num_tipo_objeto"
        );
        $registro->setFetchMode(PDO::FETCH_ASSOC);
        return $registro->fetchAll();
    }

    public function metGetCaracteristica($pk_num_caracteristica)
    {
        $registro = $this->_db->query(
            "select pa_c004_caracteristica_objeto.*,
                        pa_c008_tipo_objeto.pk_num_tipo_objeto,
                        pa_c008_tipo_objeto.descripcion as nombre_tipo_objeto,
                        concat(persona_modifica.ind_nombre1,' ',persona_modifica.ind_apellido1) as persona_modifica
                    from pa_c004_caracteristica_objeto
                    left join pa_c008_tipo_objeto on pa_c004_caracteristica_objeto.fk_pac008_tipo_objeto = pa_c008_tipo_objeto.pk_num_tipo_objeto
                    left join rh_b001_empleado on pa_c004_caracteristica_objeto.fk_rhb001_num_empleado = rh_b001_empleado.pk_num_empleado
                    left join a003_persona as persona_modifica on rh_b001_empleado.fk_a003_num_persona = persona_modifica.pk_num_persona
                    where pa_c004_caracteristica_objeto.pk_num_caracteristica = ".$pk_num_caracteristica
        );
        $registro->setFetchMode(PDO::FETCH_ASSOC);
        $registro= $registro->fetchAll();

        return $registro[0];
    }

    public function metGetCaracteristicaByTipoObjeto($pk_num_tipo_objeto)
    {
        $registro = $this->_db->query(
            "select pa_c004_caracteristica_objeto.*,
                        pa_c008_tipo_objeto.pk_num_tipo_objeto,
                        pa_c008_tipo_objeto.descripcion as nombre_tipo_objeto
                    from pa_c004_caracteristica_objeto
                    left join pa_c008_tipo_objeto on pa_c004_caracteristica_objeto.fk_pac008_tipo_objeto = pa_c008_tipo_objeto.pk_num_tipo_objeto
                    where pa_c004_caracteristica_objeto.fk_pac008_tipo_objeto = ".$pk_num_tipo_objeto
        );
        $registro->setFetchMode(PDO::FETCH_ASSOC);
        return $registro->fetchAll();
    }


    public function metInsertCaracteristica($pk_num_tipo_objeto,$descripcion){
        $this->_db->beginTransaction();


        $insertRecorrido = $this->_db->prepare("
            INSERT INTO
                pa_c004_caracteristica_objeto
            set 
                fk_pac008_tipo_objeto=:fk_pac008_tipo_objeto,
                descripcion=:descripcion,
                fk_rhb001_num_empleado=:fk_rhb001_num_empleado
                
            ");

        $insertRecorrido->execute(array(
            'fk_rhb001_num_empleado' => $this->atIdEmpleado,
            'descripcion' => $descripcion,
            'fk_pac008_tipo_objeto' => $pk_num_tipo_objeto
        ));

        $idAgregado = $this->_db->lastInsertId();
        $fallaTansaccion = $insertRecorrido->errorInfo();


        if (!empty($fallaTansaccion[1]) && !empty($fallaTansaccion[2])) {
            $this->_db->rollBack();
        } else {
            $this->_db->commit();
        }


        return $idAgregado;
    }

    public function metUpdateCaracteristica($id,$pk_num_tipo_objeto,$descripcion){
        $this->_db->beginTransaction();


        $updateRecorrido = $this->_db->prepare("
            UPDATE
                pa_c004_caracteristica_objeto
            set 
                fk_rhb001_num_empleado=:fk_rhb001_num_empleado,
                fk_pac008_tipo_objeto=:fk_pac008_tipo_objeto,
                descripcion=:descripcion,
                fecha_modificacion=now()
            where pa_c004_caracteristica_objeto.pk_num_caracteristica=".$id
        );

        $updateRecorrido->execute(array(
            'fk_rhb001_num_empleado' => $this->atIdEmpleado,
            'descripcion' => $descripcion,
             'fk_pac008_tipo_objeto' => $pk_num_tipo_objeto
        ));
        $fallaTansaccion = $updateRecorrido->errorInfo();

        if (!empty($fallaTansaccion[1]) && !empty($fallaTansaccion[2])) {
            $this->_db->rollBack();
            return 0;
        } else {
            $this->_db->commit();
            return 1;
        }

    }

}


