/**
  * @param Quote|Invoice $object
  * @param Money         $total
  *
  * @return mixed
  */
 private function setDiscount($object, Money $total)
 {
     if (null !== $object->getDiscount()) {
         $discount = $total->multiply($object->getDiscount());
         $total = $total->subtract($discount);
         return $total;
     }
     return $total;
 }
Exemple #2
0
 /**
  * @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;
 }