Exemple #1
0
 /**
  * @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));
 }
Exemple #2
0
 /**
  * @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())));
 }
Exemple #3
0
 /**
  * @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));
 }