/** * @param array $params * @param bool $silent * @param int $count * * @return string * @throws \Exception */ public function getTransactions($params, $silent = false, &$count = 0) { /** * @var CurrencyVault $currencyVaultService */ $currencyVaultService = $this->getServiceLocator()->get('service_currency_currency_vault'); $expenseTransactionDao = new ExpenseTransactions($this->getServiceLocator(), '\\ArrayObject'); $viewRender = $this->getServiceLocator()->get('ViewRenderer'); $where = $this->constructWhereForTransactionSearch($params); $itemIdList = []; $result = ['items' => '', 'itemCount' => 0, 'itemBalance' => 0, 'transactions' => '', 'transactionCount' => 0, 'transactionBalance' => 0]; $transactions = iterator_to_array($expenseTransactionDao->getTransactions($where)); if (count($transactions)) { foreach ($transactions as $transaction) { if ($transaction['status'] != Expense::STATUS_VOID) { if (!$silent) { $result['transactionCount']++; } $transaction['expense_transactions_count_with_same_money_transaction_id'] = $expenseTransactionDao->getCountOfExpenseTransactionWithSameMoneyTransactionId($transaction['money_transaction_id']); if ($transaction['po_currency_id'] != $transaction['transaction_currency_id']) { $amount = $currencyVaultService->convertCurrency($transaction['amount'], (int) $transaction['transaction_currency_id'], (int) $transaction['po_currency_id'], $transaction['creation_date']); } else { $amount = $transaction['amount']; } $result['transactionBalance'] += $amount; } } } $count = $result['transactionCount']; if (!$silent) { if (count($transactions)) { foreach ($transactions as &$transaction) { $transaction['expense_transactions_count_with_same_money_transaction_id'] = $expenseTransactionDao->getCountOfExpenseTransactionWithSameMoneyTransactionId($transaction['money_transaction_id']); if (!empty($transaction['items'])) { foreach (explode(',', $transaction['items']) as $item) { array_push($itemIdList, $item); } } } } $itemIdList = array_unique($itemIdList); $result['itemCount'] = count($itemIdList); if (count($itemIdList)) { $items = $this->getItems(['itemIdList' => $itemIdList], true); $result['items'] = $items['items']; $result['itemBalance'] = $items['itemBalance']; } } $view = (new ViewModel(['transactions' => $transactions]))->setTemplate('finance/partial/transaction'); $result['transactions'] .= $viewRender->render($view); $result['transactionBalance'] = number_format($result['transactionBalance'], 2, '.', ','); return $result; }