public function normalize($item, $format = null, array $context = [])
    {
        $data = [];

        if ($this->contextHasGroup('Summary', $context)) {
            $children = [];
            foreach ($item->getChildren() as $child) {
                $children[] = $this->normalize($child, $format, $context);
            }

            $sale = $item->getSale();

            $shipmentData = [
                'shipped'   => null,
                'returned'  => null,
                'available' => null,
                'in_stock'  => null,
            ];
            if ($sale instanceof ShipmentSubjectInterface) {
                if ($item->isCompound()) {
                    foreach ($children as $child) {
                        $quantity = $child['quantity'];
                        foreach (['shipped', 'returned', 'available', 'in_stock'] as $key) {
                            $qty = $child[$key] / $quantity;
                            if (null === $shipmentData[$key] || $shipmentData[$key] > $qty) {
                                $shipmentData[$key] = $qty;
                            }
                        }
                    }
                } else {
                    $shipmentData = [
                        'shipped'   => $this->shipmentCalculator->calculateShippedQuantity($item),
                        'returned'  => $this->shipmentCalculator->calculateReturnedQuantity($item),
                        'available' => $this->shipmentCalculator->calculateAvailableQuantity($item),
                        'in_stock'  => $this->getInStock($item),
                    ];
                }
            }

            $invoiceData = ['invoiced' => 0, 'credited' => 0];
            if ($sale instanceof InvoiceSubjectInterface) {
                $invoiceData = [
                    'invoiced' => $this->invoiceCalculator->calculateInvoicedQuantity($item),
                    'credited' => $this->invoiceCalculator->calculateCreditedQuantity($item),
                ];
            }

            $data = array_replace($data, [
                'designation'    => $item->getDesignation(),
                'reference'      => $item->getReference(),
                'quantity'       => $item->getQuantity(),
                'total_quantity' => $item->getTotalQuantity(),
                'private'        => $item->isPrivate(),
                //'compound'         => $item->isCompound(),
                //'private_children' => $item->hasPrivateChildren(),
                'children'       => $children,
            ], $shipmentData, $invoiceData);
        }

        return $data;
    }
public function normalize($item, $format = null, array $context = [])
    {
        $data = [];

        if ($this->contextHasGroup('Summary', $context)) {
            $children = [];
            foreach ($item->getChildren() as $child) {
                $children[] = $this->normalize($child, $format, $context);
            }

            $sale = $item->getSale();

            $shipmentData = [
                'shipped'   => null,
                'returned'  => null,
                'available' => null,
                'in_stock'  => null,
            ];
            if ($sale instanceof ShipmentSubjectInterface) {
                if ($item->isCompound()) {
                    foreach ($children as $child) {
                        $quantity = $child['quantity'];
                        foreach (['shipped', 'returned', 'available', 'in_stock'] as $key) {
                            $qty = $child[$key] / $quantity;
                            if (null === $shipmentData[$key] || $shipmentData[$key] > $qty) {
                                $shipmentData[$key] = $qty;
                            }
                        }
                    }
                } else {
                    $shipmentData = [
                        'shipped'   => $this->shipmentCalculator->calculateShippedQuantity($item),
                        'returned'  => $this->shipmentCalculator->calculateReturnedQuantity($item),
                        'available' => $this->shipmentCalculator->calculateAvailableQuantity($item),
                        'in_stock'  => $this->getInStock($item),
                    ];
                }
            }

            $invoiceData = ['invoiced' => 0, 'credited' => 0];
            if ($sale instanceof InvoiceSubjectInterface) {
                $invoiceData = [
                    'invoiced' => $this->invoiceCalculator->calculateInvoicedQuantity($item),
                    'credited' => $this->invoiceCalculator->calculateCreditedQuantity($item),
                ];
            }

            $data = array_replace($data, [
                'designation'    => $item->getDesignation(),
                'reference'      => $item->getReference(),
                'quantity'       => $item->getQuantity(),
                'total_quantity' => $item->getTotalQuantity(),
                'private'        => $item->isPrivate(),
                //'compound'         => $item->isCompound(),
                //'private_children' => $item->hasPrivateChildren(),
                'children'       => $children,
            ], $shipmentData, $invoiceData);
        }

        return $data;
    }
@inheritdoc

@param SaleItemInterface $item