Пример #1
0
 public function search($projectId, $page = 0, $pageSize = 15, $accountId = null, $categoryId = null, $from = null, $to = null)
 {
     $conditions = array('FinanceOperation.project_id' => $projectId, 'FinanceOperation.type<>' . self::TYPE_ACCOUNT_CREATE);
     if (FinanceShare::isPartAccess()) {
         $itog = array();
         foreach (FinanceShare::$get['operations'] as $item) {
             switch ($item) {
                 case 'income':
                     $itog[] = self::TYPE_INCOME;
                     break;
                 case 'expense':
                     $itog[] = self::TYPE_EXPENSE;
                     break;
                 case 'transfer':
                     $itog[] = self::TYPE_TRANSFER;
                     break;
             }
         }
         $conditions['FinanceOperation.type'] = $itog;
         $conditions['FinanceOperation.account_id'] = FinanceShare::$get['accounts'];
     }
     if ($accountId) {
         $conditions['FinanceOperation.account_id'] = $accountId;
     }
     if ($categoryId) {
         $conditions[] = "FinanceOperation.id IN (SELECT operation_id FROM finance_operation_has_category WHERE category_id='{$categoryId}')";
     }
     if ($from) {
         $conditions[] = "FinanceOperation.created >= '{$from}'";
     }
     if ($to) {
         $conditions[] = "FinanceOperation.created <= DATE_ADD('{$to}', INTERVAL 24 HOUR)";
     }
     $order = 'FinanceOperation.created desc';
     // Paging
     $dates = $this->find('all', array('fields' => array('SUBSTR(created, 1, 10) AS date'), 'conditions' => $conditions, 'order' => $order, 'limit' => $pageSize, 'offset' => $page * $pageSize, 'group' => array('date')));
     if (empty($dates)) {
         return array('aFinanceOperations' => array());
     }
     $max = $dates[0][0]['date'];
     $min = $dates[count($dates) - 1][0]['date'];
     if ($min == $max) {
         $conditions[] = "SUBSTR(FinanceOperation.created, 1, 10) = '{$min}'";
     } else {
         $conditions[] = "SUBSTR(FinanceOperation.created, 1, 10) >='{$min}'";
         $conditions[] = "SUBSTR(FinanceOperation.created, 1, 10) <= '{$max}'";
     }
     // /Paging
     $financeOperations = $this->find('all', array('conditions' => $conditions, 'order' => $order));
     return array('aFinanceOperations' => $financeOperations);
 }
Пример #2
0
 public function search($projectId, $type = null, $q = null)
 {
     $this->loadModel('FinanceShare');
     $conditions = array('FinanceCategory.project_id' => $projectId);
     if (FinanceShare::isPartAccess()) {
         $conditions['FinanceCategory.id'] = FinanceShare::$get['categories'];
     }
     if ($q !== null) {
         $conditions['FinanceCategory.name LIKE ?'] = '%' . $q . '%';
     }
     if ($type !== null) {
         $conditions['FinanceCategory.type'] = (int) $type;
     }
     $financeCategory = $this->find('all', array('conditions' => $conditions));
     return array('aFinanceCategory' => $financeCategory);
 }
Пример #3
0
 public function search($projectId)
 {
     $conditions = array('FinanceGoal.project_id' => $projectId);
     if (FinanceShare::isPartAccess()) {
         $conditions['FinanceGoal.id'] = FinanceShare::$get['goals'];
     }
     $order = array('FinanceGoal.created' => 'DESC');
     $this->virtualFields['startBalance'] = "\n\t\tSELECT FinanceOperation.balance_after FROM finance_operation FinanceOperation\n\t\t\tWHERE FinanceOperation.account_id = FinanceGoal.account_id AND created < FinanceGoal.created\n\t\t\tORDER BY FinanceOperation.created DESC LIMIT 1\n\t\t";
     $financeGoal = $this->find('all', compact('conditions', 'order'));
     $financeGoal = Hash::combine($financeGoal, '{n}.FinanceGoal.id', '{n}');
     $balances = $this->_monthlyBalance($financeGoal);
     foreach ($financeGoal as $id => &$item) {
         $item['Balance'] = $balances[$id];
     }
     return array('aFinanceGoal' => $financeGoal);
 }
