<?php

class AjusteHaberesController extends Controller
{
	/**
	 * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
	 * using two-column layout. See 'protected/views/layouts/column2.php'.
	 */
	public $layout='//layouts/column2';

	/**
	 * @return array action filters
	 */
	public function filters()
	{
		return array(
			'accessControl', // perform access control for CRUD operations
			'postOnly + delete', // we only allow deletion via POST request
			array('CrugeAccessControlFilter')
		);
	}

	/**
	 * Specifies the access control rules.
	 * This method is used by the 'accessControl' filter.
	 * @return array access control rules
	 */
	public function accessRules()
	{
		return array(
			array('allow',  // allow all users to perform 'index' and 'view' actions
				'actions'=>array('index','view'),
				'users'=>array('@'),
			),
			array('allow', // allow authenticated user to perform 'create' and 'update' actions
				'actions'=>array('create','update','Aprobar','ReporteExcel'),
				'users'=>array('@'),
			),
			array('allow', // allow admin user to perform 'admin' and 'delete' actions
				'actions'=>array('admin','delete'),
				'users'=>array('@'),
			),
			array('deny',  // deny all users
				'users'=>array('*'),
			),
		);
	}

	/**
	 * Displays a particular model.
	 * @param integer $id the ID of the model to be displayed
	 */
	public function actionView($id)
	{
		$this->render('view',array(
			'model'=>$this->loadModel($id),
		));
	}

	/**
	 * Creates a new model.
	 * If creation is successful, the browser will be redirected to the 'view' page.
	 */
	public function actionCreate()
	{
		$model=new AjusteHaberes('RegistroIndividual');
		$postDatos = FALSE;
		// Uncomment the following line if AJAX validation is needed
		// $this->performAjaxValidation($model);
        if(isset($_POST['AjusteHaberes']))
        {
            $model->attributes=$_POST['AjusteHaberes'];
			if($model->save()){
				$modelSeguimiento = new AjusteHaberesSeguimiento();
				$modelSeguimiento->id_ajuste_haberes= $model->id;
				$modelSeguimiento->id_estatus_ajuste_haberes= 1;
				$modelSeguimiento->save();
				$this->redirect(array('view','id'=>$model->id));
			}
		}

		$this->render('create',array(
			'model'=>$model,
			'postDatos'=>$postDatos,
		));
	}

	/**
	 * Updates a particular model.
	 * If update is successful, the browser will be redirected to the 'view' page.
	 * @param integer $id the ID of the model to be updated
	 */
	public function actionUpdate($id)
	{
		$model=$this->loadModel($id);

		// Uncomment the following line if AJAX validation is needed
		// $this->performAjaxValidation($model);

		if(isset($_POST['AjusteHaberes']))
		{
			$model->attributes=$_POST['AjusteHaberes'];
			if($model->save())
				$this->redirect(array('view','id'=>$model->id));
		}

		$this->render('update',array(
			'model'=>$model,
		));
	}

