/**
  * Grid of all models.
  */
 public function actionGrid()
 {
     // specify filter parameters
     $company = isset($_GET['company']) ? $_GET['company'] : null;
     if ($company !== 'all' && !ctype_digit($company)) {
         $company = 'all';
     }
     $paymentMethod = isset($_GET['paymentMethod']) ? $_GET['paymentMethod'] : null;
     if ($paymentMethod !== 'all' && $paymentMethod !== (string) CompanyPayment::CASH && $paymentMethod !== (string) CompanyPayment::CHECK && $paymentMethod !== (string) CompanyPayment::CREDIT_CARD && $paymentMethod !== (string) CompanyPayment::PAYPAL && $paymentMethod !== (string) CompanyPayment::WIRE) {
         $paymentMethod = 'all';
     }
     // criteria
     $criteria = new CDbCriteria();
     $criteria->group = "`t`.`id`";
     // required by together()
     $criteria->select = "`t`.amount, `t`.paymentDate, `t`.paymentMethod, `t`.paymentNumber";
     //$criteria->select="`t`.`amount`, `t`.`paymentDate`, `t`.`paymentMethod`, `t`.`paymentNumber`"; // uncomment in yii-1.1.2
     if ($company !== 'all') {
         $criteria->addCondition("`CompanyPayment_Company`.`id`=:companyId");
         $criteria->params[':companyId'] = $company;
     }
     if ($paymentMethod === (string) CompanyPayment::CASH) {
         $criteria->addCondition("`t`.`paymentMethod`=:cash");
         $criteria->params[':cash'] = CompanyPayment::CASH;
     } else {
         if ($paymentMethod === (string) CompanyPayment::CHECK) {
             $criteria->addCondition("`t`.`paymentMethod`=:check");
             $criteria->params[':check'] = CompanyPayment::CHECK;
         } else {
             if ($paymentMethod === (string) CompanyPayment::CREDIT_CARD) {
                 $criteria->addCondition("`t`.`paymentMethod`=:creditCard");
                 $criteria->params[':creditCard'] = CompanyPayment::CREDIT_CARD;
             } else {
                 if ($paymentMethod === (string) CompanyPayment::PAYPAL) {
                     $criteria->addCondition("`t`.`paymentMethod`=:paypal");
                     $criteria->params[':paypal'] = CompanyPayment::PAYPAL;
                 } else {
                     if ($paymentMethod === (string) CompanyPayment::WIRE) {
                         $criteria->addCondition("`t`.`paymentMethod`=:wire");
                         $criteria->params[':wire'] = CompanyPayment::WIRE;
                     }
                 }
             }
         }
     }
     if (User::isClient()) {
         $criteria->addCondition("`Company_User2Company`.`userId`=:clientId AND `Company_User2Company`.`position`=:clientPosition");
         $criteria->params[':clientId'] = Yii::app()->user->id;
         $criteria->params[':clientPosition'] = Company::OWNER;
     }
     // pagination
     $with = array();
     if (strpos($criteria->condition, 'CompanyPayment_Company') !== false) {
         $with[] = 'company';
     }
     if (strpos($criteria->condition, 'Company_User2Company') !== false) {
         $with[] = 'company.allUser2Company';
     }
     if (count($with) >= 1) {
         $pages = new CPagination(CompanyPayment::model()->with($with)->count($criteria));
     } else {
         $pages = new CPagination(CompanyPayment::model()->count($criteria));
     }
     $pages->pageSize = self::GRID_PAGE_SIZE;
     $pages->applyLimit($criteria);
     // sort
     $sort = new CSort('CompanyPayment');
     $sort->attributes = array('amount' => array('asc' => "`t`.`amount`", 'desc' => "`t`.`amount` desc", 'label' => CompanyPayment::model()->getAttributeLabel('amount')), 'paymentDate' => array('asc' => "`t`.`paymentDate`", 'desc' => "`t`.`paymentDate` desc", 'label' => CompanyPayment::model()->getAttributeLabel('Date')), 'paymentMethod' => array('asc' => "`t`.`paymentMethod`", 'desc' => "`t`.`paymentMethod` desc", 'label' => CompanyPayment::model()->getAttributeLabel('Method')), 'paymentNumber' => array('asc' => "`t`.`paymentNumber`", 'desc' => "`t`.`paymentNumber` desc", 'label' => CompanyPayment::model()->getAttributeLabel('Number')), 'company' => array('asc' => "`CompanyPayment_Company`.`title`", 'desc' => "`CompanyPayment_Company`.`title` desc", 'label' => CompanyPayment::model()->getAttributeLabel('companyId')));
     $sort->defaultOrder = "`t`.`paymentDate` DESC";
     $sort->applyOrder($criteria);
     // find all
     $with = array('company' => array('select' => 'title'));
     if (strpos($criteria->condition, 'Company_User2Company') !== false) {
         $with['company.allUser2Company'] = array('select' => 'id');
     }
     $together = strpos($criteria->condition, 'Company_User2Company') !== false;
     if ($together) {
         $models = CompanyPayment::model()->with($with)->together()->findAll($criteria);
     } else {
         $models = CompanyPayment::model()->with($with)->findAll($criteria);
     }
     // filters data
     $filters = array('company' => $company, 'paymentMethod' => $paymentMethod);
     $allCompany = array(array('text' => Yii::t('t', 'All'), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('company' => 'all'))), 'active' => $company === 'all'));
     $companyLinkText = $company === 'all' ? Yii::t('t', 'All companies') : ' ';
     $criteria = new CDbCriteria();
     $criteria->select = "`t`.`id`, `t`.`title`, COUNT(`companyPayment`.`id`) as countCompanyPayment";
     if (User::isClient()) {
         $criteria->join = "INNER JOIN `" . CompanyPayment::model()->tableName() . "` `companyPayment` ON `companyPayment`.`companyId`=`t`.`id`" . " INNER JOIN `" . User2Company::model()->tableName() . "` `u2c` ON `u2c`.`companyId`=`t`.`id`";
         $criteria->condition = "`u2c`.`userId`=:clientId AND `u2c`.`position`=:clientPosition";
         $criteria->params[':clientId'] = Yii::app()->user->id;
         $criteria->params[':clientPosition'] = Company::OWNER;
     } else {
         $criteria->join = "INNER JOIN `" . CompanyPayment::model()->tableName() . "` `companyPayment` ON `companyPayment`.`companyId`=`t`.`id`";
     }
     $criteria->group = "`t`.`id`";
     $criteria->order = "`t`.`title` ASC";
     $criteria->limit = 3000;
     foreach (Company::model()->findAll($criteria) as $model) {
         $allCompany[] = array('text' => CHtml::encode($model->title), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('company' => $model->id))), 'active' => $company === (string) $model->id);
         $i = count($allCompany) - 1;
         if ($allCompany[$i]['text'] === '') {
             $allCompany[$i]['text'] = Yii::t('t', '[no title]');
         }
         $allCompany[$i]['text'] .= ' (' . $model->countCompanyPayment . ')';
         if ($company === (string) $model->id) {
             $companyLinkText = $model->title === '' ? Yii::t('t', '[no title]') : $model->title;
         }
     }
     $allPaymentMethod = array(array('text' => Yii::t('t', 'All'), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('paymentMethod' => 'all'))), 'active' => $paymentMethod === 'all'), array('text' => Yii::t('payment', 'Cash'), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('paymentMethod' => CompanyPayment::CASH))), 'active' => $paymentMethod === (string) CompanyPayment::CASH), array('text' => Yii::t('payment', 'Check'), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('paymentMethod' => CompanyPayment::CHECK))), 'active' => $paymentMethod === (string) CompanyPayment::CHECK), array('text' => Yii::t('payment', 'Credit card'), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('paymentMethod' => CompanyPayment::CREDIT_CARD))), 'active' => $paymentMethod === (string) CompanyPayment::CREDIT_CARD), array('text' => Yii::t('payment', 'Paypal'), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('paymentMethod' => CompanyPayment::PAYPAL))), 'active' => $paymentMethod === (string) CompanyPayment::PAYPAL), array('text' => Yii::t('payment', 'Wire'), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('paymentMethod' => CompanyPayment::WIRE))), 'active' => $paymentMethod === (string) CompanyPayment::WIRE));
     switch ($paymentMethod) {
         case 'all':
             $paymentMethodLinkText = Yii::t('t', 'All payment methods');
             break;
         case (string) CompanyPayment::CASH:
             $paymentMethodLinkText = Yii::t('payment', 'Cash');
             break;
         case (string) CompanyPayment::CHECK:
             $paymentMethodLinkText = Yii::t('payment', 'Check');
             break;
         case (string) CompanyPayment::CREDIT_CARD:
             $paymentMethodLinkText = Yii::t('payment', 'Credit card');
             break;
         case (string) CompanyPayment::PAYPAL:
             $paymentMethodLinkText = Yii::t('payment', 'Paypal');
             break;
         case (string) CompanyPayment::WIRE:
             $paymentMethodLinkText = Yii::t('payment', 'Wire');
             break;
         default:
             $paymentMethodLinkText = ' ';
     }
     // rows for the static grid
     $gridRows = array();
     foreach ($models as $model) {
         $gridRows[] = array(array('content' => isset($model->company->id) ? CHtml::link(CHtml::encode($model->company->title), array('company/show', 'id' => $model->company->id)) : ''), array('align' => 'right', 'content' => CHtml::encode(MDate::format($model->paymentDate, 'medium', null)), 'title' => CHtml::encode(MDate::format($model->paymentDate, 'full', null))), array('align' => 'right', 'content' => CHtml::encode($model->amount)), array('content' => CHtml::encode($model->getAttributeView('paymentMethod'))), array('align' => 'right', 'content' => CHtml::encode($model->paymentNumber)), array('content' => CHtml::link('<span class="ui-icon ui-icon-zoomin"></span>', array('show', 'id' => $model->id), array('class' => 'w3-ig w3-link-icon w3-border-1px-transparent w3-first ui-corner-all', 'title' => Yii::t('link', 'Show'))) . CHtml::link('<span class="ui-icon ui-icon-pencil"></span>', array('update', 'id' => $model->id), array('class' => 'w3-ig w3-link-icon w3-border-1px-transparent w3-last ui-corner-all', 'title' => Yii::t('link', 'Edit')))));
     }
     // render the view file
     $this->render($this->action->id, array('models' => $models, 'pages' => $pages, 'sort' => $sort, 'company' => $company, 'paymentMethod' => $paymentMethod, 'filters' => $filters, 'allCompany' => $allCompany, 'companyLinkText' => $companyLinkText, 'allPaymentMethod' => $allPaymentMethod, 'paymentMethodLinkText' => $paymentMethodLinkText, 'gridRows' => $gridRows));
 }
