/
Proxy.php
360 lines (296 loc) · 9.38 KB
/
Proxy.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
<?php
/*
* @copyright Copyright (c) 2011 by ESS-UA.
*/
abstract class Ess_M2ePro_Model_Order_Proxy
{
const CHECKOUT_GUEST = 'guest';
const CHECKOUT_REGISTER = 'register';
// ########################################
/** @var $order Ess_M2ePro_Model_Ebay_Order|Ess_M2ePro_Model_Amazon_Order|Ess_M2ePro_Model_Buy_Order */
protected $order = NULL;
protected $items = NULL;
/** @var $store Mage_Core_Model_Store */
protected $store = NULL;
protected $addressData = array();
// ########################################
public function __construct(Ess_M2ePro_Model_Component_Child_Abstract $order)
{
$this->order = $order;
}
// ########################################
/**
* Return proxy objects for order items
*
* @return Ess_M2ePro_Model_Order_Item_Proxy[]
*/
public function getItems()
{
if (is_null($this->items)) {
$this->items = array();
foreach ($this->order->getParentObject()->getItemsCollection()->getItems() as $item) {
$this->items[] = $item->getProxy();
}
$this->mergeItems($this->items);
}
return $this->items;
}
/**
* @param Ess_M2ePro_Model_Order_Item_Proxy[] $items
*/
protected function mergeItems(array &$items)
{
foreach ($items as $key => $item) {
foreach ($items as $nestedKey => $nestedItem) {
if ($key == $nestedKey) {
continue;
}
if (!$item->equals($nestedItem)) {
continue;
}
$mergedQty = $item->getQty() + $nestedItem->getOriginalQty();
$item->setQty($mergedQty);
unset($items[$nestedKey]);
}
}
}
// ########################################
/**
* Set store where order will be imported to
*
* @param Mage_Core_Model_Store $store
* @return Ess_M2ePro_Model_Order_Proxy
*/
public function setStore(Mage_Core_Model_Store $store)
{
$this->store = $store;
return $this;
}
/**
* Return store order will be imported to
*
* @return Mage_Core_Model_Store
*/
public function getStore()
{
if (is_null($this->store)) {
throw new Exception('Store is not set.');
}
return $this->store;
}
// ########################################
/**
* Return checkout method
*
* @abstract
* @return string
*/
abstract public function getCheckoutMethod();
/**
* Check whether checkout method is guest
*
* @return bool
*/
public function isCheckoutMethodGuest()
{
return $this->getCheckoutMethod() == self::CHECKOUT_GUEST;
}
// ########################################
/**
* Return buyer email
*
* @abstract
* @return string
*/
abstract public function getBuyerEmail();
/**
* Return customer object
*
* @abstract
* @return Mage_Customer_Model_Customer
*/
abstract public function getCustomer();
/**
* Return shipping address info
*
* @return array
*/
public function getAddressData()
{
if (empty($this->addressData)) {
$rawAddressData = $this->order->getShippingAddress()->getRawData();
$recipientNameParts = $this->getNameParts($rawAddressData['recipient_name']);
$this->addressData['firstname'] = $recipientNameParts['firstname'];
$this->addressData['lastname'] = $recipientNameParts['lastname'];
$customerNameParts = $this->getNameParts($rawAddressData['buyer_name']);
$this->addressData['customer_firstname'] = $customerNameParts['firstname'];
$this->addressData['customer_lastname'] = $customerNameParts['lastname'];
$this->addressData['email'] = $rawAddressData['email'];
$this->addressData['country_id'] = $rawAddressData['country_id'];
$this->addressData['region'] = $rawAddressData['region'];
$this->addressData['region_id'] = $this->order->getShippingAddress()->getRegionId();
$this->addressData['city'] = $rawAddressData['city'];
$this->addressData['postcode'] = $rawAddressData['postcode'];
$this->addressData['telephone'] = $rawAddressData['telephone'];
$this->addressData['street'] = !empty($rawAddressData['street']) ? $rawAddressData['street'] : array();
$this->addressData['company'] = !empty($rawAddressData['company']) ? $rawAddressData['company'] : '';
$this->addressData['save_in_address_book'] = 0;
}
return $this->addressData;
}
// ########################################
private function getNameParts($fullName)
{
$fullName = trim($fullName);
$spacePosition = strpos($fullName, ' ');
$spacePosition === false && $spacePosition = strlen($fullName);
$firstName = trim(substr($fullName, 0, $spacePosition));
$lastName = trim(substr($fullName, $spacePosition + 1));
return array(
'firstname' => $firstName ? $firstName : 'N/A',
'lastname' => $lastName ? $lastName : 'N/A'
);
}
// ########################################
/**
* Return order currency code
*
* @abstract
* @return string
*/
abstract public function getCurrency();
protected function convertPrice($price)
{
return Mage::getSingleton('M2ePro/Currency')->convertPrice($price, $this->getCurrency(), $this->getStore());
}
// ########################################
/**
* Return payment data
*
* @abstract
* @return array
*/
abstract public function getPaymentData();
/**
* Return shipping data
*
* @abstract
* @return array
*/
abstract public function getShippingData();
// ########################################
public function getComments()
{
return array_merge($this->getGeneralComments(), $this->getChannelComments());
}
/**
* Return channel related order comments array
*
* @return array
*/
public function getChannelComments()
{
return array();
}
/**
* Return general order comments array
*
* @return array
*/
public function getGeneralComments()
{
$store = $this->getStore();
/** @var $currencyHelper Ess_M2ePro_Model_Currency */
$currencyHelper = Mage::getSingleton('M2ePro/Currency');
$currencyConvertRate = $currencyHelper->getConvertRateFromBase($this->getCurrency(), $store);
if ($currencyHelper->isBase($this->getCurrency(), $store)) {
return array();
}
$comments = array();
if (!$currencyHelper->isAllowed($this->getCurrency(), $store)) {
$comments[] = <<<COMMENT
<b>Attention!</b> The Order Prices are incorrect.
Conversion was not performed as "{$this->getCurrency()}" currency is not enabled.
Default currency "{$store->getBaseCurrencyCode()}" was used instead.
Please, enable currency in System -> Configuration -> Currency Setup.
COMMENT;
} elseif ($currencyConvertRate == 0) {
$comments[] = <<<COMMENT
<b>Attention!</b> The Order Prices are incorrect.
Conversion was not performed as there's no rate for "{$this->getCurrency()}".
Default currency "{$store->getBaseCurrencyCode()}" was used instead.
Please, add currency convert rate in System -> Manage Currency -> Rates.
COMMENT;
} else {
$comments[] = <<<COMMENT
Because the Order currency is different from the Store currency,
the conversion from <b>"{$this->getCurrency()}" to "{$store->getBaseCurrencyCode()}"</b> was performed
using <b>{$currencyConvertRate}</b> as a rate.
COMMENT;
}
return $comments;
}
// ########################################
/**
* Return tax rate
*
* @abstract
* @return float
*/
abstract public function getTaxRate();
/**
* Check whether order has Tax (not VAT)
*
* @abstract
* @return bool
*/
abstract public function hasTax();
/**
* Check whether order has VAT (value added tax)
*
* @abstract
* @return bool
*/
abstract public function hasVat();
/**
* Check whether shipping price includes tax
*
* @abstract
* @return bool
*/
abstract public function isShippingPriceIncludesTax();
/**
* Check whether tax mode option is set to "None" in Account settings
*
* @abstract
* @return bool
*/
abstract public function isTaxModeNone();
/**
* Check whether tax mode option is set to "Channel" in Account settings
*
* @abstract
* @return bool
*/
abstract public function isTaxModeChannel();
/**
* Check whether tax mode option is set to "Magento" in Account settings
*
* @abstract
* @return bool
*/
abstract public function isTaxModeMagento();
/**
* Check whether tax mode option is set to "Mixed" in Account settings
*
* @abstract
* @return bool
*/
public function isTaxModeMixed()
{
return !$this->isTaxModeNone() &&
!$this->isTaxModeChannel() &&
!$this->isTaxModeMagento();
}
// ########################################
}