Skip to content

Commit b10c49d

Browse files
committed
fix(export-orders): properly checking last status and prevent integration loop
fixes #121 fixes #124
1 parent f25957f commit b10c49d

3 files changed

Lines changed: 55 additions & 60 deletions

File tree

functions/lib/integration/export-order.js

Lines changed: 10 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ const errorHandling = require('../store-api/error-handling')
22
const Tiny = require('../tiny/constructor')
33
const parseOrder = require('./parsers/order-to-tiny/')
44
const parseStatus = require('./parsers/order-to-tiny/status')
5-
const selectTypeUpdate = require('./helpers/select-type-update')
5+
const getOrderUpdateType = require('./helpers/get-order-update-type')
66
const handleJob = require('./handle-job')
77

88
module.exports = ({ appSdk, storeId, auth }, tinyToken, queueEntry, appData, canCreateNew) => {
@@ -17,38 +17,16 @@ module.exports = ({ appSdk, storeId, auth }, tinyToken, queueEntry, appData, can
1717
}
1818
const tiny = new Tiny(tinyToken)
1919
console.log(`#${storeId} ${orderId} searching order ${order.number}`)
20-
const findLatestUpdate = order => {
21-
const fulfillments = order.fulfillments
22-
const paymentsHistory = order.payments_history
23-
let latestFulfillment, latestPayment
24-
if (Array.isArray(fulfillments)) {
25-
latestFulfillment = fulfillments.reduce((a, b) => (a.date_time > b.date_time ? a : b))
26-
}
27-
if (Array.isArray(paymentsHistory)) {
28-
latestPayment = paymentsHistory.reduce((a, b) => (a.date_time > b.date_time ? a : b))
29-
}
30-
if (latestFulfillment && latestPayment) {
31-
return latestFulfillment.date_time > latestPayment.date_time ? latestFulfillment : latestPayment
32-
} else if (latestFulfillment && !latestPayment) {
33-
return latestFulfillment
34-
} else if (!latestFulfillment && latestPayment) {
35-
return latestPayment
36-
}
37-
}
38-
const latestUpdateStatus = findLatestUpdate(order)
39-
if (selectTypeUpdate(latestStatusUpdate) === 'fulfillment') {
40-
const checkFulfillmentFromTiny = order => {
41-
const fulfillmentStatus = order.fulfillment_status && order.fulfillment_status.current
42-
if (fulfillmentStatus && Array.isArray(order.fulfillments)) {
43-
return Boolean(order.fulfillments.find(({ status, flags }) => {
44-
return status === fulfillmentStatus && flags && flags.includes('from-tiny')
45-
}))
20+
if (getOrderUpdateType(order) === 'fulfillment') {
21+
const fulfillmentStatus = order.fulfillment_status && order.fulfillment_status.current
22+
if (fulfillmentStatus && Array.isArray(order.fulfillments)) {
23+
const fulfillmentFromTiny = order.fulfillments.find(({ status, flags }) => {
24+
return status === fulfillmentStatus && flags && flags.includes('from-tiny')
25+
})
26+
if (fulfillmentFromTiny) {
27+
console.log(`#${storeId} ${orderId} skipped to not send status came by tiny`)
28+
return null
4629
}
47-
return false
48-
}
49-
if (checkFulfillmentFromTiny(order)) {
50-
console.log(`#${storeId} ${orderId} skipped to not send status came by tiny`)
51-
return null
5230
}
5331
}
5432

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
module.exports = order => {
2+
let latestUpdate
3+
const fulfillments = order.fulfillments
4+
const paymentsHistory = order.payments_history
5+
let latestFulfillment, latestPayment
6+
if (Array.isArray(fulfillments)) {
7+
latestFulfillment = fulfillments.reduce((a, b) => (a.date_time > b.date_time ? a : b))
8+
}
9+
if (Array.isArray(paymentsHistory)) {
10+
latestPayment = paymentsHistory.reduce((a, b) => (a.date_time > b.date_time ? a : b))
11+
}
12+
if (latestFulfillment && latestPayment) {
13+
latestUpdate = latestFulfillment.date_time > latestPayment.date_time
14+
? latestFulfillment : latestPayment
15+
} else if (latestFulfillment) {
16+
latestUpdate = latestFulfillment
17+
} else if (latestPayment) {
18+
latestUpdate = latestPayment
19+
} else {
20+
return null
21+
}
22+
switch (latestUpdate.status) {
23+
case 'pending':
24+
case 'under_analysis':
25+
case 'unknown':
26+
case 'authorized':
27+
case 'partially_paid':
28+
case 'voided':
29+
case 'refunded':
30+
case 'in_dispute':
31+
case 'unauthorized':
32+
case 'paid':
33+
return 'financial'
34+
case 'in_production':
35+
case 'in_separation':
36+
case 'invoice_issued':
37+
case 'ready_for_shipping':
38+
case 'shipped':
39+
case 'partially_shipped':
40+
case 'delivered':
41+
case 'returned':
42+
return 'fulfillment'
43+
}
44+
return null
45+
}

functions/lib/integration/helpers/select-type-update.js

Lines changed: 0 additions & 28 deletions
This file was deleted.

0 commit comments

Comments
 (0)