/** * @param Request $request * @param Invoice $invoice * * @return Response */ public function editAction(Request $request, Invoice $invoice) { if ($invoice->getStatus() === Graph::STATUS_PAID) { $this->flash($this->trans('invoice.edit.paid'), 'warning'); return $this->redirectToRoute('_invoices_index'); } $form = $this->createForm('invoice', $invoice); $form->handleRequest($request); if ($form->isValid()) { $action = $request->request->get('save'); $invoiceManager = $this->get('invoice.manager'); /** @var PaymentRepository $paymentRepository */ $paymentRepository = $this->getRepository('CSBillPaymentBundle:Payment'); $totalPaid = $paymentRepository->getTotalPaidForInvoice($invoice); // @TODO: If current invoice total is updated to less than the total amount paid, // then the balance needs to be added as credit $invoice->setBalance($invoice->getTotal()->subtract($totalPaid)); if ($action === Graph::STATUS_PENDING) { $invoiceManager->accept($invoice); } else { $this->save($invoice); } $this->flash($this->trans('invoice.edit.success'), 'success'); return $this->redirect($this->generateUrl('_invoices_view', array('id' => $invoice->getId()))); } return $this->render('CSBillInvoiceBundle:Default:edit.html.twig', array('form' => $form->createView(), 'invoice' => $invoice)); }
/** * @param Invoice $invoice * * @return \Symfony\Component\HttpFoundation\RedirectResponse */ public function sendAction(Invoice $invoice) { if ($invoice->getStatus() !== Graph::STATUS_PENDING) { $this->get('invoice.manager')->accept($invoice); } else { $this->get('billing.mailer')->sendInvoice($invoice); } $this->flash($this->trans('invoice.transition.action.sent'), 'success'); return $this->redirect($this->generateUrl('_invoices_view', array('id' => $invoice->getId()))); }
/** * @ApiDoc( * statusCodes={ * 200="Returned when successful", * 400="Returned when the validation fails", * 403="Returned when the user is not authorized", * }, * resource=true, * description="Update an invoice", * input="CSBill\InvoiceBundle\Form\Type\InvoiceType", * output="CSBill\InvoiceBundle\Entity\Invoice", * authentication=true, * ) * * @param Request $request * @param Entity\Invoice $invoice * * @return \Symfony\Component\HttpFoundation\Response * * @throws \Exception * * @RestRoute\Put(path="/invoices/{invoiceId}") * * @ParamConverter("invoice", class="CSBillInvoiceBundle:Invoice", options={"id" : "invoiceId"}) */ public function updateInvoiceAction(Request $request, Entity\Invoice $invoice) { $originalStatus = $invoice->getStatus(); $form = $this->get('form.factory')->create('invoice', $invoice); $form->handleRequest($request); if ($form->isValid()) { if ($invoice->getStatus() !== $originalStatus) { throw new \Exception('To change the status of an invoice, use the dedicated "status" method', 400); } $entityManager = $this->get('doctrine.orm.entity_manager'); $entityManager->persist($invoice); $entityManager->flush(); return $this->handleView($this->view($invoice)); } if (!$form->isSubmitted()) { $form->submit([]); } return $this->handleView($this->view($form, Response::HTTP_BAD_REQUEST)); }