<?php
/**
 * IMPORTANT NOTE
 * The code of this system is closed and a private proprietary of Flex Solutions.
 * A written authorization/license from Flex Solutions is required before using or modifying this code.
 * Email: sales@flexsolution.biz, Phone: +962795342585, Website: http://www.flexsolutions.biz
 */
 
/**
 *  TI Type
 *
 * Yii controller to control ti type actions
 *
 * @version 1.0
 *
 * @author Amaney
 * @package application.controllers
 */
class TiTypeController 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
	);
    }

    /**
     * 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', 'create', 'update', 'delete', 'ExportToExcel'),
		'roles' => array(User::SYSTEM_ADMIN_ROLE),
	    ),
	    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 TiType;

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

	if (isset($_POST['TiType'])) {
	    $model->attributes = $_POST['TiType'];
	    if ($model->validity_mode != 'Based on Validity Days')
		$model->validity_days = null;
	    if ($model->save()) {
		Yii::app()->user->setFlash('success', Yii::t('default', 'The TI Type has been added successfully'));
		$this->redirect(array('index'));
	    } else {
		Yii::app()->user->setFlash('error', CHtml::errorSummary($model));
	    }
	}

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

    /**
     * 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['TiType'])) {
	    $model->attributes = $_POST['TiType'];
	    if ($model->validity_mode != 'Based on Validity Days')
		$model->validity_days = null;
	    if ($model->save()) {
		Yii::app()->user->setFlash('success', Yii::t('default', 'The TI Type has been updated successfully'));
		$this->redirect(array('index'));
	    } else {
		Yii::app()->user->setFlash('error', CHtml::errorSummary($model));
	    }
	}

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

    /**
     * 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) {
	$model = $this->loadModel($id);

	$success_msg = Yii::t('default', 'The TI Type ({n}) has been deleted successfully', $model->name);
	$failer_msg = Yii::t('default', 'You cannot delete this element because it is referenced by other element');
	try {



	    $model->delete();

	    if (!isset($_GET['ajax'])) { // Check Wether the data grid will be updated through AJAX or Not
		Yii::app()->user->setFlash('success', $success_msg);
	    } else {
		Yii::app()->user->setFlash('success', $success_msg);
		echo "<div class='flash-msg'>" . "<br>";
		$this->widget('bootstrap.widgets.TbAlert');
		echo "</div>";
	    }
	} catch (CDbException $e) { // here the item is referenced by another item
	    if (!isset($_GET['ajax'])) {
		Yii::app()->user->setFlash('error', $failer_msg);
	    } else {
		Yii::app()->user->setFlash('error', $failer_msg);
		echo "<div class='flash-msg'>" . "<br>";
		$this->widget('bootstrap.widgets.TbAlert');
		echo "</div>";
	    }
	} catch (Exception $e) { // here the item is referenced by another item
	    if (!isset($_GET['ajax'])) {
		Yii::app()->user->setFlash('error', $e->getMessage());
	    } else {
		Yii::app()->user->setFlash('error', $e->getMessage());
		echo "<div class='flash-msg'>" . "<br>";
		$this->widget('bootstrap.widgets.TbAlert');
		echo "</div>";
	    }
	}
    }

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

	$this->render('index', 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 TiType the loaded model
     * @throws CHttpException
     */
    public function loadModel($id) {
	$model = TiType::model()->findByPk($id);
	if ($model === null)
	    throw new CHttpException(404, 'The requested page does not exist.');
	return $model;
    }

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

    /**
     * Export Ti Type info to excel
     */
    public function actionExportToExcel() {
	$model = new TiType('search');
	$model->unsetAttributes();  // clear any default values
	if (isset($_GET['TiType']))
	    $model->attributes = $_GET['TiType'];

	//Export Data to Excel File
	$header = array(
	    'name' => Yii::t('default', 'Name'),
	    'validity_days' => Yii::t('default', 'Validity Days'),
	    'validity_mode' => Yii::t('default', 'Validity Mode'),
	    'status' => Yii::t('default', 'Status'),
	);

	$column = "name,validity_days,validity_mode,status";

	$excel_file_name = Yii::t('default', 'TI Types');
	$model->exportToExcel($excel_file_name, $model, $header, $column, $model->ModelCriteria());
    }

}
