/** * @param Invoice $invoice */ private function setItemsDescription(Invoice $invoice) { $now = Carbon::now(); /** @var Item $item */ foreach ($invoice->getItems() as $item) { $description = $item->getDescription(); $description = str_replace(['{day}', '{day_name}', '{month}', '{year}'], [$now->day, $now->format('l'), $now->format('F'), $now->year], $description); $item->setDescription($description); } $this->entityManager->persist($invoice); $this->entityManager->flush(); }
/** * @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; }