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); }