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

        // $product can be empty if the product has been deleted.
        $product = $this->getRegistry()->model_catalog_product->getProduct($item['product_id']);
        if (!empty($product)) {
            $this->addPropertySource('product', $product);
        }
        $this->addPropertySource('item', $item);

        $this->addProductInfo($result);

        // Get vat range info from item line.
        $productPriceEx = $item['price'];
        $productVat = $item['tax'];
        $vatInfo = $this->getVatRangeTags($productVat, $productPriceEx, $this->precision, $this->precision);

        // Try to look up the vat rate via product.
        $vatInfo += $this->getVatRateLookupMetadata($product['tax_class_id']);

        // 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] = $productPriceEx + $productVat;
        } else {
            $result[Tag::UnitPrice] = $productPriceEx;
            $result[Meta::VatAmount] = $productVat;
        }
        $result[Tag::Quantity] = $item['quantity'];
        $result += $vatInfo;

        // Options (variants).
        $options = $this->getOrderModel()->getOrderOptions($item['order_id'], $item['order_product_id']);
        if (!empty($options)) {
            // Add options as children.
            $result[Meta::ChildrenLines] = array();
            $optionsVatInfo = $vatInfo;
            $optionsVatInfo[Meta::VatAmount] = 0;
            foreach ($options as $option) {
                $result[Meta::ChildrenLines][] = array(
                    Tag::Product => "{$option['name']}: {$option['value']}",
                    Tag::UnitPrice => 0,
                      // Table order_option does not have a quantity field, so
                      // composite products with multiple same sub product
                      // are apparently not covered. Take quantity from parent.
                    Tag::Quantity => $item['quantity'],
                  ) + $optionsVatInfo;
            }
        }
        $this->removePropertySource('product');
        $this->removePropertySource('item');

        return $result;
    }
protected function getItemLine(array $item)
    {
        $result = array();

        // $product can be empty if the product has been deleted.
        $product = $this->getRegistry()->model_catalog_product->getProduct($item['product_id']);
        if (!empty($product)) {
            $this->addPropertySource('product', $product);
        }
        $this->addPropertySource('item', $item);

        $this->addProductInfo($result);

        // Get vat range info from item line.
        $productPriceEx = $item['price'];
        $productVat = $item['tax'];
        $vatInfo = $this->getVatRangeTags($productVat, $productPriceEx, $this->precision, $this->precision);

        // Try to look up the vat rate via product.
        $vatInfo += $this->getVatRateLookupMetadata($product['tax_class_id']);

        // 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] = $productPriceEx + $productVat;
        } else {
            $result[Tag::UnitPrice] = $productPriceEx;
            $result[Meta::VatAmount] = $productVat;
        }
        $result[Tag::Quantity] = $item['quantity'];
        $result += $vatInfo;

        // Options (variants).
        $options = $this->getOrderModel()->getOrderOptions($item['order_id'], $item['order_product_id']);
        if (!empty($options)) {
            // Add options as children.
            $result[Meta::ChildrenLines] = array();
            $optionsVatInfo = $vatInfo;
            $optionsVatInfo[Meta::VatAmount] = 0;
            foreach ($options as $option) {
                $result[Meta::ChildrenLines][] = array(
                    Tag::Product => "{$option['name']}: {$option['value']}",
                    Tag::UnitPrice => 0,
                      // Table order_option does not have a quantity field, so
                      // composite products with multiple same sub product
                      // are apparently not covered. Take quantity from parent.
                    Tag::Quantity => $item['quantity'],
                  ) + $optionsVatInfo;
            }
        }
        $this->removePropertySource('product');
        $this->removePropertySource('item');

        return $result;
    }
protected function getItemLine ( array $ item ) { $ result = array ( ) ; // $product can be empty if the product has been deleted. $ product = $ this -> getRegistry ( ) -> model_catalog_product -> getProduct ( $ item [ 'product_id' ] ) ; if ( ! empty ( $ product ) ) { $ this -> addPropertySource ( 'product' , $ product ) ; } $ this -> addPropertySource ( 'item' , $ item ) ; $ this -> addProductInfo ( $ result ) ; // Get vat range info from item line. $ productPriceEx = $ item [ 'price' ] ; $ productVat = $ item [ 'tax' ] ; $ vatInfo = $ this -> getVatRangeTags ( $ productVat , $ productPriceEx , $ this -> precision , $ this -> precision ) ; // Try to look up the vat rate via product. $ vatInfo += $ this -> getVatRateLookupMetadata ( $ product [ 'tax_class_id' ] ) ; // 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 ] = $ productPriceEx + $ productVat ; } else { $ result [ Tag :: UnitPrice ] = $ productPriceEx ; $ result [ Meta :: VatAmount ] = $ productVat ; } $ result [ Tag :: Quantity ] = $ item [ 'quantity' ] ; $ result += $ vatInfo ; // Options (variants). $ options = $ this -> getOrderModel ( ) -> getOrderOptions ( $ item [ 'order_id' ] , $ item [ 'order_product_id' ] ) ; if ( ! empty ( $ options ) ) { // Add options as children. $ result [ Meta :: ChildrenLines ] = array ( ) ; $ optionsVatInfo = $ vatInfo ; $ optionsVatInfo [ Meta :: VatAmount ] = 0 ; foreach ( $ options as $ option ) { $ result [ Meta :: ChildrenLines ] [ ] = array ( Tag :: Product => "{$option['name']}: {$option['value']}" , Tag :: UnitPrice => 0 , // Table order_option does not have a quantity field, so // composite products with multiple same sub product // are apparently not covered. Take quantity from parent. Tag :: Quantity => $ item [ 'quantity' ] , ) + $ optionsVatInfo ; } } $ this -> removePropertySource ( 'product' ) ; $ this -> removePropertySource ( 'item' ) ; return $ result ; }
Returns the item line for 1 product line.

This method may return child lines if there are options/variants.
These lines will be informative, their price will be 0.

@param array $item

@return array

@throws \Exception
Returns the item line for 1 product line .