Exemplo n.º 1
0
 /**
  * @param \ArrayObject $postData
  * @param null|int $moneyAccountId
  * @param int $creatorId
  *
  * @return bool
  */
 public function saveMoneyAccount($postData, &$moneyAccountId, $creatorId)
 {
     try {
         // Remove submit button data
         if (isset($postData['save'])) {
             unset($postData['save']);
         }
         // Remove view_transactions data
         if (isset($postData['view_transactions'])) {
             $viewTransactions = $postData['view_transactions'];
             unset($postData['view_transactions']);
         }
         // Remove add_transactions data
         if (isset($postData['add_transactions'])) {
             $addTransactions = $postData['add_transactions'];
             unset($postData['add_transactions']);
         }
         // Remove manage_transactions data
         if (isset($postData['manage_transactions'])) {
             $manageTransactions = $postData['manage_transactions'];
             unset($postData['manage_transactions']);
         }
         // Remove manage_transactions data
         if (isset($postData['manage_account'])) {
             $accountManagers = $postData['manage_account'];
             unset($postData['manage_account']);
         }
         $finance = new Finance($this->getServiceLocator());
         $moneyAccount = $finance->getMoneyAccount($moneyAccountId);
         $postData = iterator_to_array($postData);
         if ($moneyAccountId) {
             $moneyAccount->save($postData);
         } else {
             // Bank account should be added as active
             $postData['active'] = 1;
             $moneyAccountId = $moneyAccount->create($postData);
         }
         // Delete all relations on edit
         if ($moneyAccountId) {
             $this->getMoneyAccountUsersDao()->delete(['money_account_id' => $moneyAccountId]);
         }
         // Save Money Account <-> User relations for transaction viewers
         if (isset($viewTransactions) && is_array($viewTransactions)) {
             foreach ($viewTransactions as $userId) {
                 // Create new stack of relations
                 $this->getMoneyAccountUsersDao()->save(['money_account_id' => $moneyAccountId, 'user_id' => $userId, 'operation_type' => self::OPERATION_VIEW_TRANSACTION]);
             }
         }
         // Save Money Account <-> User relations for transaction ceators
         if (isset($addTransactions) && is_array($addTransactions)) {
             foreach ($addTransactions as $userId) {
                 $this->getMoneyAccountUsersDao()->save(['money_account_id' => $moneyAccountId, 'user_id' => $userId, 'operation_type' => self::OPERATION_ADD_TRANSACTION]);
             }
         }
         // Save Money Account <-> User relations for transaction managers
         $isset = false;
         if (isset($manageTransactions) && is_array($manageTransactions)) {
             foreach ($manageTransactions as $userId) {
                 if ($userId == $creatorId) {
                     $isset = true;
                 }
                 $this->getMoneyAccountUsersDao()->save(['money_account_id' => $moneyAccountId, 'user_id' => $userId, 'operation_type' => self::OPERATION_MANAGE_TRANSACTION]);
             }
         }
         // Save Money Account <-> User relations for account managers
         $isset = false;
         if (isset($accountManagers) && is_array($accountManagers)) {
             foreach ($accountManagers as $userId) {
                 if ($userId == $creatorId) {
                     $isset = true;
                 }
                 $this->getMoneyAccountUsersDao()->save(['money_account_id' => $moneyAccountId, 'user_id' => $userId, 'operation_type' => self::OPERATION_MANAGE_ACCOUNT]);
             }
         }
         // Save creator as account manager
         if (!$isset && !$moneyAccountId) {
             $this->getMoneyAccountUsersDao()->save(['money_account_id' => $moneyAccountId, 'user_id' => $creatorId, 'operation_type' => self::OPERATION_MANAGE_ACCOUNT]);
         }
     } catch (\Exception $ex) {
         return false;
     }
     return true;
 }