@@ -7,7 +7,7 @@ const kue = require('kue');
77const queue = kue . createQueue ( ) ;
88const logger = require ( './log' ) ;
99const unirest = require ( 'unirest' ) ;
10-
10+ const countryMapper = require ( '../lib/countrymapper' )
1111const Ajv = require ( 'ajv' ) ; // json validator
1212const ajv = new Ajv ( ) ; // validator
1313const 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