/** * @param Request $request * @param Client $client * * @return Response */ public function createAction(Request $request, Client $client = null) { /** @var \CSBill\ClientBundle\Repository\ClientRepository $clients */ $clients = $this->getRepository('CSBillClientBundle:Client'); if (!$clients->getTotalClients() > 0) { return $this->render('CSBillInvoiceBundle:Default:empty_clients.html.twig'); } $invoice = new Invoice(); $invoice->setClient($client); $form = $this->createForm('invoice', $invoice); $form->handleRequest($request); if ($form->isValid()) { $action = $request->request->get('save'); $invoiceManager = $this->get('invoice.manager'); $invoice->setBalance($invoice->getTotal()); $invoice = $invoiceManager->create($invoice); if ($action === Graph::STATUS_PENDING) { $invoiceManager->accept($invoice); } $this->flash($this->trans('invoice.create.success'), 'success'); return $this->redirect($this->generateUrl('_invoices_view', array('id' => $invoice->getId()))); } return $this->render('CSBillInvoiceBundle:Default:create.html.twig', array('form' => $form->createView())); }
/** * @param Invoice $invoice * * @return Invoice */ public function duplicate(Invoice $invoice) { // We don't use 'clone', since cloning an invoice will clone all the item id's and nested values. // We rather set it manually $newInvoice = new Invoice(); $now = Carbon::now(); $newInvoice->setCreated($now); $newInvoice->setClient($invoice->getClient()); $newInvoice->setBaseTotal($invoice->getBaseTotal()); $newInvoice->setDiscount($invoice->getDiscount()); $newInvoice->setNotes($invoice->getNotes()); $newInvoice->setTotal($invoice->getTotal()); $newInvoice->setTerms($invoice->getTerms()); $newInvoice->setUsers($invoice->getUsers()->toArray()); $newInvoice->setBalance($newInvoice->getTotal()); if (null !== $invoice->getTax()) { $newInvoice->setTax($invoice->getTax()); } foreach ($invoice->getItems() as $item) { $invoiceItem = new Item(); $invoiceItem->setCreated($now); $invoiceItem->setTotal($item->getTotal()); $invoiceItem->setDescription($item->getDescription()); $invoiceItem->setPrice($item->getPrice()); $invoiceItem->setQty($item->getQty()); if (null !== $item->getTax()) { $invoiceItem->setTax($item->getTax()); } $newInvoice->addItem($invoiceItem); } $this->create($newInvoice); return $newInvoice; }
/** * Add invoice. * * @param Invoice $invoice * * @return Client */ public function addInvoice(Invoice $invoice) { $this->invoices[] = $invoice; $invoice->setClient($this); return $this; }