/** * @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; }
/** * @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; }
/** * @param $budgetId * @return \Zend\Db\ResultSet\ResultSet */ public function getPOsByBudgetId($budgetId) { $expenseDao = new Expenses($this->getServiceLocator()); return $expenseDao->getPOsByBudgetId($budgetId); }