<?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
 */
 
/**
 *  Contract
 *
 * Yii controller to control contract actions
 *
 * @version 1.0
 *
 * @author Amaney
 * @package application.controllers
 */
class ContractController 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 Contract();

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

	if (isset($_POST['Contract'])) {
	    $model->attributes = $_POST['Contract'];
	    if ($model->save()) {
		Yii::app()->user->setFlash('success', Yii::t('default', 'The contract 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['Contract'])) {
	    $model->attributes = $_POST['Contract'];
	    if ($model->save()) {
		Yii::app()->user->setFlash('success', Yii::t('default', 'The contract 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 contract ({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 Contract('search');
	$model->unsetAttributes();  // clear any default values
	if (isset($_GET['Contract']))
	    $model->attributes = $_GET['Contract'];

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

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


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

        //Export Data to Excel File
        $header = array(
            'name' => Yii::t('default', 'Name'),
	    'reference' => Yii::t('default', 'Refernece'),
	    'start_date' => Yii::t('default', 'Start Date'),
	    'expiry_date' => Yii::t('default', 'Expiry Date'),
	    'status' => Yii::t('default', 'Status'),
        );

        $column = "name,reference,start_date,expiry_date,status";

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

}
