<?php

class ConfLiquidacion extends CActiveRecord
{
    public $periodicidad;
    public $comisiones = null;
    public $opcion_comision_administrativa;
    public $opcion_comision_bancaria;
    public $gasto_administrativo_monto;
    public $gasto_administrativo_porcentaje;
    public $comision_bancaria_monto;
    public $comision_bancaria_porcentaje;
    public $tipo_gasto;
    public $tipo_comision;

    public function tableName()
    {
        return 'retiro.conf_liquidacion';
    }

    public function rules()
    {
        return [
            ['periodicidad, opcion_comision_administrativa, opcion_comision_bancaria', 'required'],
            ['tiempo_asociado', 'numerical', 'integerOnly' => true],
            [['blnborrado', 'periodicidad', 'gastos_administrativo'], 'safe'],
            ['id, tiempo_asociado, gastos_administrativo, blnborrado', 'safe', 'on' => 'search'],
        ];
    }

    public function relations()
    {
        return [
            'solicitudes' => [self::HAS_MANY, 'PeriodicidadLiquidacion', 'id_conf_liquidacion'],
        ];
    }

    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'tiempo_asociado' => 'Tiempo Asociado',
            'gastos_administrativo' => 'Gastos administrativo',
            'comision_bancaria' => 'Comisión bancaria',
            'blnborrado' => 'Blnborrado',
            'periodicidad' => 'Disponibilidad para solicitudes',
            'gasto_administrativo_monto' => 'Monto',
            'gasto_administrativo_porcentaje' => 'Porcentaje',
            'comision_bancaria_monto' => 'Monto',
            'comision_bancaria_porcentaje' => 'Porcentaje',
            'id_tipo_gasto_administrativo' => 'Tipo gasto administrativo',
            'id_tipo_comision_bancaria' => 'Tipo comisión bancaria',
        ];
    }

    public function getComisionAdministrativa()
    {
        if ($this->id_tipo_gasto_administrativo == 1) {
            return $this->gastos_administrativo / 100;
        }

        return $this->gastos_administrativo;
    }

    public function getComisionBancaria()
    {
        if ($this->id_tipo_comision_bancaria == 1) {
            return $this->comision_bancaria / 100;
        }

        return $this->comision_bancaria;
    }

    public function setGastoAdministrativo($datos)
    {
        $this->opcion_comision_administrativa = $datos['opcion_comision_administrativa'];

        switch ($this->opcion_comision_administrativa) {
            case 0:
                $this->id_tipo_gasto_administrativo = 1;
                break;
            case 1:
                $this->id_tipo_gasto_administrativo = 2;
                break;
        }

        if ($this->id_tipo_gasto_administrativo == 2 && $datos['gasto_administrativo_monto'] != '') {
            $this->gastos_administrativo = $this->unFormat($datos['gasto_administrativo_monto']);
         } else if ($this->id_tipo_gasto_administrativo == 1 && $datos['gasto_administrativo_porcentaje'] != '' ) {
            $this->gastos_administrativo = $this->unFormat($datos['gasto_administrativo_porcentaje']);
        }
    }

    public function setComisionBancaria($datos)
    {
        $this->opcion_comision_bancaria = $datos['opcion_comision_bancaria'];

        switch ($this->opcion_comision_bancaria) {
            case 0:
                $this->id_tipo_comision_bancaria = 1;
                break;
            case 1:
                $this->id_tipo_comision_bancaria = 2;
                break;
        }

        if ($this->id_tipo_comision_bancaria == 1) {
            $this->comision_bancaria = $this->unFormat($datos['comision_bancaria_porcentaje']);
        } else if ($this->id_tipo_comision_bancaria == 2) {
            $this->comision_bancaria = $this->unFormat($datos['comision_bancaria_monto']);
        }
    }

    public function unFormat($number = 0)
    {
        if ($number == '') {
            return 0;
        }

        $temp = str_replace('.', '', $number);
        return str_replace(',', '.', $temp);
    }

    public function search()
    {
        $criteria = new CDbCriteria();
        $criteria->select = 't.*,
                             tga.nombre as tipo_gasto,
                             tga2.nombre as tipo_comision';
        $criteria->join = 'left join retiro.tipos_gastos_administrativos tga on tga.id=t.id_tipo_gasto_administrativo ';
        $criteria->join .= 'left join retiro.tipos_gastos_administrativos tga2 on tga2.id=t.id_tipo_comision_bancaria';
        $criteria->compare('id', $this->id);
        $criteria->compare('tiempo_asociado', $this->tiempo_asociado);
        $criteria->compare('gastos_administrativo', $this->gastos_administrativo, true);
        $criteria->compare('blnborrado', $this->blnborrado);

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

    public function afterFind()
    {
        if ($this->comisiones === null) {
            $this->comisiones = [
                'tipo_comision_administrativa' => $this->id_tipo_gasto_administrativo,
                'administrativa' => $this->getComisionAdministrativa(),
                'tipo_comision_bancaria' => $this->id_tipo_comision_bancaria,
                'bancaria' => $this->getComisionBancaria(),
            ];
        }

        if ($this->id_tipo_gasto_administrativo == 1) {
            $this->opcion_comision_administrativa = 0;
            $this->gasto_administrativo_porcentaje = $this->gastos_administrativo;
        }

        if ($this->id_tipo_gasto_administrativo == 2) {
            $this->opcion_comision_administrativa = 1;
            $this->gasto_administrativo_monto = $this->gastos_administrativo;
        }

        if ($this->id_tipo_comision_bancaria == 1) {
            $this->opcion_comision_bancaria = 0;
            $this->comision_bancaria_porcentaje = $this->comision_bancaria;
        }

        if ($this->id_tipo_comision_bancaria == 2) {
            $this->opcion_comision_bancaria = 1;
            $this->comision_bancaria_monto = $this->comision_bancaria;
        }

        return parent::afterFind();
    }

    public function config($key)
    {
        return (new Warp($this->comisiones))->get($key, 0);
    }

    public function comisionAdministrativa($monto)
    {
        if ($this->id_tipo_gasto_administrativo == 1) {
            return round($monto * $this->getComisionAdministrativa(), 2);
        }

        return $this->gastos_administrativo;
    }

    public function comisionBancaria($monto)
    {
        if ($this->id_tipo_comision_bancaria == 1) {
            return round($monto * $this->getComisionBancaria(), 2);
        }

        return $this->comision_bancaria;
    }

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