Esempio n. 2
0
 /**
  * Shows a particular model.
  */
 public function actionShow()
 {
     if (!User::isClient() && !User::isManager() && !User::isAdministrator()) {
         // not enough rights
         MUserFlash::setTopError(Yii::t('hint', 'We are sorry, but you don\'t have enough rights to browse companies.'));
         $this->redirect($this->getGotoUrl());
     }
     if (isset($_GET['my'])) {
         // show client's company
         if (Yii::app()->user->isGuest) {
             // guest may not have any company
             MUserFlash::setTopError(Yii::t('hint', 'Please authorize to view your company.'));
             $this->redirect($this->getGotoUrl());
         }
         if (($user2Company = User2Company::model()->findByAttributes(array('userId' => Yii::app()->user->id, 'position' => Company::OWNER), array('order' => "`companyPriority` ASC"))) !== null) {
             $id = $user2Company->companyId;
         } else {
             // user is not an owner yet
             MUserFlash::setTopError(Yii::t('hint', 'We are sorry, but you are not the owner of any company yet.'));
             $this->redirect($this->getGotoUrl());
         }
     } else {
         // get id from the url
         $id = isset($_GET['id']) ? $_GET['id'] : 0;
     }
     // load model
     $with = array('allUser');
     /*if(User::isClient())
       $with[]='allUser2Company';*/
     $model = $this->loadModel(array('id' => $id, 'with' => $with));
     // may member view this record?
     if (User::isClient()) {
         /*$allOwner=array();
           foreach($model->allUser2Company as $user2Company)
           {
               if($user2Company->position===Company::OWNER)
                   $allOwner[]=$user2Company->userId;
           }
           if(!in_array(Yii::app()->user->id,$allOwner))*/
         if (!$model->isOwner()) {
             MUserFlash::setTopError(Yii::t('hint', 'We are sorry, but you don\'t have enough rights to view the company record number {id}.', array('{id}' => MHtml::wrapInTag($model->id, 'strong'))));
             $this->redirect($this->getGotoUrl());
         }
     }
     // FIXME: check is owner or manager or admin
     // transaction's payments
     $companyPayments = CompanyPayment::model()->findAllByAttributes(array('companyId' => $model->id), new CDbCriteria(array('order' => "`t`.`paymentDate` ASC, `t`.`id` ASC")));
     // transaction's invoices
     $invoices = Invoice::model()->findAllByAttributes(array('companyId' => $model->id), new CDbCriteria(array('order' => "`t`.`invoiceDate` ASC, `t`.`id` ASC")));
     // construct tmp array of all transactions. use time as index
     $array = array();
     foreach ($companyPayments as $companyPayment) {
         $time = strtotime($companyPayment->paymentDate);
         while (array_key_exists($time, $array)) {
             $time++;
         }
         $array[$time] = array('date' => $companyPayment->paymentDate, 'credit' => $companyPayment->amount, 'number' => $companyPayment->paymentNumber, 'method' => $companyPayment->getAttributeView('paymentMethod'), 'id' => $companyPayment->id, 'controllerId' => 'companyPayment');
     }
     foreach ($invoices as $invoice) {
         $time = strtotime($invoice->invoiceDate);
         while (array_key_exists($time, $array)) {
             $time++;
         }
         $array[$time] = array('date' => $invoice->invoiceDate, 'debit' => $invoice->amountTotal, 'id' => $invoice->id, 'controllerId' => 'invoice');
     }
     // sort by index
     ksort($array);
     // construct transaction history array
     $transactions = array();
     $balance = $debit = $credit = 0;
     foreach ($array as $row) {
         $d = isset($row['debit']) ? $row['debit'] : 0;
         $c = isset($row['credit']) ? $row['credit'] : 0;
         $balance = $balance - $d + $c;
         $debit += $d;
         $credit += $c;
         $transactions[] = array('date' => $row['date'], 'debit' => isset($row['debit']) ? $row['debit'] : null, 'credit' => isset($row['credit']) ? $row['credit'] : null, 'number' => isset($row['number']) ? $row['number'] : null, 'method' => isset($row['method']) ? $row['method'] : null, 'balance' => $balance, 'id' => $row['id'], 'controllerId' => $row['controllerId']);
     }
     // rows for the static grid
     $gridRows = array();
     foreach ($transactions as $transaction) {
         $gridRows[] = array(array('align' => 'right', 'content' => CHtml::encode(MDate::format($transaction['date'], 'long', null)), 'title' => CHtml::encode(MDate::format($transaction['date'], 'full', null))), array('content' => CHtml::link($transaction['controllerId'] === 'invoice' ? Yii::t('link', 'Invoice {number}', array('{number}' => $transaction['number'] === null ? $transaction['id'] : $transaction['number'])) : Yii::t('link', 'Payment {number} ({method})', array('{number}' => $transaction['number'] === null ? $transaction['id'] : $transaction['number'], '{method}' => $transaction['method'])), array($transaction['controllerId'] . '/show', 'id' => $transaction['id']))), array('align' => 'right', 'content' => is_numeric($transaction['debit']) ? CHtml::encode(MCurrency::format($transaction['debit'])) : ''), array('align' => 'right', 'content' => is_numeric($transaction['credit']) ? CHtml::encode(MCurrency::format($transaction['credit'])) : ''), array('align' => 'right', 'content' => CHtml::encode(MCurrency::format($transaction['balance']))));
     }
     // render the view file
     $this->render($this->action->id, array('model' => $model, 'debit' => $debit, 'credit' => $credit, 'balance' => $credit - $debit, 'gridRows' => $gridRows));
 }
Esempio n. 3
0
 /**
  * Grid of all models.
  */
 public function actionGrid()
 {
     // specify filter parameters
     $company = isset($_GET['company']) ? $_GET['company'] : null;
     if ($company !== 'all' && !ctype_digit($company)) {
         $company = 'all';
     }
     $priority = isset($_GET['priority']) ? $_GET['priority'] : null;
     if ($priority !== 'all' && $priority !== (string) Project::PRIORITY_HIGHEST && $priority !== (string) Project::PRIORITY_HIGH && $priority !== (string) Project::PRIORITY_MEDIUM && $priority !== (string) Project::PRIORITY_LOW && $priority !== (string) Project::PRIORITY_LOWEST) {
         $priority = 'all';
     }
     $state = isset($_GET['state']) ? $_GET['state'] : null;
     if ($state !== 'all' && $state !== 'closed' && $state !== 'open') {
         $state = 'all';
     }
     // criteria
     $criteria = new CDbCriteria();
     $criteria->group = "`t`.`id`";
     // required by together()
     $criteria->select = "`t`.closeDate, `t`.hourlyRate, `t`.openDate, `t`.priority, `t`.title";
     //$criteria->select="`t`.`closeDate`, `t`.`hourlyRate`, `t`.`openDate`, `t`.`priority`, `t`.`title`"; // uncomment in yii-1.1.2
     if ($company !== 'all') {
         $criteria->addCondition("`Project_Company`.`id`=:companyId");
         $criteria->params[':companyId'] = $company;
     }
     if ($priority === (string) Project::PRIORITY_HIGHEST) {
         $criteria->addCondition("`t`.`priority`=:priorityHighest");
         $criteria->params[':priorityHighest'] = Project::PRIORITY_HIGHEST;
     } else {
         if ($priority === (string) Project::PRIORITY_HIGH) {
             $criteria->addCondition("`t`.`priority`=:priorityHigh");
             $criteria->params[':priorityHigh'] = Project::PRIORITY_HIGH;
         } else {
             if ($priority === (string) Project::PRIORITY_MEDIUM) {
                 $criteria->addCondition("`t`.`priority`=:priorityMedium");
                 $criteria->params[':priorityMedium'] = Project::PRIORITY_MEDIUM;
             } else {
                 if ($priority === (string) Project::PRIORITY_LOW) {
                     $criteria->addCondition("`t`.`priority`=:priorityLow");
                     $criteria->params[':priorityLow'] = Project::PRIORITY_LOW;
                 } else {
                     if ($priority === (string) Project::PRIORITY_LOWEST) {
                         $criteria->addCondition("`t`.`priority`=:priorityLowest");
                         $criteria->params[':priorityLowest'] = Project::PRIORITY_LOWEST;
                     }
                 }
             }
         }
     }
     if ($state === 'closed') {
         $criteria->addCondition("(`t`.`closeDate` IS NOT NULL AND TO_DAYS('" . MDate::formatToDb(time(), 'date') . "') <= TO_DAYS(`t`.`closeDate`))");
     } else {
         if ($state === 'open') {
             $criteria->addCondition("(`t`.`closeDate` IS NULL OR TO_DAYS('" . MDate::formatToDb(time(), 'date') . "') < TO_DAYS(`t`.`closeDate`))");
         }
     }
     if (User::isClient()) {
         $criteria->addCondition("`Company_User2Company`.`userId`=:clientId AND `Company_User2Company`.`position`=:clientPosition");
         $criteria->params[':clientId'] = Yii::app()->user->id;
         $criteria->params[':clientPosition'] = Company::OWNER;
     }
     if (User::isConsultant()) {
         $criteria->addCondition("`Task_Consultant`.`id`=:consultantId");
         $criteria->params[':consultantId'] = Yii::app()->user->id;
     }
     // pagination
     $with = array();
     if (strpos($criteria->condition, 'Project_Company') !== false) {
         $with[] = 'allCompany';
     }
     if (strpos($criteria->condition, 'Company_User2Company') !== false) {
         $with[] = 'allCompany.allUser2Company';
     }
     if (strpos($criteria->condition, 'Task_Consultant') !== false) {
         $with[] = 'allTask.allConsultant';
     }
     if (count($with) >= 1) {
         $pages = new CPagination(Project::model()->with($with)->count($criteria));
     } else {
         $pages = new CPagination(Project::model()->count($criteria));
     }
     $pages->pageSize = self::GRID_PAGE_SIZE;
     $pages->applyLimit($criteria);
     // sort
     $sort = new CSort('Project');
     $sort->attributes = array('closeDate' => array('asc' => "`t`.`closeDate`", 'desc' => "`t`.`closeDate` desc", 'label' => Project::model()->getAttributeLabel('Closed')), 'hourlyRate' => array('asc' => "`t`.`hourlyRate`", 'desc' => "`t`.`hourlyRate` desc", 'label' => Project::model()->getAttributeLabel('Rate')), 'openDate' => array('asc' => "`t`.`openDate`", 'desc' => "`t`.`openDate` desc", 'label' => Project::model()->getAttributeLabel('Opened')), 'priority' => array('asc' => "`t`.`priority`", 'desc' => "`t`.`priority` desc", 'label' => Project::model()->getAttributeLabel('priority')), 'title' => array('asc' => "`t`.`title`", 'desc' => "`t`.`title` desc", 'label' => Project::model()->getAttributeLabel('title')), 'company' => array('asc' => "`Project_Company`.`title`", 'desc' => "`Project_Company`.`title` desc", 'label' => Company2Project::model()->getAttributeLabel('companyId')));
     $sort->defaultOrder = "`t`.`closeDate` ASC, `t`.`priority` ASC, `t`.`createTime` DESC";
     $sort->applyOrder($criteria);
     // find all
     $with = array('allCompany' => array('select' => 'title'));
     if (strpos($criteria->condition, 'Company_User2Company') !== false) {
         $with['allCompany.allUser2Company'] = array('select' => 'id');
     }
     if (strpos($criteria->condition, 'Task_Consultant') !== false) {
         $with['allTask.allConsultant'] = array('select' => 'id');
     }
     $together = strpos($criteria->condition, 'Project_Company') !== false || strpos($criteria->order, 'Project_Company') !== false || strpos($criteria->condition, 'Company_User2Company') !== false || strpos($criteria->condition, 'Task_Consultant') !== false;
     if ($together) {
         $models = Project::model()->with($with)->together()->findAll($criteria);
     } else {
         $models = Project::model()->with($with)->findAll($criteria);
     }
     // filters data
     $filters = array('company' => $company, 'priority' => $priority, 'state' => $state);
     $allCompany = array(array('text' => Yii::t('t', 'All'), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('company' => 'all'))), 'active' => $company === 'all'));
     $companyLinkText = $company === 'all' ? Yii::t('t', 'All companies') : '&nbsp;';
     $criteria = new CDbCriteria();
     $criteria->select = "`t`.`id`, `t`.`title`, COUNT(DISTINCT `project`.`id`) as countProject";
     if (User::isConsultant()) {
         $criteria->join = "INNER JOIN `" . Company2Project::model()->tableName() . "` `c2p` ON `c2p`.`companyId`=`t`.`id`" . " INNER JOIN `" . Project::model()->tableName() . "` `project` ON `project`.`id`=`c2p`.`projectId`" . " INNER JOIN `" . Task::model()->tableName() . "` `task` ON `task`.`projectId`=`project`.`id`" . " INNER JOIN `" . User2Task::model()->tableName() . "` `u2t` ON `u2t`.`taskId`=`task`.`id`";
         $criteria->condition = "`u2t`.`userId`=:consultantId AND `u2t`.`role`=:consultantRole";
         $criteria->params[':consultantId'] = Yii::app()->user->id;
         $criteria->params[':consultantRole'] = User2Task::CONSULTANT;
     } else {
         if (User::isClient()) {
             $criteria->join = "INNER JOIN `" . Company2Project::model()->tableName() . "` `c2p` ON `c2p`.`companyId`=`t`.`id`" . " INNER JOIN `" . Project::model()->tableName() . "` `project` ON `project`.`id`=`c2p`.`projectId`" . " INNER JOIN `" . User2Company::model()->tableName() . "` `u2c` ON `u2c`.`companyId`=`t`.`id`";
             $criteria->condition = "`u2c`.`userId`=:clientId AND `u2c`.`position`=:clientPosition";
             $criteria->params[':clientId'] = Yii::app()->user->id;
             $criteria->params[':clientPosition'] = Company::OWNER;
         } else {
             $criteria->join = "INNER JOIN `" . Company2Project::model()->tableName() . "` `c2p` ON `c2p`.`companyId`=`t`.`id`" . " INNER JOIN `" . Project::model()->tableName() . "` `project` ON `project`.`id`=`c2p`.`projectId`";
         }
     }
     $criteria->group = "`t`.`id`";
     $criteria->order = "`t`.`title` ASC";
     $criteria->limit = 3000;
     foreach (Company::model()->findAll($criteria) as $model) {
         $allCompany[] = array('text' => CHtml::encode($model->title), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('company' => $model->id))), 'active' => $company === (string) $model->id);
         $i = count($allCompany) - 1;
         if ($allCompany[$i]['text'] === '') {
             $allCompany[$i]['text'] = Yii::t('t', '[no title]');
         }
         $allCompany[$i]['text'] .= ' (' . $model->countProject . ')';
         if ($company === (string) $model->id) {
             $companyLinkText = $model->title === '' ? Yii::t('t', '[no title]') : $model->title;
         }
     }
     $allPriority = array(array('text' => Yii::t('t', 'All'), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('priority' => 'all'))), 'active' => $priority === 'all'), array('text' => Yii::t('t', 'Highest[priority]'), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('priority' => Project::PRIORITY_HIGHEST))), 'active' => $priority === (string) Project::PRIORITY_HIGHEST), array('text' => Yii::t('t', 'High[priority]'), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('priority' => Project::PRIORITY_HIGH))), 'active' => $priority === (string) Project::PRIORITY_HIGH), array('text' => Yii::t('t', 'Medium[priority]'), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('priority' => Project::PRIORITY_MEDIUM))), 'active' => $priority === (string) Project::PRIORITY_MEDIUM), array('text' => Yii::t('t', 'Low[priority]'), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('priority' => Project::PRIORITY_LOW))), 'active' => $priority === (string) Project::PRIORITY_LOW), array('text' => Yii::t('t', 'Lowest[priority]'), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('priority' => Project::PRIORITY_LOWEST))), 'active' => $priority === (string) Project::PRIORITY_LOWEST));
     switch ($priority) {
         case 'all':
             $priorityLinkText = Yii::t('t', 'All priorities');
             break;
         case (string) Project::PRIORITY_HIGHEST:
             $priorityLinkText = Yii::t('t', 'Highest[priority]');
             break;
         case (string) Project::PRIORITY_HIGH:
             $priorityLinkText = Yii::t('t', 'High[priority]');
             break;
         case (string) Project::PRIORITY_MEDIUM:
             $priorityLinkText = Yii::t('t', 'Medium[priority]');
             break;
         case (string) Project::PRIORITY_LOW:
             $priorityLinkText = Yii::t('t', 'Low[priority]');
             break;
         case (string) Project::PRIORITY_LOWEST:
             $priorityLinkText = Yii::t('t', 'Lowest[priority]');
             break;
         default:
             $priorityLinkText = '&nbsp;';
     }
     $allState = array(array('text' => Yii::t('t', 'All'), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('state' => 'all'))), 'active' => $state === 'all'), array('text' => Yii::t('t', 'Open[projects]'), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('state' => 'open'))), 'active' => $state === 'open'), array('text' => Yii::t('t', 'Closed[projects]'), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('state' => 'closed'))), 'active' => $state === 'closed'));
     switch ($state) {
         case 'all':
             $stateLinkText = Yii::t('t', 'All states[project]');
             break;
         case 'closed':
             $stateLinkText = Yii::t('t', 'Closed[projects]');
             break;
         case 'open':
             $stateLinkText = Yii::t('t', 'Open[projects]');
             break;
             break;
         default:
             $stateLinkText = '&nbsp;';
     }
     // rows for the static grid
     $gridRows = array();
     foreach ($models as $model) {
         $gridRows[] = array(array('content' => isset($model->allCompany[0]->id) ? CHtml::link(CHtml::encode($model->allCompany[0]->title), array('company/show', 'id' => $model->allCompany[0]->id)) : ''), array('content' => CHtml::encode($model->title)), array('align' => 'right', 'content' => CHtml::encode($model->hourlyRate)), array('content' => CHtml::encode($model->getAttributeView('priority'))), array('align' => 'right', 'content' => CHtml::encode(MDate::format($model->openDate, 'medium', null)), 'title' => CHtml::encode(MDate::format($model->openDate, 'full', null))), array('align' => 'right', 'content' => CHtml::encode(MDate::format($model->closeDate, 'medium', null)), 'title' => CHtml::encode(MDate::format($model->closeDate, 'full', null))), array('content' => CHtml::link('<span class="ui-icon ui-icon-zoomin"></span>', array('show', 'id' => $model->id), array('class' => 'w3-ig w3-link-icon w3-border-1px-transparent w3-first ui-corner-all', 'title' => Yii::t('link', 'Show'))) . CHtml::link('<span class="ui-icon ui-icon-pencil"></span>', array('update', 'id' => $model->id), array('class' => 'w3-ig w3-link-icon w3-border-1px-transparent w3-last ui-corner-all', 'title' => Yii::t('link', 'Edit')))));
     }
     // render the view file
     $this->render($this->action->id, array('models' => $models, 'pages' => $pages, 'sort' => $sort, 'company' => $company, 'priority' => $priority, 'state' => $state, 'filters' => $filters, 'allCompany' => $allCompany, 'companyLinkText' => $companyLinkText, 'allPriority' => $allPriority, 'priorityLinkText' => $priorityLinkText, 'allState' => $allState, 'stateLinkText' => $stateLinkText, 'gridRows' => $gridRows));
 }
