<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Empleado_model extends CI_Model {

    public function listar() {
        $empleados = $this->db
            ->select('
                e.*,
                a.nombre as area,
                d.nombre as tipo_documento,
                c.nombre as cargo,
                r.nombre as regimen_pension,
                u.nombre as distrito_nombre,
                u.departamento as ub_departamento,
                u.provincia as ub_provincia,
                u.distrito as ub_distrito
            ')
            ->from('rh_empleado e')
            ->join('mt_area a', 'a.id = e.area_id')
            ->join('mt_documento_identidad d', 'd.id = e.documento_identidad_id')
            ->join('mt_cargo c', 'c.id = e.cargo_id')
            ->join('mt_regimen_pension r', 'r.id = e.regimen_pension_id')
            ->join('mt_ubigeo u', 'u.id = e.ubigeo_id', 'left')
            ->order_by('e.id', 'DESC')
            ->get()
            ->result();

        foreach ($empleados as $emp) {
            $dep = null;
            $prov = null;

            if (!empty($emp->ub_departamento)) {
                $dep = $this->get_departamento_nombre($emp->ub_departamento);
            }

            if (!empty($emp->ub_departamento) && !empty($emp->ub_provincia)) {
                $prov = $this->get_provincia_nombre($emp->ub_departamento, $emp->ub_provincia);
            }

            $emp->departamento_nombre = $dep ? $dep->nombre : '';
            $emp->provincia_nombre = $prov ? $prov->nombre : '';
            $emp->distrito_nombre = $emp->distrito_nombre ? $emp->distrito_nombre : '';
        }

        return $empleados;
    }

/*
    public function listar() {
        $this->db->select('
            e.*,
            a.nombre as area,
            d.nombre as tipo_documento,
            c.nombre as cargo,
            r.nombre as regimen_pension,
            u.nombre as ubigeo
        ');
        $this->db->from('rh_empleado e');
        $this->db->join('mt_area a', 'a.id = e.area_id');
        $this->db->join('mt_documento_identidad d', 'd.id = e.documento_identidad_id');
        $this->db->join('mt_cargo c', 'c.id = e.cargo_id');
        $this->db->join('mt_regimen_pension r', 'r.id = e.regimen_pension_id');
        $this->db->join('mt_ubigeo u', 'u.id = e.ubigeo_id', 'left');
        $this->db->order_by('e.id', 'DESC');
        return $this->db->get()->result();
    }
*/
    public function insertar($data) {
        return $this->db->insert('rh_empleado', $data);
    }

    public function obtener($id) {
        return $this->db->where('id', $id)->get('rh_empleado')->row();
    }

    public function actualizar($id, $data) {
        return $this->db->where('id', $id)->update('rh_empleado', $data);
    }

    public function cambiarEstado($id, $estado, $usuario_id = null) {
        return $this->db->where('id', $id)->update('rh_empleado', array(
            'estado' => $estado,
            'updated_at' => date('Y-m-d H:i:s'),
            'updated_by' => $usuario_id
        ));
    }

    public function existe_documento($nro_documento, $id = null) {
        $this->db->where('nro_documento', $nro_documento);
        if ($id !== null) {
            $this->db->where('id !=', $id);
        }
        return $this->db->get('rh_empleado')->num_rows() > 0;
    }

    public function listar_areas() {
        return $this->db->where('estado', 1)->order_by('nombre', 'ASC')->get('mt_area')->result();
    }

    public function listar_documentos() {
        return $this->db->where('estado', 1)->order_by('nombre', 'ASC')->get('mt_documento_identidad')->result();
    }

    public function listar_cargos() {
        return $this->db->where('estado', 1)->order_by('nombre', 'ASC')->get('mt_cargo')->result();
    }

    public function listar_regimenes() {
        return $this->db->where('estado', 1)->order_by('nombre', 'ASC')->get('mt_regimen_pension')->result();
    }

    public function get_departamentos() {
        return $this->db
            ->select('id, departamento as codigo, nombre')
            ->from('mt_ubigeo')
            ->where('provincia', '00')
            ->where('distrito', '00')
            ->where('estado', 1)
            ->order_by('nombre', 'ASC')
            ->get()
            ->result();
    }

    public function get_provincias($departamento) {
        return $this->db
            ->select('id, provincia as codigo, nombre')
            ->from('mt_ubigeo')
            ->where('departamento', $departamento)
            ->where('provincia !=', '00')
            ->where('distrito', '00')
            ->where('estado', 1)
            ->order_by('nombre', 'ASC')
            ->get()
            ->result();
    }

    public function get_distritos($departamento, $provincia) {
        return $this->db
            ->select('id, distrito as codigo, nombre')
            ->from('mt_ubigeo')
            ->where('departamento', $departamento)
            ->where('provincia', $provincia)
            ->where('distrito !=', '00')
            ->where('estado', 1)
            ->order_by('nombre', 'ASC')
            ->get()
            ->result();
    }

    public function get_ubigeo_by_id($id) {
        return $this->db
            ->where('id', $id)
            ->get('mt_ubigeo')
            ->row();
    }

    public function get_departamento_nombre($codigo_departamento) {
        return $this->db
            ->select('nombre')
            ->from('mt_ubigeo')
            ->where('departamento', $codigo_departamento)
            ->where('provincia', '00')
            ->where('distrito', '00')
            ->where('estado', 1)
            ->get()
            ->row();
    }

    public function get_provincia_nombre($codigo_departamento, $codigo_provincia) {
        return $this->db
            ->select('nombre')
            ->from('mt_ubigeo')
            ->where('departamento', $codigo_departamento)
            ->where('provincia', $codigo_provincia)
            ->where('distrito', '00')
            ->where('estado', 1)
            ->get()
            ->row();
    }

}