src/PrestaShop/Invoice/Creator.php
protected function getItemLine(array $item)
    {
        $result = array();

        $this->addPropertySource('item', $item);

        $this->addProductInfo($result);
        $sign = $this->invoiceSource->getSign();

        // Check for cost price and margin scheme.
        if (!empty($line['costPrice']) && $this->allowMarginScheme()) {
            // Margin scheme:
            // - Do not put VAT on invoice: send price incl VAT as unitprice.
            // - But still send the VAT rate to Acumulus.
            $result[Tag::UnitPrice] = $sign * $item['unit_price_tax_incl'];
        } else {
            $result[Tag::UnitPrice] = $sign * $item['unit_price_tax_excl'];
            $result[Meta::UnitPriceInc] = $sign * $item['unit_price_tax_incl'];
            $result[Meta::LineAmount] = $sign * $item['total_price_tax_excl'];
            $result[Meta::LineAmountInc] = $sign * $item['total_price_tax_incl'];
            if (!Number::floatsAreEqual($item['unit_amount'], $result[Meta::UnitPriceInc] - $result[Tag::UnitPrice])) {
                $result[Meta::LineDiscountVatAmount] = $item['unit_amount'] - ($result[Meta::UnitPriceInc] - $result[Tag::UnitPrice]);
            }
        }
        $result[Tag::Quantity] = $item['product_quantity'];

        // Get vat rate:
        // The field 'rate' comes from order->getOrderDetailTaxes() and is only
        // defined for orders and was not filled in before PS1.6.1.1. So, check
        // if the field is available.
        // The fields 'unit_amount' and 'total_amount' (table order_detail_tax)
        // are based on the discounted product price and thus cannot be used to
        // get the vat rate.
        if (isset($item['rate'])) {
            $result[Tag::VatRate] = $item['rate'];
            $result[Meta::VatRateSource] = Creator::VatRateSource_Exact;
        } else {
            // Precision: 1 of the amounts, probably the prince incl tax, is
            // entered by the admin and can thus be considered exact. The other
            // is calculated by the system and not rounded and can thus be
            // considered to have a precision better than 0.0001
            $result += $this->getVatRangeTags($sign * ($item['unit_price_tax_incl'] - $item['unit_price_tax_excl']),
                $sign * $item['unit_price_tax_excl'],
                $this->precision, $this->precision);
        }
        $result += $this->getVatRateLookupMetadata($this->order->id_address_invoice, $this->getItemLineTaxRuleGroupId($item));

        $result[Meta::FieldsCalculated][] = Meta::VatAmount;

        $this->removePropertySource('item');
        return $result;
    }
protected function getItemLine(array $item)
    {
        $result = array();

        $this->addPropertySource('item', $item);

        $this->addProductInfo($result);
        $sign = $this->invoiceSource->getSign();

        // Check for cost price and margin scheme.
        if (!empty($line['costPrice']) && $this->allowMarginScheme()) {
            // Margin scheme:
            // - Do not put VAT on invoice: send price incl VAT as unitprice.
            // - But still send the VAT rate to Acumulus.
            $result[Tag::UnitPrice] = $sign * $item['unit_price_tax_incl'];
        } else {
            $result[Tag::UnitPrice] = $sign * $item['unit_price_tax_excl'];
            $result[Meta::UnitPriceInc] = $sign * $item['unit_price_tax_incl'];
            $result[Meta::LineAmount] = $sign * $item['total_price_tax_excl'];
            $result[Meta::LineAmountInc] = $sign * $item['total_price_tax_incl'];
            if (!Number::floatsAreEqual($item['unit_amount'], $result[Meta::UnitPriceInc] - $result[Tag::UnitPrice])) {
                $result[Meta::LineDiscountVatAmount] = $item['unit_amount'] - ($result[Meta::UnitPriceInc] - $result[Tag::UnitPrice]);
            }
        }
        $result[Tag::Quantity] = $item['product_quantity'];

        // Get vat rate:
        // The field 'rate' comes from order->getOrderDetailTaxes() and is only
        // defined for orders and was not filled in before PS1.6.1.1. So, check
        // if the field is available.
        // The fields 'unit_amount' and 'total_amount' (table order_detail_tax)
        // are based on the discounted product price and thus cannot be used to
        // get the vat rate.
        if (isset($item['rate'])) {
            $result[Tag::VatRate] = $item['rate'];
            $result[Meta::VatRateSource] = Creator::VatRateSource_Exact;
        } else {
            // Precision: 1 of the amounts, probably the prince incl tax, is
            // entered by the admin and can thus be considered exact. The other
            // is calculated by the system and not rounded and can thus be
            // considered to have a precision better than 0.0001
            $result += $this->getVatRangeTags($sign * ($item['unit_price_tax_incl'] - $item['unit_price_tax_excl']),
                $sign * $item['unit_price_tax_excl'],
                $this->precision, $this->precision);
        }
        $result += $this->getVatRateLookupMetadata($this->order->id_address_invoice, $this->getItemLineTaxRuleGroupId($item));

        $result[Meta::FieldsCalculated][] = Meta::VatAmount;

        $this->removePropertySource('item');
        return $result;
    }
