public function createSupplierInvoiceTransaction(Document $document)
 {
     $transaction = new Transaction();
     $description = $this->translator->trans("transaction.description.document", array("%document_code%" => $document->getType()->getCode(), "%document_number%" => $document->getId(), "%document_to%" => $document->getSupplier()->getName()), 'Finance');
     $transaction->setDescription($description);
     $transaction->setDate(new \DateTime());
     $payableAccount = $this->accountRepository->findOneBy(array('subtype' => Account::SUBTYPE_LIABILITY_PAYABLE));
     $journalEntryPayable = new JournalEntry();
     $journalEntryPayable->setAccount($payableAccount);
     $journalEntryPayable->setTransaction($transaction);
     $journalEntryPayable->setDebit($document->getTotal());
     $journalEntryPayable->setDate(new \DateTime());
     $transaction->addJournalEntry($journalEntryPayable);
     $journalEntrySupplierAccount = new JournalEntry();
     $journalEntrySupplierAccount->setAccount($document->getSupplier()->getFinanceAccount());
     $journalEntrySupplierAccount->setTransaction($transaction);
     $journalEntrySupplierAccount->setCredit($document->getTotal());
     $journalEntrySupplierAccount->setDate(new \DateTime());
     $transaction->addJournalEntry($journalEntrySupplierAccount);
     /* persist */
     $this->transactionRepository->save($transaction);
     return $transaction;
 }
 /**
  * Displays a form to edit an existing Document entity.
  *
  * @Route("/{id}/payments/create", name="finance_document_si_payments_create", requirements={"id"="\d+"})
  * @Method("POST")
  * @Template("FlowerFinancesBundle:SupplierInvoice:addPayment.html.twig")
  */
 public function paymentCreateAction(Request $request, Document $document)
 {
     $em = $this->getDoctrine()->getManager();
     if ($request->get('amount')) {
         $amount = $request->get('amount');
         $date = new \DateTime($request->get('date'));
         $assetAccountId = $request->get('asset_account_id');
         $expenseAccountId = $request->get('expense_account_id');
         /* financial transactions */
         $transaction = new Transaction();
         $transaction->setDate($date);
         $transaction->setDescription('Payment ' . $document->__toString());
         $journalEntryPayable = new JournalEntry();
         $payableAccount = $em->getRepository('FlowerFinancesBundle:Account')->findOneBy(array('subtype' => Account::SUBTYPE_LIABILITY_PAYABLE));
         $journalEntryPayable->setAccount($payableAccount);
         $journalEntryPayable->setTransaction($transaction);
         $journalEntryPayable->setCredit($amount);
         $journalEntryPayable->setDate($date);
         $transaction->addJournalEntry($journalEntryPayable);
         $journalEntrySupplierAccount = new JournalEntry();
         $journalEntrySupplierAccount->setAccount($document->getSupplier()->getFinanceAccount());
         $journalEntrySupplierAccount->setTransaction($transaction);
         $journalEntrySupplierAccount->setDebit($amount);
         $journalEntrySupplierAccount->setDate($date);
         $transaction->addJournalEntry($journalEntrySupplierAccount);
         $expenseAccount = $em->getRepository('FlowerFinancesBundle:Account')->find($expenseAccountId);
         $expenseEntry = new JournalEntry();
         $expenseEntry->setAccount($expenseAccount);
         $expenseEntry->setTransaction($transaction);
         $expenseEntry->setDebit($amount);
         $expenseEntry->setDate($date);
         $transaction->addJournalEntry($expenseEntry);
         $assetAccount = $em->getRepository('FlowerFinancesBundle:Account')->find($assetAccountId);
         $assetEntry = new JournalEntry();
         $assetEntry->setAccount($assetAccount);
         $assetEntry->setCredit($amount);
         $assetEntry->setDate($date);
         $assetEntry->setTransaction($transaction);
         $transaction->addJournalEntry($assetEntry);
         $em->persist($transaction);
         $em->flush();
         $payment = new Payment();
         $payment->setAmount($amount);
         $payment->setType(Payment::TYPE_EXPENSE);
         $payment->setName('Payment ' . $document->__toString());
         $payment->setDescription('Payment ' . $document->__toString());
         $payment->setDate($date);
         $payment->addDocument($document);
         $document->addPayment($payment);
         $em->persist($payment);
         $paymentsAmount = 0;
         foreach ($document->getPayments() as $pay) {
             $paymentsAmount += (double) $pay->getAmount();
         }
         if ($paymentsAmount >= $document->getTotal()) {
             $document->setStatus(Document::STATUS_PAID);
         }
         $em->flush();
         return $this->redirect($this->generateUrl('finance_document_si_show', array('id' => $document->getId())));
     }
     $assetAccounts = $em->getRepository('FlowerFinancesBundle:Account')->findBy(array('type' => Account::TYPE_ASSET));
     return array('assetAccounts' => $assetAccounts, 'document' => $document);
 }