<?php

class ProveedorController extends Controller
{
    public $layout = '//layouts/column2';

    public function filters()
    {
        return [
            'accessControl',
            'postOnly + delete',
            ['CrugeAccessControlFilter'],
        ];
    }

    public function accessRules()
    {
        return [
            ['allow',
                'actions' => ['index', 'view'],
                'users' => ['*'],
            ],
            ['allow',
                'actions' => ['create', 'update', 'pdfProveedor', 'activar', 'inactivar'],
                'users' => ['@'],
            ],
            ['allow',
                'actions' => ['admin', 'delete'],
                'users' => ['@'],
            ],
            ['deny',
                'users' => ['*'],
            ],
        ];
    }

    public function actionView($id)
    {
        Yii::import('application.modules.contable.models.*', true);
        $this->render('view', [
            'model' => $this->loadModel($id),
        ]);
    }

    public function actionPdfProveedor($id)
    {
        $model = $this->loadModel($id);
        Yii::import('application.modules.contable.models.*', true);

        $pdf = Yii::createComponent('application.extensions.mpdf60.mpdf');
        $html = $this->renderPartial('pdfProveedor', ['model' => $model], true);
        $mpdf = new mPDF('win-1252', 'LETTER', 8, '', 15, 15, 20, 15, 5, 5);
        $arr = [
            'L' => [
                'content' => (empty($modelEmpresa->logo)) ? '<img src='.Yii::app()->request->baseUrl."/images/logo.png alt='Logo' width ='40px' heigth='40px'/>" : "<img src='".Yii::app()->request->baseUrl.'/images/'.$modelEmpresa->logo."' alt='Logo' width ='40px' heigth='40px'/>",
            ],
            'R' => [
                'content' => 'Proveedor<br>',
                'font-style' => 'BI',
                'font-family' => 'serif',
                'color' => '#000000',
            ],
            'line' => 0,
        ];
        $mpdf->setHeader($arr, 'O');
        $mpdf->defaultfooterfontsize = 6;
        $mpdf->SetFooter('Elaborado por:<br>'.$usuario.' <br>{DATE d/m/Y} |'.$modelEmpresa->dir_emp.'| Página {PAGENO}/{nbpg}');
        $mpdf->WriteHTML($html);
        $mpdf->Output('Proveedor #'.$model->id.'.pdf', 'D');
        exit;
    }

    public function actionCreate()
    {
        Yii::import('application.modules.contable.models.*', true);
        $model = new Proveedor('registro');
        $model->telefono = [''];
        $bancos[] = new ProveedorCuentaBanco('registro');
        $model->cuenta_descripcion = $model->getCuentaContable();

        if (isset($_POST['Proveedor'])) {
            $valido = true;
            unset($bancos);
            $model->attributes = $_POST['Proveedor'];
            $valido = $model->validate() && $valido;
            $cuentaPrincipal = true;
            $model->setCuentaContable($_POST['Proveedor']['cuenta_descripcion']);

            if (isset($_POST['ProveedorCuentaBanco'])) {
                $array_cuentas = [];
                foreach ($_POST['ProveedorCuentaBanco'] as $key => $value) {
                    $item = new ProveedorCuentaBanco('registro');
                    $item->attributes = $value;
                    $valido = $item->validate() && $valido;
                    if (array_key_exists($item->cuenta_bancaria, $array_cuentas)) {
                        $item->addError('cuenta_bancaria', 'El número de cuenta esta repetido');
                        $valido = false;
                    } else {
                        $array_cuentas[$item->cuenta_bancaria] = 1;
                    }
                    $bancos[] = $item;
                    $cuentaPrincipal = (! $item->cuenta_principal) && $cuentaPrincipal;

                    unset($item);
                }
            } else {
                $bancos[] = new ProveedorCuentaBanco();
                Yii::app()->user->setFlash('error', 'Debe registrar una cuenta de banco al proveedor');
                $valido = false;
                $cuentaPrincipal = false;
            }
            if ($cuentaPrincipal == 1) {
                Yii::app()->user->setFlash('error', 'Debe registrar una cuenta de banco como principal');
                $valido = false;
            }
            if ($valido) {
                $transaction = Yii::app()->db->beginTransaction();
                try {
                    $model->telefono = json_encode($model->telefono);
                    if ($model->save()) {
                        foreach ($bancos as $key => $value) {
                            $value->idproveedor = $model->id;
                            $value->save();
                        }
                    }
                    $transaction->commit();
                    Yii::app()->user->setFlash('success', 'Los datos han sido registrado exitosamente');
                    $this->redirect(['view', 'id' => $model->id]);
                } catch (Exception $e) {
                    $transaction->rollback();
                    Yii::app()->user->setFlash('error', 'Ocurrio un error durante el guardado, se han revertido todos los cambios');
                }
            }
        }

        $this->render('create', [
            'model' => $model,
            'bancos' => $bancos,
        ]);
    }