Esempio n. 4
0
 /**
  * Whether user is company owner.
  * @param integer company id
  * @param integer user id
  * @return boolean
  */
 public function isOwner($companyId = null, $userId = null)
 {
     // set and validate parameters
     if ($companyId === null) {
         $companyId = $this->id;
     }
     if ($userId === null && !Yii::app()->user->isGuest) {
         $userId = Yii::app()->user->id;
     }
     if ($companyId === null || $userId === null) {
         return false;
     }
     if (!isset($this->_user2Company[$userId][$companyId])) {
         // save relation between user and company to access it in the future
         if (($user2Company = User2Company::model()->findByAttributes(array('userId' => $userId, 'companyId' => $companyId))) !== null) {
             $this->_user2Company[$userId][$companyId]['position'] = $user2Company->position;
         } else {
             $this->_user2Company[$userId][$companyId] = null;
         }
     }
     // relation must exist and user position should be owner
     return $this->_user2Company[$userId][$companyId] !== null && $this->_user2Company[$userId][$companyId]['position'] === self::OWNER;
 }
Esempio n. 5
0
    ?>
:
<?php 
    echo CHtml::encode($model->title);
    ?>
<br/>
<?php 
    echo CHtml::encode($model->getAttributeLabel('titleAbbr'));
    ?>
:
<?php 
    echo CHtml::encode($model->titleAbbr);
    ?>
<br/>
<?php 
    echo CHtml::encode(User2Company::model()->getAttributeLabel('userId'));
    ?>
:
<?php 
    echo isset($model->allUser[0]->id) ? CHtml::link(CHtml::encode($model->allUser[0]->screenName), array('user/show', 'id' => $model->allUser[0]->id)) : '';
    ?>
<br/>
<?php 
    echo CHtml::encode($model->getAttributeLabel('excerpt'));
    ?>
:
<?php 
    echo CHtml::encode($model->excerpt);
    ?>
