<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
use Alert;

class Recibo extends Model
{
    protected $primaryKey = 'recibo_id';
    protected $table = "erc_recibos";
    protected $fillable = ['recibo_id', 'recibo_consecutivo_centro', 'centrooperacion_id', 'recibo_codigo_liquidacion', 'matriculado_id', 'recibo_cliente_identificacion', 'recibo_cliente_nombres', 'recibo_cliente_programa', 'recibo_cliente_direccion', 'recibo_cliente_telefono', 'recibo_cliente_ciudad', 'recibo_observaciones', 'recibo_created_usuario', 'recibo_created_at', 'recibo_updated_usuario', 'recibo_updated_at', 'estado_id', 'recibo_contabilizado_usuario', 'recibo_contabilizado_at', 'voided'];
    public $timestamps = false;

    /*
    * Relaciones
    *
    *
    */
    public function scopeBuscar($query, $valor)
    {
        return $query->where("centrooperacion_nombre", "LIKE", "%$valor%")
            ->orWhere('erc_recibos.centrooperacion_id', '=', "$valor")
            ->orWhere('erc_usuarios.email', 'LIKE', "%$valor%")
            ->orWhere('erc_recibos.recibo_consecutivo_centro', 'LIKE', "%$valor%")
            ->orWhere('erc_recibos.recibo_created_at', 'LIKE', "%$valor%")
            ->orWhere('erc_recibos.recibo_codigo_liquidacion', 'LIKE', "%$valor%")
            ->orWhere('erc_recibos.recibo_cliente_identificacion', 'LIKE', "%$valor%")
            ->orWhere('erc_recibo_concepto.concepto_total', 'LIKE', "%$valor%");         
    }

    public function scopeFiltrar($query, $filtro, $centrooperacion, $anio, $mes, $dia)
    {
        //Busca los recibos por el estado (1, 2) que no hayan sido anulados (voided: 0 = No)
        if(!empty($filtro) and empty($centrooperacion) and empty($anio) and empty($mes) and empty($dia))
        {
            return $query->where([['erc_recibos.estado_id', '=', $filtro], ['voided', '=', '0']]);
        }
        elseif(!empty($filtro) and !empty($centrooperacion) and empty($anio) and empty($mes) and empty($dia))
        {
            return $query->where([['erc_recibos.estado_id', '=', $filtro], ['erc_recibos.centrooperacion_id', '=', $centrooperacion], ['voided', '=', '0']]);
        }
        elseif(!empty($filtro) and !empty($centrooperacion) and !empty($anio) and empty($mes) and empty($dia))
        {
            return $query->where([['erc_recibos.estado_id', '=', $filtro], ['erc_recibos.centrooperacion_id', '=', $centrooperacion], ['erc_recibos.recibo_created_at', 'like', $anio.'/%'], ['voided', '=', '0']])->orWhere([['erc_recibos.estado_id', '=', $filtro], ['erc_recibos.centrooperacion_id', '=', $centrooperacion], ['erc_recibos.recibo_created_at', 'like', '%/'.$anio.'%'], ['voided', '=', '0']])->orWhere([['erc_recibos.estado_id', '=', $filtro], ['erc_recibos.centrooperacion_id', '=', $centrooperacion], ['erc_recibos.recibo_created_at', 'like', $anio.'-%'], ['voided', '=', '0']])->orWhere([['erc_recibos.estado_id', '=', $filtro], ['erc_recibos.centrooperacion_id', '=', $centrooperacion], ['erc_recibos.recibo_created_at', 'like', '%-'.$anio.'%'], ['voided', '=', '0']]);
        }
        elseif(!empty($filtro) and !empty($centrooperacion) and !empty($anio) and !empty($mes) and empty($dia))
        {
            return $query->where([['erc_recibos.estado_id', '=', $filtro], ['erc_recibos.centrooperacion_id', '=', $centrooperacion], ['erc_recibos.recibo_created_at', 'like', $anio.'/'.$mes.'/%'], ['voided', '=', '0']])->orWhere([['erc_recibos.estado_id', '=', $filtro], ['erc_recibos.centrooperacion_id', '=', $centrooperacion], ['erc_recibos.recibo_created_at', 'like', '%/'.$mes.'/'.$anio.'%'], ['voided', '=', '0']])->orWhere([['erc_recibos.estado_id', '=', $filtro], ['erc_recibos.centrooperacion_id', '=', $centrooperacion], ['erc_recibos.recibo_created_at', 'like', $anio.'-'.$mes.'-%'], ['voided', '=', '0']])->orWhere([['erc_recibos.estado_id', '=', $filtro], ['erc_recibos.centrooperacion_id', '=', $centrooperacion], ['erc_recibos.recibo_created_at', 'like', '%-'.$mes.'-'.$anio.'%'], ['voided', '=', '0']]);
        }
        elseif(!empty($filtro) and !empty($centrooperacion) and !empty($anio) and !empty($mes) and !empty($dia))
        {
            return $query->where([['erc_recibos.estado_id', '=', $filtro], ['erc_recibos.centrooperacion_id', '=', $centrooperacion], ['erc_recibos.recibo_created_at', 'like', $anio.'/'.$mes.'/'.$dia.'%'], ['voided', '=', '0']])->orWhere([['erc_recibos.estado_id', '=', $filtro], ['erc_recibos.centrooperacion_id', '=', $centrooperacion], ['erc_recibos.recibo_created_at', 'like', $dia.'/'.$mes.'/'.$anio.'%'], ['voided', '=', '0']])->orWhere([['erc_recibos.estado_id', '=', $filtro], ['erc_recibos.centrooperacion_id', '=', $centrooperacion], ['erc_recibos.recibo_created_at', 'like', $anio.'-'.$mes.'-'.$dia.'%'], ['voided', '=', '0']])->orWhere([['erc_recibos.estado_id', '=', $filtro], ['erc_recibos.centrooperacion_id', '=', $centrooperacion], ['erc_recibos.recibo_created_at', 'like', $dia.'-'.$mes.'-'.$anio.'%'], ['voided', '=', '0']]);
        }
        elseif(!empty($filtro) and empty($centrooperacion) and !empty($anio) and empty($mes) and empty($dia))
        {
            return $query->where([['erc_recibos.estado_id', '=', $filtro], ['erc_recibos.recibo_created_at', 'like', '%/'.$anio], ['voided', '=', '0']])->orWhere([['erc_recibos.estado_id', '=', $filtro], ['erc_recibos.recibo_created_at', 'like', $anio.'/%'], ['voided', '=', '0']])->orWhere([['erc_recibos.estado_id', '=', $filtro], ['erc_recibos.recibo_created_at', 'like', '%-'.$anio], ['voided', '=', '0']])->orWhere([['erc_recibos.estado_id', '=', $filtro], ['erc_recibos.recibo_created_at', 'like', $anio.'-%'], ['voided', '=', '0']]);
        }
        elseif(!empty($filtro) and empty($centrooperacion) and !empty($anio) and !empty($mes) and empty($dia))
        {
            return $query->where([['erc_recibos.estado_id', '=', $filtro], ['erc_recibos.recibo_created_at', 'like', $anio.'/'.$mes.'/%'], ['voided', '=', '0']])->orWhere([['erc_recibos.estado_id', '=', $filtro], ['erc_recibos.recibo_created_at', 'like', '%/'.$mes.'/'.$anio.'%'], ['voided', '=', '0']])->orWhere([['erc_recibos.estado_id', '=', $filtro], ['erc_recibos.recibo_created_at', 'like', $anio.'-'.$mes.'-%'], ['voided', '=', '0']])->orWhere([['erc_recibos.estado_id', '=', $filtro], ['erc_recibos.recibo_created_at', 'like', '%-'.$mes.'-'.$anio.'%'], ['voided', '=', '0']]);
        }
        elseif(!empty($filtro) and empty($centrooperacion) and !empty($anio) and !empty($mes) and !empty($dia))
        {
            return $query->where([['erc_recibos.estado_id', '=', $filtro], ['erc_recibos.recibo_created_at', 'like', $anio.'/'.$mes.'/'.$dia.'%'], ['voided', '=', '0']])->orWhere([['erc_recibos.estado_id', '=', $filtro], ['erc_recibos.recibo_created_at', 'like', $dia.'/'.$mes.'/'.$anio.'%'], ['voided', '=', '0']])->orWhere([['erc_recibos.estado_id', '=', $filtro], ['erc_recibos.recibo_created_at', 'like', $anio.'-'.$mes.'-'.$dia.'%'], ['voided', '=', '0']])->orWhere([['erc_recibos.estado_id', '=', $filtro], ['erc_recibos.recibo_created_at', 'like', $dia.'-'.$mes.'-'.$anio.'%'], ['voided', '=', '0']]);
        }               
    }

