Subtotal.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. /**
  7. * Calculate items and address amounts including/excluding tax
  8. */
  9. namespace Magento\Tax\Model\Sales\Total\Quote;
  10. use Magento\Quote\Model\Quote\Address;
  11. use Magento\Quote\Api\Data\ShippingAssignmentInterface;
  12. class Subtotal extends CommonTaxCollector
  13. {
  14. /**
  15. * Calculate tax on product items. The result will be used to determine shipping
  16. * and discount later.
  17. *
  18. * @param \Magento\Quote\Model\Quote $quote
  19. * @param ShippingAssignmentInterface $shippingAssignment
  20. * @param Address\Total $total
  21. * @return $this
  22. */
  23. public function collect(
  24. \Magento\Quote\Model\Quote $quote,
  25. \Magento\Quote\Api\Data\ShippingAssignmentInterface $shippingAssignment,
  26. \Magento\Quote\Model\Quote\Address\Total $total
  27. ) {
  28. $items = $shippingAssignment->getItems();
  29. if (!$items) {
  30. return $this;
  31. }
  32. $store = $quote->getStore();
  33. $priceIncludesTax = $this->_config->priceIncludesTax($store);
  34. //Setup taxable items
  35. $itemDataObjects = $this->mapItems($shippingAssignment, $priceIncludesTax, false);
  36. $quoteDetails = $this->prepareQuoteDetails($shippingAssignment, $itemDataObjects);
  37. $taxDetails = $this->taxCalculationService
  38. ->calculateTax($quoteDetails, $store->getStoreId());
  39. $itemDataObjects = $this->mapItems($shippingAssignment, $priceIncludesTax, true);
  40. $baseQuoteDetails = $this->prepareQuoteDetails($shippingAssignment, $itemDataObjects);
  41. $baseTaxDetails = $this->taxCalculationService
  42. ->calculateTax($baseQuoteDetails, $store->getStoreId());
  43. $itemsByType = $this->organizeItemTaxDetailsByType($taxDetails, $baseTaxDetails);
  44. if (isset($itemsByType[self::ITEM_TYPE_PRODUCT])) {
  45. $this->processProductItems($shippingAssignment, $itemsByType[self::ITEM_TYPE_PRODUCT], $total);
  46. }
  47. return $this;
  48. }
  49. /**
  50. * @param \Magento\Quote\Model\Quote $quote
  51. * @param Address\Total $total
  52. * @return null
  53. * @codeCoverageIgnore
  54. */
  55. public function fetch(\Magento\Quote\Model\Quote $quote, \Magento\Quote\Model\Quote\Address\Total $total)
  56. {
  57. return null;
  58. }
  59. }