<br/>
<?php 
Esempio n. 6
0
 /**
  * Grid of all models.
  */
 public function actionGrid()
 {
     // specify filter parameters
     $company = isset($_GET['company']) ? $_GET['company'] : null;
     if ($company !== 'all' && !ctype_digit($company)) {
         $company = 'all';
     }
     $consultant = isset($_GET['consultant']) ? $_GET['consultant'] : null;
     if ($consultant !== 'all' && $consultant !== 'me' && !ctype_digit($consultant)) {
         $consultant = 'all';
     }
     if (Yii::app()->user->checkAccess(User::CONSULTANT)) {
         $consultant = 'me';
     }
     $manager = isset($_GET['manager']) ? $_GET['manager'] : null;
     if ($manager !== 'all' && !ctype_digit($manager)) {
         $manager = 'all';
     }
     $project = isset($_GET['project']) ? $_GET['project'] : null;
     if ($project !== 'all' && !ctype_digit($project)) {
         $project = 'all';
     }
     $task = isset($_GET['task']) ? $_GET['task'] : null;
     if ($task !== 'all' && !ctype_digit($task)) {
         $task = 'all';
     }
     // criteria
     $criteria = new CDbCriteria();
     $criteria->group = "`t`.`id`";
     // required by together()
     $criteria->select = "`t`.billedMinute, `t`.spentMinute, `t`.timeDate, `t`.title";
     //$criteria->select="`t`.`billedMinute`, `t`.`spentMinute`, `t`.`timeDate`, `t`.`title`"; // uncomment in yii-1.1.2
     if ($company !== 'all') {
         $criteria->addCondition("`Task_Company`.`id`=:companyId");
         $criteria->params[':companyId'] = $company;
     }
     if ($consultant !== 'all') {
         if ($consultant === 'me') {
             $criteria->addCondition("`Time_Consultant`.`id`=:consultantId");
             $criteria->params[':consultantId'] = Yii::app()->user->id;
         } else {
             $criteria->addCondition("`Time_Consultant`.`id`=:consultantId");
             $criteria->params[':consultantId'] = $consultant;
         }
     }
     if ($manager !== 'all') {
         $criteria->addCondition("`Time_Manager`.`id`=:managerId");
         $criteria->params[':managerId'] = $manager;
     }
     if ($project !== 'all') {
         $criteria->addCondition("`Task_Project`.`id`=:projectId");
         $criteria->params[':projectId'] = $project;
     }
     if ($task !== 'all') {
         $criteria->addCondition("`Time_Task`.`id`=:taskId");
         $criteria->params[':taskId'] = $task;
     }
     if (Yii::app()->user->checkAccess(User::CONSULTANT)) {
         $criteria->addCondition("`Company_User2Company`.`userId`=:clientId AND `Company_User2Company`.`position`=:clientPosition");
         $criteria->params[':clientId'] = Yii::app()->user->id;
         $criteria->params[':clientPosition'] = Company::OWNER;
     }
     // pagination
     $with = array();
     if (strpos($criteria->condition, 'Task_Company') !== false) {
         $with[] = 'task.company';
     }
     if (strpos($criteria->condition, 'Time_Consultant') !== false) {
         $with[] = 'consultant';
     }
     if (strpos($criteria->condition, 'Time_Manager') !== false) {
         $with[] = 'manager';
     }
     if (strpos($criteria->condition, 'Task_Project') !== false) {
         $with[] = 'task.project';
     }
     if (strpos($criteria->condition, 'Time_Task') !== false) {
         $with[] = 'task';
     }
     if (strpos($criteria->condition, 'Company_User2Company') !== false) {
         $with[] = 'task.company.allUser2Company';
     }
     if (count($with) >= 1) {
         $pages = new CPagination(Time::model()->with($with)->count($criteria));
     } else {
         $pages = new CPagination(Time::model()->count($criteria));
     }
     $pages->pageSize = self::GRID_PAGE_SIZE;
     $pages->applyLimit($criteria);
     // sort
     $sort = new CSort('Time');
     $sort->attributes = array('billedMinute' => array('asc' => "`t`.`billedMinute`", 'desc' => "`t`.`billedMinute` desc", 'label' => Time::model()->getAttributeLabel('Bld')), 'spentMinute' => array('asc' => "`t`.`spentMinute`", 'desc' => "`t`.`spentMinute` desc", 'label' => Time::model()->getAttributeLabel('Spt')), 'timeDate' => array('asc' => "`t`.`timeDate`", 'desc' => "`t`.`timeDate` desc", 'label' => Time::model()->getAttributeLabel('Date')), 'title' => array('asc' => "`t`.`title`", 'desc' => "`t`.`title` desc", 'label' => Time::model()->getAttributeLabel('title')), 'consultant' => array('asc' => "`Time_Consultant`.`screenName`", 'desc' => "`Time_Consultant`.`screenName` desc", 'label' => Time::model()->getAttributeLabel('consultantId')), 'manager' => array('asc' => "`Time_Manager`.`screenName`", 'desc' => "`Time_Manager`.`screenName` desc", 'label' => Time::model()->getAttributeLabel('managerId')), 'task' => array('asc' => "`Time_Task`.`title`", 'desc' => "`Time_Task`.`title` desc", 'label' => Time::model()->getAttributeLabel('taskId')), 'company' => array('asc' => "`Task_Company`.`title`", 'desc' => "`Task_Company`.`title` desc", 'label' => Task::model()->getAttributeLabel('companyId')), 'project' => array('asc' => "`Task_Project`.`title`", 'desc' => "`Task_Project`.`title` desc", 'label' => Task::model()->getAttributeLabel('projectId')));
     $sort->defaultOrder = "`t`.`timeDate` DESC, `t`.`createTime` DESC";
     $sort->applyOrder($criteria);
     // find all
     $with = array('consultant' => array('select' => 'screenName'), 'manager' => array('select' => 'screenName'), 'task' => array('select' => 'title'), 'task.company' => array('select' => 'title'), 'task.project' => array('select' => 'title'));
     if (strpos($criteria->condition, 'Company_User2Company') !== false) {
         $with['task.company.allUser2Company'] = array('select' => 'id');
     }
     $together = strpos($criteria->condition, 'Company_User2Company') !== false;
     if ($together) {
         $models = Time::model()->with($with)->together()->findAll($criteria);
     } else {
         $models = Time::model()->with($with)->findAll($criteria);
     }
     // filters data
     $filters = array('company' => $company, 'project' => $project, 'task' => $task, 'manager' => $manager, 'consultant' => $consultant);
     $allCompany = array(array('text' => Yii::t('t', 'All'), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('company' => 'all'))), 'active' => $company === 'all'));
     $companyLinkText = $company === 'all' ? Yii::t('t', 'All companies') : '&nbsp;';
     $criteria = new CDbCriteria();
     $criteria->select = "`t`.`id`, `t`.`title`, COUNT(`time`.`id`) as countTime";
     if (Yii::app()->user->checkAccess(User::CONSULTANT)) {
         $criteria->join = "INNER JOIN `" . Company2Project::model()->tableName() . "` `c2p` ON `c2p`.`companyId`=`t`.`id`" . " INNER JOIN `" . Project::model()->tableName() . "` `project` ON `project`.`id`=`c2p`.`projectId`" . " INNER JOIN `" . Task::model()->tableName() . "` `task` ON `task`.`projectId`=`project`.`id`" . " INNER JOIN `" . Time::model()->tableName() . "` `time` ON `time`.`taskId`=`task`.`id`";
         $criteria->condition = "`time`.`consultantId`=:consultantId";
         $criteria->params[':consultantId'] = Yii::app()->user->id;
     } else {
         if (Yii::app()->user->checkAccess(User::CLIENT)) {
             $criteria->join = "INNER JOIN `" . Company2Project::model()->tableName() . "` `c2p` ON `c2p`.`companyId`=`t`.`id`" . " INNER JOIN `" . Project::model()->tableName() . "` `project` ON `project`.`id`=`c2p`.`projectId`" . " INNER JOIN `" . Task::model()->tableName() . "` `task` ON `task`.`projectId`=`project`.`id`" . " INNER JOIN `" . Time::model()->tableName() . "` `time` ON `time`.`taskId`=`task`.`id`" . " INNER JOIN `" . User2Company::model()->tableName() . "` `u2c` ON `u2c`.`companyId`=`t`.`id`";
             $criteria->condition = "`u2c`.`userId`=:clientId AND `u2c`.`position`=:clientPosition";
             $criteria->params[':clientId'] = Yii::app()->user->id;
             $criteria->params[':clientPosition'] = Company::OWNER;
         } else {
             $criteria->join = "INNER JOIN `" . Company2Project::model()->tableName() . "` `c2p` ON `c2p`.`companyId`=`t`.`id`" . " INNER JOIN `" . Project::model()->tableName() . "` `project` ON `project`.`id`=`c2p`.`projectId`" . " INNER JOIN `" . Task::model()->tableName() . "` `task` ON `task`.`projectId`=`project`.`id`" . " INNER JOIN `" . Time::model()->tableName() . "` `time` ON `time`.`taskId`=`task`.`id`";
         }
     }
     $criteria->group = "`t`.`id`";
     $criteria->order = "`t`.`title` ASC";
     $criteria->limit = 3000;
     foreach (Company::model()->findAll($criteria) as $model) {
         $allCompany[] = array('text' => CHtml::encode($model->title), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('company' => $model->id))), 'active' => $company === (string) $model->id);
         $i = count($allCompany) - 1;
         if ($allCompany[$i]['text'] === '') {
             $allCompany[$i]['text'] = Yii::t('t', '[no title]');
         }
         $allCompany[$i]['text'] .= ' (' . $model->countTime . ')';
         if ($company === (string) $model->id) {
             $companyLinkText = $model->title === '' ? Yii::t('t', '[no title]') : $model->title;
         }
     }
     $allConsultant = array(array('text' => Yii::t('t', 'All'), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('consultant' => 'all'))), 'active' => $consultant === 'all'));
     $consultantLinkText = $consultant === 'all' ? Yii::t('t', 'All consultants') : '&nbsp;';
     if (Yii::app()->user->checkAccess(User::CONSULTANT)) {
         $allConsultant[0] = array('text' => Yii::t('t', 'My time'), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('consultant' => 'me'))), 'active' => $consultant === 'me');
         if ($consultant === 'me') {
             $consultantLinkText = Yii::t('t', 'My time');
         }
     } else {
         $criteria = new CDbCriteria();
         $criteria->select = "`t`.`id`, `t`.`screenName`, COUNT(`time`.`id`) as countTime";
         if (Yii::app()->user->checkAccess(User::CLIENT)) {
             $criteria->join = "INNER JOIN `" . Time::model()->tableName() . "` `time` ON `time`.`consultantId`=`t`.`id`" . " INNER JOIN `" . Task::model()->tableName() . "` `task` ON `task`.`id`=`time`.`taskId`" . " INNER JOIN `" . Company::model()->tableName() . "` `company` ON `company`.`id`=`task`.`companyId`" . " INNER JOIN `" . User2Company::model()->tableName() . "` `u2c` ON `u2c`.`companyId`=`company`.`id`";
             $criteria->condition = "`u2c`.`userId`=:clientId AND `u2c`.`position`=:clientPosition";
             $criteria->params[':clientId'] = Yii::app()->user->id;
             $criteria->params[':clientPosition'] = Company::OWNER;
         } else {
             $criteria->join = "INNER JOIN `" . Time::model()->tableName() . "` `time` ON `time`.`consultantId`=`t`.`id`";
         }
         $criteria->group = "`time`.`consultantId`";
         $criteria->order = "`t`.`screenName`";
         $criteria->limit = 3000;
         foreach (User::model()->findAll($criteria) as $model) {
             $allConsultant[] = array('text' => CHtml::encode($model->screenName), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('consultant' => $model->id))), 'active' => $consultant === (string) $model->id);
             $i = count($allConsultant) - 1;
             if ($allConsultant[$i]['text'] === '') {
                 $allConsultant[$i]['text'] = Yii::t('t', '[no name]');
             }
             $allConsultant[$i]['text'] .= ' (' . $model->countTime . ')';
             if ($consultant === (string) $model->id) {
                 $consultantLinkText = $model->screenName === '' ? Yii::t('t', '[no name]') : $model->screenName;
             }
         }
     }
     $allManager = array(array('text' => Yii::t('t', 'All'), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('manager' => 'all'))), 'active' => $manager === 'all'));
     $managerLinkText = $manager === 'all' ? Yii::t('t', 'All managers') : '&nbsp;';
     $criteria = new CDbCriteria();
     $criteria->select = "`t`.`id`, `t`.`screenName`, COUNT(`time`.`id`) as countTime";
     if (Yii::app()->user->checkAccess(User::CONSULTANT)) {
         $criteria->join = "INNER JOIN `" . Time::model()->tableName() . "` `time` ON `time`.`managerId`=`t`.`id`";
         $criteria->condition = "`time`.`consultantId`=:consultantId";
         $criteria->params[':consultantId'] = Yii::app()->user->id;
     } else {
         if (Yii::app()->user->checkAccess(User::CLIENT)) {
             $criteria->join = "INNER JOIN `" . Time::model()->tableName() . "` `time` ON `time`.`managerId`=`t`.`id`" . " INNER JOIN `" . Task::model()->tableName() . "` `task` ON `task`.`id`=`time`.`taskId`" . " INNER JOIN `" . Company::model()->tableName() . "` `company` ON `company`.`id`=`task`.`companyId`" . " INNER JOIN `" . User2Company::model()->tableName() . "` `u2c` ON `u2c`.`companyId`=`company`.`id`";
             $criteria->condition = "`u2c`.`userId`=:clientId AND `u2c`.`position`=:clientPosition";
             $criteria->params[':clientId'] = Yii::app()->user->id;
             $criteria->params[':clientPosition'] = Company::OWNER;
         } else {
             $criteria->join = "INNER JOIN `" . Time::model()->tableName() . "` `time` ON `time`.`managerId`=`t`.`id`";
         }
     }
     $criteria->group = "`time`.`managerId`";
     $criteria->order = "`t`.`screenName`";
     $criteria->limit = 3000;
     foreach (User::model()->findAll($criteria) as $model) {
         $allManager[] = array('text' => CHtml::encode($model->screenName), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('manager' => $model->id))), 'active' => $manager === (string) $model->id);
         $i = count($allManager) - 1;
         if ($allManager[$i]['text'] === '') {
             $allManager[$i]['text'] = Yii::t('t', '[no name]');
         }
         $allManager[$i]['text'] .= ' (' . $model->countTime . ')';
         if ($manager === (string) $model->id) {
             $managerLinkText = $model->screenName === '' ? Yii::t('t', '[no name]') : $model->screenName;
         }
     }
     $allProject = array(array('text' => Yii::t('t', 'All'), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('project' => 'all'))), 'active' => $project === 'all'));
     $projectLinkText = $project === 'all' ? Yii::t('t', 'All projects') : '&nbsp;';
     $criteria = new CDbCriteria();
     $criteria->select = "`t`.id, `t`.title, COUNT(`time`.`id`) as countTime";
     //$criteria->select="`t`.`id`, `t`.`title`, COUNT(`time`.`id`) as countTime"; // uncomment in yii-1.1.2
     if (Yii::app()->user->checkAccess(User::CONSULTANT)) {
         $criteria->join = "INNER JOIN `" . Task::model()->tableName() . "` `task` ON `task`.`projectId`=`t`.`id`" . " INNER JOIN `" . Time::model()->tableName() . "` `time` ON `time`.`taskId`=`task`.`id`";
         $criteria->condition = "`time`.`consultantId`=:consultantId";
         $criteria->params[':consultantId'] = Yii::app()->user->id;
     } else {
         if (Yii::app()->user->checkAccess(User::CLIENT)) {
             $criteria->join = "INNER JOIN `" . Task::model()->tableName() . "` `task` ON `task`.`projectId`=`t`.`id`" . " INNER JOIN `" . Time::model()->tableName() . "` `time` ON `time`.`taskId`=`task`.`id`" . " INNER JOIN `" . Company::model()->tableName() . "` `company` ON `company`.`id`=`task`.`companyId`" . " INNER JOIN `" . User2Company::model()->tableName() . "` `u2c` ON `u2c`.`companyId`=`company`.`id`";
             $criteria->condition = "`u2c`.`userId`=:clientId AND `u2c`.`position`=:clientPosition";
             $criteria->params[':clientId'] = Yii::app()->user->id;
             $criteria->params[':clientPosition'] = Company::OWNER;
         } else {
             $criteria->join = "INNER JOIN `" . Task::model()->tableName() . "` `task` ON `task`.`projectId`=`t`.`id`" . " INNER JOIN `" . Time::model()->tableName() . "` `time` ON `time`.`taskId`=`task`.`id`";
         }
     }
     $criteria->group = "`t`.`id`";
     $criteria->order = "`Project_Company`.`titleAbbr` ASC, `t`.`title` ASC";
     $criteria->limit = 3000;
     foreach (Project::model()->with(array('allCompany' => array('select' => 'titleAbbr')))->together()->findAll($criteria) as $model) {
         $allProject[] = array('text' => CHtml::encode((isset($model->allCompany[0]->titleAbbr) ? $model->allCompany[0]->titleAbbr . ' -- ' : '') . $model->title), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('project' => $model->id))), 'active' => $project === (string) $model->id);
         $i = count($allProject) - 1;
         if ($allProject[$i]['text'] === '') {
             $allProject[$i]['text'] = Yii::t('t', '[no title]');
         }
         $allProject[$i]['text'] .= ' (' . $model->countTime . ')';
         if ($project === (string) $model->id) {
             $projectLinkText = $model->title === '' ? Yii::t('t', '[no title]') : $model->title;
         }
     }
     $allTask = array(array('text' => Yii::t('t', 'All'), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('task' => 'all'))), 'active' => $task === 'all'));
     $taskLinkText = $task === 'all' ? Yii::t('t', 'All tasks') : '&nbsp;';
     $criteria = new CDbCriteria();
     $criteria->select = "`t`.id, `t`.title, COUNT(`time`.`id`) as countTime";
     //$criteria->select="`t`.`id`, `t`.`title`, COUNT(`time`.`id`) as countTime"; // uncomment in yii-1.1.2
     if (Yii::app()->user->checkAccess(User::CONSULTANT)) {
         $criteria->join = "INNER JOIN `" . Time::model()->tableName() . "` `time` ON `time`.`taskId`=`t`.`id`";
         $criteria->condition = "`time`.`consultantId`=:consultantId";
         $criteria->params[':consultantId'] = Yii::app()->user->id;
     } else {
         if (Yii::app()->user->checkAccess(User::CLIENT)) {
             $criteria->join = "INNER JOIN `" . Time::model()->tableName() . "` `time` ON `time`.`taskId`=`t`.`id`" . " INNER JOIN `" . Company::model()->tableName() . "` `company` ON `company`.`id`=`t`.`companyId`" . " INNER JOIN `" . User2Company::model()->tableName() . "` `u2c` ON `u2c`.`companyId`=`company`.`id`";
             $criteria->condition = "`u2c`.`userId`=:clientId AND `u2c`.`position`=:clientPosition";
             $criteria->params[':clientId'] = Yii::app()->user->id;
             $criteria->params[':clientPosition'] = Company::OWNER;
         } else {
             $criteria->join = "INNER JOIN `" . Time::model()->tableName() . "` `time` ON `time`.`taskId`=`t`.`id`";
         }
     }
     $criteria->group = "`t`.`id`";
     $criteria->order = "`Task_Project`.`title` ASC, `t`.`title` ASC";
     $criteria->limit = 3000;
     foreach (Task::model()->with(array('project' => array('select' => 'title')))->findAll($criteria) as $model) {
         $allTask[] = array('text' => CHtml::encode((isset($model->project->title) ? $model->project->title . ' -- ' : '') . $model->title), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('task' => $model->id))), 'active' => $task === (string) $model->id);
         $i = count($allTask) - 1;
         if ($allTask[$i]['text'] === '') {
             $allTask[$i]['text'] = Yii::t('t', '[no title]');
         }
         $allTask[$i]['text'] .= ' (' . $model->countTime . ')';
         if ($task === (string) $model->id) {
             $taskLinkText = $model->title === '' ? Yii::t('t', '[no title]') : $model->title;
         }
     }
     // rows for the static grid
     $gridRows = array();
     foreach ($models as $model) {
         $gridRows[] = array(array('content' => isset($model->task->company->id) ? CHtml::link(CHtml::encode($model->task->company->title), array('company/show', 'id' => $model->task->company->id)) : ''), array('content' => isset($model->task->project->id) ? CHtml::link(CHtml::encode($model->task->project->title), array('project/show', 'id' => $model->task->project->id)) : ''), array('content' => isset($model->task->id) ? CHtml::link(CHtml::encode($model->task->title), array('task/show', 'id' => $model->task->id)) : ''), array('content' => isset($model->manager->id) ? CHtml::link(CHtml::encode($model->manager->screenName), array('user/show', 'id' => $model->manager->id)) : ''), array('content' => isset($model->consultant->id) ? CHtml::link(CHtml::encode($model->consultant->screenName), array('user/show', 'id' => $model->consultant->id)) : ''), array('align' => 'right', 'content' => CHtml::encode(MDate::format($model->timeDate, 'medium', null)), 'title' => CHtml::encode(MDate::format($model->timeDate, 'full', null))), array('content' => CHtml::encode($model->getAttributeView('spentMinute'))), array('content' => CHtml::encode($model->getAttributeView('billedMinute'))), array('content' => CHtml::encode($model->title)), array('content' => Yii::app()->user->checkAccess('time/show') ? CHtml::link('<span class="ui-icon ui-icon-zoomin"></span>', array('show', 'id' => $model->id), array('class' => 'w3-ig w3-link-icon w3-border-1px-transparent w3-first ui-corner-all', 'title' => Yii::t('link', 'Show'))) . CHtml::link('<span class="ui-icon ui-icon-pencil"></span>', array('update', 'id' => $model->id), array('class' => 'w3-ig w3-link-icon w3-border-1px-transparent ui-corner-all', 'title' => Yii::t('link', 'Edit'))) . CHtml::link('<span class="ui-icon ui-icon-trash"></span>', array('delete', 'id' => $model->id), array('class' => 'w3-ig w3-link-icon w3-border-1px-transparent w3-last ui-corner-all', 'title' => Yii::t('link', 'Delete the record number {id}', array('{id}' => $model->id)))) : CHtml::link('<span class="ui-icon ui-icon-zoomin"></span>', array('show', 'id' => $model->id), array('class' => 'w3-ig w3-link-icon w3-border-1px-transparent w3-first w3-last ui-corner-all', 'title' => Yii::t('link', 'Show')))));
     }
     // render the view file
     $this->render($this->action->id, array('models' => $models, 'pages' => $pages, 'sort' => $sort, 'company' => $company, 'consultant' => $consultant, 'manager' => $manager, 'project' => $project, 'task' => $task, 'filters' => $filters, 'allCompany' => $allCompany, 'companyLinkText' => $companyLinkText, 'allConsultant' => $allConsultant, 'consultantLinkText' => $consultantLinkText, 'allManager' => $allManager, 'managerLinkText' => $managerLinkText, 'allProject' => $allProject, 'projectLinkText' => $projectLinkText, 'allTask' => $allTask, 'taskLinkText' => $taskLinkText, 'gridRows' => $gridRows));
 }
