Skip to content
This repository was archived by the owner on May 28, 2023. It is now read-only.

Commit 0bf0f2e

Browse files
authored
Merge pull request #47 from DivanteLtd/o2m_improvements
Region Id and Region Code mapper
2 parents 7baebb3 + 95f5043 commit 0bf0f2e

File tree

3 files changed

+1243
-1761
lines changed

3 files changed

+1243
-1761
lines changed

src/lib/countrymapper.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
2+
function mapCountryRegion(countryList, countryId, regionCode) {
3+
let regionId = 0
4+
for (let country of countryList) {
5+
if (country.id === countryId) {
6+
for (let region of country.available_regions) {
7+
if (region.code === regionCode) {
8+
return { regionId: region.id,
9+
regionCode: region.code }
10+
}
11+
}
12+
}
13+
}
14+
return { regionId: regionId, regionCode: '' }
15+
}
16+
17+
module.exports = {
18+
mapCountryRegion
19+
}

src/worker/order_to_magento2.js

Lines changed: 132 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ const kue = require('kue');
77
const queue = kue.createQueue();
88
const logger = require('./log');
99
const unirest = require('unirest');
10-
10+
const countryMapper = require('../lib/countrymapper')
1111
const Ajv = require('ajv'); // json validator
1212
const ajv = new Ajv(); // validator
1313
const validate = ajv.compile(require('../models/order.schema.json'));
@@ -140,124 +140,151 @@ function processSingleOrder(orderData, config, job, done){
140140
}
141141
}
142142

