| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 | <?php/** * @copyright  Vertex. All rights reserved.  https://www.vertexinc.com/ * @author     Mediotype                     https://www.mediotype.com/ */namespace Vertex\Tax\Model\TaxQuote;use Magento\Framework\DataObject;use Magento\Framework\DataObjectFactory;use Vertex\Data\LineItemInterface;use Vertex\Data\LineItemInterfaceFactory;use Vertex\Services\Quote\ResponseInterface;/** * Quotation Response object */class TaxQuoteResponse{    /** @var DataObjectFactory */    private $dataObjectFactory;    /** @var DataObject[] */    private $quoteTaxedItems;    /**     * @param DataObjectFactory $dataObjectFactory     */    public function __construct(DataObjectFactory $dataObjectFactory)    {        $this->dataObjectFactory = $dataObjectFactory;    }    /**     * Get all items with tax data     *     * @return DataObject[]     */    public function getQuoteTaxedItems()    {        return $this->quoteTaxedItems;    }    /**     * Parse a Quotation Request response and store it's data here     *     * @param ResponseInterface $response     * @return $this     */    public function parseResponse(ResponseInterface $response)    {        $this->prepareQuoteTaxedItems($response->getLineItems());        return $this;    }    /**     * Prepare the taxable item data     *     * @param LineItemInterface[] $itemsTax     */    public function prepareQuoteTaxedItems(array $itemsTax)    {        $quoteTaxedItems = [];        foreach ($itemsTax as $item) {            $itemTotalTax = $item->getTotalTax() ?: 0;            $taxRate = $this->getTaxRate($item);            $taxPercent = $taxRate * 100;            $itemId = $item->getLineItemId();            if ($itemId === null) {                continue;            }            $taxItemInfo = $this->dataObjectFactory->create();            $taxItemInfo->setProductClass($this->getProductClass($item));            $taxItemInfo->setProductSku($this->getProductSku($item));            if ($item->getQuantity() !== null) {                $taxItemInfo->setProductQty($item->getQuantity());            }            if ($item->getUnitPrice() !== null) {                $taxItemInfo->setUnitPrice($item->getUnitPrice());            }            $taxItemInfo->setTaxRate($taxRate);            $taxItemInfo->setTaxPercent($taxPercent);            $taxItemInfo->setTaxAmount($itemTotalTax);            $quoteTaxedItems[$itemId] = $taxItemInfo;        }        $this->quoteTaxedItems = $quoteTaxedItems;    }    /**     * Get an item's product class     *     * @param LineItemInterface $item     * @return string     */    private function getProductClass(LineItemInterface $item)    {        return $item->getProductClass() ?: '';    }    /**     * Get an item's product sku     *     * @param LineItemInterface $item     * @return string     */    private function getProductSku(LineItemInterface $item)    {        return $item->getProductCode() ?: '';    }    /**     * Get the Tax Rate from the response     *     * @param LineItemInterface $item     * @return float|int     */    private function getTaxRate(LineItemInterface $item)    {        $taxRate = 0;        foreach ($item->getTaxes() as $tax) {            $taxRate += $tax->getEffectiveRate();        }        return $taxRate;    }}
 |