Esempio n. 7
0
 /**
  * Grid of all models.
  */
 public function actionGrid()
 {
     // specify filter parameters
     $company = isset($_GET['company']) ? $_GET['company'] : null;
     if ($company !== 'all' && !ctype_digit($company)) {
         $company = 'all';
     }
     $project = isset($_GET['project']) ? $_GET['project'] : null;
     if ($project !== 'all' && !ctype_digit($project)) {
         $project = 'all';
     }
     $billToCompany = isset($_GET['billToCompany']) ? $_GET['billToCompany'] : null;
     if ($billToCompany !== 'all' && $billToCompany !== (string) Expense::BILL_TO_COMPANY && $billToCompany !== (string) Expense::DO_NOT_BILL_TO_COMPANY) {
         $billToCompany = 'all';
     }
     // criteria
     $criteria = new CDbCriteria();
     $criteria->group = "`t`.`id`";
     // required by together()
     $criteria->select = "`t`.amount, `t`.billToCompany, `t`.expenseDate";
     //$criteria->select="`t`.`amount`, `t`.`billToCompany`, `t`.`expenseDate`"; // uncomment in yii-1.1.2
     if ($company !== 'all') {
         $criteria->addCondition("`Expense_Company`.`id`=:companyId");
         $criteria->params[':companyId'] = $company;
     }
     if ($project !== 'all') {
         $criteria->addCondition("`Expense_Project`.`id`=:projectId");
         $criteria->params[':projectId'] = $project;
     }
     if ($billToCompany === (string) Expense::BILL_TO_COMPANY) {
         $criteria->addCondition("`t`.`billToCompany`=:billToCompany");
         $criteria->params[':billToCompany'] = Expense::BILL_TO_COMPANY;
     } else {
         if ($billToCompany === (string) Expense::DO_NOT_BILL_TO_COMPANY) {
             $criteria->addCondition("`t`.`billToCompany`=:doNotBillToCompany");
             $criteria->params[':doNotBillToCompany'] = Expense::DO_NOT_BILL_TO_COMPANY;
         }
     }
     if (User::isClient()) {
         $criteria->addCondition("`Company_User2Company`.`userId`=:clientId AND `Company_User2Company`.`position`=:clientPosition");
         $criteria->params[':clientId'] = Yii::app()->user->id;
         $criteria->params[':clientPosition'] = Company::OWNER;
     }
     // pagination
     $with = array();
     if (strpos($criteria->condition, 'Expense_Company') !== false) {
         $with[] = 'company';
     }
     if (strpos($criteria->condition, 'Expense_Project') !== false) {
         $with[] = 'project';
     }
     if (strpos($criteria->condition, 'Company_User2Company') !== false) {
         $with[] = 'company.allUser2Company';
     }
     if (count($with) >= 1) {
         $pages = new CPagination(Expense::model()->with($with)->count($criteria));
     } else {
         $pages = new CPagination(Expense::model()->count($criteria));
     }
     $pages->pageSize = self::GRID_PAGE_SIZE;
     $pages->applyLimit($criteria);
     // sort
     $sort = new CSort('Expense');
     $sort->attributes = array('amount' => array('asc' => "`t`.`amount`", 'desc' => "`t`.`amount` desc", 'label' => Expense::model()->getAttributeLabel('amount')), 'billToCompany' => array('asc' => "`t`.`billToCompany`", 'desc' => "`t`.`billToCompany` desc", 'label' => Expense::model()->getAttributeLabel('Bill')), 'expenseDate' => array('asc' => "`t`.`expenseDate`", 'desc' => "`t`.`expenseDate` desc", 'label' => Expense::model()->getAttributeLabel('Date')), 'company' => array('asc' => "`Expense_Company`.`title`", 'desc' => "`Expense_Company`.`title` desc", 'label' => Expense::model()->getAttributeLabel('companyId')), 'project' => array('asc' => "`Expense_Project`.`title`", 'desc' => "`Expense_Project`.`title` desc", 'label' => Expense::model()->getAttributeLabel('projectId')));
     $sort->defaultOrder = "`t`.`expenseDate` DESC, `t`.`id` DESC";
     $sort->applyOrder($criteria);
     // find all
     $with = array('company' => array('select' => 'title'), 'project' => array('select' => 'title'));
     if (strpos($criteria->condition, 'Company_User2Company') !== false) {
         $with['company.allUser2Company'] = array('select' => 'id');
     }
     $together = strpos($criteria->condition, 'Company_User2Company') !== false;
     if ($together) {
         $models = Expense::model()->with($with)->together()->findAll($criteria);
     } else {
         $models = Expense::model()->with($with)->findAll($criteria);
     }
     // filters data
     $filters = array('company' => $company, 'project' => $project, 'billToCompany' => $billToCompany);
     $allCompany = array(array('text' => Yii::t('t', 'All'), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('company' => 'all'))), 'active' => $company === 'all'));
     $companyLinkText = $company === 'all' ? Yii::t('t', 'All companies') : '&nbsp;';
     $criteria = new CDbCriteria();
     $criteria->select = "`t`.`id`, `t`.`title`, COUNT(`expense`.`id`) as countExpense";
     if (User::isClient()) {
         $criteria->join = "INNER JOIN `" . Expense::model()->tableName() . "` `expense` ON `expense`.`companyId`=`t`.`id`" . " INNER JOIN `" . User2Company::model()->tableName() . "` `u2c` ON `u2c`.`companyId`=`t`.`id`";
         $criteria->condition = "`u2c`.`userId`=:clientId AND `u2c`.`position`=:clientPosition";
         $criteria->params[':clientId'] = Yii::app()->user->id;
         $criteria->params[':clientPosition'] = Company::OWNER;
     } else {
         $criteria->join = "INNER JOIN `" . Expense::model()->tableName() . "` `expense` ON `expense`.`companyId`=`t`.`id`";
     }
     $criteria->group = "`t`.`id`";
     $criteria->order = "`t`.`title` ASC";
     $criteria->limit = 3000;
     foreach (Company::model()->findAll($criteria) as $model) {
         $allCompany[] = array('text' => CHtml::encode($model->title), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('company' => $model->id))), 'active' => $company === (string) $model->id);
         $i = count($allCompany) - 1;
         if ($allCompany[$i]['text'] === '') {
             $allCompany[$i]['text'] = Yii::t('t', '[no title]');
         }
         $allCompany[$i]['text'] .= ' (' . $model->countExpense . ')';
         if ($company === (string) $model->id) {
             $companyLinkText = $model->title === '' ? Yii::t('t', '[no title]') : $model->title;
         }
     }
     $allProject = array(array('text' => Yii::t('t', 'All'), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('project' => 'all'))), 'active' => $project === 'all'));
     $projectLinkText = $project === 'all' ? Yii::t('t', 'All projects') : '&nbsp;';
     $criteria = new CDbCriteria();
     $criteria->select = "`t`.id, `t`.title, COUNT(`expense`.`id`) as countExpense";
     //$criteria->select="`t`.`id`, `t`.`title`, COUNT(`expense`.`id`) as countExpense"; // uncomment in yii-1.1.2
     if (User::isClient()) {
         $criteria->join = "INNER JOIN `" . Expense::model()->tableName() . "` `expense` ON `expense`.`projectId`=`t`.`id`" . " INNER JOIN `" . Company::model()->tableName() . "` `company` ON `company`.`id`=`expense`.`companyId`" . " INNER JOIN `" . User2Company::model()->tableName() . "` `u2c` ON `u2c`.`companyId`=`company`.`id`";
         $criteria->condition = "`u2c`.`userId`=:clientId AND `u2c`.`position`=:clientPosition";
         $criteria->params[':clientId'] = Yii::app()->user->id;
         $criteria->params[':clientPosition'] = Company::OWNER;
     } else {
         $criteria->join = "INNER JOIN `" . Expense::model()->tableName() . "` `expense` ON `expense`.`projectId`=`t`.`id`";
     }
     $criteria->group = "`t`.`id`";
     $criteria->order = "`Project_Company`.`titleAbbr` ASC, `t`.`title` ASC";
     $criteria->limit = 3000;
     foreach (Project::model()->with(array('allCompany' => array('select' => 'titleAbbr')))->together()->findAll($criteria) as $model) {
         $allProject[] = array('text' => CHtml::encode((isset($model->allCompany[0]->titleAbbr) ? $model->allCompany[0]->titleAbbr . ' -- ' : '') . $model->title), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('project' => $model->id))), 'active' => $project === (string) $model->id);
         $i = count($allProject) - 1;
         if ($allProject[$i]['text'] === '') {
             $allProject[$i]['text'] = Yii::t('t', '[no title]');
         }
         $allProject[$i]['text'] .= ' (' . $model->countExpense . ')';
         if ($project === (string) $model->id) {
             $projectLinkText = $model->title === '' ? Yii::t('t', '[no title]') : $model->title;
         }
     }
     $allBillToCompany = array(array('text' => Yii::t('t', 'Bill and not'), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('billToCompany' => 'all'))), 'active' => $billToCompany === 'all'), array('text' => Yii::t('t', 'Yes'), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('billToCompany' => Expense::BILL_TO_COMPANY))), 'active' => $billToCompany === (string) Expense::BILL_TO_COMPANY), array('text' => Yii::t('t', 'No'), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('billToCompany' => Expense::DO_NOT_BILL_TO_COMPANY))), 'active' => $billToCompany === (string) Expense::DO_NOT_BILL_TO_COMPANY));
     switch ($billToCompany) {
         case 'all':
             $billToCompanyLinkText = Yii::t('t', 'Bill and not');
             break;
         case (string) Expense::BILL_TO_COMPANY:
             $billToCompanyLinkText = Yii::t('t', 'Yes');
             break;
         case (string) Expense::DO_NOT_BILL_TO_COMPANY:
             $billToCompanyLinkText = Yii::t('t', 'No');
             break;
         default:
             $billToCompanyLinkText = '&nbsp;';
     }
     // rows for the static grid
     $gridRows = array();
     foreach ($models as $model) {
         $gridRows[] = array(array('content' => isset($model->company->id) ? CHtml::link(CHtml::encode($model->company->title), array('company/show', 'id' => $model->company->id)) : ''), array('content' => isset($model->project->id) ? CHtml::link(CHtml::encode($model->project->title), array('project/show', 'id' => $model->project->id)) : ''), array('align' => 'right', 'content' => CHtml::encode(MDate::format($model->expenseDate, 'medium', null)), 'title' => CHtml::encode(MDate::format($model->expenseDate, 'full', null))), array('align' => 'right', 'content' => CHtml::encode($model->amount)), array('content' => CHtml::encode($model->getAttributeView('billToCompany', 'grid'))), array('content' => User::isManager() && empty($model->invoiceId) || User::isAdministrator() ? CHtml::link('<span class="ui-icon ui-icon-zoomin"></span>', array('show', 'id' => $model->id), array('class' => 'w3-ig w3-link-icon w3-border-1px-transparent w3-first ui-corner-all', 'title' => Yii::t('link', 'Show'))) . CHtml::link('<span class="ui-icon ui-icon-pencil"></span>', array('update', 'id' => $model->id), array('class' => 'w3-ig w3-link-icon w3-border-1px-transparent ui-corner-all', 'title' => Yii::t('link', 'Edit'))) . CHtml::link('<span class="ui-icon ui-icon-trash"></span>', array('delete', 'id' => $model->id), array('class' => 'w3-ig w3-link-icon w3-border-1px-transparent w3-last ui-corner-all', 'title' => Yii::t('link', 'Delete the record number {id}', array('{id}' => $model->id)))) : CHtml::link('<span class="ui-icon ui-icon-zoomin"></span>', array('show', 'id' => $model->id), array('class' => 'w3-ig w3-link-icon w3-border-1px-transparent w3-first w3-last ui-corner-all', 'title' => Yii::t('link', 'Show')))));
     }
     // render the view file
     $this->render($this->action->id, array('models' => $models, 'pages' => $pages, 'sort' => $sort, 'company' => $company, 'project' => $project, 'billToCompany' => $billToCompany, 'filters' => $filters, 'allCompany' => $allCompany, 'companyLinkText' => $companyLinkText, 'allProject' => $allProject, 'projectLinkText' => $projectLinkText, 'allBillToCompany' => $allBillToCompany, 'billToCompanyLinkText' => $billToCompanyLinkText, 'gridRows' => $gridRows));
 }