    public function actionUpdate($id)
    {
        $model = $this->loadModel($id);
        Yii::import('application.modules.contable.models.*', true);

        if ($model->telefono != '') {
            $model->telefono = json_decode($model->telefono, true);
        } else {
            $model->telefono = [''];
        }

        if ($model->proveedorCuentaBancos) {
            foreach ($model->proveedorCuentaBancos as $key => $value) {
                $bancos[$value->id] = $value;
            }
        } else {
            $bancos[] = new ProveedorCuentaBanco('registro');
        }
        $model->scenario = 'registro';
        $model->cuenta_descripcion = $model->getCuentaContable();

        if (isset($_POST['Proveedor'])) {
            $valido = true;
            unset($bancos);
            $model->attributes = $_POST['Proveedor'];
            $valido = $model->validate() && $valido;
            $model->setCuentaContable($_POST['Proveedor']['cuenta_descripcion']);

            $cuentaPrincipal = true;
            if (isset($_POST['ProveedorCuentaBanco'])) {
                $array_cuentas = [];
                foreach ($_POST['ProveedorCuentaBanco'] as $key => $value) {
                    $item = new ProveedorCuentaBanco('registro');
                    $item->attributes = $value;
                    $item->idproveedor = $model->id;
                    $valido = $item->validate() && $valido;
                    if (array_key_exists($item->cuenta_bancaria, $array_cuentas)) {
                        $item->addError('cuenta_bancaria', 'El número de cuenta esta repetido');
                        $valido = false;
                    } else {
                        $array_cuentas[$item->cuenta_bancaria] = 1;
                    }
                    $bancos[] = $item;
                    $cuentaPrincipal = (! $item->cuenta_principal) && $cuentaPrincipal;

                    unset($item);
                }
            } else {
                $bancos[] = new ProveedorCuentaBanco();
                Yii::app()->user->setFlash('error', 'Debe registrar una cuenta de banco al proveedor');
                $valido = false;
                $cuentaPrincipal = false;
            }
            if ($cuentaPrincipal == 1) {
                Yii::app()->user->setFlash('error', 'Debe registrar una cuenta de banco como principal');
                $valido = false;
            }
            if ($valido) {
                $transaction = Yii::app()->db->beginTransaction();
                try {
                    $model->telefono = json_encode($model->telefono);

                    if ($model->save()) {
                        $idRegistrados = '';
                        foreach ($bancos as $key => $value) {
                            $modelBancos = ProveedorCuentaBanco::model()->find('id=:id and idproveedor=:idproveedor',
                                                            [':id' => (int) $key, ':idproveedor' => $model->id]);
                            if ($modelBancos) {
                                $modelBancos->attributes = $value->attributes;
                                $modelBancos->idproveedor = $model->id;
                                $modelBancos->save();
                                $idRegistrados .= $modelBancos->id.',';
                            } else {
                                $value->idproveedor = $model->id;
                                $value->save();
                                $idRegistrados .= $value->id.',';
                            }
                        }
                        $idRegistrados = trim($idRegistrados, ',');
                        if ($idRegistrados != '') {
                            ProveedorCuentaBanco::model()->deleteAll('idproveedor=:idproveedor AND id NOT in('.$idRegistrados.')', [':idproveedor' => $model->id]);
                        }
                    }
                    $transaction->commit();
                    Yii::app()->user->setFlash('success', 'Los datos han sido actualizados exitosamente');
                    $this->redirect(['view', 'id' => $model->id]);
                } catch (Exception $e) {
                    $transaction->rollback();
                    Yii::app()->user->setFlash('error', 'Ocurrio un error durante el guardado, se han revertido todos los cambios');
                }
            }
        }

        $this->render('update', [
            'model' => $model,
            'bancos' => $bancos,
        ]);
    }

    public function actionActivar($id)
    {
        if (Yii::app()->request->isPostRequest) {
            $model = $this->loadModel($id);
            $model->id_estatus_proveedor = 1;
            $model->save(false);
            echo 'activo';
            if (! isset($_GET['ajax'])) {
                $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : ['admin']);
            }
        } else {
            throw new CHttpException(400, 'Invalid request. Please do not repeat this request again.');
        }
    }

    public function actionInactivar($id)
    {
        if (Yii::app()->request->isPostRequest) {
            $model = $this->loadModel($id);
            $model->id_estatus_proveedor = 2;
            $model->save(false);
            echo 'inactivo';
            if (! isset($_GET['ajax'])) {
                $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : ['admin']);
            }
        } else {
            throw new CHttpException(400, 'Invalid request. Please do not repeat this request again.');
        }
    }

    public function actionDelete($id)
    {
        $model = $this->loadModel($id);
        $model->blnborrado = true;
        $model->save();

        if (! isset($_GET['ajax'])) {
            $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : ['admin']);
        }
    }

    public function actionIndex()
    {
        $dataProvider = new CActiveDataProvider('Proveedor');
        $this->render('index', [
            'dataProvider' => $dataProvider,
        ]);
    }

    public function actionAdmin()
    {
        $model = new Proveedor('search');
        $model->unsetAttributes();
        if (isset($_GET['Proveedor'])) {
            $model->attributes = $_GET['Proveedor'];
        }

        $this->render('admin', [
            'model' => $model,
        ]);
    }

    public function loadModel($id)
    {
        $model = Proveedor::model()->findByPk($id);
        if ($model === null) {
            throw new CHttpException(404, 'The requested page does not exist.');
        }

        return $model;
    }

    protected function performAjaxValidation($model)
    {
        if (isset($_POST['ajax']) && $_POST['ajax'] === 'proveedor-form') {
            echo CActiveForm::validate($model);
            Yii::app()->end();
        }
    }
}
