/**
  * @param $purchaseOrderTransactionId
  * @param bool $updatePurchaseOrderBalance
  * @return bool
  */
 public function removePurchaseOrderTransaction($purchaseOrderTransactionId, $updatePurchaseOrderBalance = true)
 {
     /**
      * @var MoneyAccountsDAO $moneyAccountsDao
      */
     $moneyTransactionsDao = new Transactions($this->getServiceLocator(), '\\ArrayObject');
     $purchaseOrderTransactionsDao = new ExpenseTransactions($this->getServiceLocator(), '\\ArrayObject');
     $purchaseOrdersDao = new Expenses($this->getServiceLocator(), '\\ArrayObject');
     $moneyAccountsDao = new MoneyAccountsDAO($this->getServiceLocator(), '\\ArrayObject');
     $purchaseOrderTransaction = $purchaseOrderTransactionsDao->fetchOne(['id' => $purchaseOrderTransactionId], ['money_transaction_id', 'money_account_id', 'amount', 'expense_id', 'creation_date']);
     $moneyTransactionId = $purchaseOrderTransaction['money_transaction_id'];
     $purchaseOrderTransactionAmount = $purchaseOrderTransaction['amount'];
     $purchaseOrderId = $purchaseOrderTransaction['expense_id'];
     $purchaseOrder = $purchaseOrdersDao->fetchOne(['id' => $purchaseOrderId], ['ticket_balance', 'transaction_balance', 'currency_id']);
     $purchaseOrderTransactionMoneyAccountId = $purchaseOrderTransaction['money_account_id'];
     $moneyAccount = $moneyAccountsDao->fetchOne(['id' => $purchaseOrderTransactionMoneyAccountId], ['balance', 'currency_id']);
     // Remove money transaction
     $moneyTransactionsDao->delete(['id' => $moneyTransactionId]);
     // Remove purchase order transaction
     $purchaseOrderTransactionsDao->delete(['id' => $purchaseOrderTransactionId]);
     // Update money account balance
     $moneyAccountBalance = $moneyAccount['balance'];
     $moneyAccountBalance -= $purchaseOrderTransactionAmount;
     $moneyAccountsDao->update(['balance' => $moneyAccountBalance], ['id' => $purchaseOrderTransactionMoneyAccountId]);
     if ($updatePurchaseOrderBalance) {
         // Update purchase order balance
         // Update purchase order transaction balance
         if ($purchaseOrder['currency_id'] != $moneyAccount['currency_id']) {
             // PO balance and PO transaction balance are in PO currency
             // We need to convert currencies to correctly recalculate those balances
             // Please note that we need to make conversion by currency rate for that particular date when transaction was made
             $currencyVaultService = new CurrencyVault();
             $purchaseOrderTransactionAmount = $currencyVaultService->convertCurrency($purchaseOrderTransactionAmount, $moneyAccount['currency_id'], $purchaseOrder['currency_id'], $purchaseOrderTransaction['creation_date']);
             $purchaseOrdersDao->update(['ticket_balance' => $purchaseOrder['balance'] - $purchaseOrderTransactionAmount, 'transaction_balance' => $purchaseOrder['transaction_balance'] - $purchaseOrderTransactionAmount], ['id' => $purchaseOrder['id']]);
         }
     }
     return true;
 }
Exemple #2
0
 /**
  * @param bool $force
  * @return array
  * @throws NotFoundException
  * @throws \RuntimeException
  */
 public function getTicketOriginalData()
 {
     if ($this->getExpenseId()) {
         $ticketDomain = $this->dao->getTicketSimpleData($this->getExpenseId());
         if ($ticketDomain) {
             $this->expenseTicketOrignalData = ['id' => $ticketDomain->getId(), 'account_id' => $ticketDomain->getAccountId(), 'account_reference' => $ticketDomain->getAccountReference(), 'creator_id' => $ticketDomain->getCreatorId(), 'manager_id' => $ticketDomain->getManagerId(), 'currency_id' => $ticketDomain->getCurrencyId(), 'date_created' => $ticketDomain->getDateCreated(), 'purpose' => $ticketDomain->getDateCreated(), 'ticket_balance' => $ticketDomain->getTicketBalance(), 'deposit_balance' => $ticketDomain->getDepositBalance()];
         } else {
             throw new NotFoundException('Expense not found.');
         }
     } else {
         throw new \RuntimeException('Expense not identified.');
     }
     return $this->expenseTicketOrignalData;
 }
Exemple #3
0
 /**
  * @param $budgetId
  * @return \Zend\Db\ResultSet\ResultSet
  */
 public function getPOsByBudgetId($budgetId)
 {
     $expenseDao = new Expenses($this->getServiceLocator());
     return $expenseDao->getPOsByBudgetId($budgetId);
 }