<?php

class Reembolso extends CActiveRecord
{
    public function tableName()
    {
        return 'reembolso.registro_reembolso';
    }

    public function rules()
    {
        return array(
            array('cedula, id_titulo_proceso, id_tipo_reembolso, id_motivo_reembolso, id_proceso', 'required'),
            array('fecha_registro, monto, apellidos', 'safe'),
        );
    }

    public function attributeLabels()
    {
        return array(
            'id' => 'ID',
            'cedula' => 'Cédula',
            'nombre' => 'Nombres',
            'apellidos' => 'Apellidos',
            'id_titulo_proceso' => 'Nombre del proceso',
            'id_tipo_reembolso' => 'Tipo de reembolso',
            'id_motivo_reembolso' => 'Motivo del reembolso',
            'monto' => 'Monto',
            'fecha_registro' => 'Fecha del registro',
        );
    }

    public function search()
    {
        $criteria = new CDbCriteria();

        $criteria->compare('id', $this->id);

        return new CActiveDataProvider($this, array(
            'criteria' => $criteria,
        ));
    }

    public static function model($className = __CLASS__)
    {
        return parent::model($className);
    }

    /**
     * Crea un reembolso para un asociado y junto con un motivo dado.
     *
     * @param  HistorialAporteReembolso $asociado
     * @param  integer $idTipoReembolso
     * @return void|Exception
     */
    public static function asociado($asociado, $idTipoReembolso)
    {
        $model = new self();
        $model->id_proceso = $asociado->id_aporte;
        $model->id_asociado = $asociado->id_asociado;
        $model->cedula = $asociado->cedula;
        $model->nombre = $asociado->nombre;
        $model->apellidos = $asociado->apellidos;
        $model->monto = $asociado->monto_asociado_reembolso + $asociado->monto_patrono_reembolso;
        $model->id_titulo_proceso = 1;
        $model->id_motivo_reembolso = 1;
        $model->id_tipo_reembolso = $idTipoReembolso;

        if (! $model->save()) {
            throw new Exception('Error al intentar generar el reembolso.');
        }

        Yii::import('application.modules.reembolso.models.SeguimientoReembolso');
        SeguimientoReembolso::crear($model, 1);
    }

    /**
     * Crea un reembolso para un patrono.
     *
     * @param  DatosTxtIntegrado $modelTxt
     * @param  float $montoRestante
     * @param  integer $idTipoReembolso
     * @return void|Exception
     */
    public static function patrono($idProceso, $modelTxt, $montoRestante, $idTipoReembolso)
    {
        $unidad = $modelTxt->idUnidad;

        $model = new Reembolso();
        $model->id_proceso = $idProceso;
        $model->cedula = $unidad->rif;
        $model->nombre = $unidad->descripcion;
        $model->monto = $montoRestante;
        $model->id_titulo_proceso = 1;
        $model->id_motivo_reembolso = 2;
        $model->id_tipo_reembolso = $idTipoReembolso;
        if (! $model->validate()) {
            throw new Exception('Error al intentar generar el reembolso.');
        }
        $model->save();

        Yii::import('application.modules.reembolso.models.SeguimientoReembolso');
        SeguimientoReembolso::crear($model, 1);
    }
}