	public function actionAprobar($id)
    {
        $model = $this->loadModel($id);
        $model->fecha_comprobante = date('d-m-Y');

        if ($model->id_estatus != 1) {
            Yii::app()->user->setFlash('error', '<b>El ajuste de haberes ya se encuentra '.$model->nombre_estatus.'</b>');
            $this->redirect(['view', 'id' => $model->id]);
        }

        $modelSeguimiento = new AjusteHaberesSeguimiento();
        $modelSeguimiento->id_ajuste_haberes = $model->id;

        if (isset($_POST['AjusteHaberesSeguimiento'])) {
            $modelSeguimiento->attributes = $_POST['AjusteHaberesSeguimiento'];

            if (isset($_POST['yt0'])) {
                $modelSeguimiento->id_estatus_ajuste_haberes = 2;
                $modelSeguimiento->scenario = 'aprobacionSolicitud';
            }

            if (isset($_POST['yt1'])) {
                $modelSeguimiento->id_estatus_ajuste_haberes = 3;
                $modelSeguimiento->scenario = 'denegacionSolicitud';
            }

            if ($modelSeguimiento->validate()) {
                $transaction = Yii::app()->getDb()->beginTransaction();
                try {
                    $fecha_comprobante = (new Warp($_POST))->get('AjusteHaberes.fecha_comprobante', date('d-m-Y'));
                    $model->fecha_comprobante = date('Y-m-d', strtotime($fecha_comprobante));
                    $model->monto_asociado = number_format($model->monto_asociado, 2, ',', '.');
                    $model->monto_patrono = number_format($model->monto_patrono, 2, ',', '.');
                    $model->save();

                    AjusteHaberesSeguimiento::model()->updateAll(['actual' => false], 'id_ajuste_haberes=:id', [':id' => $model->id]);
                    $modelSeguimiento->scenario = '';
                    $modelSeguimiento->save();

                    //////////////////////////// Contabilización Comprobante Inicio ////////////////////////////
                    Yii::import('application.modules.contable.models.comprobantes.*', true);
                    Yii::import('application.modules.contable.models.comprobantes.ajuste.*', true);
                    (new AjusteIndividual($model))->contabilizar();
                    //////////////////////////// Contabilización Comprobante Fin ///////////////////////////////

                    $transaction->commit();

                    Yii::app()->user->setFlash('success', '<b>El ajuste de haberes ha sido '.$modelSeguimiento->idEstatusAjusteHaberes->descripcion.'</b>');
                    $this->redirect(['view', 'id' => $model->id]);
                } catch (Exception $e) {
                    $transaction->rollBack();
                    Yii::app()->user->setFlash('error', $e->getMessage());

                    $this->redirect(['admin']);
                }
            }
        }

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

	/**
	 * Deletes a particular model.
	 * If deletion is successful, the browser will be redirected to the 'admin' page.
	 * @param integer $id the ID of the model to be deleted
	 */
	public function actionDelete($id)
	{
		$this->loadModel($id)->delete();

		// if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
		if(!isset($_GET['ajax']))
			$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
	}

	public function actionReporteExcel(){
        $consulta =$_SESSION['datos_filtrados'];
        $datos = $consulta->getData();
        $model = new AjusteHaberesSeguimiento;
        $filas=array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
                                'AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO','AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ');

        $phpExcelPath = Yii::getPathOfAlias('ext.Excel.PHPExcel.Classes');
        $phpExcelPath2 = Yii::getPathOfAlias('application.extensions.Excel.PHPExcel.Classes.PHPExcel');

        spl_autoload_unregister(array('YiiBase','autoload'));

        include($phpExcelPath . DIRECTORY_SEPARATOR . 'PHPExcel.php');
        include($phpExcelPath2 . DIRECTORY_SEPARATOR . 'IOFactory.php');
        spl_autoload_register(array('YiiBase','autoload'));

        $objPHPExcel = new PHPExcel();

        $objPHPExcel->getProperties()->setCreator("RORAIMASOFTWARE")
                                    ->setLastModifiedBy("RORAIMASOFTWARE")
                                    ->setTitle("RORAIMASOFTWARE")
                                    ->setSubject("RORAIMASOFTWARE")
                                    ->setDescription("RORAIMASOFTWARE")
                                    ->setKeywords("RORAIMASOFTWARE")
                                    ->setCategory("RORAIMASOFTWARE");

        $objPHPExcel->setActiveSheetIndex(0);

        $numtemo =0;
        $objPHPExcel->getActiveSheet()->getStyle('A1:M1')->getFont()->setBold(true);                    //stylo
        $objPHPExcel->getActiveSheet()->getStyle('A1:M1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel->getActiveSheet()->getStyle('A1:M1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        foreach(range('A','M') as $columnID) {
            $objPHPExcel->getActiveSheet()->getColumnDimension($columnID)->setAutoSize(true);
        }
        $objPHPExcel->setActiveSheetIndex(0)->mergeCells('A1:M1');
        $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].'1','Listado de movimiento de ajuste a haberes');
		$objPHPExcel->getActiveSheet()->getStyle('A3:M3')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel->getActiveSheet()->getStyle('A3:M3')->getFont()->setBold(true);
        $objPHPExcel->getActiveSheet()->getStyle('A3:M3')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
        $objPHPExcel->getActiveSheet()->getStyle('A3:M3')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
        $objPHPExcel->getActiveSheet()->getStyle('A3:M3')->getFill()->getStartColor()->setARGB('0B610B');
            $numtemo = 0;
            $numfila = 3;

            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Cédula');$numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Nombres');$numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Apellidos');$numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Unidad');$numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Número de operación');$numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Fecha de la operación');$numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Concepto del juste');$numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Tipo de ajuste');$numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Tipo de movimiento');$numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Monto asociado');$numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Monto patrono');$numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Observación');$numtemo++;
            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,'Estatus');$numtemo++;

            $numtemo=0;
            $numfila = 4;
            $monto =0;
            foreach($consulta->getData() as $key=>$value) {
                $numtemo =0;
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$value->idAsociado->cedula);$numtemo++;
	            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,(isset($value->idAsociado->nombre))?$value->idAsociado->nombre:"");$numtemo++;
	            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,(isset($value->idAsociado->apellidos))?$value->idAsociado->apellidos:"");$numtemo++;
	            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$value->idAsociado->unidad->descripcion);$numtemo++;
	            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$value->numero_operacion);$numtemo++;
	            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,date("d-m-Y",strtotime($value->fecha_operacion)));$numtemo++;
	            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$value->idConceptoAjuste->descripcion);$numtemo++;
	            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$value->idTipoAjuste->descripcion);$numtemo++;
	            $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$value->idTipoMovimiento->descripcion);$numtemo++;
                $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$value->monto_asociado);$numtemo++;
                $objPHPExcel->getActiveSheet()->getStyle($filas[$numtemo].$numfila)->getNumberFormat()->setFormatCode('#,##0.00');
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$value->monto_patrono);$numtemo++;
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$value->observacion);$numtemo++;
                $objPHPExcel->getActiveSheet()->setCellValue($filas[$numtemo].$numfila,$value->nombre_estatus);$numtemo++;
                $numfila ++;
            }

            //$objPHPExcel->getActiveSheet()->setTitle('Reporte de Créditos');
            $objPHPExcel->setActiveSheetIndex(0);

            header('Content-Type: application/vnd.ms-excel');
            header('Content-Disposition: attachment;filename="22222.xls"');
            header('Cache-Control: max-age=0');

            $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
            $objWriter->save('php://output');
            flush();ob_flush();flush();ob_flush();
            exit;
	}

	/**
	 * Lists all models.
	 */
	public function actionIndex()
	{
		$dataProvider=new CActiveDataProvider('AjusteHaberes');
		$this->render('index',array(
			'dataProvider'=>$dataProvider,
		));
	}

	/**
	 * Manages all models.
	 */
	public function actionAdmin()
	{
		$model=new AjusteHaberes('search');
		$model->unsetAttributes();  // clear any default values
		if(isset($_GET['AjusteHaberes']))
			$model->attributes=$_GET['AjusteHaberes'];

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

	/**
	 * Returns the data model based on the primary key given in the GET variable.
	 * If the data model is not found, an HTTP exception will be raised.
	 * @param integer $id the ID of the model to be loaded
	 * @return AjusteHaberes the loaded model
	 * @throws CHttpException
	 */
	public function loadModel($id)
	{
		$model=AjusteHaberes::model()->findByPk($id);
		if($model===null)
			throw new CHttpException(404,'The requested page does not exist.');
		return $model;
	}

	/**
	 * Performs the AJAX validation.
	 * @param AjusteHaberes $model the model to be validated
	 */
	protected function performAjaxValidation($model)
	{
		if(isset($_POST['ajax']) && $_POST['ajax']==='ajuste-haberes-form')
		{
			echo CActiveForm::validate($model);
			Yii::app()->end();
		}
	}
}
