@@ -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' && / \b s t a n d a r d \b / . test ( serviceName ) ) ||
17+ ( carrier === 'loggi' && / \b e x p r e s s \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+ }
1234const isPickup = service => Boolean ( service && ( service . pickup || service . is_pickup || ( service . shipping_line && ( service . shipping_line . pickup || service . shipping_line . is_pickup ) ) || / r e t i r | p i c k u p | p i c k .u p | b u s c a r n a l o j a / i. test ( [ service . label , service . service_code , service . shipping_line && service . shipping_line . title ] . join ( ' ' ) ) ) )
1335const isFreeDelivery = service => serviceCost ( service ) === 0 && ! isPickup ( service )
1436const 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}
6991const 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 }
0 commit comments