• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

aimeos / aimeos-core / 1c6482b1-b3b2-437c-a796-9d13ce51d2ed

18 Aug 2024 10:51AM UTC coverage: 91.989% (+0.007%) from 91.982%
1c6482b1-b3b2-437c-a796-9d13ce51d2ed

push

circleci

aimeos
Pass objects to order item in values array

84 of 87 new or added lines in 3 files covered. (96.55%)

29 existing lines in 2 files now uncovered.

10208 of 11097 relevant lines covered (91.99%)

64.73 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

94.44
/src/MShop/Order/Manager/Base.php
1
<?php
2

3
/**
4
 * @license LGPLv3, https://opensource.org/licenses/LGPL-3.0
5
 * @copyright Aimeos (aimeos.org), 2015-2024
6
 * @package MShop
7
 * @subpackage Order
8
 */
9

10

11
namespace Aimeos\MShop\Order\Manager;
12

13

14
/**
15
 * Basic methods and constants for order items (shopping basket).
16
 *
17
 * @package MShop
18
 * @subpackage Order
19
 */
20
abstract class Base extends \Aimeos\MShop\Common\Manager\Base
21
{
22
        /**
23
         * Returns the address item map for the given order IDs
24
         *
25
         * @param string[] $ids List of order IDs
26
         * @param array $ref List of referenced domains that should be fetched too
27
         * @return \Aimeos\Map Multi-dimensional associative list of order IDs as keys and order address type/item pairs as values
28
         */
29
        protected function getAddresses( array $ids, array $ref ) : \Aimeos\Map
30
        {
31
                $manager = $this->object()->getSubManager( 'address' );
34✔
32

33
                $filter = $manager->filter()
34✔
34
                        ->add( 'order.address.parentid', '==', $ids )
34✔
35
                        ->order( ['order.address.type', 'order.address.position', 'order.address.id'] )
34✔
36
                        ->slice( 0, 0x7fffffff );
34✔
37

38
                return $manager->search( $filter, $ref )->groupBy( 'order.address.parentid' );
34✔
39
        }
40

41

42
        /**
43
         * Returns the coupon map for the given order IDs
44
         *
45
         * @param string[] $ids List of order IDs
46
         * @param array $ref List of referenced domains that should be fetched too
47
         * @return \Aimeos\Map Multi-dimensional associative list of order IDs as keys and product items as values
48
         */
49
        protected function getCoupons( array $ids, array $ref ) : \Aimeos\Map
50
        {
51
                $manager = $this->object()->getSubManager( 'coupon' );
28✔
52

53
                $filter = $manager->filter()
28✔
54
                        ->add( 'order.coupon.parentid', '==', $ids )
28✔
55
                        ->order( 'order.coupon.code' )
28✔
56
                        ->slice( 0, 0x7fffffff );
28✔
57

58
                return $manager->search( $filter, $ref )->groupBy( 'order.coupon.parentid' );
28✔
59
        }
60

61

62
        /**
63
         * Retrieves the ordered products from the storage.
64
         *
65
         * @param string[] $ids List of order IDs
66
         * @param array $ref List of referenced domains that should be fetched too
67
         * @return \Aimeos\Map Multi-dimensional associative list of order IDs as keys and order product IDs/items pairs as values
68
         */
69
        protected function getProducts( array $ids, array $ref ) : \Aimeos\Map
70
        {
71
                $manager = $this->object()->getSubManager( 'product' );
40✔
72

73
                $filter = $manager->filter()
40✔
74
                        ->add( 'order.product.parentid', '==', $ids )
40✔
75
                        ->order( 'order.product.position' )
40✔
76
                        ->slice( 0, 0x7fffffff );
40✔
77
                $items = $manager->search( $filter, $ref );
40✔
78
                $map = $items->groupBy( 'order.product.orderproductid' );
40✔
79

80
                foreach( $map as $id => $list ) {
40✔
81
                        $items[$id]?->setProducts( $list );
38✔
82
                }
83

84
                return map( $map->get( '' ) )->groupBy( 'order.product.parentid' );
40✔
85
        }
86

87

88
        /**
89
         * Retrieves the order services from the storage.
90
         *
91
         * @param string[] $ids List of order IDs
92
         * @param array $ref List of referenced domains that should be fetched too
93
         * @return \Aimeos\Map Multi-dimensional associative list of order IDs as keys and service type/items pairs as values
94
         */
95
        protected function getServices( array $ids, array $ref ) : \Aimeos\Map
96
        {
97
                $manager = $this->object()->getSubManager( 'service' );
35✔
98

99
                $filter = $manager->filter()
35✔
100
                        ->add( 'order.service.parentid', '==', $ids )
35✔
101
                        ->order( ['order.service.type', 'order.service.position', 'order.service.id'] )
35✔
102
                        ->slice( 0, 0x7fffffff );
35✔
103

104
                return $manager->search( $filter, $ref )->groupBy( 'order.service.parentid' );
35✔
105
        }
106

107

108
        /**
109
         * Saves the addresses of the order to the storage.
110
         *
111
         * @param \Aimeos\MShop\Order\Item\Iface $item Basket containing address items
112
         * @return \Aimeos\MShop\Order\Manager\Iface Manager object for chaining method calls
113
         */
114
        protected function saveAddresses( \Aimeos\MShop\Order\Item\Iface $item ) : \Aimeos\MShop\Order\Manager\Iface
115
        {
116
                $addresses = $item->getAddresses();
10✔
117

118
                foreach( $addresses as $type => $list )
10✔
119
                {
120
                        $pos = 0;
5✔
121

122
                        foreach( $list as $address )
5✔
123
                        {
124
                                if( $address->getParentId() != $item->getId() ) {
5✔
125
                                        $address->setId( null ); // create new item if copied
5✔
126
                                }
127

128
                                $address->setParentId( $item->getId() )->setPosition( ++$pos );
5✔
129
                        }
130
                }
131

132
                $this->object()->getSubManager( 'address' )->save( $addresses->flat( 1 ) );
10✔
133

134
                return $this;
10✔
135
        }
136

137

138
        /**
139
         * Saves the coupons of the order to the storage.
140
         *
141
         * @param \Aimeos\MShop\Order\Item\Iface $basket Basket containing coupon items
142
         * @return \Aimeos\MShop\Order\Manager\Iface Manager object for chaining method calls
143
         */
144
        protected function saveCoupons( \Aimeos\MShop\Order\Item\Iface $basket ) : \Aimeos\MShop\Order\Manager\Iface
145
        {
146
                $manager = $this->object()->getSubManager( 'coupon' );
10✔
147
                $filter = $manager->filter()->add( 'order.coupon.parentid', '==', $basket->getId() )->slice( 0, 0x7fffffff );
10✔
148
                $items = $manager->search( $filter )->groupBy( 'order.coupon.code' );
10✔
149

150
                foreach( $basket->getCoupons() as $code => $products )
10✔
151
                {
152
                        if( empty( $products ) )
3✔
153
                        {
UNCOV
154
                                $item = !empty( $items[$code] ) ? current( $items[$code] ) : $manager->create()->setParentId( $basket->getId() );
×
UNCOV
155
                                $manager->save( $item->setCode( $code ) );
×
UNCOV
156
                                continue;
×
157
                        }
158

159
                        foreach( $products as $product )
3✔
160
                        {
161
                                foreach( $items[$code] ?? [] as $prodItem )
3✔
162
                                {
163
                                        if( $product->getId() === $prodItem->getId() ) {
1✔
UNCOV
164
                                                continue 2;
×
165
                                        }
166
                                }
167

168
                                $manager->save( $manager->create()->setParentId( $basket->getId() )->setCode( $code )->setProductId( $product->getId() ) );
3✔
169
                        }
170
                }
171

172
                return $this;
10✔
173
        }
174

175

176
        /**
177
         * Saves the ordered products to the storage.
178
         *
179
         * @param \Aimeos\MShop\Order\Item\Iface $basket Basket containing ordered products or bundles
180
         * @return \Aimeos\MShop\Order\Manager\Iface Manager object for chaining method calls
181
         */
182
        protected function saveProducts( \Aimeos\MShop\Order\Item\Iface $basket ) : \Aimeos\MShop\Order\Manager\Iface
183
        {
184
                $pos = 0;
10✔
185
                $products = $basket->getProducts();
10✔
186

187
                foreach( $products as $product )
10✔
188
                {
189
                        if( $product->getParentId() != $basket->getId() ) {
5✔
190
                                $product->setId( null ); // create new item if copied
5✔
191
                        }
192

193
                        $product->setParentId( $basket->getId() )->setPosition( ++$pos );
5✔
194

195
                        foreach( $product->getProducts() as $subProduct )
5✔
196
                        {
197
                                if( $subProduct->getParentId() != $basket->getId() ) {
1✔
198
                                        $subProduct->setId( null ); // create new item if copied
1✔
199
                                }
200

201
                                $subProduct->setParentId( $basket->getId() )->setPosition( ++$pos );
1✔
202
                        }
203
                }
204

205
                $this->object()->getSubManager( 'product' )->save( $products );
10✔
206

207
                return $this;
10✔
208
        }
209

210

211
        /**
212
         * Saves the services of the order to the storage.
213
         *
214
         * @param \Aimeos\MShop\Order\Item\Iface $item Basket containing service items
215
         * @return \Aimeos\MShop\Order\Manager\Iface Manager object for chaining method calls
216
         */
217
        protected function saveServices( \Aimeos\MShop\Order\Item\Iface $item ) : \Aimeos\MShop\Order\Manager\Iface
218
        {
219
                $services = $item->getServices();
10✔
220

221
                foreach( $services as $type => $list )
10✔
222
                {
223
                        $pos = 0;
5✔
224

225
                        foreach( $list as $service )
5✔
226
                        {
227
                                if( $service->getParentId() != $item->getId() ) {
5✔
228
                                        $service->setId( null ); // create new item if copied
5✔
229
                                }
230

231
                                $service->setParentId( $item->getId() )->setPosition( ++$pos );
5✔
232
                        }
233
                }
234

235
                $this->object()->getSubManager( 'service' )->save( $services->flat( 1 ) );
10✔
236

237
                return $this;
10✔
238
        }
239
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc