Shipping.php 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Sales\Model\Order\Invoice\Total;
  7. /**
  8. * Order invoice shipping total calculation model
  9. *
  10. * @author Magento Core Team <core@magentocommerce.com>
  11. */
  12. class Shipping extends AbstractTotal
  13. {
  14. /**
  15. * @param \Magento\Sales\Model\Order\Invoice $invoice
  16. * @return $this
  17. */
  18. public function collect(\Magento\Sales\Model\Order\Invoice $invoice)
  19. {
  20. $invoice->setShippingAmount(0);
  21. $invoice->setBaseShippingAmount(0);
  22. $orderShippingAmount = $invoice->getOrder()->getShippingAmount();
  23. $baseOrderShippingAmount = $invoice->getOrder()->getBaseShippingAmount();
  24. $shippingInclTax = $invoice->getOrder()->getShippingInclTax();
  25. $baseShippingInclTax = $invoice->getOrder()->getBaseShippingInclTax();
  26. if ($orderShippingAmount) {
  27. /**
  28. * Check shipping amount in previous invoices
  29. */
  30. foreach ($invoice->getOrder()->getInvoiceCollection() as $previousInvoice) {
  31. if ((double)$previousInvoice->getShippingAmount() && !$previousInvoice->isCanceled()) {
  32. return $this;
  33. }
  34. }
  35. $invoice->setShippingAmount($orderShippingAmount);
  36. $invoice->setBaseShippingAmount($baseOrderShippingAmount);
  37. $invoice->setShippingInclTax($shippingInclTax);
  38. $invoice->setBaseShippingInclTax($baseShippingInclTax);
  39. $invoice->setGrandTotal($invoice->getGrandTotal() + $orderShippingAmount);
  40. $invoice->setBaseGrandTotal($invoice->getBaseGrandTotal() + $baseOrderShippingAmount);
  41. }
  42. return $this;
  43. }
  44. }