Skip to content

Commit 446f0d1

Browse files
committed
fix: set two-day posting for Jet and Loggi Express
1 parent 291f6c4 commit 446f0d1

2 files changed

Lines changed: 49 additions & 2 deletions

File tree

template/js/custom-js/freight/core.js

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,28 @@ const serviceCost = service => {
99
if (!line) return null
1010
return cents(line.total_price !== undefined ? line.total_price : line.price)
1111
}
12+
const normalizeServiceText = value => String(value || '').trim().toLowerCase()
13+
const hasTwoDayPostingDeadline = service => {
14+
const carrier = normalizeServiceText(service && service.carrier)
15+
const serviceName = normalizeServiceText(service && [service.service_name, service.label, service.service_code].filter(Boolean).join(' '))
16+
return (carrier === 'jet' && /\bstandard\b/.test(serviceName)) ||
17+
(carrier === 'loggi' && /\bexpress\b/.test(serviceName))
18+
}
19+
const applyPostingDeadline = service => {
20+
if (!hasTwoDayPostingDeadline(service) || !service.shipping_line) return service
21+
return {
22+
...service,
23+
shipping_line: {
24+
...service.shipping_line,
25+
posting_deadline: {
26+
...(service.shipping_line.posting_deadline || {}),
27+
days: 2,
28+
working_days: true,
29+
after_approval: true
30+
}
31+
}
32+
}
33+
}
1234
const isPickup = service => Boolean(service && (service.pickup || service.is_pickup || (service.shipping_line && (service.shipping_line.pickup || service.shipping_line.is_pickup)) || /retir|pickup|pick.up|buscar na loja/i.test([service.label, service.service_code, service.shipping_line && service.shipping_line.title].join(' '))))
1335
const isFreeDelivery = service => serviceCost(service) === 0 && !isPickup(service)
1436
const reduceItem = item => {
@@ -35,7 +57,7 @@ const parseQuote = (results, skipIds = []) => {
3557
if (!Array.isArray(response.shipping_services)) return
3658
valid = true
3759
response.shipping_services.forEach(service => {
38-
const candidate = { ...service, app_id: result.app_id }
60+
const candidate = applyPostingDeadline({ ...service, app_id: result.app_id })
3961
const cost = serviceCost(candidate)
4062
if (cost !== null && cost >= 0) services.push(candidate)
4163
})
@@ -68,4 +90,4 @@ const quantityFor = (gap, unitPrice, minimum, available) => {
6890
}
6991
const rank = (a, b) => Number(b.confirmed) - Number(a.confirmed) || Number(b.completes) - Number(a.completes) || a.additional - b.additional || b.relevance - a.relevance || a.key.localeCompare(b.key)
7092

71-
export default { cents, zip, money, subtotal, serviceKey, serviceCost, isPickup, isFreeDelivery, reduceItem, shippingItem, fingerprint, parseQuote, chooseService, canRecommend, quantityFor, rank }
93+
export default { cents, zip, money, subtotal, serviceKey, serviceCost, hasTwoDayPostingDeadline, applyPostingDeadline, isPickup, isFreeDelivery, reduceItem, shippingItem, fingerprint, parseQuote, chooseService, canRecommend, quantityFor, rank }

tests/freight.test.cjs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,31 @@ test('invalid app response and skipped app cannot promise a threshold', () => {
5151
assert.equal(core.parseQuote(results([service('PAC', 0)]), [1]).free, null)
5252
assert.equal(core.parseQuote([{ validated: true, response: {} }]).services.length, 0)
5353
})
54+
test('posting deadline is two working days only for JeT Standard and Loggi Express', () => {
55+
const quoted = (carrier, name) => service(name, 10, {
56+
carrier,
57+
service_name: name,
58+
shipping_line: {
59+
price: 10,
60+
total_price: 10,
61+
delivery_time: { days: 4, working_days: true },
62+
posting_deadline: { days: 1, working_days: true, after_approval: true }
63+
}
64+
})
65+
const rawJet = quoted('JeT', 'Standard')
66+
const parsed = core.parseQuote(results([
67+
rawJet,
68+
quoted('Loggi', 'Loggi Express'),
69+
quoted('Loggi', 'Loggi Ponto'),
70+
quoted('Correios', 'Sedex')
71+
])).services
72+
const deadline = name => parsed.find(item => item.service_name === name).shipping_line.posting_deadline.days
73+
assert.equal(deadline('Standard'), 2)
74+
assert.equal(deadline('Loggi Express'), 2)
75+
assert.equal(deadline('Loggi Ponto'), 1)
76+
assert.equal(deadline('Sedex'), 1)
77+
assert.equal(rawJet.shipping_line.posting_deadline.days, 1)
78+
})
5479
test('explicit express choice survives sorting, free availability and recalculation', () => {
5580
const express = service('Sedex', 20)
5681
const free = service('PAC', 0)

0 commit comments

Comments
 (0)