Пример #4
0
 public function search($projectId, $q = null)
 {
     $conditions = array('FinanceAccount.project_id' => $projectId);
     $this->loadModel('FinanceShare');
     if (FinanceShare::$isInit && FinanceShare::isPartAccess()) {
         $conditions['FinanceAccount.id'] = FinanceShare::$get['accounts'];
     }
     if ($q) {
         $conditions['FinanceAccount.name LIKE ?'] = '%' . $q . '%';
     }
     $financeAccount = $this->find('all', array('conditions' => $conditions));
     $financeAccount = Hash::combine($financeAccount, '{n}.FinanceAccount.id', '{n}');
     $this->loadModel('CrmTask');
     $taskAccountIds = $this->CrmTask->find('list', array('conditions' => array('CrmTask.account_id' => array_keys($financeAccount)), 'fields' => array('CrmTask.account_id')));
     foreach ($taskAccountIds as $accountId) {
         unset($financeAccount[$accountId]);
     }
     return array('aFinanceAccount' => $financeAccount);
 }
Пример #5
0
 public function search($projectId, $accountId = null, $q = null, $categoryId = null)
 {
     $conditions = array('FinanceBudget.project_id' => $projectId);
     if (FinanceShare::isPartAccess()) {
         $conditions['FinanceBudget.id'] = FinanceShare::$get['budgets'];
         $conditions['FinanceBudget.category_id'] = FinanceShare::$get['categories'];
         $conditions['FinanceBudget.account_id'] = FinanceShare::$get['accounts'];
     }
     if ($accountId) {
         $conditions['FinanceBudget.account_id'] = $accountId;
     }
     if ($categoryId) {
         $conditions['FinanceBudget.category_id'] = $categoryId;
     }
     if ($q) {
         $conditions['FinanceBudget.name LIKE ?'] = '%' . $q . '%';
     }
     $financeBudget = $this->find('all', array('conditions' => $conditions));
     $financeBudget = Hash::combine($financeBudget, '{n}.FinanceBudget.category_id', '{n}');
     return array('aFinanceBudget' => $financeBudget);
 }
Пример #6
0
 public function setShareData($projectId)
 {
     try {
         if ($this->_wasCalled) {
             return;
         }
         $this->_wasCalled = true;
         $this->loadModel('FinanceShare');
         $this->_isOwner = $this->FinanceShare->isProjectOwner($this->currUserID, (int) $projectId);
         $this->_currUserShare = $this->FinanceShare->findUserShare((int) $projectId, (int) $this->currUserID);
         // Not owner and not share user
         if (!$this->_isOwner && empty($this->_currUserShare)) {
             throw new Exception(__('Permission denied'));
         }
         // Denied rules for full access share type
         $controller = $this->request->params['controller'];
         $action = $this->request->params['action'];
         if (!$this->_isOwner) {
             foreach ($this->onlyOwnerAccess as $item) {
                 if ($controller == $item['controller'] && ($item['actions'] == '*' || in_array($action, $item['actions']))) {
                     throw new Exception(__('Permission denied'));
                 }
             }
         }
         // view global variables assigned
         $this->set(array('isOwner' => $this->_isOwner, 'isFullAccess' => !$this->_isOwner && $this->getShare('full_access'), 'isPartAccess' => !$this->_isOwner && !$this->getShare('full_access'), 'currUserShare' => $this->_currUserShare, 'getShare' => function ($name) {
             return $this->getShare($name);
         }));
         // for model access
         FinanceShare::$isOwner = $this->_isOwner;
         FinanceShare::$get = $this->_currUserShare;
         FinanceShare::$isInit = true;
     } catch (Exception $e) {
         return $this->redirect(array('controller' => 'Errors', 'action' => 'error404'));
     }
 }