Esempio n. 8
0
 /**
  * @return array relational rules.
  */
 public function relations()
 {
     $relations = array('details' => array(self::HAS_ONE, 'UserDetails', 'userId', 'alias' => 'User_UserDetails'));
     if (file_exists(Yii::app()->basePath . '/models/Company.php') && file_exists(Yii::app()->basePath . '/models/User2Company.php')) {
         // many user has many 'company' records associated
         $relations['allCompany'] = array(self::MANY_MANY, 'Company', User2Company::model()->tableName() . '(userId,companyId)', 'order' => "`allCompany_User_Company`.`companyPriority` ASC, `allCompany_User_Company`.`id` ASC", 'alias' => 'User_Company');
     }
     if (file_exists(Yii::app()->basePath . '/models/User2Company.php')) {
         // one user has many 'user2company' records associated
         $relations['allUser2Company'] = array(self::HAS_MANY, 'User2Company', 'userId', 'order' => "`t`.`companyPriority` ASC, `t`.`id` ASC", 'alias' => 'User_User2Company');
     }
     if (file_exists(Yii::app()->basePath . '/models/User2Project.php')) {
         // one user has many 'consultant2project' records associated
         $relations['allConsultant2Project'] = array(self::HAS_MANY, 'User2Project', 'userId', 'on' => "`t`.`role`='" . User2Project::CONSULTANT . "'", 'order' => "`t`.`projectPriority` ASC, `t`.`id` ASC", 'alias' => 'User_Consultant2Project');
         // one user has many 'manager2project' records associated
         $relations['allManager2Project'] = array(self::HAS_MANY, 'User2Project', 'userId', 'on' => "`t`.`role`='" . User2Project::MANAGER . "'", 'order' => "`t`.`projectPriority` ASC, `t`.`id` ASC", 'alias' => 'User_Manager2Project');
         // one user has many 'user2project' records associated
         $relations['allUser2Project'] = array(self::HAS_MANY, 'User2Project', 'userId', 'order' => "`t`.`projectPriority` ASC, `t`.`id` ASC", 'alias' => 'User_User2Project');
     }
     if (file_exists(Yii::app()->basePath . '/models/Project.php') && file_exists(Yii::app()->basePath . '/models/User2Project.php')) {
         // many user has many 'consultant project' records associated
         $relations['allConsultantProject'] = array(self::MANY_MANY, 'Project', User2Project::model()->tableName() . '(userId,projectId)', 'on' => "`allConsultantProject_User_ConsultantProject`.`role`='" . User2Project::CONSULTANT . "'", 'order' => "`allConsultantProject_User_ConsultantProject`.`projectPriority` ASC, `allConsultantProject_User_ConsultantProject`.`id` ASC", 'alias' => 'User_ConsultantProject');
         // many user has many 'manager project' records associated
         $relations['allManagerProject'] = array(self::MANY_MANY, 'Project', User2Project::model()->tableName() . '(userId,projectId)', 'on' => "allManagerProject_User_ManagerProject.`role`='" . User2Project::MANAGER . "'", 'order' => "allManagerProject_User_ManagerProject.`projectPriority` ASC, allManagerProject_User_ManagerProject.`id` ASC", 'alias' => 'User_ManagerProject');
         // many user has many 'project' records associated
         $relations['allProject'] = array(self::MANY_MANY, 'Project', User2Project::model()->tableName() . '(userId,projectId)', 'order' => "`allProject_User_Project`.`projectPriority` ASC, `allProject_User_Project`.`id` ASC", 'alias' => 'User_Project');
     }
     if (file_exists(Yii::app()->basePath . '/models/User2Task.php')) {
         // one user has many 'consultant2task' records associated
         $relations['allConsultant2Task'] = array(self::HAS_MANY, 'User2Task', 'userId', 'on' => "`t`.`role`='" . User2Task::CONSULTANT . "'", 'order' => "`t`.`taskPriority` ASC, `t`.`id` ASC", 'alias' => 'User_Consultant2Task');
         // one user has many 'manager2task' records associated
         $relations['allManager2Task'] = array(self::HAS_MANY, 'User2Task', 'userId', 'on' => "`t`.`role`='" . User2Task::MANAGER . "'", 'order' => "`t`.`taskPriority` ASC, `t`.`id` ASC", 'alias' => 'User_Manager2Task');
         // one user has many 'user2task' records associated
         $relations['allUser2Task'] = array(self::HAS_MANY, 'User2Task', 'userId', 'order' => "`t`.`taskPriority` ASC, `t`.`id` ASC", 'alias' => 'User_User2Task');
     }
     if (file_exists(Yii::app()->basePath . '/models/Task.php') && file_exists(Yii::app()->basePath . '/models/User2Task.php')) {
         // many user has many 'consultant task' records associated
         $relations['allConsultantTask'] = array(self::MANY_MANY, 'Task', User2Task::model()->tableName() . '(userId,taskId)', 'on' => "`allConsultantTask_User_ConsultantTask`.`role`='" . User2Project::CONSULTANT . "'", 'order' => "`allConsultantTask_User_ConsultantTask`.`taskPriority` ASC, `allConsultantTask_User_ConsultantTask`.`id` ASC", 'alias' => 'User_ConsultantTask');
         // one user has a number of 'consultant task' records associated
         $relations['consultantTaskCount'] = array(self::STAT, 'Task', User2Task::model()->tableName() . '(userId,taskId)');
         // many user has many 'manager task' records associated
         $relations['allManagerTask'] = array(self::MANY_MANY, 'Task', User2Task::model()->tableName() . '(userId,taskId)', 'on' => "`allManagerTask_User_ManagerTask`.`role`='" . User2Task::MANAGER . "'", 'order' => "`allManagerTask_User_ManagerTask`.`taskPriority` ASC, `allManagerTask_User_ManagerTask`.`id` ASC", 'alias' => 'User_ManagerTask');
     }
     if (file_exists(Yii::app()->basePath . '/models/Time.php')) {
         // one user has many 'consultant time' records associated
         $relations['allConsultantTime'] = array(self::HAS_MANY, 'Time', 'consultantId', 'order' => "`t`.`id` ASC", 'alias' => 'User_ConsultantTime');
         // one user has one of many 'consultant time' records associated
         //$relations['oneConsultantTime']=array(self::HAS_ONE,'Time','consultantId',
         //'alias'=>'User_OneConsultantTime'
         //);
         // one user has a number of 'consultant time' records associated
         $relations['consultantTimeCount'] = array(self::STAT, 'Time', 'consultantId');
         // one user has many 'manager time' records associated
         $relations['allManagerTime'] = array(self::HAS_MANY, 'Time', 'managerId', 'order' => "`t`.`id` ASC", 'alias' => 'User_ManagerTime');
         // one user has one of many 'manager time' records associated
         //$relations['oneManagerTime']=array(self::HAS_ONE,'Time','managerId',
         //'alias'=>'User_OneManagerTime'
         //);
         // one user has a number of 'manager time' records associated
         $relations['managerTimeCount'] = array(self::STAT, 'Time', 'managerId');
     }
     return $relations;
 }
