Esempio n. 1
0
 /**
  * @return bool
  * @throws \Exception
  */
 public function process()
 {
     /**
      * @var Expenses $expenseDao
      */
     $expenseDao = $this->getServiceLocator()->get('dao_finance_expense_expenses');
     $expenseDao->setEntity(new \ArrayObject());
     $finance = new Finance($this->getServiceLocator());
     $expenseList = $this->getExpenses();
     if (!count($expenseList)) {
         throw new \Exception('No expense attached.');
     }
     $transactionIdList = parent::processGeneralTransaction();
     if (count($transactionIdList) > 1) {
         throw new \RuntimeException('It is impossible to store more than one transaction id for expense transaction.');
     } else {
         $moneyTransactionId = array_shift($transactionIdList);
     }
     foreach ($expenseList as $expense) {
         $expenseData = $expenseDao->fetchOne(['id' => $expense['id']]);
         $expenseTicket = $finance->getExpense($expense['id']);
         $expenseTicket->prepare($this->getExpenseTicketData($expenseData, $expense['amount']));
         $expenseTicket->addTransaction($this->getTransactionData($moneyTransactionId, $expense['amount']));
         $expenseTicket->save();
     }
     // Set as verified transaction
     $this->changeVerifyStatus($moneyTransactionId, self::IS_VERIFIED);
     return $moneyTransactionId;
 }
Esempio n. 2
0
 /**
  * @param array $data
  * @param ParametersInterface|bool $files
  * @param array $extra
  * @return bool
  * @throws \Exception
  */
 public function saveExpenseTicket($data, ParametersInterface $files, &$extra = [])
 {
     $data = $this->prepareData($data);
     if ($this->checkExpenseData($data)) {
         $finance = new Finance($this->getServiceLocator());
         $expenseTicket = $finance->getExpense($data['isEdit'] ? $data['ticket']['id'] : null);
         // Exact expense (ticket)
         $expenseTicket->prepare($data['ticket']);
         if (!empty($data['items']['add'])) {
             foreach ($data['items']['add'] as $item) {
                 $expenseTicket->addItem($item['data']);
             }
         }
         if (!empty($data['transactions']['add'])) {
             foreach ($data['transactions']['add'] as $item) {
                 $expenseTicket->addTransaction($item);
             }
         }
         $expenseTicket->save();
         list($ticketFiles, $itemFiles) = $this->separateAttachments($expenseTicket, $files);
         // Files
         $errorMessages = array_merge_recursive($this->saveFiles($ticketFiles, $expenseTicket), $this->saveItemFiles($itemFiles, $expenseTicket), $this->removeFiles($data['attachments']));
         // Passed by reference. Look up
         $extra = ['isEdit' => $data['isEdit'], 'ticketId' => $expenseTicket->getExpenseId(), 'errorMessages' => $errorMessages];
         return true;
     }
     return false;
 }
Esempio n. 3
0
 /**
  * @param int $moneyTransactionId
  * @return int
  */
 private function createExpense($moneyTransactionId)
 {
     $data = $this->constructExpenseData($moneyTransactionId);
     $finance = new Finance($this->getServiceLocator());
     $expenseTicket = $finance->getExpense();
     $expenseTicket->prepare($data['ticket']);
     if (count($data['items'])) {
         foreach ($data['items'] as $item) {
             $expenseTicket->addItem($item);
         }
     }
     $expenseTicket->addTransaction($data['transaction']);
     $expenseTicket->save();
     return $expenseTicket->getExpenseId();
 }