143-
144143
Promise.all(syncPromises).then((results) => {
145144
if(job) job.progress(currentStep++, TOTAL_STEPS);
146145
logger.info(THREAD_ID + '< Server cart in sync')
147146
logger.debug(THREAD_ID + results)
148147

149148
const billingAddr = orderData.addressInformation.billingAddress;
150149
const shippingAddr = orderData.addressInformation.shippingAddress;
150+
let mappedShippingRegion = 0
151+
let mappedBillingRegion = 0
152+
api.directory.countries().then((countryList) => {
153+
154+
if (shippingAddr.region_id > 0) {
155+
mappedShippingRegion = { regionId: shippingAddr.region_id, regionCode: shippingAddr.region_code }
156+
} else {
157+
mappedShippingRegion = countryMapper.mapCountryRegion(countryList, shippingAddr.country_id, shippingAddr.region_code ? shippingAddr.region_code : shippingAddr.region)
158+
}
151159

152-
const addressPromises = []
153-
154-
addressPromises.push(api.cart.billingAddress(null, cartId, { // sum up totals
155-
156-
"address":
157-
{
158-
"countryId": billingAddr.country_id,
159-
"street": billingAddr.street,
160-
"telephone": billingAddr.telephone,
161-
"postcode": billingAddr.postcode,
162-
"city": billingAddr.city,
163-
"firstname": billingAddr.firstname,
164-
"lastname": billingAddr.lastname,
165-
"email": billingAddr.email,
166-
"regionCode": billingAddr.regionCode,
167-
"company": billingAddr.company,
168-
"vatId": billingAddr.vat_id
160+
if (billingAddr.region_id > 0) {
161+
mappedBillingRegion = { regionId: billingAddr.region_id, regionCode: billingAddr.region_code }
162+
} else {
163+
mappedBillingRegion = countryMapper.mapCountryRegion(countryList, billingAddr.country_id, billingAddr.region_code ? billingAddr.region_code : billingAddr.region)
169164
}
170-
171-
}, isThisAuthOrder))
172-
173-
addressPromises.push(api.cart.shippingInformation(null, cartId, { // sum up totals
174-
175-
"addressInformation":
176-
{
177-
"shippingAddress":
178-
{
179-
"countryId": shippingAddr.country_id,
180-
"street": shippingAddr.street,
181-
"telephone": shippingAddr.telephone,
182-
"postcode": shippingAddr.postcode,
183-
"city": shippingAddr.city,
184-
"firstname": shippingAddr.firstname,
185-
"lastname": shippingAddr.lastname,
186-
"email": shippingAddr.email,
187-
"regionCode": shippingAddr.regionCode,
188-
"company": shippingAddr.company
189-
},
190-
191-
"billingAddress":
192-
{
193-
"countryId": billingAddr.country_id,
194-
"street": billingAddr.street,
195-
"telephone": billingAddr.telephone,
196-
"postcode": billingAddr.postcode,
197-
"city": billingAddr.city,
198-
"firstname": billingAddr.firstname,
199-
"lastname": billingAddr.lastname,
200-
"email": billingAddr.email,
201-
"regionCode": billingAddr.regionCode,
202-
"company": billingAddr.company,
203-
"vatId": billingAddr.vat_id
204-
},
205-
"shippingMethodCode": orderData.addressInformation.shipping_method_code,
206-
"shippingCarrierCode": orderData.addressInformation.shipping_carrier_code,
207-
"extensionAttributes": orderData.addressInformation.shippingExtraFields
208-
}
209-
210-
}, isThisAuthOrder))
211-
212-
213-
Promise.all(addressPromises).then((results) => {
214-
logger.info(THREAD_ID + '< Addresses assigned', results)
215-
logger.debug(THREAD_ID + results)
216-
217-
if(job) job.progress(currentStep++, TOTAL_STEPS);
218-
219-
api.cart.order(null, cartId, {
220-
"paymentMethod":
221-
{
222-
"method":orderData.addressInformation.payment_method_code
223-
}
224-
}, isThisAuthOrder).then(result => {
225-
logger.info(THREAD_ID, results)
226-
if(job) job.progress(currentStep++, TOTAL_STEPS);
227-
228-
logger.info(THREAD_ID + '[OK] Order placed with ORDER ID', result);
229-
logger.debug(THREAD_ID + result)
230-
redisClient.set("order$$id$$" + orderData.order_id, JSON.stringify(
231-
{
232-
platform_order_id: result,
233-
transmited: true,
234-
transmited_at: new Date(),
235-
platform: 'magento2'
236-
}));
237-
redisClient.set("order$$totals$$" + orderData.order_id, JSON.stringify(result[1]));
238-
239-
if(job) job.progress(currentStep++, TOTAL_STEPS);
240-
return done(null, { magentoOrderId: result, transferedAt: new Date() });
241-
}).catch(err => {
242-
logger.error('Error placing an order', err, typeof err)
243-
if (job) job.attempts(6).backoff( {delay: 30*1000, type:'fixed'} ).save()
244-
return done(new Error('Error placing an order', err));
245165

246-
})
166+
const addressPromises = []
167+
168+
const billingAddressInfo = { // sum up totals
169+
170+
"address":
171+
{
172+
"countryId": billingAddr.country_id,
173+
"street": billingAddr.street,
174+
"telephone": billingAddr.telephone,
175+
"postcode": billingAddr.postcode,
176+
"city": billingAddr.city,
177+
"firstname": billingAddr.firstname,
178+
"lastname": billingAddr.lastname,
179+
"email": billingAddr.email,
180+
"regionCode": mappedBillingRegion.regionCode,
181+
"regionId": mappedBillingRegion.regionId,
182+
"company": billingAddr.company,
183+
"vatId": billingAddr.vat_id
184+
}
185+
186+
}
187+
logger.info(THREAD_ID + '< Billing info', billingAddressInfo)
188+
addressPromises.push(api.cart.billingAddress(null, cartId, billingAddressInfo, isThisAuthOrder))
189+
190+
const shippingAddressInfo = { // sum up totals
191+
192+
"addressInformation":
193+
{
194+
"shippingAddress":
195+
{
196+
"countryId": shippingAddr.country_id,
197+
"street": shippingAddr.street,
198+
"telephone": shippingAddr.telephone,
199+
"postcode": shippingAddr.postcode,
200+
"city": shippingAddr.city,
201+
"firstname": shippingAddr.firstname,
202+
"lastname": shippingAddr.lastname,
203+
"email": shippingAddr.email,
204+
"regionId": mappedShippingRegion.regionId,
205+
"regionCode": mappedShippingRegion.regionCode,
206+
"company": shippingAddr.company
207+
},
208+
209+
"billingAddress":
210+
{
211+
"countryId": billingAddr.country_id,
212+
"street": billingAddr.street,
213+
"telephone": billingAddr.telephone,
214+
"postcode": billingAddr.postcode,
215+
"city": billingAddr.city,
216+
"firstname": billingAddr.firstname,
217+
"lastname": billingAddr.lastname,
218+
"email": billingAddr.email,
219+
"regionId": mappedBillingRegion.regionId,
220+
"regionCode": mappedBillingRegion.regionCode,
221+
"company": billingAddr.company,
222+
"vatId": billingAddr.vat_id
223+
},
224+
"shippingMethodCode": orderData.addressInformation.shipping_method_code,
225+
"shippingCarrierCode": orderData.addressInformation.shipping_carrier_code,
226+
"extensionAttributes": orderData.addressInformation.shippingExtraFields
227+
}
228+
229+
}
230+
logger.info(THREAD_ID + '< Shipping info', shippingAddressInfo)
231+
addressPromises.push(api.cart.shippingInformation(null, cartId, shippingAddressInfo, isThisAuthOrder))
232+
233+
234+
Promise.all(addressPromises).then((results) => {
235+
logger.info(THREAD_ID + '< Addresses assigned', results)
236+
logger.debug(THREAD_ID + results)
237+
238+
if(job) job.progress(currentStep++, TOTAL_STEPS);
239+
240+
api.cart.order(null, cartId, {
241+
"paymentMethod":
242+
{
243+
"method":orderData.addressInformation.payment_method_code
244+
}
245+
}, isThisAuthOrder).then(result => {
246+
logger.info(THREAD_ID, results)
247+
if(job) job.progress(currentStep++, TOTAL_STEPS);
248+
249+
logger.info(THREAD_ID + '[OK] Order placed with ORDER ID', result);
250+
logger.debug(THREAD_ID + result)
251+
redisClient.set("order$$id$$" + orderData.order_id, JSON.stringify(
252+
{
253+
platform_order_id: result,
254+
transmited: true,
255+
transmited_at: new Date(),
256+
platform: 'magento2'
257+
}));
258+
redisClient.set("order$$totals$$" + orderData.order_id, JSON.stringify(result[1]));
259+
260+
if(job) job.progress(currentStep++, TOTAL_STEPS);
261+
return done(null, { magentoOrderId: result, transferedAt: new Date() });
262+
}).catch(err => {
263+
logger.error('Error placing an order', err, typeof err)
264+
if (job) job.attempts(6).backoff( {delay: 30*1000, type:'fixed'} ).save()
265+
return done(new Error('Error placing an order', err));
266+
267+
})
268+
}).catch((errors) => {
269+
logger.error('Error while adding addresses', errors)
270+
if (job) job.attempts(3).backoff( {delay: 60*1000, type:'fixed'} ).save()
271+
return done(new Error('Error while adding addresses', errors));
272+
})
273+
274+
}).catch((errors) => {
275+
logger.error('Error while synchronizing country list', errors)
276+
if (job) job.attempts(3).backoff( {delay: 30*1000, type:'fixed'} ).save()
277+
return done(new Error('Error while syncing country list', errors));
278+
})
279+
247280
}).catch((errors) => {
248-
logger.error('Error while adding addresses', errors)
249-
if (job) job.attempts(3).backoff( {delay: 60*1000, type:'fixed'} ).save()
250-
return done(new Error('Error while adding addresses', errors));
281+
logger.error('Error while adding products', errors)
282+
if (job) job.attempts(3).backoff( {delay: 30*1000, type:'fixed'} ).save()
283+
return done(new Error('Error while adding products', errors));
251284
})
252285

253-
254-
}).catch((errors) => {
255-
logger.error('Error while adding products', errors)
256-
if (job) job.attempts(3).backoff( {delay: 30*1000, type:'fixed'} ).save()
257-
return done(new Error('Error while adding products', errors));
258286
})
259-
260-
})
287+
261288
}
262289

263290
cartIdPrepare.then(processCart).catch((error) => { // cannot create a quote for specific user, so bypass by placing anonymous order

0 commit comments

Comments
 (0)