Esempio n. 9
0
 /**
  * Migrate from old project management system.
  */
 public function actionIndex()
 {
     // check rights
     if (!Yii::app()->user->checkAccess(User::ADMINISTRATOR)) {
         throw new CHttpException(403, Yii::t('Yii', 'You are not authorized to perform this action.'));
     }
     // models to migrate
     $migrate = array('User' => false, 'Company' => false, 'CompanyPayment' => false, 'Project' => false, 'Task' => false, 'Time' => true, 'Invoice' => false, 'Expense' => false);
     // start
     $message = '';
     // we won't migrate unless form is submitted
     if (Yii::app()->request->isPostRequest) {
         // default criteria
         $findAllCriteria = new CDbCriteria();
         $findAllCriteria->order = "`id` ASC";
         if ($migrate['User']) {
             // user
             $mUsers = MUser::model()->findAll($findAllCriteria);
             if (is_array($mUsers)) {
                 $i = $j = $c = 0;
                 $accessType = array('customer' => 'client', 'consultant' => 'consultant', 'manager' => 'manager', 'admin' => 'administrator');
                 $accessLevel = array('customer' => 2, 'consultant' => 3, 'manager' => 4, 'admin' => 5);
                 foreach ($mUsers as $oldModel) {
                     if (($model = User::model()->findByPk($oldModel->id)) !== null) {
                         $model->delete();
                     }
                     // old model validation
                     if (User::model()->findByAttributes(array('email' => $oldModel->email))) {
                         $oldModel->email = rand(10, 99) . $oldModel->email;
                     }
                     $closeTime = strtotime($oldModel->close_date);
                     $isActive = empty($oldModel->close_date) || $oldModel->close_date === '0000-00-00' || $closeTime === false;
                     // new model
                     $model = new User('migrate');
                     $model->username = $oldModel->email;
                     $model->password = md5($oldModel->password);
                     $model->email = $oldModel->email;
                     $model->screenName = $oldModel->name;
                     $model->accessType = isset($accessType[$oldModel->class]) ? $accessType[$oldModel->class] : 'member';
                     $model->accessLevel = isset($accessLevel[$oldModel->class]) ? $accessLevel[$oldModel->class] : 1;
                     $model->isActive = $isActive ? '1' : '0';
                     $model->createTime = strtotime($oldModel->last);
                     $model->id = $oldModel->id;
                     if ($model->save()) {
                         $i++;
                         if (($userDetails = UserDetails::model()->findByPk($model->id)) !== null) {
                             $userDetails->delete();
                         }
                         $userDetails = new UserDetails('migrate');
                         $userDetails->emailConfirmationKey = md5(uniqid(rand(), true));
                         $userDetails->initials = $oldModel->inits;
                         $userDetails->occupation = $oldModel->title;
                         $userDetails->deactivationTime = $isActive ? null : $closeTime;
                         $userDetails->administratorNote = '[from migration]';
                         $userDetails->userId = $model->id;
                         $userDetails->save();
                         // relation between user and company
                         if ($oldModel->customer_id >= 1) {
                             $user2Company = new User2Company('migrate');
                             $user2Company->userId = $model->id;
                             $user2Company->companyId = $oldModel->customer_id;
                             $user2Company->position = 'owner';
                             //$oldModel->title
                             if ($user2Company->save()) {
                                 $c++;
                             }
                         }
                     }
                     $j++;
                 }
                 $message .= $i . ' of ' . $j . ' users' . ($i === $c ? '' : ' with ' . $c . ' company (relations)') . ' have been migrated.<br/>';
             }
         }
         if ($migrate['Company']) {
             // company
             $mCustomers = MCustomer::model()->findAll($findAllCriteria);
             if (is_array($mCustomers)) {
                 $i = $j = $l = 0;
                 foreach ($mCustomers as $oldModel) {
                     if (($model = Company::model()->findByPk($oldModel->id)) !== null) {
                         $model->delete();
                     }
                     $closeTime = strtotime($oldModel->close_date);
                     $isActive = empty($oldModel->close_date) || $oldModel->close_date === '0000-00-00' || $closeTime === false;
                     $model = new Company('migrate');
                     $model->title = $oldModel->name;
                     $model->titleAbbr = $oldModel->inits;
                     $model->contactName = $oldModel->contact;
                     $model->contactEmail = $oldModel->contact_email;
                     $model->content = '[from migration]';
                     $model->contentMarkup = 'text';
                     $model->invoiceDueDay = $oldModel->terms_days;
                     $model->isActive = $isActive ? '1' : '0';
                     $model->deactivationTime = $isActive ? null : $closeTime;
                     $model->createTime = strtotime($oldModel->last);
                     $model->id = $oldModel->id;
                     if ($model->save()) {
                         $i++;
                         // associated location
                         $location = new Location('migrate');
                         $location->address1 = $oldModel->addr;
                         $location->address2 = $oldModel->addr2;
                         $location->city = $oldModel->city;
                         $location->state = $oldModel->state;
                         $location->zipcode = $oldModel->zip;
                         $location->content = '[from migration]';
                         $location->contentMarkup = 'text';
                         $location->createTime = strtotime($oldModel->last);
                         if ($location->save()) {
                             // relation between company and location
                             $location2Record = new Location2Record('migrate');
                             $location2Record->locationId = $location->id;
                             $location2Record->record = get_class($model);
                             $location2Record->recordId = $model->id;
                             if ($location2Record->save()) {
                                 $l++;
                             }
                         }
                     }
                     $j++;
                 }
                 $message .= $i . ' of ' . $j . ' companies' . ($i === $l ? '' : ' with ' . $l . ' locations') . ' have been migrated.<br/>';
             }
         }
         if ($migrate['CompanyPayment']) {
             // company payment
             $mCustomerPayments = MCustomerPayment::model()->findAll($findAllCriteria);
             if (is_array($mCustomerPayments)) {
                 $i = $j = 0;
                 $paymentMethod = array('cash' => 'cash', 'check' => 'check', 'credit card' => 'creditCard');
                 foreach ($mCustomerPayments as $oldModel) {
                     if (($model = CompanyPayment::model()->findByPk($oldModel->id)) !== null) {
                         $model->delete();
                     }
                     $model = new CompanyPayment('migrate');
                     $model->companyId = $oldModel->id;
                     $model->paymentDate = MDate::formatToDb($oldModel->payment_date, 'date');
                     $model->amount = $oldModel->amount;
                     $model->paymentMethod = $paymentMethod[$oldModel->payment_method];
                     $model->paymentNumber = $oldModel->payment_number;
                     $model->content = $oldModel->note . "\n" . '[from migration]';
                     $model->contentMarkup = 'text';
                     $model->id = $oldModel->id;
                     if ($model->save()) {
                         $i++;
                     }
                     $j++;
                 }
                 $message .= $i . ' of ' . $j . ' company payments have been migrated.<br/>';
             }
         }
         if ($migrate['Project']) {
             // project
             $mProjects = MProject::model()->findAll($findAllCriteria);
             if (is_array($mProjects)) {
                 $i = $j = $c = $u = 0;
                 foreach ($mProjects as $oldModel) {
                     if (($model = Project::model()->findByPk($oldModel->id)) !== null) {
                         $model->delete();
                     }
                     $openDateNotSet = empty($oldModel->open_date) || $oldModel->open_date === '0000-00-00' || strtotime($oldModel->open_date) === false;
                     $closeDateNotSet = empty($oldModel->close_date) || $oldModel->close_date === '0000-00-00' || strtotime($oldModel->close_date) === false;
                     $model = new Project('migrate');
                     $model->title = $oldModel->name;
                     $model->content = $oldModel->description . "\n" . '[from migration]';
                     $model->contentMarkup = 'text';
                     $model->hourlyRate = $oldModel->rate;
                     $model->openDate = $openDateNotSet ? null : MDate::formatToDb($oldModel->open_date, 'date');
                     $model->closeDate = $closeDateNotSet ? null : MDate::formatToDb($oldModel->close_date, 'date');
                     $model->createTime = strtotime($oldModel->last);
                     $model->id = $oldModel->id;
                     if ($model->save()) {
                         $i++;
                         // relation between project and company
                         if ($oldModel->customer_id >= 1) {
                             $company2Project = new Company2Project('migrate');
                             $company2Project->companyId = $oldModel->customer_id;
                             $company2Project->projectId = $model->id;
                             if ($company2Project->save()) {
                                 $c++;
                             }
                         }
                         // relation between project and manager
                         if ($oldModel->manager_id >= 1) {
                             $user2Project = new User2Project('migrate');
                             $user2Project->userId = $oldModel->manager_id;
                             $user2Project->projectId = $model->id;
                             $user2Project->role = 'manager';
                             if ($user2Project->save()) {
                                 $u++;
                             }
                         }
                     }
                     $j++;
                 }
                 $message .= $i . ' of ' . $j . ' projects' . ($i === $c ? '' : ' with ' . $c . ' company (relations)') . ($i === $u ? '' : ' with ' . $u . ' manager (relations)') . ' have been migrated.<br/>';
             }
         }
         if ($migrate['Task']) {
             // task
             $mTasks = MTask::model()->findAll($findAllCriteria);
             if (is_array($mTasks)) {
                 $i = $j = $u = $m = 0;
                 $priority = array('A' => 2, 'B' => 3, 'C' => 4, '' => 3);
                 $status = array('' => 'completed', 'Open' => 'completed', '0' => 'notStarted', 'New' => 'notStarted', 'Done' => 'completed', 'In Progress' => 'inProgress', 'Ready to Test' => 'readyToTest');
                 foreach ($mTasks as $oldModel) {
                     if (($model = Task::model()->findByPk($oldModel->id)) !== null) {
                         $model->delete();
                     }
                     $hourlyRate = null;
                     if ($oldModel->project_id >= 1 && ($project = Project::model()->findByPk($oldModel->project_id)) !== null) {
                         $hourlyRate = $project->hourlyRate;
                     }
                     $dueDateNotSet = empty($oldModel->due_date) || $oldModel->due_date === '0000-00-00' || strtotime($oldModel->due_date) === false;
                     $openDateNotSet = empty($oldModel->open_date) || $oldModel->open_date === '0000-00-00' || strtotime($oldModel->open_date) === false;
                     $closeDateNotSet = empty($oldModel->close_date) || $oldModel->close_date === '0000-00-00' || strtotime($oldModel->close_date) === false;
                     $model = new Task('migrate');
                     $model->title = $oldModel->name;
                     $model->content = $oldModel->description . "\n" . '[from migration]';
                     $model->contentMarkup = 'text';
                     $model->companyId = $oldModel->customer_id;
                     $model->projectId = $oldModel->project_id;
                     $model->estimateMinute = (int) $oldModel->hours_estimate * 60;
                     $model->dueDate = $dueDateNotSet ? null : MDate::formatToDb($oldModel->due_date, 'date');
                     $model->priority = $priority[$oldModel->priority];
                     $model->openDate = $openDateNotSet ? null : MDate::formatToDb($oldModel->open_date, 'date');
                     $model->closeDate = $closeDateNotSet ? null : MDate::formatToDb($oldModel->close_date, 'date');
                     $model->status = $status[$oldModel->task_status];
                     $model->report = $oldModel->work_report;
                     $model->reportMarkup = 'text';
                     $model->hourlyRate = $hourlyRate;
                     $model->isConfirmed = '1';
                     $model->confirmationTime = strtotime($oldModel->last);
                     $model->createTime = strtotime($oldModel->last);
                     $model->id = $oldModel->id;
                     if ($model->save()) {
                         $i++;
                         // relation between task and consultant
                         if ($oldModel->leader_id >= 1) {
                             $user2Task = new User2Task('migrate');
                             $user2Task->userId = $oldModel->leader_id;
                             $user2Task->taskId = $model->id;
                             $user2Task->role = User2Task::CONSULTANT;
                             if ($user2Task->save()) {
                                 $u++;
                             }
                         }
                         // relation between task and manager
                         if ($model->projectId >= 1) {
                             $criteria = new CDbCriteria();
                             $criteria->order = "`" . User2Project::model()->tableName() . "`.`userPriority` ASC";
                             $criteria->order .= ",`" . User2Project::model()->tableName() . "`.`id` ASC";
                             if (($user2Project = User2Project::model()->findByAttributes(array('projectId' => $model->projectId, 'role' => 'manager'), $criteria)) !== null) {
                                 $user2Task = new User2Task('migrate');
                                 $user2Task->userId = $user2Project->userId;
                                 $user2Task->taskId = $model->id;
                                 $user2Task->role = 'manager';
                                 if ($user2Task->save()) {
                                     $m++;
                                 }
                             }
                         }
                     }
                     $j++;
                 }
                 $message .= $i . ' of ' . $j . ' tasks' . ($i === $u ? '' : ' with ' . $u . ' consultant (relations)') . ($i === $m ? '' : ' with ' . $m . ' manager (relations)') . ' have been migrated.<br/>';
             }
         }
         if ($migrate['Time']) {
             // time
             $mTime = MTime::model()->findAll($findAllCriteria);
             if (is_array($mTime)) {
                 $i = $j = $t = 0;
                 foreach ($mTime as $oldModel) {
                     if (($model = Time::model()->findByPk($oldModel->id)) !== null) {
                         $model->delete();
                     }
                     $taskId = $oldModel->task_id;
                     if (empty($taskId) && $oldModel->project_id >= 1) {
                         $criteria = new CDbCriteria();
                         $criteria->order = "`" . Task::model()->tableName() . "`.`id` ASC";
                         if (($task = Task::model()->findByAttributes(array('projectId' => $oldModel->project_id), $criteria)) !== null) {
                             $taskId = $task->id;
                         } else {
                             // auto-generate a task
                             $companyId = 0;
                             $criteria = new CDbCriteria();
                             $criteria->order = "`" . Company2Project::model()->tableName() . "`.`companyPriority` ASC";
                             $criteria->order .= ", `" . Company2Project::model()->tableName() . "`.`id` ASC";
                             if (($company2Project = Company2Project::model()->findByAttributes(array('projectId' => $oldModel->project_id), $criteria)) !== null) {
                                 $companyId = $company2Project->companyId;
                             }
                             $hourlyRate = null;
                             if (($project = Project::model()->findByPk($oldModel->project_id)) !== null) {
                                 $hourlyRate = $project->hourlyRate;
                             }
                             $task = new Task('migrate');
                             $task->projectId = $oldModel->project_id;
                             $task->companyId = $companyId;
                             $task->title = '[Auto Generated]';
                             $task->status = 'completed';
                             $task->dueDate = MDate::formatToDb($project === null ? 1234567890 : $project->createTime, 'date');
                             $task->openDate = MDate::formatToDb($project === null ? 1234567890 : $project->createTime, 'date');
                             $task->closeDate = MDate::formatToDb($project === null ? 1234567890 : $project->createTime, 'date');
                             $task->hourlyRate = $hourlyRate;
                             $task->isConfirmed = 1;
                             $task->confirmationTime = $project === null ? 1234567890 : $project->createTime;
                             if ($task->save()) {
                                 $t++;
                                 $taskId = $task->id;
                                 // assigned consultant
                                 if ($oldModel->user_id >= 1) {
                                     $consultant2Task = new User2Task('migrate');
                                     $consultant2Task->userId = $oldModel->user_id;
                                     $consultant2Task->taskId = $task->id;
                                     $consultant2Task->role = User2Task::CONSULTANT;
                                     $consultant2Task->save();
                                 }
                                 // assigned manager
                                 $criteria = new CDbCriteria();
                                 $criteria->order = "`" . User2Project::model()->tableName() . "`.`userPriority` ASC";
                                 $criteria->order .= ", `" . User2Project::model()->tableName() . "`.`id` ASC";
                                 if (($user2Project = User2Project::model()->findByAttributes(array('projectId' => $oldModel->project_id, 'role' => 'manager'), $criteria)) !== null) {
                                     $manager2Task = new User2Task('migrate');
                                     $manager2Task->userId = $user2Project->userId;
                                     $manager2Task->taskId = $task->id;
                                     $manager2Task->role = User2Task::MANAGER;
                                     $manager2Task->save();
                                 }
                             }
                         }
                     }
                     $managerId = null;
                     if (!empty($taskId)) {
                         $criteria = new CDbCriteria();
                         $criteria->order = "`" . User2Task::model()->tableName() . "`.`userPriority` ASC";
                         $criteria->order .= ",`" . User2Task::model()->tableName() . "`.`id` ASC";
                         if (($user2Task = User2Task::model()->findByAttributes(array('taskId' => $taskId, 'role' => 'manager'), $criteria)) !== null) {
                             $managerId = $user2Task->userId;
                         }
                     }
                     $timeDateNotSet = empty($oldModel->time_date) || $oldModel->time_date === '0000-00-00' || strtotime($oldModel->time_date) === false;
                     $model = new Time('migrate');
                     $model->consultantId = $oldModel->user_id;
                     $model->taskId = $taskId;
                     $model->spentMinute = (int) $oldModel->hours_spent * 60;
                     $model->timeDate = $timeDateNotSet ? null : MDate::formatToDb($oldModel->time_date, 'date');
                     $model->title = $oldModel->note;
                     $model->content = $oldModel->details . "\n" . '[from migration]';
                     $model->contentMarkup = 'text';
                     $model->managerId = $managerId;
                     $model->billedMinute = (int) $oldModel->hours_billed * 60;
                     $model->invoiceId = $oldModel->invoice_id;
                     $model->invoiceAmount = $oldModel->invoice_amount;
                     $model->isConfirmed = '1';
                     $model->confirmationTime = strtotime($oldModel->last);
                     $model->createTime = strtotime($oldModel->last);
                     $model->id = $oldModel->id;
                     if ($model->save()) {
                         $i++;
                     }
                     $j++;
                 }
                 $message .= $i . ' of ' . $j . ' time records' . ($i === $t ? '' : ' with ' . $t . ' tasks') . ' have been migrated.<br/>';
             }
         }
         if ($migrate['Invoice']) {
             // invoice
             $mInvoices = MInvoice::model()->findAll($findAllCriteria);
             if (is_array($mInvoices)) {
                 $i = $j = 0;
                 foreach ($mInvoices as $oldModel) {
                     if (($model = Invoice::model()->findByPk($oldModel->id)) !== null) {
                         $model->delete();
                     }
                     $invoiceDateNotSet = empty($oldModel->invoice_date) || $oldModel->invoice_date === '0000-00-00' || strtotime($oldModel->invoice_date) === false;
                     $startDateNotSet = empty($oldModel->start_date) || $oldModel->start_date === '0000-00-00' || strtotime($oldModel->start_date) === false;
                     $endDateNotSet = empty($oldModel->end_date) || $oldModel->end_date === '0000-00-00' || strtotime($oldModel->end_date) === false;
                     $dueDateNotSet = empty($oldModel->due_date) || $oldModel->due_date === '0000-00-00' || strtotime($oldModel->due_date) === false;
                     $model = new Invoice('migrate');
                     $model->invoiceDate = $invoiceDateNotSet ? null : MDate::formatToDb($oldModel->invoice_date, 'date');
                     $model->companyId = $oldModel->customer_id;
                     $model->billedMinute = (int) $oldModel->hours_billed * 60;
                     $model->amountTotal = number_format($oldModel->total, 2, '.', '');
                     $model->startDate = $startDateNotSet ? null : MDate::formatToDb($oldModel->start_date, 'date');
                     $model->endDate = $endDateNotSet ? null : MDate::formatToDb($oldModel->end_date, 'date');
                     $model->dueDate = $dueDateNotSet ? null : MDate::formatToDb($oldModel->due_date, 'date');
                     $model->amountTime = number_format($oldModel->total, 2, '.', '');
                     $model->amountExpense = 0;
                     $model->content = '[from migration]';
                     $model->contentMarkup = 'text';
                     $model->createTime = $invoiceDateNotSet ? null : strtotime($oldModel->invoice_date);
                     $model->id = $oldModel->id;
                     if ($model->save()) {
                         $i++;
                     }
                     $j++;
                 }
                 $message .= $i . ' of ' . $j . ' invoices have been migrated.<br/>';
             }
         }
         if ($migrate['Expense']) {
             // expense
             $mExpenses = MExpense::model()->findAll($findAllCriteria);
             if (is_array($mExpenses)) {
                 $i = $j = 0;
                 $billToCompany = array('Yes' => '1', 'No' => '0');
                 foreach ($mExpenses as $oldModel) {
                     if (($model = Expense::model()->findByPk($oldModel->id)) !== null) {
                         $model->delete();
                     }
                     $expenseDateNotSet = empty($oldModel->expense_date) || $oldModel->expense_date === '0000-00-00' || strtotime($oldModel->expense_date) === false;
                     $model = new Expense('migrate');
                     $model->managerId = $oldModel->user_id;
                     $model->companyId = $oldModel->customer_id;
                     $model->projectId = $oldModel->project_id;
                     $model->invoiceId = $oldModel->invoice_id;
                     $model->expenseDate = $expenseDateNotSet ? null : MDate::formatToDb($oldModel->expense_date, 'date');
                     $model->amount = $oldModel->amount;
                     $model->billToCompany = $billToCompany[$oldModel->bill_to_customer];
                     $model->content = $oldModel->note . "\n" . '[from migration]';
                     $model->contentMarkup = 'text';
                     $model->createTime = strtotime($oldModel->last);
                     $model->id = $oldModel->id;
                     if ($model->save()) {
                         $i++;
                     }
                     $j++;
                 }
                 $message .= $i . ' of ' . $j . ' expenses have been migrated.<br/>';
             }
         }
         // last message line
         $message .= 'done';
     }
     $this->render($this->action->id, array('message' => $message));
 }
