<?php

namespace App\Model;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class TramiteProcedimiento extends Model
{
    use SoftDeletes;
    protected $table = 'tramite_procedimiento';

    protected $dates = ['created_at','deleted_at','updated_at'];

    protected $fillable = [
        //'orden',
        'codigo',
        'cuenta_contable',
        'nombre',
        'base_legal',
        'plazo_resolucion',
        //'activo',
        'id_area_inicio',
        //'id_area_fin',
        'id_autoridad_competente',
        'id_tramite_calificacion',
        'id_tramite_categoria',
        'id_tramite_estado',
        'id_tramite_tipo',
    ];

    public function tramite_procedimiento()
    {
        return TramiteProcedimiento::leftJoin('dependencia as area_inicio', 'area_inicio.id', '=', 'tramite_procedimiento.id_area_inicio')
            //->leftJoin('dependencia as area_fin', 'tramite_procedimiento.id_area_fin', '=', 'area_fin.id')
            ->leftJoin('dependencia as autoridad_competente', 'autoridad_competente.id', '=', 'tramite_procedimiento.id_autoridad_competente')
            ->leftJoin('tramite_categoria', 'tramite_categoria.id', '=', 'tramite_procedimiento.id_tramite_categoria')
            ->leftJoin('tramite_rol','tramite_rol.id_tramite_procedimiento','=','tramite_procedimiento.id')
            ->select(
                'tramite_procedimiento.id as id',
                'tramite_procedimiento.codigo as codigo',
                'tramite_procedimiento.cuenta_contable as cuenta_contable',
                'tramite_procedimiento.nombre as nombre',
                'tramite_procedimiento.base_legal as base_legal',
                'tramite_procedimiento.plazo_resolucion as plazo_resolucion',
                //'tramite_procedimiento.activo as activo',
                //'tramite_procedimiento.id_area_fin as id_area_fin',
                'tramite_procedimiento.id_area_inicio as id_area_inicio',
                'tramite_procedimiento.id_autoridad_competente as id_autoridad_competente',
                'tramite_procedimiento.id_tramite_calificacion as id_tramite_calificacion',
                'tramite_procedimiento.id_tramite_categoria as id_tramite_categoria',
                'tramite_procedimiento.id_tramite_estado as id_tramite_estado',
                'tramite_procedimiento.id_tramite_tipo as id_tramite_tipo',
                'area_inicio.id as area_inicio_id',
                'area_inicio.nombre as area_inicio_nombre',
                //'area_fin.nombre as area_fin',
                'autoridad_competente.id as autoridad_competente_id',
                'autoridad_competente.nombre as autoridad_competente_nombre',
                'tramite_categoria.id as tramite_categoria_id',
                'tramite_categoria.nombre as tramite_categoria_nombre')
            ->groupBy(
                'tramite_procedimiento.id',
                'tramite_procedimiento.codigo',
                'tramite_procedimiento.cuenta_contable',
                'tramite_procedimiento.nombre',
                'tramite_procedimiento.base_legal',
                'tramite_procedimiento.plazo_resolucion',
                'tramite_procedimiento.id_area_inicio',
                'tramite_procedimiento.id_autoridad_competente',
                'tramite_procedimiento.id_tramite_calificacion',
                'tramite_procedimiento.id_tramite_categoria',
                'tramite_procedimiento.id_tramite_estado',
                'tramite_procedimiento.id_tramite_tipo');
    }

    public function tramite_requisito()
    {
        return $this->hasMany('App\Model\TramiteRequisito','id_tramite_procedimiento');
    }

    public function tramite_resolucion()
    {
        return $this->hasMany('App\Model\TramiteResolucion','id_tramite_procedimiento');
    }

    // this is a recommended way to declare event handlers
    protected static function boot() {
        parent::boot();

        static::deleting(function($user) { // before delete() method call this
            $user->tramite_requisito()->delete();
            $user->tramite_resolucion()->delete();
            // do the rest of the cleanup...
        });
    }
}
