7
7
8
8
namespace Magento \QuoteGraphQl \Model \Resolver \ShippingAddress ;
9
9
10
- use Magento \Customer \Api \AddressRepositoryInterface ;
11
10
use Magento \Framework \Api \DataObjectHelper ;
12
11
use Magento \Framework \GraphQl \Config \Element \Field ;
13
12
use Magento \Framework \GraphQl \Exception \GraphQlInputException ;
14
13
use Magento \Framework \GraphQl \Query \ResolverInterface ;
15
14
use Magento \Framework \GraphQl \Schema \Type \ResolveInfo ;
16
15
use Magento \Quote \Model \MaskedQuoteIdToQuoteIdInterface ;
17
- use Magento \Quote \Model \Quote \Address ;
18
16
use Magento \Quote \Model \ShippingAddressManagementInterface ;
17
+ use Magento \QuoteGraphQl \Model \Resolver \ShippingAddress \SetShippingAddressOnCart \MultiShipping ;
18
+ use Magento \QuoteGraphQl \Model \Resolver \ShippingAddress \SetShippingAddressOnCart \SingleShipping ;
19
19
20
20
/**
21
21
* @inheritdoc
22
22
*/
23
23
class SetShippingAddressesOnCart implements ResolverInterface
24
24
{
25
25
/**
26
- * @var ShippingAddressManagementInterface
26
+ * @var DataObjectHelper
27
27
*/
28
- private $ shippingAddressManagement ;
28
+ private $ dataObjectHelper ;
29
29
30
30
/**
31
- * @var AddressRepositoryInterface
31
+ * @var MaskedQuoteIdToQuoteIdInterface
32
32
*/
33
- private $ addressRepository ;
33
+ private $ maskedQuoteIdToQuoteId ;
34
34
35
35
/**
36
- * @var Address
36
+ * @var MultiShipping
37
37
*/
38
- private $ addressModel ;
38
+ private $ multiShipping ;
39
+
39
40
/**
40
- * @var DataObjectHelper
41
+ * @var SingleShipping
41
42
*/
42
- private $ dataObjectHelper ;
43
+ private $ singleShipping ;
43
44
44
45
/**
45
- * @var MaskedQuoteIdToQuoteIdInterface
46
+ * @var ShippingAddressManagementInterface
46
47
*/
47
- private $ maskedQuoteIdToQuoteId ;
48
+ private $ shippingAddressManagement ;
48
49
49
50
/**
50
- * @param ShippingAddressManagementInterface $shippingAddressManagement
51
- * @param AddressRepositoryInterface $addressRepository
52
- * @param Address $addressModel
53
51
* @param DataObjectHelper $dataObjectHelper
54
52
* @param MaskedQuoteIdToQuoteIdInterface $maskedQuoteIdToQuoteId
53
+ * @param MultiShipping $multiShipping
54
+ * @param SingleShipping $singleShipping
55
+ * @param ShippingAddressManagementInterface $shippingAddressManagement
55
56
*/
56
57
public function __construct (
57
- ShippingAddressManagementInterface $ shippingAddressManagement ,
58
- AddressRepositoryInterface $ addressRepository ,
59
- Address $ addressModel ,
60
58
DataObjectHelper $ dataObjectHelper ,
61
- MaskedQuoteIdToQuoteIdInterface $ maskedQuoteIdToQuoteId
59
+ MaskedQuoteIdToQuoteIdInterface $ maskedQuoteIdToQuoteId ,
60
+ MultiShipping $ multiShipping ,
61
+ SingleShipping $ singleShipping ,
62
+ ShippingAddressManagementInterface $ shippingAddressManagement
62
63
) {
63
- $ this ->shippingAddressManagement = $ shippingAddressManagement ;
64
- $ this ->addressRepository = $ addressRepository ;
65
- $ this ->addressModel = $ addressModel ;
66
64
$ this ->dataObjectHelper = $ dataObjectHelper ;
67
65
$ this ->maskedQuoteIdToQuoteId = $ maskedQuoteIdToQuoteId ;
66
+ $ this ->multiShipping = $ multiShipping ;
67
+ $ this ->singleShipping = $ singleShipping ;
68
+ $ this ->shippingAddressManagement = $ shippingAddressManagement ;
68
69
}
69
70
70
71
/**
@@ -78,27 +79,69 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value
78
79
$ maskedCartId = $ args ['input ' ]['cart_id ' ];
79
80
$ cartId = $ this ->maskedQuoteIdToQuoteId ->execute ($ maskedCartId );
80
81
81
- $ customerAddressId = $ args ['input ' ]['customer_address_id ' ] ?? 0 ;
82
+ $ customerAddressId = $ args ['input ' ]['customer_address_id ' ] ?? null ;
82
83
$ address = $ args ['input ' ]['address ' ] ?? null ;
83
84
$ cartItems = $ args ['input ' ]['cart_items ' ] ?? [];
84
85
85
86
if (!$ customerAddressId && !$ address ) {
86
87
throw new GraphQlInputException (__ ('Query should contain either address id or address input. ' ));
87
88
}
88
89
90
+ //TODO: how to determine whether is multi shipping or not
89
91
if (!$ cartItems ) {
90
- if ($ customerAddressId ) {
91
- $ customerAddress = $ this ->addressRepository ->getById ($ customerAddressId );
92
- $ shippingAddress = $ this ->addressModel ->importCustomerAddressData ($ customerAddress );
93
- $ this ->shippingAddressManagement ->assign ($ cartId , $ shippingAddress );
94
- } else {
95
- $ shippingAddress = $ this ->addressModel ->addData ($ address );
96
- $ this ->shippingAddressManagement ->assign ($ cartId , $ shippingAddress );
97
- }
92
+ //TODO: assign cart items
93
+ $ this ->singleShipping ->setAddress ($ cartId , $ customerAddressId , $ address );
98
94
} else {
99
- //TODO: implement multi shipping address assign flow
95
+ $ this -> multiShipping -> setAddress ( $ cartId , $ cartItems , $ customerAddressId , $ address);
100
96
}
101
97
102
- return [];
98
+ //TODO: implement Cart object in the separate resolver
99
+ $ shippingAddress = $ this ->shippingAddressManagement ->get ($ cartId );
100
+ return [
101
+ 'cart ' => [
102
+ 'applied_coupon ' => [
103
+ 'code ' => ''
104
+ ],
105
+ 'addresses ' => [[
106
+ 'firstname ' => $ shippingAddress ->getFirstname (),
107
+ 'lastname ' => $ shippingAddress ->getLastname (),
108
+ 'company ' => $ shippingAddress ->getCompany (),
109
+ 'street ' => $ shippingAddress ->getStreet (),
110
+ 'city ' => $ shippingAddress ->getCity (),
111
+ 'region ' => [
112
+ 'code ' => $ shippingAddress ->getRegionCode (),
113
+ 'label ' => $ shippingAddress ->getRegion ()
114
+ ],
115
+ 'country ' => [
116
+ 'code ' => $ shippingAddress ->getCountryId (),
117
+ 'label ' => ''
118
+ ],
119
+ 'postcode ' => $ shippingAddress ->getPostcode (),
120
+ 'telephone ' => $ shippingAddress ->getTelephone (),
121
+ 'address_type ' => 'SHIPPING ' ,
122
+ 'selected_shipping_method ' => [
123
+ 'code ' => 'test ' ,
124
+ 'label ' => 'test ' ,
125
+ 'free_shipping ' => 'test ' ,
126
+ 'error_message ' => 'test '
127
+ ],
128
+ 'available_shipping_methods ' => [[
129
+ 'code ' => 'test ' ,
130
+ 'label ' => 'test ' ,
131
+ 'free_shipping ' => 'test ' ,
132
+ 'error_message ' => 'test '
133
+ ]],
134
+ 'items_weight ' => [0 ],
135
+ 'customer_notes ' => $ shippingAddress ->getLastname (),
136
+ 'cart_items ' => [[
137
+ 'cart_item_id ' => '' ,
138
+ 'quantity ' => 0
139
+ ]],
140
+ 'applied_coupon ' => [
141
+ 'code ' => ''
142
+ ]
143
+ ]]
144
+ ]
145
+ ];
103
146
}
104
147
}
0 commit comments