Esempio n. 10
0
 /**
  * Grid of all models.
  */
 public function actionGrid()
 {
     // specify filter parameters
     $company = isset($_GET['company']) ? $_GET['company'] : null;
     if ($company !== 'all' && !ctype_digit($company)) {
         $company = 'all';
     }
     // criteria
     $criteria = new CDbCriteria();
     $criteria->group = "`t`.`id`";
     // required by together()
     $criteria->select = "`t`.amountTotal, `t`.createTime, `t`.id";
     //$criteria->select="`t`.`amountTotal`, `t`.`createTime`, `t`.`id`"; // uncomment in yii-1.1.2
     if ($company !== 'all') {
         $criteria->addCondition("`Invoice_Company`.`id`=:companyId");
         $criteria->params[':companyId'] = $company;
     }
     if (User::isClient()) {
         $criteria->addCondition("`Company_User2Company`.`userId`=:clientId AND `Company_User2Company`.`position`=:clientPosition");
         $criteria->params[':clientId'] = Yii::app()->user->id;
         $criteria->params[':clientPosition'] = Company::OWNER;
     }
     // pagination
     $with = array();
     if (strpos($criteria->condition, 'Invoice_Company') !== false) {
         $with[] = 'company';
     }
     if (strpos($criteria->condition, 'Company_User2Company') !== false) {
         $with[] = 'company.allUser2Company';
     }
     if (count($with) >= 1) {
         $pages = new CPagination(Invoice::model()->with($with)->count($criteria));
     } else {
         $pages = new CPagination(Invoice::model()->count($criteria));
     }
     $pages->pageSize = self::GRID_PAGE_SIZE;
     $pages->applyLimit($criteria);
     // sort
     $sort = new CSort('Invoice');
     $sort->attributes = array('amountTotal' => array('asc' => "`t`.`amountTotal`", 'desc' => "`t`.`amountTotal` desc", 'label' => Invoice::model()->getAttributeLabel('Total')), 'createTime' => array('asc' => "`t`.`createTime`", 'desc' => "`t`.`createTime` desc", 'label' => Invoice::model()->getAttributeLabel('Date')), 'id' => array('asc' => "`t`.`id`", 'desc' => "`t`.`id` desc", 'label' => Invoice::model()->getAttributeLabel('id')), 'company' => array('asc' => "`Invoice_Company`.`title`", 'desc' => "`Invoice_Company`.`title` desc", 'label' => Invoice::model()->getAttributeLabel('companyId')));
     $sort->defaultOrder = "`t`.`createTime` DESC";
     $sort->applyOrder($criteria);
     // find all
     $with = array('company' => array('select' => 'title'));
     if (strpos($criteria->condition, 'Company_User2Company') !== false) {
         $with['company.allUser2Company'] = array('select' => 'id');
     }
     $together = strpos($criteria->condition, 'Company_User2Company') !== false;
     if ($together) {
         $models = Invoice::model()->with($with)->together()->findAll($criteria);
     } else {
         $models = Invoice::model()->with($with)->findAll($criteria);
     }
     // filters data
     $filters = array('company' => $company);
     $allCompany = array(array('text' => Yii::t('t', 'All'), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('company' => 'all'))), 'active' => $company === 'all'));
     $companyLinkText = $company === 'all' ? Yii::t('t', 'All companies') : '&nbsp;';
     $criteria = new CDbCriteria();
     $criteria->select = "`t`.`id`, `t`.`title`, COUNT(`invoice`.`id`) as countInvoice";
     if (User::isClient()) {
         $criteria->join = "INNER JOIN `" . Invoice::model()->tableName() . "` `invoice` ON `invoice`.`companyId`=`t`.`id`" . " INNER JOIN `" . User2Company::model()->tableName() . "` `u2c` ON `u2c`.`companyId`=`t`.`id`";
         $criteria->condition = "`u2c`.`userId`=:clientId AND `u2c`.`position`=:clientPosition";
         $criteria->params[':clientId'] = Yii::app()->user->id;
         $criteria->params[':clientPosition'] = Company::OWNER;
     } else {
         $criteria->join = "INNER JOIN `" . Invoice::model()->tableName() . "` `invoice` ON `invoice`.`companyId`=`t`.`id`";
     }
     $criteria->group = "`t`.`id`";
     $criteria->order = "`t`.`title` ASC";
     $criteria->limit = 3000;
     foreach (Company::model()->findAll($criteria) as $model) {
         $allCompany[] = array('text' => CHtml::encode($model->title), 'url' => Yii::app()->createUrl($this->id . '/' . $this->action->id, array_merge($filters, array('company' => $model->id))), 'active' => $company === (string) $model->id);
         $i = count($allCompany) - 1;
         if ($allCompany[$i]['text'] === '') {
             $allCompany[$i]['text'] = Yii::t('t', '[no title]');
         }
         $allCompany[$i]['text'] .= ' (' . $model->countInvoice . ')';
         if ($company === (string) $model->id) {
             $companyLinkText = $model->title === '' ? Yii::t('t', '[no title]') : $model->title;
         }
     }
     // rows for the static grid
     $gridRows = array();
     foreach ($models as $model) {
         $gridRows[] = array(array('align' => 'right', 'content' => CHtml::encode($model->id)), array('align' => 'right', 'content' => CHtml::encode(MDate::format($model->createTime, 'medium', null)), 'title' => CHtml::encode(MDate::format($model->createTime, 'full', null))), array('content' => isset($model->company->id) ? CHtml::link(CHtml::encode($model->company->title), array('company/show', 'id' => $model->company->id)) : ''), array('align' => 'right', 'content' => CHtml::encode($model->amountTotal)), array('content' => CHtml::link('<span class="ui-icon ui-icon-zoomin"></span>', array('show', 'id' => $model->id), array('class' => 'w3-ig w3-link-icon w3-border-1px-transparent w3-first ui-corner-all', 'title' => Yii::t('link', 'Show'))) . CHtml::link('<span class="ui-icon ui-icon-pencil"></span>', array('update', 'id' => $model->id), array('class' => 'w3-ig w3-link-icon w3-border-1px-transparent w3-last ui-corner-all', 'title' => Yii::t('link', 'Edit')))));
     }
     // render the view file
     $this->render($this->action->id, array('models' => $models, 'pages' => $pages, 'sort' => $sort, 'company' => $company, 'filters' => $filters, 'allCompany' => $allCompany, 'companyLinkText' => $companyLinkText, 'gridRows' => $gridRows));
 }