    public function scopeFiltro($query, $estado)
    {
        return $query->where([['erc_recibos.estado_id', '=', $estado], ['voided', '=', '0']]);
    }

    public function estado() //relacion de uno a muchos con la tabla erc_estados
    {
    	return $this->belongsTo('App\Estado', 'estado_id', 'estado_id'); // un recibo tiene un estado
    }

    public function centroOperacion() //relacion de uno a muchos con la tabla sia_centros_operacion
    {
    	return $this->belongsTo('App\CentroOperacion', 'centrooperacion_id'); //muchos recibos pertenecen a un centro de operacion
    }

    public function matriculado() //relacion de uno a muchos con la tabla sia_matriculados
    {
    	return $this->belongsTo('App\Matriculado', 'recibo_cliente_identificacion'); // muchos recibos pertenecen a un matriculado
    }

    public function concepto() //relacion de uno a uno con la tabla erc_recibo_concepto
    {
    	return $this->hasOne('App\Concepto', 'recibo_id', 'recibo_id'); //un recibo tiene un concepto
    }

    public function pagos()
    {
      return $this->belongsToMany('App\Pago', 'erc_recibo_pago', 'recibo_id', 'pago_id')
      ->withPivot('recibopago_id', 'recibopago_entidad_bancaria', 'recibopago_codigo', 'recibopago_plaza', 'recibopago_valor');
    }

    public function usuario()
    {
      return $this->belongsTo('App\User', 'recibo_created_usuario');
    }

    public function usuarioUpdate()
    {
      return $this->belongsTo('App\User', 'recibo_updated_usuario');
    }

    public function usuarioContabilizado()
    {
      return $this->belongsTo('App\User', 'recibo_contabilizado_usuario');
    }
}