protected function getItemLine ( array $ item ) { $ result = array ( ) ; $ this -> addPropertySource ( 'item' , $ item ) ; $ this -> addProductInfo ( $ result ) ; $ sign = $ this -> invoiceSource -> getSign ( ) ; // Check for cost price and margin scheme. if ( ! empty ( $ line [ 'costPrice' ] ) && $ this -> allowMarginScheme ( ) ) { // Margin scheme: // - Do not put VAT on invoice: send price incl VAT as unitprice. // - But still send the VAT rate to Acumulus. $ result [ Tag :: UnitPrice ] = $ sign * $ item [ 'unit_price_tax_incl' ] ; } else { $ result [ Tag :: UnitPrice ] = $ sign * $ item [ 'unit_price_tax_excl' ] ; $ result [ Meta :: UnitPriceInc ] = $ sign * $ item [ 'unit_price_tax_incl' ] ; $ result [ Meta :: LineAmount ] = $ sign * $ item [ 'total_price_tax_excl' ] ; $ result [ Meta :: LineAmountInc ] = $ sign * $ item [ 'total_price_tax_incl' ] ; if ( ! Number :: floatsAreEqual ( $ item [ 'unit_amount' ] , $ result [ Meta :: UnitPriceInc ] - $ result [ Tag :: UnitPrice ] ) ) { $ result [ Meta :: LineDiscountVatAmount ] = $ item [ 'unit_amount' ] - ( $ result [ Meta :: UnitPriceInc ] - $ result [ Tag :: UnitPrice ] ) ; } } $ result [ Tag :: Quantity ] = $ item [ 'product_quantity' ] ; // Get vat rate: // The field 'rate' comes from order->getOrderDetailTaxes() and is only // defined for orders and was not filled in before PS1.6.1.1. So, check // if the field is available. // The fields 'unit_amount' and 'total_amount' (table order_detail_tax) // are based on the discounted product price and thus cannot be used to // get the vat rate. if ( isset ( $ item [ 'rate' ] ) ) { $ result [ Tag :: VatRate ] = $ item [ 'rate' ] ; $ result [ Meta :: VatRateSource ] = Creator :: VatRateSource_Exact ; } else { // Precision: 1 of the amounts, probably the prince incl tax, is // entered by the admin and can thus be considered exact. The other // is calculated by the system and not rounded and can thus be // considered to have a precision better than 0.0001 $ result += $ this -> getVatRangeTags ( $ sign * ( $ item [ 'unit_price_tax_incl' ] - $ item [ 'unit_price_tax_excl' ] ) , $ sign * $ item [ 'unit_price_tax_excl' ] , $ this -> precision , $ this -> precision ) ; } $ result += $ this -> getVatRateLookupMetadata ( $ this -> order -> id_address_invoice , $ this -> getItemLineTaxRuleGroupId ( $ item ) ) ; $ result [ Meta :: FieldsCalculated ] [ ] = Meta :: VatAmount ; $ this -> removePropertySource ( 'item' ) ; return $ result ; }
Returns 1 item line, both for an order or credit slip.

@param array $item
An array of an OrderDetail line combined with a tax detail line OR
an array with an OrderSlipDetail line.

@return array
@throws \PrestaShopDatabaseException
Returns 1 item line both for an order or credit slip .