Issues (3641)

Business/Reader/OrderInvoiceReader.php (1 issue)

1
<?php
2
3
/**
4
 * Copyright © 2016-present Spryker Systems GmbH. All rights reserved.
5
 * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file.
6
 */
7
8
namespace Spryker\Zed\SalesInvoice\Business\Reader;
9
10
use Generated\Shared\Transfer\OrderInvoiceCollectionTransfer;
11
use Generated\Shared\Transfer\OrderInvoiceCriteriaTransfer;
12
use Generated\Shared\Transfer\OrderInvoiceTransfer;
13
use Generated\Shared\Transfer\OrderTransfer;
14
use Spryker\Zed\SalesInvoice\Business\Renderer\OrderInvoiceRendererInterface;
15
use Spryker\Zed\SalesInvoice\Dependency\Facade\SalesInvoiceToSalesFacadeInterface;
16
use Spryker\Zed\SalesInvoice\Persistence\SalesInvoiceRepositoryInterface;
17
18
class OrderInvoiceReader implements OrderInvoiceReaderInterface
19
{
20
    /**
21
     * @var \Spryker\Zed\SalesInvoice\Persistence\SalesInvoiceRepositoryInterface
22
     */
23
    protected $repository;
24
25
    /**
26
     * @var \Spryker\Zed\SalesInvoice\Business\Renderer\OrderInvoiceRendererInterface
27
     */
28
    protected $orderInvoiceRenderer;
29
30
    /**
31
     * @var \Spryker\Zed\SalesInvoice\Dependency\Facade\SalesInvoiceToSalesFacadeInterface
32
     */
33
    protected $salesFacade;
34
35
    /**
36
     * @var array<\Spryker\Zed\SalesInvoiceExtension\Dependency\Plugin\OrderInvoicesExpanderPluginInterface>
37
     */
38
    protected $orderInvoicesExpanderPlugins;
39
40
    /**
41
     * @param \Spryker\Zed\SalesInvoice\Persistence\SalesInvoiceRepositoryInterface $repository
42
     * @param \Spryker\Zed\SalesInvoice\Business\Renderer\OrderInvoiceRendererInterface $orderInvoiceRenderer
43
     * @param \Spryker\Zed\SalesInvoice\Dependency\Facade\SalesInvoiceToSalesFacadeInterface $salesFacade
44
     * @param array<\Spryker\Zed\SalesInvoiceExtension\Dependency\Plugin\OrderInvoicesExpanderPluginInterface> $orderInvoicesExpanderPlugins
45
     */
46
    public function __construct(
47
        SalesInvoiceRepositoryInterface $repository,
48
        OrderInvoiceRendererInterface $orderInvoiceRenderer,
49
        SalesInvoiceToSalesFacadeInterface $salesFacade,
50
        array $orderInvoicesExpanderPlugins
51
    ) {
52
        $this->repository = $repository;
53
        $this->orderInvoiceRenderer = $orderInvoiceRenderer;
54
        $this->salesFacade = $salesFacade;
55
        $this->orderInvoicesExpanderPlugins = $orderInvoicesExpanderPlugins;
56
    }
57
58
    /**
59
     * @param \Generated\Shared\Transfer\OrderInvoiceCriteriaTransfer $orderInvoiceCriteriaTransfer
60
     *
61
     * @return \Generated\Shared\Transfer\OrderInvoiceCollectionTransfer
62
     */
63
    public function getOrderInvoices(OrderInvoiceCriteriaTransfer $orderInvoiceCriteriaTransfer): OrderInvoiceCollectionTransfer
64
    {
65
        $orderInvoiceCollectionTransfer = $this->repository->getOrderInvoices($orderInvoiceCriteriaTransfer);
66
67
        if (!count($orderInvoiceCollectionTransfer->getOrderInvoices())) {
68
            return $orderInvoiceCollectionTransfer;
69
        }
70
71
        $orderInvoiceCollectionTransfer = $this->executeOrderInvoicesExpanderPlugins($orderInvoiceCollectionTransfer);
72
73
        return $this->expandOrderInvoiceCollectionWithRenderedInvoice($orderInvoiceCriteriaTransfer, $orderInvoiceCollectionTransfer);
74
    }
75
76
    /**
77
     * @param \Generated\Shared\Transfer\OrderInvoiceTransfer $orderInvoiceTransfer
78
     * @param \Generated\Shared\Transfer\OrderTransfer $orderTransfer
79
     *
80
     * @return \Generated\Shared\Transfer\OrderInvoiceTransfer
81
     */
82
    public function expandOrderInvoiceWithRenderedInvoice(
83
        OrderInvoiceTransfer $orderInvoiceTransfer,
84
        OrderTransfer $orderTransfer
85
    ): OrderInvoiceTransfer {
86
        return $orderInvoiceTransfer->setRenderedInvoice(
87
            $this->orderInvoiceRenderer->renderOrderInvoice($orderInvoiceTransfer, $orderTransfer),
88
        );
89
    }
90
91
    /**
92
     * @param \Generated\Shared\Transfer\OrderInvoiceCriteriaTransfer $orderInvoiceCriteriaTransfer
93
     * @param \Generated\Shared\Transfer\OrderInvoiceCollectionTransfer $orderInvoiceCollectionTransfer
94
     *
95
     * @return \Generated\Shared\Transfer\OrderInvoiceCollectionTransfer
96
     */
97
    protected function expandOrderInvoiceCollectionWithRenderedInvoice(
98
        OrderInvoiceCriteriaTransfer $orderInvoiceCriteriaTransfer,
99
        OrderInvoiceCollectionTransfer $orderInvoiceCollectionTransfer
100
    ): OrderInvoiceCollectionTransfer {
101
        if (!$orderInvoiceCriteriaTransfer->getExpandWithRenderedInvoice()) {
102
            return $orderInvoiceCollectionTransfer;
103
        }
104
105
        foreach ($orderInvoiceCollectionTransfer->getOrderInvoices() as $orderInvoiceTransfer) {
106
            $orderTransfer = $this->salesFacade->findOrderByIdSalesOrder($orderInvoiceTransfer->getIdSalesOrder());
107
            $this->expandOrderInvoiceWithRenderedInvoice($orderInvoiceTransfer, $orderTransfer);
0 ignored issues
show
It seems like $orderTransfer can also be of type null; however, parameter $orderTransfer of Spryker\Zed\SalesInvoice...ceWithRenderedInvoice() does only seem to accept Generated\Shared\Transfer\OrderTransfer, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

107
            $this->expandOrderInvoiceWithRenderedInvoice($orderInvoiceTransfer, /** @scrutinizer ignore-type */ $orderTransfer);
Loading history...
108
        }
109
110
        return $orderInvoiceCollectionTransfer;
111
    }
112
113
    /**
114
     * @param \Generated\Shared\Transfer\OrderInvoiceCollectionTransfer $orderInvoiceCollectionTransfer
115
     *
116
     * @return \Generated\Shared\Transfer\OrderInvoiceCollectionTransfer
117
     */
118
    protected function executeOrderInvoicesExpanderPlugins(OrderInvoiceCollectionTransfer $orderInvoiceCollectionTransfer): OrderInvoiceCollectionTransfer
119
    {
120
        $orderInvoiceTransfers = $orderInvoiceCollectionTransfer->getOrderInvoices()->getArrayCopy();
121
122
        foreach ($this->orderInvoicesExpanderPlugins as $orderInvoicesExpanderPlugin) {
123
            $orderInvoiceTransfers = $orderInvoicesExpanderPlugin->expand($orderInvoiceTransfers);
124
        }
125
126
        $orderInvoiceCollectionTransfer->getOrderInvoices()->exchangeArray($orderInvoiceTransfers);
127
128
        return $orderInvoiceCollectionTransfer;
129
    }
130
}
131