Example #1
0
 /**
  * IMPORTANT: To Be Called BEFORE item amount and currency save
  * @param $itemId
  * @param $newAmount
  * @param $newCurrencyId
  * @return bool
  */
 public function recalculateTicketBalance($itemId, $newAmount, $newCurrencyId)
 {
     /**
      * @var CurrencyVault $currencyVaultService
      */
     $currencyVaultService = $this->getServiceLocator()->get('service_currency_currency_vault');
     $poDao = new Expenses($this->getServiceLocator(), '\\ArrayObject');
     $itemDao = new ExpenseItem($this->getServiceLocator(), '\\ArrayObject');
     $oldItemData = $itemDao->getItemAmountAndCurrencyIdById($itemId);
     if (is_null($oldItemData['expense_id'])) {
         return false;
     }
     if ($oldItemData['amount'] == $newAmount && $oldItemData['currency_id'] == $newCurrencyId) {
         return false;
     }
     $poData = $poDao->getDataForRecalculation($oldItemData['expense_id']);
     $oldItemAmountInPoCurrency = $currencyVaultService->convertCurrency($oldItemData['amount'], (int) $oldItemData['currency_id'], (int) $poData['currency_id'], $oldItemData['date_created']);
     $newItemAmountInPoCurrency = $currencyVaultService->convertCurrency($newAmount, (int) $newCurrencyId, (int) $poData['currency_id'], $oldItemData['date_created']);
     $recalculatedPoTicketBalance = $poData['ticket_balance'] - $oldItemAmountInPoCurrency + $newItemAmountInPoCurrency;
     $recalculatedPoItemBalance = $poData['item_balance'] - $oldItemAmountInPoCurrency + $newItemAmountInPoCurrency;
     $poDao->save(['ticket_balance' => $recalculatedPoTicketBalance, 'item_balance' => $recalculatedPoItemBalance], ['id' => $oldItemData['expense_id']]);
     $newItemAmountInOldItemCurrency = $currencyVaultService->convertCurrency($newAmount, (int) $newCurrencyId, (int) $oldItemData['currency_id'], $oldItemData['date_created']);
     return $newItemAmountInOldItemCurrency;
 }