addio-admin-sdk 1.7.89 → 1.7.90

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (558) hide show
  1. package/.babelrc +17 -17
  2. package/.env.dev +14 -14
  3. package/.github/workflows/publish_coverage.yam_ +69 -69
  4. package/addio-sdk-doc.md +1473 -1473
  5. package/changelog.md +537 -537
  6. package/dist/Interfaces/Address/index.d.ts +21 -21
  7. package/dist/Interfaces/Address/index.js +16 -16
  8. package/dist/Interfaces/Algolia/index.d.ts +164 -164
  9. package/dist/Interfaces/Algolia/index.js +2 -2
  10. package/dist/Interfaces/Attachement/index.d.ts +5 -5
  11. package/dist/Interfaces/Attachement/index.js +2 -2
  12. package/dist/Interfaces/Attribute/index.d.ts +52 -52
  13. package/dist/Interfaces/Attribute/index.js +10 -10
  14. package/dist/Interfaces/BGJob/index.d.ts +56 -56
  15. package/dist/Interfaces/BGJob/index.js +25 -25
  16. package/dist/Interfaces/BaseClass/index.d.ts +8 -8
  17. package/dist/Interfaces/BaseClass/index.js +2 -2
  18. package/dist/Interfaces/Blog/IBlogArticle.d.ts +18 -18
  19. package/dist/Interfaces/Blog/IBlogArticle.js +2 -2
  20. package/dist/Interfaces/Blog/IBlogAuthor.d.ts +7 -7
  21. package/dist/Interfaces/Blog/IBlogAuthor.js +2 -2
  22. package/dist/Interfaces/Blog/IBlogCategory.d.ts +9 -9
  23. package/dist/Interfaces/Blog/IBlogCategory.js +2 -2
  24. package/dist/Interfaces/Blog/IBlogComment.d.ts +13 -13
  25. package/dist/Interfaces/Blog/IBlogComment.js +2 -2
  26. package/dist/Interfaces/Blog/IBlogKeywords.d.ts +9 -9
  27. package/dist/Interfaces/Blog/IBlogKeywords.js +2 -2
  28. package/dist/Interfaces/Booking/index.d.ts +74 -74
  29. package/dist/Interfaces/Booking/index.js +17 -17
  30. package/dist/Interfaces/Brand/index.d.ts +15 -15
  31. package/dist/Interfaces/Brand/index.js +2 -2
  32. package/dist/Interfaces/CMS/index.d.ts +25 -25
  33. package/dist/Interfaces/CMS/index.js +2 -2
  34. package/dist/Interfaces/Cart/IElavonPayload.d.ts +93 -93
  35. package/dist/Interfaces/Cart/IElavonPayload.js +17 -17
  36. package/dist/Interfaces/Cart/IPandaPayload.d.ts +64 -64
  37. package/dist/Interfaces/Cart/IPandaPayload.js +18 -18
  38. package/dist/Interfaces/Cart/IPaymentCard.d.ts +22 -22
  39. package/dist/Interfaces/Cart/IPaymentCard.js +44 -44
  40. package/dist/Interfaces/Cart/IPaypalPayload.d.ts +9 -9
  41. package/dist/Interfaces/Cart/IPaypalPayload.js +2 -2
  42. package/dist/Interfaces/Cart/IPaysafePayload.d.ts +72 -72
  43. package/dist/Interfaces/Cart/IPaysafePayload.js +2 -2
  44. package/dist/Interfaces/Cart/IStripePayload.d.ts +66 -66
  45. package/dist/Interfaces/Cart/IStripePayload.js +2 -2
  46. package/dist/Interfaces/Cart/index.d.ts +425 -425
  47. package/dist/Interfaces/Cart/index.js +192 -192
  48. package/dist/Interfaces/Catalogue/index.d.ts +68 -68
  49. package/dist/Interfaces/Catalogue/index.js +37 -37
  50. package/dist/Interfaces/Category/index.d.ts +33 -33
  51. package/dist/Interfaces/Category/index.js +2 -2
  52. package/dist/Interfaces/Chart/index.d.ts +11 -11
  53. package/dist/Interfaces/Chart/index.js +2 -2
  54. package/dist/Interfaces/Class/index.d.ts +8 -8
  55. package/dist/Interfaces/Class/index.js +2 -2
  56. package/dist/Interfaces/Consent/index.d.ts +6 -6
  57. package/dist/Interfaces/Consent/index.js +2 -2
  58. package/dist/Interfaces/Context/IContextProps.d.ts +4 -4
  59. package/dist/Interfaces/Context/IContextProps.js +2 -2
  60. package/dist/Interfaces/Context/IContextState.d.ts +15 -15
  61. package/dist/Interfaces/Context/IContextState.js +2 -2
  62. package/dist/Interfaces/Customer/ICustomerBadge.d.ts +2 -2
  63. package/dist/Interfaces/Customer/ICustomerBadge.js +2 -2
  64. package/dist/Interfaces/Customer/ICustomerRating.d.ts +10 -10
  65. package/dist/Interfaces/Customer/ICustomerRating.js +2 -2
  66. package/dist/Interfaces/Customer/IStoreCredit.d.ts +12 -12
  67. package/dist/Interfaces/Customer/IStoreCredit.js +2 -2
  68. package/dist/Interfaces/Customer/index.d.ts +97 -97
  69. package/dist/Interfaces/Customer/index.js +141 -141
  70. package/dist/Interfaces/Declination/index.d.ts +114 -114
  71. package/dist/Interfaces/Declination/index.js +60 -60
  72. package/dist/Interfaces/Document/index.d.ts +8 -8
  73. package/dist/Interfaces/Document/index.js +2 -2
  74. package/dist/Interfaces/Elastic/index.d.ts +89 -89
  75. package/dist/Interfaces/Elastic/index.js +2 -2
  76. package/dist/Interfaces/Email/CustomGR/I3DPrintEmail.d.ts +11 -11
  77. package/dist/Interfaces/Email/CustomGR/I3DPrintEmail.js +2 -2
  78. package/dist/Interfaces/Email/CustomGR/IBorrowToolsEmail.d.ts +15 -15
  79. package/dist/Interfaces/Email/CustomGR/IBorrowToolsEmail.js +2 -2
  80. package/dist/Interfaces/Email/CustomGR/IPickupMaterialsEmail.d.ts +12 -12
  81. package/dist/Interfaces/Email/CustomGR/IPickupMaterialsEmail.js +2 -2
  82. package/dist/Interfaces/Email/CustomGR/IPreMeetingFormEmail.d.ts +36 -36
  83. package/dist/Interfaces/Email/CustomGR/IPreMeetingFormEmail.js +2 -2
  84. package/dist/Interfaces/Email/CustomGR/ISponsorRequestEmail.d.ts +12 -12
  85. package/dist/Interfaces/Email/CustomGR/ISponsorRequestEmail.js +2 -2
  86. package/dist/Interfaces/Email/CustomGR/ITransportEmail.d.ts +12 -12
  87. package/dist/Interfaces/Email/CustomGR/ITransportEmail.js +2 -2
  88. package/dist/Interfaces/Email/CustomGR/ITransportQuoteEmail.d.ts +12 -12
  89. package/dist/Interfaces/Email/CustomGR/ITransportQuoteEmail.js +2 -2
  90. package/dist/Interfaces/Email/CustomGR/IVegetalsEmail.d.ts +16 -16
  91. package/dist/Interfaces/Email/CustomGR/IVegetalsEmail.js +2 -2
  92. package/dist/Interfaces/Email/CustomGR/IWishlistEmail.d.ts +15 -15
  93. package/dist/Interfaces/Email/CustomGR/IWishlistEmail.js +2 -2
  94. package/dist/Interfaces/Email/IAbandonnedCartEmail.d.ts +29 -29
  95. package/dist/Interfaces/Email/IAbandonnedCartEmail.js +2 -2
  96. package/dist/Interfaces/Email/IAccountConfirmationEmail.d.ts +22 -22
  97. package/dist/Interfaces/Email/IAccountConfirmationEmail.js +2 -2
  98. package/dist/Interfaces/Email/IApplicationEmail.d.ts +19 -19
  99. package/dist/Interfaces/Email/IApplicationEmail.js +2 -2
  100. package/dist/Interfaces/Email/IBackInStockEmail.d.ts +21 -21
  101. package/dist/Interfaces/Email/IBackInStockEmail.js +2 -2
  102. package/dist/Interfaces/Email/IContactEmail.d.ts +20 -20
  103. package/dist/Interfaces/Email/IContactEmail.js +2 -2
  104. package/dist/Interfaces/Email/ICustomerBookingAdminEmail.d.ts +15 -15
  105. package/dist/Interfaces/Email/ICustomerBookingAdminEmail.js +2 -2
  106. package/dist/Interfaces/Email/ICustomerBookingEmail.d.ts +14 -14
  107. package/dist/Interfaces/Email/ICustomerBookingEmail.js +2 -2
  108. package/dist/Interfaces/Email/IEmail.d.ts +20 -20
  109. package/dist/Interfaces/Email/IEmail.js +56 -56
  110. package/dist/Interfaces/Email/IOrderConfirmationEmail.d.ts +47 -47
  111. package/dist/Interfaces/Email/IOrderConfirmationEmail.js +2 -2
  112. package/dist/Interfaces/Email/IPasswordResetEmail.d.ts +17 -17
  113. package/dist/Interfaces/Email/IPasswordResetEmail.js +2 -2
  114. package/dist/Interfaces/Email/IPhotoShootEmail.d.ts +14 -14
  115. package/dist/Interfaces/Email/IPhotoShootEmail.js +2 -2
  116. package/dist/Interfaces/Email/IPickupConfirmation.d.ts +23 -23
  117. package/dist/Interfaces/Email/IPickupConfirmation.js +2 -2
  118. package/dist/Interfaces/Email/IShippingConfirmation.d.ts +23 -23
  119. package/dist/Interfaces/Email/IShippingConfirmation.js +2 -2
  120. package/dist/Interfaces/Email/IWelcomeEmail.d.ts +19 -19
  121. package/dist/Interfaces/Email/IWelcomeEmail.js +2 -2
  122. package/dist/Interfaces/ExportSchema/index.d.ts +7 -7
  123. package/dist/Interfaces/ExportSchema/index.js +2 -2
  124. package/dist/Interfaces/ExternalService/BaseExternalService.d.ts +12 -12
  125. package/dist/Interfaces/ExternalService/BaseExternalService.js +2 -2
  126. package/dist/Interfaces/ExternalService/ExternalProductsService.d.ts +4 -4
  127. package/dist/Interfaces/ExternalService/ExternalProductsService.js +2 -2
  128. package/dist/Interfaces/ExternalService/index.d.ts +9 -9
  129. package/dist/Interfaces/ExternalService/index.js +2 -2
  130. package/dist/Interfaces/FirstOrderTracking/index.d.ts +5 -5
  131. package/dist/Interfaces/FirstOrderTracking/index.js +2 -2
  132. package/dist/Interfaces/G2/index.d.ts +556 -556
  133. package/dist/Interfaces/G2/index.js +36 -36
  134. package/dist/Interfaces/Indexed/Product/IIndexedLastSavedProduct.d.ts +20 -20
  135. package/dist/Interfaces/Indexed/Product/IIndexedLastSavedProduct.js +2 -2
  136. package/dist/Interfaces/Indexed/Product/index.d.ts +97 -97
  137. package/dist/Interfaces/Indexed/Product/index.js +212 -212
  138. package/dist/Interfaces/Inventory/index.d.ts +19 -19
  139. package/dist/Interfaces/Inventory/index.js +8 -8
  140. package/dist/Interfaces/Invoice/index.d.ts +4 -4
  141. package/dist/Interfaces/Invoice/index.js +2 -2
  142. package/dist/Interfaces/MarketplacePublication/MarketplaceOrderData.d.ts +3 -3
  143. package/dist/Interfaces/MarketplacePublication/MarketplaceOrderData.js +2 -2
  144. package/dist/Interfaces/MarketplacePublication/index.d.ts +23 -23
  145. package/dist/Interfaces/MarketplacePublication/index.js +22 -22
  146. package/dist/Interfaces/Menu/index.d.ts +23 -23
  147. package/dist/Interfaces/Menu/index.js +10 -10
  148. package/dist/Interfaces/Note/index.d.ts +10 -10
  149. package/dist/Interfaces/Note/index.js +7 -7
  150. package/dist/Interfaces/Operations/ICreatedBy.d.ts +6 -6
  151. package/dist/Interfaces/Operations/ICreatedBy.js +2 -2
  152. package/dist/Interfaces/Operations/IUpdate.d.ts +5 -5
  153. package/dist/Interfaces/Operations/IUpdate.js +2 -2
  154. package/dist/Interfaces/Order/index.d.ts +4 -4
  155. package/dist/Interfaces/Order/index.js +2 -2
  156. package/dist/Interfaces/Org/IRelUser.d.ts +9 -9
  157. package/dist/Interfaces/Org/IRelUser.js +2 -2
  158. package/dist/Interfaces/Org/index.d.ts +29 -29
  159. package/dist/Interfaces/Org/index.js +12 -12
  160. package/dist/Interfaces/Payment/index.d.ts +13 -13
  161. package/dist/Interfaces/Payment/index.js +2 -2
  162. package/dist/Interfaces/Product/IAttributeFamily.d.ts +6 -6
  163. package/dist/Interfaces/Product/IAttributeFamily.js +2 -2
  164. package/dist/Interfaces/Product/IImportProduct.d.ts +42 -42
  165. package/dist/Interfaces/Product/IImportProduct.js +791 -791
  166. package/dist/Interfaces/Product/IInventoryItem.d.ts +84 -84
  167. package/dist/Interfaces/Product/IInventoryItem.js +36 -36
  168. package/dist/Interfaces/Product/IPricing.d.ts +177 -177
  169. package/dist/Interfaces/Product/IPricing.js +174 -174
  170. package/dist/Interfaces/Product/index.d.ts +127 -127
  171. package/dist/Interfaces/Product/index.js +56 -56
  172. package/dist/Interfaces/ProductAttribute/index.d.ts +11 -11
  173. package/dist/Interfaces/ProductAttribute/index.js +2 -2
  174. package/dist/Interfaces/PromiseToPurchase/BankType.d.ts +41 -41
  175. package/dist/Interfaces/PromiseToPurchase/BankType.js +41 -41
  176. package/dist/Interfaces/PromiseToPurchase/IIndexedBankUsed.d.ts +33 -33
  177. package/dist/Interfaces/PromiseToPurchase/IIndexedBankUsed.js +15 -15
  178. package/dist/Interfaces/PromiseToPurchase/IIndexedCustomerPromiseToPurchase.d.ts +19 -19
  179. package/dist/Interfaces/PromiseToPurchase/IIndexedCustomerPromiseToPurchase.js +2 -2
  180. package/dist/Interfaces/PromiseToPurchase/index.d.ts +50 -50
  181. package/dist/Interfaces/PromiseToPurchase/index.js +13 -13
  182. package/dist/Interfaces/PurchaseOrder/index.d.ts +17 -17
  183. package/dist/Interfaces/PurchaseOrder/index.js +2 -2
  184. package/dist/Interfaces/Query/IBrandQueryOptions.d.ts +11 -11
  185. package/dist/Interfaces/Query/IBrandQueryOptions.js +2 -2
  186. package/dist/Interfaces/Query/ICategoryQueryOptions.d.ts +11 -11
  187. package/dist/Interfaces/Query/ICategoryQueryOptions.js +2 -2
  188. package/dist/Interfaces/Query/IProductQueryOptions.d.ts +16 -16
  189. package/dist/Interfaces/Query/IProductQueryOptions.js +2 -2
  190. package/dist/Interfaces/Quote/index.d.ts +5 -5
  191. package/dist/Interfaces/Quote/index.js +2 -2
  192. package/dist/Interfaces/Refunds/index.d.ts +106 -106
  193. package/dist/Interfaces/Refunds/index.js +2 -2
  194. package/dist/Interfaces/Rules/IDiscountRule.d.ts +137 -137
  195. package/dist/Interfaces/Rules/IDiscountRule.js +95 -95
  196. package/dist/Interfaces/Schedule/index.d.ts +48 -48
  197. package/dist/Interfaces/Schedule/index.js +2 -2
  198. package/dist/Interfaces/Services/IAddServiceResponse.d.ts +4 -4
  199. package/dist/Interfaces/Services/IAddServiceResponse.js +2 -2
  200. package/dist/Interfaces/Services/IService.d.ts +12 -12
  201. package/dist/Interfaces/Services/IService.js +2 -2
  202. package/dist/Interfaces/Services/IServiceSecret.d.ts +8 -8
  203. package/dist/Interfaces/Services/IServiceSecret.js +2 -2
  204. package/dist/Interfaces/Shipping/Shipstation/carriers.d.ts +10 -10
  205. package/dist/Interfaces/Shipping/Shipstation/carriers.js +2 -2
  206. package/dist/Interfaces/Shipping/Shipstation/order.d.ts +227 -227
  207. package/dist/Interfaces/Shipping/Shipstation/order.js +2 -2
  208. package/dist/Interfaces/Shipping/Shipstation/quote.d.ts +31 -31
  209. package/dist/Interfaces/Shipping/Shipstation/quote.js +2 -2
  210. package/dist/Interfaces/Shipping/Shiptime/order.d.ts +54 -54
  211. package/dist/Interfaces/Shipping/Shiptime/order.js +48 -48
  212. package/dist/Interfaces/Shipping/Shiptime/quote.d.ts +111 -111
  213. package/dist/Interfaces/Shipping/Shiptime/quote.js +2 -2
  214. package/dist/Interfaces/Slider/GR.d.ts +114 -114
  215. package/dist/Interfaces/Slider/GR.js +271 -271
  216. package/dist/Interfaces/Slider/index.d.ts +30 -30
  217. package/dist/Interfaces/Slider/index.js +2 -2
  218. package/dist/Interfaces/Space/IExternalService.d.ts +52 -52
  219. package/dist/Interfaces/Space/IExternalService.js +43 -43
  220. package/dist/Interfaces/Space/IMember.d.ts +16 -16
  221. package/dist/Interfaces/Space/IMember.js +9 -9
  222. package/dist/Interfaces/Space/index.d.ts +390 -390
  223. package/dist/Interfaces/Space/index.js +160 -160
  224. package/dist/Interfaces/Specials/gr.d.ts +61 -61
  225. package/dist/Interfaces/Specials/gr.js +2 -2
  226. package/dist/Interfaces/StockNotification/index.d.ts +7 -7
  227. package/dist/Interfaces/StockNotification/index.js +2 -2
  228. package/dist/Interfaces/Store/index.d.ts +62 -62
  229. package/dist/Interfaces/Store/index.js +27 -27
  230. package/dist/Interfaces/Supplier/ICommand.d.ts +11 -11
  231. package/dist/Interfaces/Supplier/ICommand.js +2 -2
  232. package/dist/Interfaces/Supplier/index.d.ts +36 -36
  233. package/dist/Interfaces/Supplier/index.js +24 -24
  234. package/dist/Interfaces/TCG/index.d.ts +110 -110
  235. package/dist/Interfaces/TCG/index.js +27 -27
  236. package/dist/Interfaces/Tag/index.d.ts +18 -18
  237. package/dist/Interfaces/Tag/index.js +2 -2
  238. package/dist/Interfaces/Tax/index.d.ts +13 -13
  239. package/dist/Interfaces/Tax/index.js +2 -2
  240. package/dist/Interfaces/TransferRequest/index.d.ts +103 -103
  241. package/dist/Interfaces/TransferRequest/index.js +43 -43
  242. package/dist/Interfaces/Translation/index.d.ts +8 -8
  243. package/dist/Interfaces/Translation/index.js +5 -5
  244. package/dist/Interfaces/Update/index.d.ts +10 -10
  245. package/dist/Interfaces/Update/index.js +2 -2
  246. package/dist/Interfaces/User/IUser.d.ts +65 -65
  247. package/dist/Interfaces/User/IUser.js +8 -8
  248. package/dist/Interfaces/Version/index.d.ts +11 -11
  249. package/dist/Interfaces/Version/index.js +2 -2
  250. package/dist/Interfaces/Wishlist/index.d.ts +7 -7
  251. package/dist/Interfaces/Wishlist/index.js +2 -2
  252. package/dist/constants/Interfaces/IBaseApi.d.ts +15 -15
  253. package/dist/constants/Interfaces/IBaseApi.js +2 -2
  254. package/dist/constants/Interfaces/IEndpointResult.d.ts +9 -9
  255. package/dist/constants/Interfaces/IEndpointResult.js +2 -2
  256. package/dist/constants/enums.d.ts +6 -6
  257. package/dist/constants/enums.js +10 -10
  258. package/dist/constants/services.d.ts +2 -2
  259. package/dist/constants/services.js +111 -111
  260. package/dist/constants/version.d.ts +2 -2
  261. package/dist/constants/version.js +5 -5
  262. package/dist/index.d.ts +32 -32
  263. package/dist/index.js +242 -242
  264. package/dist/lib/Attribute/index.d.ts +14 -14
  265. package/dist/lib/Attribute/index.js +143 -143
  266. package/dist/lib/BGJob/index.d.ts +9 -9
  267. package/dist/lib/BGJob/index.js +212 -212
  268. package/dist/lib/BackgroundWorker/index.d.ts +34 -34
  269. package/dist/lib/BackgroundWorker/index.js +59 -59
  270. package/dist/lib/Blog/BlogArticle.d.ts +5 -5
  271. package/dist/lib/Blog/BlogArticle.js +10 -10
  272. package/dist/lib/Blog/BlogAuthor.d.ts +5 -5
  273. package/dist/lib/Blog/BlogAuthor.js +10 -10
  274. package/dist/lib/Blog/BlogCategory.d.ts +5 -5
  275. package/dist/lib/Blog/BlogCategory.js +10 -10
  276. package/dist/lib/Blog/BlogKeyword.d.ts +5 -5
  277. package/dist/lib/Blog/BlogKeyword.js +10 -10
  278. package/dist/lib/Booking/index.d.ts +70 -70
  279. package/dist/lib/Booking/index.js +576 -576
  280. package/dist/lib/Brand/index.d.ts +17 -17
  281. package/dist/lib/Brand/index.js +113 -113
  282. package/dist/lib/Cart/index.d.ts +206 -206
  283. package/dist/lib/Cart/index.js +3165 -3164
  284. package/dist/lib/Cart/index.js.map +1 -1
  285. package/dist/lib/Catalogue/index.d.ts +9 -9
  286. package/dist/lib/Catalogue/index.js +69 -69
  287. package/dist/lib/Category/index.d.ts +27 -27
  288. package/dist/lib/Category/index.js +190 -190
  289. package/dist/lib/Class/index.d.ts +12 -12
  290. package/dist/lib/Class/index.js +58 -58
  291. package/dist/lib/Consent/index.d.ts +4 -4
  292. package/dist/lib/Consent/index.js +29 -29
  293. package/dist/lib/Customer/index.d.ts +11 -11
  294. package/dist/lib/Customer/index.js +68 -68
  295. package/dist/lib/Declination/index.d.ts +9 -9
  296. package/dist/lib/Declination/index.js +24 -24
  297. package/dist/lib/Discount/index.d.ts +18 -18
  298. package/dist/lib/Discount/index.js +470 -470
  299. package/dist/lib/ElasticSearch/index.d.ts +8 -8
  300. package/dist/lib/ElasticSearch/index.js +45 -45
  301. package/dist/lib/Elavon/index.d.ts +18 -18
  302. package/dist/lib/Elavon/index.js +130 -130
  303. package/dist/lib/Email/AbandonedCartEmail.d.ts +8 -8
  304. package/dist/lib/Email/AbandonedCartEmail.js +16 -16
  305. package/dist/lib/Email/AccountConfirmationEmail.d.ts +11 -11
  306. package/dist/lib/Email/AccountConfirmationEmail.js +22 -22
  307. package/dist/lib/Email/AdminOrderConfirmationEmail.d.ts +8 -8
  308. package/dist/lib/Email/AdminOrderConfirmationEmail.js +16 -16
  309. package/dist/lib/Email/ApplicationEmail.d.ts +8 -8
  310. package/dist/lib/Email/ApplicationEmail.js +16 -16
  311. package/dist/lib/Email/BackInStockEmail.d.ts +8 -8
  312. package/dist/lib/Email/BackInStockEmail.js +16 -16
  313. package/dist/lib/Email/ContactEmail.d.ts +8 -8
  314. package/dist/lib/Email/ContactEmail.js +16 -16
  315. package/dist/lib/Email/CustomerBookingAdminEmail.d.ts +8 -8
  316. package/dist/lib/Email/CustomerBookingAdminEmail.js +16 -16
  317. package/dist/lib/Email/CustomerBookingEmail.d.ts +8 -8
  318. package/dist/lib/Email/CustomerBookingEmail.js +16 -16
  319. package/dist/lib/Email/OrderConfirmationEmail.d.ts +8 -8
  320. package/dist/lib/Email/OrderConfirmationEmail.js +16 -16
  321. package/dist/lib/Email/OrderDenounciationEmail.d.ts +8 -8
  322. package/dist/lib/Email/OrderDenounciationEmail.js +16 -16
  323. package/dist/lib/Email/OrderSampleEmail.d.ts +8 -8
  324. package/dist/lib/Email/OrderSampleEmail.js +16 -16
  325. package/dist/lib/Email/OtherTypeEmails.d.ts +8 -8
  326. package/dist/lib/Email/OtherTypeEmails.js +19 -19
  327. package/dist/lib/Email/PasswordResetEmail.d.ts +8 -8
  328. package/dist/lib/Email/PasswordResetEmail.js +16 -16
  329. package/dist/lib/Email/PhotoShootEmail.d.ts +8 -8
  330. package/dist/lib/Email/PhotoShootEmail.js +16 -16
  331. package/dist/lib/Email/PickUpConfirmation.d.ts +8 -8
  332. package/dist/lib/Email/PickUpConfirmation.js +16 -16
  333. package/dist/lib/Email/ShippingConfirmation.d.ts +8 -8
  334. package/dist/lib/Email/ShippingConfirmation.js +16 -16
  335. package/dist/lib/Email/WelcomeEmail.d.ts +8 -8
  336. package/dist/lib/Email/WelcomeEmail.js +16 -16
  337. package/dist/lib/Email/index.d.ts +8 -8
  338. package/dist/lib/Email/index.js +23 -23
  339. package/dist/lib/ExternalService/Ebay.d.ts +62 -62
  340. package/dist/lib/ExternalService/Ebay.js +102 -102
  341. package/dist/lib/ExternalService/index.d.ts +5 -5
  342. package/dist/lib/ExternalService/index.js +10 -10
  343. package/dist/lib/FirstOrderTracking/index.d.ts +5 -5
  344. package/dist/lib/FirstOrderTracking/index.js +10 -10
  345. package/dist/lib/Indexed/IndexedCart.d.ts +13 -13
  346. package/dist/lib/Indexed/IndexedCart.js +86 -86
  347. package/dist/lib/Indexed/Product.d.ts +17 -17
  348. package/dist/lib/Indexed/Product.js +48 -48
  349. package/dist/lib/Inventory/index.d.ts +49 -49
  350. package/dist/lib/Inventory/index.js +314 -314
  351. package/dist/lib/Invoice/index.d.ts +5 -5
  352. package/dist/lib/Invoice/index.js +10 -10
  353. package/dist/lib/MarketplacePublication/index.d.ts +9 -9
  354. package/dist/lib/MarketplacePublication/index.js +118 -118
  355. package/dist/lib/Menu/index.d.ts +11 -11
  356. package/dist/lib/Menu/index.js +105 -105
  357. package/dist/lib/MongoDB/BaseAPI.d.ts +18 -18
  358. package/dist/lib/MongoDB/BaseAPI.js +200 -200
  359. package/dist/lib/Note/index.d.ts +4 -4
  360. package/dist/lib/Note/index.js +6 -6
  361. package/dist/lib/Order/index.d.ts +7 -7
  362. package/dist/lib/Order/index.js +33 -33
  363. package/dist/lib/Org/index.d.ts +27 -27
  364. package/dist/lib/Org/index.js +175 -175
  365. package/dist/lib/PandaPay/index.d.ts +16 -16
  366. package/dist/lib/PandaPay/index.js +170 -170
  367. package/dist/lib/Paysafe/index.d.ts +11 -11
  368. package/dist/lib/Paysafe/index.js +40 -40
  369. package/dist/lib/Product/index.d.ts +154 -154
  370. package/dist/lib/Product/index.js +793 -793
  371. package/dist/lib/ProductAttribute/index.d.ts +15 -15
  372. package/dist/lib/ProductAttribute/index.js +45 -45
  373. package/dist/lib/PromiseToPurchase/index.d.ts +37 -37
  374. package/dist/lib/PromiseToPurchase/index.js +264 -264
  375. package/dist/lib/PurchaseOrder/index.d.ts +9 -9
  376. package/dist/lib/PurchaseOrder/index.js +16 -16
  377. package/dist/lib/Schedule/index.d.ts +5 -5
  378. package/dist/lib/Schedule/index.js +12 -12
  379. package/dist/lib/Service/Enum/ServiceEnum.d.ts +3 -3
  380. package/dist/lib/Service/Enum/ServiceEnum.js +7 -7
  381. package/dist/lib/Service/index.d.ts +5 -5
  382. package/dist/lib/Service/index.js +13 -13
  383. package/dist/lib/Shipment/index.d.ts +28 -28
  384. package/dist/lib/Shipment/index.js +357 -357
  385. package/dist/lib/Slider/index.d.ts +16 -16
  386. package/dist/lib/Slider/index.js +113 -113
  387. package/dist/lib/Space/index.d.ts +883 -883
  388. package/dist/lib/Space/index.js +5134 -5134
  389. package/dist/lib/StockNotification/index.d.ts +4 -4
  390. package/dist/lib/StockNotification/index.js +6 -6
  391. package/dist/lib/Store/index.d.ts +5 -5
  392. package/dist/lib/Store/index.js +12 -12
  393. package/dist/lib/Supplier/Command.d.ts +5 -5
  394. package/dist/lib/Supplier/Command.js +10 -10
  395. package/dist/lib/Supplier/index.d.ts +25 -25
  396. package/dist/lib/Supplier/index.js +22 -22
  397. package/dist/lib/Tags/index.d.ts +6 -6
  398. package/dist/lib/Tags/index.js +21 -21
  399. package/dist/lib/Tax/index.d.ts +8 -8
  400. package/dist/lib/Tax/index.js +54 -54
  401. package/dist/lib/TransferRequest/index.d.ts +112 -112
  402. package/dist/lib/TransferRequest/index.js +794 -794
  403. package/dist/lib/Update/index.d.ts +10 -10
  404. package/dist/lib/Update/index.js +22 -22
  405. package/dist/lib/User/index.d.ts +35 -35
  406. package/dist/lib/User/index.js +248 -248
  407. package/dist/lib/Wishlist/index.d.ts +5 -5
  408. package/dist/lib/Wishlist/index.js +10 -10
  409. package/dist/lib/base.d.ts +14 -14
  410. package/dist/lib/base.js +62 -62
  411. package/dist/lib/baseService.d.ts +17 -17
  412. package/dist/lib/baseService.js +43 -43
  413. package/dist/rules/GR/constants/data.d.ts +26 -26
  414. package/dist/rules/GR/constants/data.js +55 -55
  415. package/dist/rules/GR/constants/products.d.ts +8 -8
  416. package/dist/rules/GR/constants/products.js +234 -234
  417. package/dist/rules/GR/interfaces/cart.d.ts +84 -84
  418. package/dist/rules/GR/interfaces/cart.js +41 -41
  419. package/dist/rules/GR/interfaces/data.d.ts +97 -97
  420. package/dist/rules/GR/interfaces/data.js +104 -104
  421. package/dist/rules/GR/interfaces/products.d.ts +61 -61
  422. package/dist/rules/GR/interfaces/products.js +10 -10
  423. package/dist/rules/GR/utils/cart.d.ts +53 -53
  424. package/dist/rules/GR/utils/cart.js +637 -637
  425. package/dist/rules/GR/utils/data.d.ts +3 -3
  426. package/dist/rules/GR/utils/data.js +25 -25
  427. package/dist/rules/GR/utils/expedition.d.ts +71 -71
  428. package/dist/rules/GR/utils/expedition.js +1542 -1542
  429. package/dist/rules/GR/utils/g2.d.ts +176 -176
  430. package/dist/rules/GR/utils/g2.js +849 -849
  431. package/dist/rules/GR/utils/invoices.d.ts +24 -24
  432. package/dist/rules/GR/utils/invoices.js +174 -174
  433. package/dist/rules/GR/utils/products.d.ts +104 -104
  434. package/dist/rules/GR/utils/products.js +984 -984
  435. package/dist/rules/GR/utils/upsells.d.ts +79 -79
  436. package/dist/rules/GR/utils/upsells.js +183 -183
  437. package/dist/services/database/BaseProvider.d.ts +29 -29
  438. package/dist/services/database/BaseProvider.js +28 -28
  439. package/dist/services/database/BatchUtils.d.ts +14 -14
  440. package/dist/services/database/BatchUtils.js +43 -43
  441. package/dist/services/database/Config.d.ts +2 -2
  442. package/dist/services/database/Config.js +5 -5
  443. package/dist/services/database/DatabaseService.d.ts +41 -41
  444. package/dist/services/database/DatabaseService.js +152 -152
  445. package/dist/services/database/FirebaseProvider.d.ts +17 -17
  446. package/dist/services/database/FirebaseProvider.js +218 -218
  447. package/dist/services/database/NotFirebaseProvider.d.ts +35 -35
  448. package/dist/services/database/NotFirebaseProvider.js +243 -243
  449. package/dist/services/g2/G2OrderSlip.d.ts +42 -42
  450. package/dist/services/g2/G2OrderSlip.js +210 -210
  451. package/dist/services/g2/utils.d.ts +9 -9
  452. package/dist/services/g2/utils.js +703 -703
  453. package/dist/services/logs/index.d.ts +20 -20
  454. package/dist/services/logs/index.js +61 -61
  455. package/dist/services/products/BaseClass.d.ts +50 -50
  456. package/dist/services/products/BaseClass.js +64 -64
  457. package/dist/services/products/TCGService.d.ts +29 -29
  458. package/dist/services/products/TCGService.js +499 -499
  459. package/dist/services/products/utils.d.ts +9 -9
  460. package/dist/services/products/utils.js +94 -94
  461. package/dist/utils/algolia.d.ts +6 -6
  462. package/dist/utils/algolia.js +21 -21
  463. package/dist/utils/anonymisation.d.ts +30 -30
  464. package/dist/utils/anonymisation.js +250 -250
  465. package/dist/utils/array.d.ts +5 -5
  466. package/dist/utils/array.js +14 -14
  467. package/dist/utils/aws.d.ts +14 -14
  468. package/dist/utils/aws.js +126 -126
  469. package/dist/utils/booking.d.ts +22 -22
  470. package/dist/utils/booking.js +118 -118
  471. package/dist/utils/cart.d.ts +134 -134
  472. package/dist/utils/cart.js +862 -862
  473. package/dist/utils/categories.d.ts +2 -2
  474. package/dist/utils/categories.js +54 -54
  475. package/dist/utils/cmv.d.ts +10 -10
  476. package/dist/utils/cmv.js +107 -107
  477. package/dist/utils/console.d.ts +6 -6
  478. package/dist/utils/console.js +59 -59
  479. package/dist/utils/context.d.ts +20 -20
  480. package/dist/utils/context.js +61 -61
  481. package/dist/utils/currency.d.ts +6 -6
  482. package/dist/utils/currency.js +61 -61
  483. package/dist/utils/data.d.ts +31 -31
  484. package/dist/utils/data.js +294 -294
  485. package/dist/utils/date.d.ts +1 -1
  486. package/dist/utils/date.js +16 -16
  487. package/dist/utils/dimensions.d.ts +3 -3
  488. package/dist/utils/dimensions.js +16 -16
  489. package/dist/utils/discount.d.ts +46 -46
  490. package/dist/utils/discount.js +934 -934
  491. package/dist/utils/errors.d.ts +113 -113
  492. package/dist/utils/errors.js +113 -113
  493. package/dist/utils/file-admin.d.ts +8 -8
  494. package/dist/utils/file-admin.js +38 -38
  495. package/dist/utils/file.d.ts +38 -38
  496. package/dist/utils/file.js +200 -200
  497. package/dist/utils/firebase-admin.d.ts +2 -2
  498. package/dist/utils/firebase-admin.js +61 -61
  499. package/dist/utils/firebase.d.ts +41 -41
  500. package/dist/utils/firebase.js +131 -131
  501. package/dist/utils/import.d.ts +1 -1
  502. package/dist/utils/import.js +21 -21
  503. package/dist/utils/inventories.d.ts +49 -49
  504. package/dist/utils/inventories.js +392 -392
  505. package/dist/utils/locale.d.ts +15 -15
  506. package/dist/utils/locale.js +78 -78
  507. package/dist/utils/locale.js.map +1 -1
  508. package/dist/utils/mailchimp.d.ts +58 -58
  509. package/dist/utils/mailchimp.js +495 -495
  510. package/dist/utils/mathUtils.d.ts +17 -17
  511. package/dist/utils/mathUtils.js +315 -315
  512. package/dist/utils/mongodb.d.ts +1 -1
  513. package/dist/utils/mongodb.js +22 -22
  514. package/dist/utils/object.d.ts +13 -13
  515. package/dist/utils/object.js +115 -115
  516. package/dist/utils/payment.d.ts +10 -10
  517. package/dist/utils/payment.js +23 -23
  518. package/dist/utils/products.d.ts +32 -32
  519. package/dist/utils/products.js +186 -186
  520. package/dist/utils/promiseToPurchase.d.ts +56 -56
  521. package/dist/utils/promiseToPurchase.js +195 -195
  522. package/dist/utils/prosprsearch.d.ts +26 -26
  523. package/dist/utils/prosprsearch.js +182 -182
  524. package/dist/utils/refunds.d.ts +2 -2
  525. package/dist/utils/refunds.js +21 -21
  526. package/dist/utils/sdc.d.ts +10 -10
  527. package/dist/utils/sdc.js +1302 -1302
  528. package/dist/utils/searchIndexes.d.ts +21 -21
  529. package/dist/utils/searchIndexes.js +210 -210
  530. package/dist/utils/services.d.ts +42 -42
  531. package/dist/utils/services.js +409 -409
  532. package/dist/utils/shipment.d.ts +110 -110
  533. package/dist/utils/shipment.js +345 -345
  534. package/dist/utils/simpletexting.d.ts +2 -2
  535. package/dist/utils/simpletexting.js +45 -45
  536. package/dist/utils/sliders.d.ts +4 -4
  537. package/dist/utils/sliders.js +24 -24
  538. package/dist/utils/string.d.ts +16 -16
  539. package/dist/utils/string.js +191 -191
  540. package/dist/utils/tcgService.d.ts +2 -2
  541. package/dist/utils/tcgService.js +8 -8
  542. package/dist/utils/tools.d.ts +1 -1
  543. package/dist/utils/tools.js +9 -9
  544. package/dist/utils/transferRequests.d.ts +19 -19
  545. package/dist/utils/transferRequests.js +43 -43
  546. package/dist/utils/update.d.ts +7 -7
  547. package/dist/utils/update.js +125 -125
  548. package/dist/utils/weight.d.ts +3 -3
  549. package/dist/utils/weight.js +16 -16
  550. package/dist/utils/zones.d.ts +11 -11
  551. package/dist/utils/zones.js +218 -218
  552. package/package.json +110 -110
  553. package/publish.sh +143 -143
  554. package/readme.md +182 -182
  555. package/.env +0 -15
  556. package/dist/lib/Queue/index.d.ts +0 -40
  557. package/dist/lib/Queue/index.js +0 -255
  558. package/dist/lib/Queue/index.js.map +0 -1
@@ -1,985 +1,985 @@
1
- "use strict";
2
- var __rest = (this && this.__rest) || function (s, e) {
3
- var t = {};
4
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
- t[p] = s[p];
6
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
- t[p[i]] = s[p[i]];
10
- }
11
- return t;
12
- };
13
- var __importDefault = (this && this.__importDefault) || function (mod) {
14
- return (mod && mod.__esModule) ? mod : { "default": mod };
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.shouldHideItemIfRegPriceIs0 = exports.getFormattedProdGR = exports.applyProCustomPromo = exports.shouldShowProCustomPromo = exports.fetchFeesBeforeCart = exports.getVracType = exports.getConcreteItemsByAvailability = exports.getConcreteQteText = exports.getInstallItemPrice = exports.getInstallationArray = exports.roundGrassQte = exports.handleGrassProductQtyRoundForShipping = exports.getGrassSubQuestionsByType = exports.getGrassServicesFees = exports.getGrassQteText = exports.getMinQtyFeeAmountText = exports.getMinQtyFeeText = exports.getAllMinGrassQuantities = exports.isMinQtyFee = exports.fuseGrassProducts = exports.getAllInstallFromItems = exports.checkIfProductIsInstallation = exports.checkIfProductIsOfType = exports.getProductFormOptions = exports.getParentProductCategoryGroup = exports.getProdName = exports.splitOnDashes = exports.getRoundedUnitProductQuantities = exports.getRoundedSellUnitProductQuantities = exports.getDescriptionString = exports.getDescriptionLength = exports.getProductAttributes = exports.productUnitSupportsDecimals = exports.getCorrectPluralSellUnit = exports.getPluralUnitLabelWithSlug = exports.getUnitLabelWithSlug = exports.getProductUnitLabel = exports.getProductSellUnitLabel = void 0;
18
- const ceil_1 = __importDefault(require("lodash/ceil"));
19
- const maxBy_1 = __importDefault(require("lodash/maxBy"));
20
- const orderBy_1 = __importDefault(require("lodash/orderBy"));
21
- const toNumber_1 = __importDefault(require("lodash/toNumber"));
22
- const round_1 = __importDefault(require("lodash/round"));
23
- const flatten_1 = __importDefault(require("lodash/flatten"));
24
- const uniqBy_1 = __importDefault(require("lodash/uniqBy"));
25
- const sumBy_1 = __importDefault(require("lodash/sumBy"));
26
- const floor_1 = __importDefault(require("lodash/floor"));
27
- const Cart_1 = require("../../../Interfaces/Cart");
28
- const G2_1 = require("../../../Interfaces/G2");
29
- const IDiscountRule_1 = require("../../../Interfaces/Rules/IDiscountRule");
30
- const string_1 = require("../../../utils/string");
31
- const locale_1 = require("../../../utils/locale");
32
- const inventories_1 = require("../../../utils/inventories");
33
- const products_1 = require("../../../utils/products");
34
- const expedition_1 = require("./expedition");
35
- const products_2 = require("../constants/products");
36
- const g2_1 = require("./g2");
37
- const cart_1 = require("./cart");
38
- const products_3 = require("../interfaces/products");
39
- const data_1 = require("../interfaces/data");
40
- const cart_2 = require("../interfaces/cart");
41
- const upsells_1 = require("./upsells");
42
- const object_1 = require("../../../utils/object");
43
- const pluralSellUnits = {
44
- p2: { fr: 'pi²', en: 'sqft' },
45
- sac: { fr: 'sacs', en: 'bags' },
46
- unite: { fr: 'unités', en: 'units' },
47
- tonne: { fr: 'tonnes', en: 'tons' },
48
- rouleau: { fr: 'rouleaux', en: 'rolls' }
49
- };
50
- const pluralSellUnitsBySlug = {
51
- p2: { fr: 'pi²', en: 'sqft' },
52
- sac: { fr: 'sacs', en: 'bags' },
53
- unite: { fr: 'unités', en: 'units' },
54
- tonne: { fr: 'tonnes', en: 'tons' },
55
- roul: { fr: 'rouleaux', en: 'rolls' },
56
- pal: { fr: 'palettes', en: 'pallets' },
57
- rg: { fr: 'rangs', en: 'rows' },
58
- ensemble: { fr: 'ensembles', en: 'kits' },
59
- pl: { fr: 'pL', en: 'linear feet' },
60
- mcx: { fr: 'morceaux', en: 'pieces' },
61
- vg3: { fr: 'vg³', en: 'yd³' },
62
- demipalsm: { fr: 'Demi-palettes (petite)', en: 'Half-pallets (small)' },
63
- demipallg: { fr: 'Demi-palettes (lg)', en: 'Half-pallets (lg)' },
64
- tonnes: { fr: 'tonnes', en: 'tons' },
65
- bte: { fr: 'boîtes', en: 'boxes' },
66
- pqt: { fr: 'paquets', en: 'bundles' },
67
- '': { fr: 'unités', en: 'units' }
68
- };
69
- const sellUnitsBySlug = {
70
- p2: { fr: 'pi²', en: 'sqft' },
71
- sac: { fr: 'sac', en: 'bag' },
72
- unite: { fr: 'unité', en: 'unit' },
73
- tonne: { fr: 'tonne', en: 'ton' },
74
- roul: { fr: 'rouleau', en: 'roll' },
75
- pal: { fr: 'palette', en: 'pallet' },
76
- rg: { fr: 'rang', en: 'row' },
77
- ensemble: { fr: 'ensemble', en: 'kit' },
78
- pl: { fr: 'pL', en: 'linear feet' },
79
- mcx: { fr: 'morceau', en: 'piece' },
80
- vg3: { fr: 'vg³', en: 'yd³' },
81
- demipalsm: { fr: 'Demi-palette (petite)', en: 'Half-pallet (small)' },
82
- demipallg: { fr: 'Demi-palette (lg)', en: 'Half-pallet (lg)' },
83
- tonnes: { fr: 'tonne', en: 'ton' },
84
- bte: { fr: 'boîte', en: 'box' },
85
- pqt: { fr: 'paquet', en: 'bundle' },
86
- '': { fr: 'unité', en: 'unit' }
87
- };
88
- const getProductSellUnitLabel = (otherUnits, locale = 'fr', returnUnitForSlugs, options = {}) => {
89
- if (!!!otherUnits)
90
- return '';
91
- const sellingUnit = otherUnits.find((unit) => !!unit.is_sale_unit);
92
- if (!!!sellingUnit)
93
- return '';
94
- return (0, exports.getUnitLabelWithSlug)(sellingUnit.unit_slug, locale, options.returnPlural, returnUnitForSlugs, options.returnShortByDefault);
95
- };
96
- exports.getProductSellUnitLabel = getProductSellUnitLabel;
97
- const getProductUnitLabel = (otherUnits, type, locale = 'fr', returnUnitForSlugs, options = {}) => {
98
- if (!!!otherUnits)
99
- return '';
100
- const unitToUse = otherUnits.find((unit) => (type == 'sale_unit' ? unit.is_sale_unit : unit.is_inventory_unit));
101
- if (!!!unitToUse)
102
- return '';
103
- return (0, exports.getUnitLabelWithSlug)(unitToUse.unit_slug, locale, options.returnPlural, returnUnitForSlugs, options.returnShortByDefault);
104
- };
105
- exports.getProductUnitLabel = getProductUnitLabel;
106
- const getUnitLabelWithSlug = (unitSlug, locale = 'fr', getPluralVersion = false, returnUnitForSlugs, returnShortByDefault) => {
107
- if (!!returnUnitForSlugs && !!returnUnitForSlugs.includes(unitSlug)) {
108
- return (0, exports.getUnitLabelWithSlug)('unite', locale, getPluralVersion);
109
- }
110
- if (!!getPluralVersion)
111
- return (0, exports.getPluralUnitLabelWithSlug)(unitSlug, locale, returnUnitForSlugs, returnShortByDefault);
112
- const shortVersion = !!(0, inventories_1.getUnitShortDict)(unitSlug) ? (0, locale_1.translateILang)((0, inventories_1.getUnitShortDict)(unitSlug), locale) : '';
113
- const longVersion = !!sellUnitsBySlug[unitSlug] ? (0, locale_1.translateILang)(sellUnitsBySlug[unitSlug], locale) : '';
114
- if (!!returnShortByDefault)
115
- return shortVersion;
116
- return longVersion || shortVersion || unitSlug;
117
- };
118
- exports.getUnitLabelWithSlug = getUnitLabelWithSlug;
119
- const getPluralUnitLabelWithSlug = (unitSlug, locale = 'fr', returnUnitForSlugs, useShortIfDifferent) => {
120
- if (!!returnUnitForSlugs && !!returnUnitForSlugs.includes(unitSlug)) {
121
- return (0, locale_1.translateILang)(pluralSellUnitsBySlug['unite'], locale);
122
- }
123
- const shortVersion = !!(0, inventories_1.getUnitShortDict)(unitSlug) ? (0, locale_1.translateILang)((0, inventories_1.getUnitShortDict)(unitSlug), locale) : '';
124
- const normalVersion = !!sellUnitsBySlug[unitSlug] ? (0, locale_1.translateILang)(sellUnitsBySlug[unitSlug], locale) : '';
125
- const pluralVersion = !!pluralSellUnitsBySlug[unitSlug] ? (0, locale_1.translateILang)(pluralSellUnitsBySlug[unitSlug], locale) : '';
126
- if (useShortIfDifferent && shortVersion != normalVersion)
127
- return shortVersion;
128
- return pluralVersion || shortVersion || unitSlug;
129
- };
130
- exports.getPluralUnitLabelWithSlug = getPluralUnitLabelWithSlug;
131
- const getCorrectPluralSellUnit = (sellUnit, locale = 'fr') => {
132
- if (!!!sellUnit.unit)
133
- return '';
134
- const frSellUnit = (0, string_1.string_to_slug)((0, locale_1.translateILang)(sellUnit.unit, 'fr'));
135
- return !!pluralSellUnits[frSellUnit]
136
- ? (0, locale_1.translateILang)(pluralSellUnits[frSellUnit], locale)
137
- : (0, locale_1.translateILang)(sellUnit.unit, locale);
138
- };
139
- exports.getCorrectPluralSellUnit = getCorrectPluralSellUnit;
140
- const productUnitSupportsDecimals = (unitSlug, isService) => {
141
- return !!isService || !!['p2', 'pl', 'vg3', 'tonne'].includes(unitSlug);
142
- };
143
- exports.productUnitSupportsDecimals = productUnitSupportsDecimals;
144
- const getProductAttributes = (product) => {
145
- const arrColor = !!product.attributes[data_1.AttributesIdEnumGR.SUBCOLOR]
146
- ? product.attributes[data_1.AttributesIdEnumGR.SUBCOLOR]
147
- : [];
148
- const arrDimensions = !!product.attributes[data_1.AttributesIdEnumGR.DIMENSIONS]
149
- ? product.attributes[data_1.AttributesIdEnumGR.DIMENSIONS]
150
- : [];
151
- const arrFormats = !!product.attributes[data_1.AttributesIdEnumGR.FORMATS]
152
- ? product.attributes[data_1.AttributesIdEnumGR.FORMATS]
153
- : [];
154
- return { colors: arrColor, dimensions: arrDimensions, formats: arrFormats };
155
- };
156
- exports.getProductAttributes = getProductAttributes;
157
- const getDescriptionLength = (description, locale = 'fr') => {
158
- if (!!!description || !!!(0, locale_1.getLocaleOfDictionnary)(description, locale))
159
- return 0;
160
- return (0, string_1.stripHTML)((0, locale_1.getLocaleOfDictionnary)(description, locale)).length;
161
- };
162
- exports.getDescriptionLength = getDescriptionLength;
163
- const getDescriptionString = (showFullDesc, maxLength, description, locale = 'fr') => {
164
- if (!!showFullDesc || (0, exports.getDescriptionLength)(description, locale) <= maxLength) {
165
- return (0, string_1.stripHTML)((0, locale_1.getLocaleOfDictionnary)(description, locale));
166
- }
167
- let truncated = (0, string_1.stripHTML)((0, locale_1.getLocaleOfDictionnary)(description, locale)).slice(0, maxLength).split(' ');
168
- truncated.pop();
169
- return truncated.join(' ') + ' [...]';
170
- };
171
- exports.getDescriptionString = getDescriptionString;
172
- const getRoundedSellUnitProductQuantities = (value, otherUnits = [], value2, targetIsSecondaryInput = false) => {
173
- var _a;
174
- const saleUnit = otherUnits.find((unit) => unit.is_sale_unit);
175
- const commandUnit = otherUnits.find((unit) => unit.is_command_unit);
176
- const commandStep = otherUnits.find((unit) => unit.is_command_step);
177
- let roundedQuantities = {
178
- qte1: value,
179
- qte2: value2
180
- };
181
- if (!!targetIsSecondaryInput && typeof value2 === 'number') {
182
- if (!!commandStep && !!commandStep.fitting_unit && !!commandUnit && !!commandUnit.fitting_unit && !!saleUnit) {
183
- const nbCmdUnitPerCmdStep = (0, round_1.default)(commandStep.fitting_unit / commandUnit.fitting_unit, 5);
184
- const nbSaleUnitPerCmdStep = (0, round_1.default)(commandStep.fitting_unit / ((_a = saleUnit.fitting_unit) !== null && _a !== void 0 ? _a : 1), (0, exports.productUnitSupportsDecimals)(saleUnit.unit_slug) ? 5 : 0);
185
- const roundedValue = value2 === 0
186
- ? 0
187
- : _roundNbUnitPerCmdStep(value2, nbCmdUnitPerCmdStep, (0, exports.productUnitSupportsDecimals)(saleUnit.unit_slug) ? 2 : 0);
188
- const nbOfRoundedCmdUnits = roundedValue / nbCmdUnitPerCmdStep;
189
- const nbOfRoundedSaleUnits = nbOfRoundedCmdUnits * nbSaleUnitPerCmdStep;
190
- roundedQuantities = {
191
- qte1: value2 === 0
192
- ? 0
193
- : (0, round_1.default)(nbOfRoundedSaleUnits, !!saleUnit && (0, exports.productUnitSupportsDecimals)(saleUnit.unit_slug) ? 2 : 0),
194
- qte2: roundedValue
195
- };
196
- }
197
- }
198
- else if (!!commandStep && !!commandStep.fitting_unit && !!saleUnit && !!saleUnit.fitting_unit) {
199
- const cmdStepFittingUnit = commandStep.fitting_unit;
200
- const saleFittingUnit = saleUnit.fitting_unit;
201
- const nbSaleUnitPerCmdStep = (0, round_1.default)(cmdStepFittingUnit / saleFittingUnit, (0, exports.productUnitSupportsDecimals)(saleUnit.unit_slug) ? 5 : 0);
202
- const roundedValue = value === 0
203
- ? 0
204
- : _roundNbUnitPerCmdStep(value, nbSaleUnitPerCmdStep, (0, exports.productUnitSupportsDecimals)(saleUnit.unit_slug) ? 2 : 0);
205
- let commandUnitQty = undefined;
206
- if (!!commandUnit && !!commandUnit.fitting_unit) {
207
- if (value === 0) {
208
- commandUnitQty = 0;
209
- }
210
- else {
211
- const nbOfCmdSteps = (0, round_1.default)(roundedValue / nbSaleUnitPerCmdStep, (0, exports.productUnitSupportsDecimals)(saleUnit.unit_slug) ? 5 : 0);
212
- commandUnitQty =
213
- nbOfCmdSteps *
214
- (0, round_1.default)(cmdStepFittingUnit / commandUnit.fitting_unit, (0, exports.productUnitSupportsDecimals)(commandUnit.unit_slug) ? 5 : 0);
215
- commandUnitQty = (0, round_1.default)(commandUnitQty, (0, exports.productUnitSupportsDecimals)(commandUnit.unit_slug) ? 2 : 0);
216
- }
217
- }
218
- roundedQuantities = {
219
- qte1: roundedValue,
220
- qte2: commandUnitQty
221
- };
222
- }
223
- return roundedQuantities;
224
- };
225
- exports.getRoundedSellUnitProductQuantities = getRoundedSellUnitProductQuantities;
226
- const getRoundedUnitProductQuantities = (value, otherUnits = [], type) => {
227
- const unitToTest = type == 'sale_unit'
228
- ? otherUnits.find((unit) => unit.is_sale_unit)
229
- : otherUnits.find((unit) => unit.is_inventory_unit);
230
- const commandStep = otherUnits.find((unit) => unit.is_command_step);
231
- let roundedQuantities = value;
232
- if (!!commandStep && !!commandStep.fitting_unit && unitToTest && unitToTest.fitting_unit) {
233
- const cmdStepFittingUnit = commandStep.fitting_unit;
234
- const fittingUnit = unitToTest.fitting_unit;
235
- const nbUnitPerCmdStep = cmdStepFittingUnit / fittingUnit;
236
- const roundedValue = value === 0
237
- ? 0
238
- : _roundNbUnitPerCmdStepV2(value, nbUnitPerCmdStep, (0, exports.productUnitSupportsDecimals)(unitToTest.unit_slug) ? 5 : 0);
239
- roundedQuantities = roundedValue;
240
- }
241
- return roundedQuantities;
242
- };
243
- exports.getRoundedUnitProductQuantities = getRoundedUnitProductQuantities;
244
- const _roundNbUnitPerCmdStepV2 = (value, nbUnitPerCmdStep, decimalsToCheck = 0) => {
245
- const currentFittingValue = (0, floor_1.default)(value / nbUnitPerCmdStep, 5);
246
- const roundedUp = (0, round_1.default)((0, ceil_1.default)(currentFittingValue) * nbUnitPerCmdStep, decimalsToCheck);
247
- return roundedUp;
248
- };
249
- const _roundNbUnitPerCmdStep = (value, nbUnitPerCmdStep, decimalsToCheck = 0) => {
250
- let numberBuffer = 0;
251
- if (decimalsToCheck > 0) {
252
- let buffer = '';
253
- buffer = buffer.padStart(decimalsToCheck - 1, '0');
254
- numberBuffer = (0, toNumber_1.default)(`0.${buffer}1`);
255
- }
256
- const rounded = (0, round_1.default)(value / nbUnitPerCmdStep, decimalsToCheck) * nbUnitPerCmdStep;
257
- const roundedUp = Math.ceil(value / nbUnitPerCmdStep) * nbUnitPerCmdStep;
258
- if (rounded == 0 && roundedUp > 0)
259
- return roundedUp;
260
- if ((0, round_1.default)(value % nbUnitPerCmdStep, decimalsToCheck) == 0)
261
- return rounded;
262
- if ((0, round_1.default)(value, decimalsToCheck) > rounded + numberBuffer)
263
- return roundedUp;
264
- if ((0, round_1.default)(rounded, decimalsToCheck) % nbUnitPerCmdStep <= numberBuffer)
265
- return rounded;
266
- return roundedUp;
267
- };
268
- const splitOnDashes = (stringToSplit, dummyStringToReplace = { currentValue: '%%-%%', newValue: ' - ' }) => {
269
- let splited = stringToSplit.split(' - ');
270
- if (splited.length === 1)
271
- splited = stringToSplit.split(' -');
272
- if (splited.length === 1)
273
- splited = stringToSplit.split('- ');
274
- return [
275
- splited[0].replace(dummyStringToReplace.currentValue, dummyStringToReplace.newValue),
276
- ...(!!splited[1]
277
- ? [splited.slice(1).join(' - ').replace(dummyStringToReplace.currentValue, dummyStringToReplace.newValue)]
278
- : [])
279
- ];
280
- };
281
- exports.splitOnDashes = splitOnDashes;
282
- const getProdName = (product, locale) => {
283
- let name;
284
- if (!!product.full_name) {
285
- name = (0, locale_1.getLocaleOfDictionnary)(product.full_name, locale);
286
- }
287
- else {
288
- name = (0, locale_1.getLocaleOfDictionnary)(product.name, locale);
289
- if (!!product.use_parent && !!product.parent_name) {
290
- if (typeof product.parent_name === 'string') {
291
- name = product.parent_name;
292
- }
293
- }
294
- }
295
- let newNameArray = [];
296
- const dashesToFind = [' - ', '- ', ' -'];
297
- if (name.includes('(')) {
298
- let newStr = '';
299
- let strWithParenthesisToCheck = name;
300
- while (strWithParenthesisToCheck.includes('(')) {
301
- let positionStart = strWithParenthesisToCheck.indexOf('(');
302
- let positionEnd = strWithParenthesisToCheck.indexOf(')');
303
- let substrToCheck = strWithParenthesisToCheck.substring(positionStart, positionEnd + 1);
304
- for (let dash of dashesToFind) {
305
- substrToCheck = substrToCheck.replace(dash, '-');
306
- }
307
- newStr += strWithParenthesisToCheck.substring(0, positionStart) + substrToCheck;
308
- strWithParenthesisToCheck =
309
- positionEnd === strWithParenthesisToCheck.length - 1 ? '' : strWithParenthesisToCheck.substring(positionEnd + 1);
310
- }
311
- newStr += strWithParenthesisToCheck;
312
- const positionOfFirst = newStr.indexOf(')');
313
- let firstPart = newStr.substring(0, positionOfFirst);
314
- if (positionOfFirst !== newStr.length - 1 && dashesToFind.some((str) => firstPart.includes(str))) {
315
- const secondPart = newStr.substring(positionOfFirst);
316
- for (let str of dashesToFind) {
317
- firstPart.replace(str, '%%-%%');
318
- }
319
- newNameArray = (0, exports.splitOnDashes)(`${firstPart}${secondPart}`);
320
- }
321
- else {
322
- newNameArray = (0, exports.splitOnDashes)(newStr);
323
- }
324
- }
325
- else {
326
- newNameArray = (0, exports.splitOnDashes)(name);
327
- }
328
- return newNameArray;
329
- };
330
- exports.getProdName = getProdName;
331
- const getParentProductCategoryGroup = (prod) => {
332
- let type = 'other';
333
- if (!!prod.categories && !!prod.categories['lvl0']) {
334
- const categorySlug = prod.categories['lvl0'];
335
- switch (categorySlug) {
336
- case 'gazon':
337
- if (!!(0, exports.checkIfProductIsOfType)(prod, 'gazon')) {
338
- type = 'gazon';
339
- }
340
- break;
341
- case 'amenagement-paysager':
342
- if (!!(0, exports.checkIfProductIsOfType)(prod, 'beton')) {
343
- type = 'beton';
344
- }
345
- break;
346
- default:
347
- if (!!(0, exports.checkIfProductIsOfType)(prod, 'vrac')) {
348
- type = 'vrac';
349
- }
350
- break;
351
- }
352
- }
353
- return type;
354
- };
355
- exports.getParentProductCategoryGroup = getParentProductCategoryGroup;
356
- const getProductFormOptions = (product, attributes) => {
357
- let allColorOptions = [];
358
- let allDimensionOptions = [];
359
- let allFormatOptions = [];
360
- const product_attributes = (0, exports.getProductAttributes)(product);
361
- let overridenAttributes = product.declinations
362
- .map((declination) => declination.overriden_attributes)
363
- .filter((ova) => !!ova);
364
- overridenAttributes = (0, flatten_1.default)(overridenAttributes);
365
- overridenAttributes = (0, uniqBy_1.default)(overridenAttributes, 'slug');
366
- const getOverriddenValues = (prodAttributes, attrId) => {
367
- const overridenOptions = !!overridenAttributes.length
368
- ? overridenAttributes.filter((attr) => attr.id === attrId)
369
- : [];
370
- let finalOptions = [];
371
- for (const attr of prodAttributes) {
372
- let isOverridden = false;
373
- for (const ovOption of overridenOptions) {
374
- if (!isOverridden) {
375
- if (!!attr && attr.slug === ovOption.slug) {
376
- isOverridden = true;
377
- finalOptions = [
378
- ...finalOptions,
379
- Object.assign(Object.assign({}, attr), { other_details: Object.assign(Object.assign({}, attr.other_details), { image: ovOption.overriden_values }) })
380
- ];
381
- }
382
- }
383
- }
384
- if (!isOverridden) {
385
- finalOptions = [...finalOptions, attr];
386
- }
387
- }
388
- return finalOptions;
389
- };
390
- const subColorsAttr = attributes.find((attr) => attr.id === data_1.AttributesIdEnumGR.SUBCOLOR);
391
- if (!!subColorsAttr) {
392
- const subColors = subColorsAttr.values;
393
- const colorsAttributes = subColors.filter((sub) => product_attributes.colors.includes(sub.slug));
394
- const finalColors = getOverriddenValues(colorsAttributes, data_1.AttributesIdEnumGR.SUBCOLOR);
395
- allColorOptions = (0, orderBy_1.default)(finalColors, (color) => product.declinations.findIndex((d) => d.attributes[data_1.AttributesIdEnumGR.SUBCOLOR].includes(color.slug)));
396
- }
397
- const dimensionsAttr = attributes.find((attr) => attr.id === data_1.AttributesIdEnumGR.DIMENSIONS);
398
- if (!!dimensionsAttr) {
399
- const dimensions = dimensionsAttr.values;
400
- const dimensionsAttributes = dimensions.filter((d) => product_attributes.dimensions.includes(d.slug));
401
- const finalDimensions = getOverriddenValues(dimensionsAttributes, data_1.AttributesIdEnumGR.DIMENSIONS);
402
- allDimensionOptions = finalDimensions;
403
- }
404
- const formatsAttr = attributes.find((attr) => attr.id === data_1.AttributesIdEnumGR.FORMATS);
405
- if (!!formatsAttr) {
406
- const formats = formatsAttr.values;
407
- allFormatOptions = formats.filter((f) => product_attributes.formats.includes(f.slug));
408
- }
409
- return {
410
- allColors: allColorOptions,
411
- allDimensions: allDimensionOptions,
412
- allFormats: allFormatOptions
413
- };
414
- };
415
- exports.getProductFormOptions = getProductFormOptions;
416
- const checkIfProductIsOfType = (product, type, excludeUndefined) => {
417
- const attr = !!product && !!product.attributes ? product.attributes : {};
418
- if (!!!attr[data_1.AttributesIdEnumGR.TYPE] && !!excludeUndefined)
419
- return true;
420
- return (!!attr[data_1.AttributesIdEnumGR.TYPE] &&
421
- Array.isArray(attr[data_1.AttributesIdEnumGR.TYPE]) &&
422
- attr[data_1.AttributesIdEnumGR.TYPE].includes(type));
423
- };
424
- exports.checkIfProductIsOfType = checkIfProductIsOfType;
425
- const checkIfProductIsInstallation = (item) => {
426
- return !!item.is_service && !!item.parent_slug && !!item.parent_slug.includes('installation');
427
- };
428
- exports.checkIfProductIsInstallation = checkIfProductIsInstallation;
429
- const getAllInstallFromItems = (items) => {
430
- return items.filter((i) => (!!i.parent_slug && products_2.installationProductsSlugs.includes(i.parent_slug)) ||
431
- Object.values(products_2.installationProSpecSkus).includes(i.sku));
432
- };
433
- exports.getAllInstallFromItems = getAllInstallFromItems;
434
- const fuseGrassProducts = (recursiveItems, isPro) => {
435
- const specialityGrass = recursiveItems[0];
436
- const kentuckyGrass = (specialityGrass.sub_items || []).find((sub) => sub.sku === products_2.kentucky);
437
- let newItems = [];
438
- if (!!kentuckyGrass) {
439
- const kentuckyPrice = (0, products_1.getLowestPrice)(kentuckyGrass);
440
- const regPriceKentucky = kentuckyGrass.regular_price.amount;
441
- const newGrassRegPrice = !!kentuckyPrice.promo ? regPriceKentucky : kentuckyPrice.price.amount;
442
- const newGrassDiscountPrice = (!!specialityGrass.discount_price
443
- ? specialityGrass.discount_price.amount
444
- : specialityGrass.regular_price.amount) +
445
- (!!kentuckyPrice.promo ? kentuckyPrice.price.amount : regPriceKentucky);
446
- const getLowestPriceSpecialityGrass = (0, products_1.getLowestPrice)(specialityGrass);
447
- newItems = [
448
- Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, specialityGrass), { regular_price: Object.assign(Object.assign({}, specialityGrass.regular_price), { amount: newGrassRegPrice + specialityGrass.regular_price.amount }) }), (!!newGrassDiscountPrice
449
- ? {
450
- discount_price: Object.assign(Object.assign({}, (specialityGrass.discount_price || { currency: 'CAD' })), { amount: newGrassDiscountPrice })
451
- }
452
- : {})), (!!specialityGrass.promo_price
453
- ? {
454
- promo_price: Object.assign(Object.assign({}, specialityGrass.promo_price), { amount: specialityGrass.promo_price.amount + kentuckyPrice.price.amount })
455
- }
456
- : {})), (!!!isPro && !!kentuckyGrass.tier_pricing
457
- ? {
458
- tier_pricing: kentuckyGrass.tier_pricing.map((t) => (Object.assign(Object.assign({}, t), { price: Object.assign(Object.assign({}, t.price), { amount: t.price.amount + getLowestPriceSpecialityGrass.price.amount }) })))
459
- }
460
- : {})), { sub_items: [
461
- Object.assign(Object.assign({}, kentuckyGrass), { hide_from_summary: true }),
462
- ...(specialityGrass.sub_items || []).slice(1)
463
- ] }),
464
- ...recursiveItems.slice(1)
465
- ];
466
- }
467
- return newItems;
468
- };
469
- exports.fuseGrassProducts = fuseGrassProducts;
470
- const isMinQtyFee = (slug) => {
471
- return ['minimum-facturable-commande', 'frais-minimum-gazon-pour-installation'].includes(slug);
472
- };
473
- exports.isMinQtyFee = isMinQtyFee;
474
- const getAllMinGrassQuantities = (grassProduct, isPro) => {
475
- return {
476
- pickup: (0, expedition_1.getMinGrassQte)(grassProduct, 'pickup', isPro),
477
- shipping: (0, expedition_1.getMinGrassQte)(grassProduct, 'shipping', isPro),
478
- install: (0, expedition_1.getMinQteInstall)(isPro)
479
- };
480
- };
481
- exports.getAllMinGrassQuantities = getAllMinGrassQuantities;
482
- const getMinQtyFeeText = (parent_slug = '', grassProduct, isPro, locale = 'fr', expeditionMethod, shortVersion) => {
483
- const type = parent_slug === 'frais-minimum-gazon-pour-installation' ? 'install' : 'order';
484
- const minQuantities = (0, exports.getAllMinGrassQuantities)(grassProduct, isPro);
485
- const localeSellUnit = (0, locale_1.translateILang)(pluralSellUnits.p2, locale);
486
- const localeStepUnit = (0, locale_1.translateILang)((0, inventories_1.getUnitShortDict)('roul'), locale).toLowerCase();
487
- const localeMinUnit = (0, locale_1.translateILang)((0, inventories_1.getUnitShortDict)('pal'), locale).toLowerCase();
488
- let str = '';
489
- const endStr = (0, locale_1.translateILang)({
490
- fr: ` Ce frais correspond au prix du gazon choisi multiplié par la différence entre la quantité choisie et le minimum.`,
491
- en: ` Ce frais correspond au prix du gazon choisi multiplié par la différence entre la quantité choisie et le minimum.`
492
- }, locale);
493
- if (!!!expeditionMethod && type === 'order' && minQuantities.pickup !== minQuantities.shipping) {
494
- const strMinShipping = `${minQuantities.shipping}${localeSellUnit} (${minQuantities.shipping / 740} ${localeMinUnit})`;
495
- const strMinPickup = !!minQuantities.pickup
496
- ? `${minQuantities.pickup}${localeSellUnit} (${minQuantities.pickup / 740} ${localeMinUnit})`
497
- : '';
498
- str = (0, locale_1.translateILang)({
499
- fr: `Les commandes de gazon sont disponibles à partir de 10${localeSellUnit} (1 ${localeStepUnit}), mais le minimum facturable pour la livraison est de ${strMinShipping}${!!strMinPickup ? ` et de ${strMinPickup} pour la cueillette.` : ``}`,
500
- en: `Sod orders are available starting at 10${localeSellUnit} (1 ${localeStepUnit}), but the minimum chargeable for delivery is ${strMinShipping}${!!strMinPickup ? ` and ${strMinPickup} for pick-up.` : ``}`
501
- }, locale);
502
- if (!!!shortVersion) {
503
- str += endStr;
504
- }
505
- return str;
506
- }
507
- const minBillableQty = type === 'install'
508
- ? minQuantities.install
509
- : expeditionMethod === 'pickup'
510
- ? minQuantities.pickup
511
- : minQuantities.shipping;
512
- const minQtyPallets = minBillableQty !== 0 ? minBillableQty / 740 : 0;
513
- const minBillableStr = `${minBillableQty}${localeSellUnit}${type === 'order' ? ' (' + minQtyPallets + ' ' + localeMinUnit + ')' : ''}`;
514
- str = (0, locale_1.translateILang)({
515
- fr: `${type === 'install'
516
- ? "L'installation"
517
- : expeditionMethod === 'pickup'
518
- ? 'La cueillette'
519
- : expeditionMethod === 'delivery'
520
- ? 'La livraison'
521
- : 'La commande'} de gazon est disponible à partir de 10${localeSellUnit} (1 ${localeStepUnit}), mais le minimum facturable est de ${minBillableStr}.`,
522
- en: `Sod ${type === 'install'
523
- ? 'installation'
524
- : expeditionMethod === 'pickup'
525
- ? 'pick-up'
526
- : expeditionMethod === 'delivery'
527
- ? 'delivery'
528
- : 'ordering'} is available starting at 10${localeSellUnit} (1 ${localeStepUnit}), but the minimum billable is ${minBillableStr}.`
529
- }, locale);
530
- if (!!!shortVersion) {
531
- str += endStr;
532
- }
533
- return str;
534
- };
535
- exports.getMinQtyFeeText = getMinQtyFeeText;
536
- const getMinQtyFeeAmountText = (parent_slug = '', locale = 'fr', servicesFees, showMinFeeAmount = true) => {
537
- const serviceOrFee = servicesFees.find((i) => i.parent_slug === parent_slug);
538
- if (!!!serviceOrFee)
539
- return '';
540
- const amount = (0, toNumber_1.default)(serviceOrFee.regular_price.amount) * serviceOrFee.qte;
541
- return (0, locale_1.translateILang)({
542
- fr: `Une différence de ${!!showMinFeeAmount ? amount.toFixed(2) + '$' : '%LOADER%'}%BOLD% vous sera chargée si la quantité de gazon au panier est plus petite que le minimum requis.`,
543
- en: `A difference of ${!!showMinFeeAmount ? amount.toFixed(2) + '$' : '%LOADER%'}%BOLD% will be charged if the quantity of sod in the cart is less than the minimum required.`
544
- }, locale);
545
- };
546
- exports.getMinQtyFeeAmountText = getMinQtyFeeAmountText;
547
- const getGrassQteText = (chosenDeclination, locale = 'fr') => {
548
- let txt = '';
549
- let nbRolls = 0;
550
- let nbSquareFeet = 0;
551
- const units = !!!chosenDeclination ? [] : chosenDeclination.other_units;
552
- if (!!units && !!units.length) {
553
- const itemRolls = units.find((measure) => measure.unit_slug === 'roul');
554
- const itemSquareFeet = units.find((measure) => measure.unit_slug === 'pal');
555
- if (!!itemSquareFeet && !!itemSquareFeet.fitting_unit) {
556
- nbSquareFeet = itemSquareFeet.fitting_unit;
557
- }
558
- if (!!itemRolls && !!itemRolls.fitting_unit && nbSquareFeet !== 0) {
559
- nbRolls = nbSquareFeet / itemRolls.fitting_unit;
560
- }
561
- }
562
- txt = (0, locale_1.translateILang)({
563
- fr: 'Pour ce produit, vous devez commander par pieds carrés. Une palette = *nbRolls* rouleaux (*nbSquareFeet*pi2)',
564
- en: 'For this product, you have to order by square feet. A pallet = *nbRolls* rolls (*nbSquareFeet*pi2)'
565
- }, locale);
566
- txt = txt.replace('*nbRolls*', String(nbRolls));
567
- txt = txt.replace('*nbSquareFeet*', String(nbSquareFeet));
568
- return txt;
569
- };
570
- exports.getGrassQteText = getGrassQteText;
571
- const getGrassServicesFees = async (grassProduct, isPro, useFees, expeditionMethod, fetchProduct, getIfAddressIsInsideZones, getDistanceFromAddress, locale, allStores, chosenGrass, baseGrass, customPriceList) => {
572
- const installItems = await (0, exports.getInstallationArray)(grassProduct.qte, (!!baseGrass ? baseGrass : chosenGrass).product_upsells, fetchProduct, locale, isPro, chosenGrass.sku, customPriceList, { engrais: true, roulage: true });
573
- const cart = Object.assign(Object.assign({}, (0, Cart_1.getDefaultCart)()), { items: [
574
- chosenGrass,
575
- ...(!!baseGrass ? [baseGrass] : []),
576
- ...installItems.filter((item) => !!!(0, exports.isMinQtyFee)(item.parent_slug || ''))
577
- ] });
578
- const applied = await (0, exports.fetchFeesBeforeCart)(!!useFees, cart, expeditionMethod, fetchProduct, getIfAddressIsInsideZones, getDistanceFromAddress, locale, allStores, isPro, grassProduct, undefined, { useStoreAddress: 'sainte-julie' }, customPriceList);
579
- return [...installItems, ...applied.itemsToAdd];
580
- };
581
- exports.getGrassServicesFees = getGrassServicesFees;
582
- const getGrassSubQuestionsByType = (type) => {
583
- if (type === 'pro') {
584
- return products_2.otherGrassSubQuestions.filter((sub) => !!sub.proOnly);
585
- }
586
- return products_2.otherGrassSubQuestions.filter((sub) => 'installation-gazon' === sub.associatedProductSlug || (!!sub.installOnly && !!!sub.proOnly));
587
- };
588
- exports.getGrassSubQuestionsByType = getGrassSubQuestionsByType;
589
- const handleGrassProductQtyRoundForShipping = (cartData, grassProduct) => {
590
- if (!!!cartData || !!!grassProduct)
591
- return;
592
- const product = cartData.items.find((item) => item.sku === grassProduct.sku);
593
- if (!!!product)
594
- return;
595
- const productOtherUnits = product.other_units;
596
- if (!!!productOtherUnits)
597
- return;
598
- const palUnit = productOtherUnits.find((u) => u.unit_slug === 'pal');
599
- const rounded = (0, exports.roundGrassQte)(product.qte, !!!cartData.is_pickup, palUnit);
600
- if (!!!rounded || rounded === grassProduct.qte)
601
- return;
602
- let itemsToChange = [];
603
- const recursiveGrassItem = (0, cart_1.getRecursiveItems)(cartData.items).find((item) => item.sku === grassProduct.sku);
604
- const getItemsToChange = (item) => {
605
- if (!!item.sub_items) {
606
- item.sub_items.forEach((subItem) => getItemsToChange(subItem));
607
- }
608
- if (item.parent_slug === 'frais-de-mobilisation') {
609
- const totalPallet = (0, expedition_1.getPalletQty)(cartData.items.map((i) => {
610
- if ((0, exports.checkIfProductIsOfType)(i, 'gazon')) {
611
- return Object.assign(Object.assign({}, i), { qte: rounded });
612
- }
613
- return i;
614
- }), 'grass');
615
- itemsToChange.push({
616
- sku: item.sku,
617
- qte: (0, ceil_1.default)(totalPallet / expedition_1.installationFeePalletTier)
618
- });
619
- return;
620
- }
621
- if (!!item.is_upsell_of_sku) {
622
- const parentUpsellProd = cartData.items.find((i) => i.sku === item.is_upsell_of_sku);
623
- if (!!parentUpsellProd) {
624
- const sameUpsell = (parentUpsellProd.product_upsells || []).find((up) => up.recommendation_sku === item.sku);
625
- if (!!sameUpsell) {
626
- const anUpsellProduct = Object.assign(Object.assign(Object.assign(Object.assign({}, item), { parent_slug: sameUpsell.recommendation_parent_slug, recommended_qte: sameUpsell.recommendation_qty, recommended_sku: sameUpsell.recommendation_sku, matching_qte: !!sameUpsell.matching_qty, auto_add: sameUpsell.auto_add, auto_add_exceptions: sameUpsell.auto_add_exceptions, actual_qte: sameUpsell.actual_qty }), (!!sameUpsell.is_recommendation ? { is_recommendation: true } : {})), (!!sameUpsell.show_recommendation_msg ? { show_recommendation_msg: true } : {}));
627
- const ratio = (0, upsells_1.calculateUpsellQte)(anUpsellProduct, rounded);
628
- if (!!ratio) {
629
- itemsToChange.push({
630
- sku: item.sku,
631
- qte: ratio
632
- });
633
- return;
634
- }
635
- }
636
- }
637
- }
638
- itemsToChange.push({
639
- sku: item.sku,
640
- qte: rounded
641
- });
642
- return;
643
- };
644
- if (!!recursiveGrassItem) {
645
- getItemsToChange(recursiveGrassItem);
646
- }
647
- return { rounded, itemsToChange };
648
- };
649
- exports.handleGrassProductQtyRoundForShipping = handleGrassProductQtyRoundForShipping;
650
- const roundGrassQte = (currentQte, isShipping, palUnit) => {
651
- let newQte = currentQte;
652
- switch (true) {
653
- case currentQte < 1480:
654
- const rest1480 = currentQte % 10;
655
- if (rest1480 !== 0) {
656
- newQte = currentQte - rest1480 + 10;
657
- }
658
- break;
659
- case currentQte >= 1480 && !!!isShipping:
660
- const rest1480Install = currentQte % 10;
661
- if (rest1480Install !== 0) {
662
- newQte = currentQte - rest1480Install + 10;
663
- }
664
- break;
665
- case currentQte >= 1480:
666
- if (!!palUnit && !!palUnit.fitting_unit) {
667
- let rest1480 = currentQte % palUnit.fitting_unit;
668
- if (rest1480 !== 0 && !!((rest1480 - 400) % palUnit.fitting_unit)) {
669
- newQte = currentQte - rest1480;
670
- if (newQte + 400 > currentQte) {
671
- newQte = newQte + 400;
672
- }
673
- else if (newQte + palUnit.fitting_unit > currentQte) {
674
- newQte = newQte + palUnit.fitting_unit;
675
- }
676
- }
677
- }
678
- break;
679
- }
680
- return newQte;
681
- };
682
- exports.roundGrassQte = roundGrassQte;
683
- const getInstallationArray = async (qte, baseGrassUpsells, fetchProduct, locale, isPro, chosenSku, customPriceList, returnOtherFees) => {
684
- const upsell = baseGrassUpsells;
685
- if (!!!upsell)
686
- return [];
687
- const installation_upsell = upsell.filter((upsell) => upsell.recommendation_parent_slug === 'installation-gazon');
688
- const installation_parent = await fetchProduct('installation-gazon', locale, true, true);
689
- let installation_decli;
690
- const minQteInstall = (0, expedition_1.getMinQteInstall)(isPro);
691
- let arrayFinal = [];
692
- if (!!installation_parent && !!installation_upsell && !!installation_upsell.length) {
693
- let installation_array = [];
694
- if (!!isPro) {
695
- installation_array = installation_parent.declinations.filter((decli) => !!decli.attributes &&
696
- !!decli.attributes[data_1.AttributesIdEnumGR.CLIENT_TYPE] &&
697
- !!decli.attributes[data_1.AttributesIdEnumGR.CLIENT_TYPE].includes('pro'));
698
- }
699
- else {
700
- installation_array = installation_parent.declinations.filter((decli) => !!decli.attributes &&
701
- !!decli.attributes[data_1.AttributesIdEnumGR.CLIENT_TYPE] &&
702
- !!decli.attributes[data_1.AttributesIdEnumGR.CLIENT_TYPE].includes('au-detail'));
703
- }
704
- const installation_qte_array = installation_upsell.filter((upsell) => installation_array.find((decli) => decli.sku === upsell.recommendation_sku));
705
- const closestQte = (0, maxBy_1.default)(installation_qte_array.filter((upsell) => {
706
- return upsell.actual_qty <= qte;
707
- }), 'actual_qty');
708
- if (!!closestQte) {
709
- installation_decli = installation_parent.declinations.find((decli) => decli.sku === closestQte.recommendation_sku);
710
- if (!!installation_decli) {
711
- if (!!isPro && !!customPriceList) {
712
- installation_decli = (0, g2_1.checkForCustomPriceEquivalent)(installation_decli, customPriceList);
713
- }
714
- if (!(0, exports.shouldHideItemIfRegPriceIs0)(installation_decli, installation_parent.slug)) {
715
- arrayFinal.push(Object.assign(Object.assign({}, installation_decli), { parent_slug: 'installation-gazon', qte: qte, is_upsell_of_sku: chosenSku, product_upsells: installation_parent.product_upsells }));
716
- }
717
- }
718
- if (qte < minQteInstall) {
719
- const minimum_installation_fee = await fetchProduct('frais-minimum-gazon-pour-installation', locale, true, true);
720
- if (!!minimum_installation_fee) {
721
- let minInstallDecli = minimum_installation_fee.declinations[0];
722
- minInstallDecli = Object.assign(Object.assign({}, minInstallDecli), { regular_price: Object.assign(Object.assign({}, minInstallDecli.regular_price), { amount: installation_decli.regular_price.amount }) });
723
- if (!!isPro && !!customPriceList) {
724
- minInstallDecli = (0, g2_1.checkForCustomPriceEquivalent)(Object.assign(Object.assign({}, minInstallDecli), { price_override: true }), customPriceList);
725
- }
726
- if (!(0, exports.shouldHideItemIfRegPriceIs0)(minInstallDecli, minimum_installation_fee.slug)) {
727
- arrayFinal.push(Object.assign(Object.assign({}, minInstallDecli), { parent_slug: 'frais-minimum-gazon-pour-installation', qte: minQteInstall - qte, is_upsell_of_sku: installation_decli.sku, price_override: true }));
728
- }
729
- }
730
- }
731
- const mobilisation_fee = await fetchProduct('frais-de-mobilisation', locale, true, true);
732
- if (!!mobilisation_fee && !!isPro) {
733
- let mobilisationDecli = mobilisation_fee.declinations[0];
734
- if (!!customPriceList) {
735
- mobilisationDecli = (0, g2_1.checkForCustomPriceEquivalent)(mobilisationDecli, customPriceList);
736
- }
737
- if (!(0, exports.shouldHideItemIfRegPriceIs0)(mobilisationDecli, mobilisation_fee.slug, true)) {
738
- arrayFinal.push(Object.assign(Object.assign({}, mobilisationDecli), { parent_slug: 'frais-de-mobilisation', qte: (0, ceil_1.default)(qte > minQteInstall
739
- ? qte / (740 * expedition_1.installationFeePalletTier)
740
- : minQteInstall / (740 * expedition_1.installationFeePalletTier)), is_upsell_of_sku: installation_decli.sku, product_upsells: mobilisation_fee.product_upsells }));
741
- }
742
- }
743
- if (!!returnOtherFees) {
744
- if (!!returnOtherFees.engrais) {
745
- const fertilisation = await fetchProduct('installation-fertilisation', locale, true, true);
746
- if (!!fertilisation) {
747
- let minFertilisationDecli = fertilisation.declinations[0];
748
- if (!!isPro && !!customPriceList) {
749
- minFertilisationDecli = (0, g2_1.checkForCustomPriceEquivalent)(minFertilisationDecli, customPriceList);
750
- }
751
- if (!(0, exports.shouldHideItemIfRegPriceIs0)(minFertilisationDecli, fertilisation.slug, true)) {
752
- arrayFinal.push(Object.assign(Object.assign({}, minFertilisationDecli), { parent_slug: fertilisation.slug, qte: qte < minQteInstall ? minQteInstall : qte, is_upsell_of_sku: installation_decli.sku, product_upsells: fertilisation.product_upsells }));
753
- }
754
- }
755
- }
756
- if (returnOtherFees.roulage) {
757
- const roullage = await fetchProduct('installation-roulage', locale, true, true);
758
- if (!!roullage) {
759
- let minRoulageDecli = roullage.declinations[0];
760
- if (!!isPro && !!customPriceList) {
761
- minRoulageDecli = (0, g2_1.checkForCustomPriceEquivalent)(minRoulageDecli, customPriceList);
762
- }
763
- if (!(0, exports.shouldHideItemIfRegPriceIs0)(minRoulageDecli, roullage.slug, true)) {
764
- arrayFinal.push(Object.assign(Object.assign({}, minRoulageDecli), { parent_slug: roullage.slug, qte: qte < minQteInstall ? minQteInstall : qte, is_upsell_of_sku: installation_decli.sku, product_upsells: roullage.product_upsells }));
765
- }
766
- }
767
- }
768
- }
769
- }
770
- }
771
- return arrayFinal;
772
- };
773
- exports.getInstallationArray = getInstallationArray;
774
- const getInstallItemPrice = (parentSlug, servicesFees) => {
775
- let price = 0;
776
- switch (parentSlug) {
777
- case 'installation-gazon':
778
- const itemsToUse = servicesFees.filter((i) => i.parent_slug && ['installation-gazon', 'frais-de-mobilisation'].includes(i.parent_slug));
779
- if (!!itemsToUse) {
780
- price = (0, sumBy_1.default)(itemsToUse, (item) => (0, products_1.getLowestPrice)(item).price.amount * item.qte);
781
- }
782
- break;
783
- default:
784
- const itemToUse = servicesFees.find((i) => i.parent_slug === parentSlug);
785
- if (!!itemToUse) {
786
- price = (0, products_1.getLowestPrice)(itemToUse).price.amount * itemToUse.qte;
787
- }
788
- break;
789
- }
790
- return price;
791
- };
792
- exports.getInstallItemPrice = getInstallItemPrice;
793
- const getConcreteQteText = (declination, locale = 'fr') => {
794
- let txt = '';
795
- if (!!!declination)
796
- return txt;
797
- let nbSaleUnitsPerCmdStep = 0;
798
- let nbUnitsPerPal = 0;
799
- const other_units = declination.other_units;
800
- if (!!!other_units || !!!other_units.length) {
801
- return '';
802
- }
803
- else {
804
- const commandStep = other_units.find((unit) => unit.is_command_step);
805
- const commandUnit = other_units.find((unit) => unit.is_command_unit);
806
- const saleUnit = other_units.find((unit) => unit.is_sale_unit);
807
- const unitsPerPal = other_units.find((unit) => unit.unit_slug === 'pal');
808
- if (!!commandStep &&
809
- !!commandStep.fitting_unit &&
810
- !!commandUnit &&
811
- !!commandUnit.fitting_unit &&
812
- !!saleUnit &&
813
- !!saleUnit.fitting_unit &&
814
- !!unitsPerPal &&
815
- !!unitsPerPal.fitting_unit) {
816
- const cmdSameAsSale = commandStep.unit_slug === saleUnit.unit_slug;
817
- const nbP2PerRgSlug = !!cmdSameAsSale ? commandUnit.unit_slug : saleUnit.unit_slug;
818
- nbSaleUnitsPerCmdStep = !!cmdSameAsSale
819
- ? commandStep.fitting_unit / commandUnit.fitting_unit
820
- : commandStep.fitting_unit / saleUnit.fitting_unit;
821
- nbUnitsPerPal =
822
- commandStep.fitting_unit == 1 && !!!commandStep.is_sale_unit
823
- ? unitsPerPal.fitting_unit *
824
- (0, round_1.default)(nbSaleUnitsPerCmdStep, (0, exports.productUnitSupportsDecimals)(saleUnit.unit_slug) ? 5 : 0)
825
- : unitsPerPal.fitting_unit / saleUnit.fitting_unit;
826
- txt = (0, locale_1.translateILang)({
827
- fr: 'Pour ce produit, vous devez commander par *cmdStep* (*nbUnitsPerCmdStep*).',
828
- en: 'For this product, you have to order by *cmdStep* (*nbUnitsPerCmdStep*).'
829
- }, locale);
830
- if (unitsPerPal.unit_slug != commandStep.unit_slug) {
831
- txt += (0, locale_1.translateILang)({
832
- fr: ' Une palette = *nbUnitsPerPal*.',
833
- en: ' A pallet = *nbUnitsPerPal*.'
834
- }, locale);
835
- }
836
- txt = txt.replace('*cmdStep*', String(`${(0, locale_1.translateILang)(inventories_1.unitDict[commandStep.unit_slug], locale).toLowerCase()}`));
837
- txt = txt.replace('*nbUnitsPerCmdStep*', String(`${(0, round_1.default)(nbSaleUnitsPerCmdStep, 2)} ${(0, locale_1.translateILang)(inventories_1.unitDict[nbP2PerRgSlug], locale).toLowerCase()}`));
838
- txt = txt.replace('*nbUnitsPerPal*', String(`${(0, round_1.default)(nbUnitsPerPal, 2)} ${(0, locale_1.translateILang)(inventories_1.unitDict[saleUnit.unit_slug], locale).toLowerCase()}`));
839
- }
840
- else {
841
- return '';
842
- }
843
- }
844
- return txt;
845
- };
846
- exports.getConcreteQteText = getConcreteQteText;
847
- const getConcreteItemsByAvailability = (cartData, availabilityType, returnTrueIfUndefined) => {
848
- return cartData.items.filter((i) => {
849
- return ((i.attributes[data_1.AttributesIdEnumGR.AVAILABILITY] &&
850
- i.attributes[data_1.AttributesIdEnumGR.AVAILABILITY][0] === availabilityType) ||
851
- !!returnTrueIfUndefined);
852
- });
853
- };
854
- exports.getConcreteItemsByAvailability = getConcreteItemsByAvailability;
855
- const getVracType = async (stores, cartData, getInventoryItemCallback, inventoyItemArray) => {
856
- const items = cartData.items;
857
- if (!!!items ||
858
- !!!items.length ||
859
- (!!!(0, cart_1.checkIfCartContainsType)(cart_2.CartGeneralTypeEnum.VRAC, cartData) &&
860
- !!!cartData.items.find((item) => !!item.is_other_type && item.is_other_type === 'vrac')))
861
- return;
862
- let allStoreIds = stores.map((store) => store.id);
863
- let itemFormat = '';
864
- await Promise.all(items.map(async (item) => {
865
- const productInventory = !!!item.is_service
866
- ? !!inventoyItemArray && !!inventoyItemArray.length
867
- ? inventoyItemArray.find((i) => i.sku === item.sku)
868
- : await getInventoryItemCallback(item.sku)
869
- : undefined;
870
- if (!!!productInventory)
871
- return;
872
- allStoreIds = allStoreIds.filter((id) => {
873
- const sameStoreInProdInventory = productInventory.inventories.find((i) => i.store_id === id);
874
- if (!!!sameStoreInProdInventory)
875
- return true;
876
- return !!!sameStoreInProdInventory.unavailable_in_store;
877
- });
878
- if (!!!itemFormat && !!item.attributes && !!item.attributes[data_1.AttributesIdEnumGR.FORMATS]) {
879
- itemFormat = item.attributes[data_1.AttributesIdEnumGR.FORMATS][0];
880
- }
881
- }));
882
- const onlySteJulieNobel = allStoreIds.length === 1 && allStoreIds[0] === 'sainte-julie-nobel';
883
- if (!!itemFormat.includes('sac')) {
884
- return {
885
- vrac_type: !!onlySteJulieNobel ? products_3.VracTypeEnum.NOBEL_SAC : products_3.VracTypeEnum.AUTRE_SAC,
886
- vrac_store_ids: allStoreIds
887
- };
888
- }
889
- else {
890
- return {
891
- vrac_type: !!onlySteJulieNobel ? products_3.VracTypeEnum.NOBEL_TONNE : products_3.VracTypeEnum.AUTRE_TONNE,
892
- vrac_store_ids: allStoreIds
893
- };
894
- }
895
- };
896
- exports.getVracType = getVracType;
897
- const fetchFeesBeforeCart = async (useFees, newCart, deliveryType, fetchProduct, getIfAddressIsInsideZones, getDistanceFromAddress, locale, allStores, isPro, grassProduct, concreteOrder, settings, customPriceList) => {
898
- const cartContainsVrac = (0, cart_1.checkIfCartContainsType)(cart_2.CartGeneralTypeEnum.VRAC, newCart);
899
- const cartContainsInstallation = (0, cart_1.checkIfCartContainsType)(cart_2.CartGeneralTypeEnum.INSTALLATION, newCart);
900
- const cartContainsSample = (0, cart_1.checkIfCartContainsType)(cart_2.CartGeneralTypeEnum.SAMPLE, newCart);
901
- const cartContainsAccessoriesOnly = (0, cart_1.checkIfCartContainsType)(cart_2.CartGeneralTypeEnum.ONLY_ACCESSORIES, newCart);
902
- const storeToUse = !!settings && !!settings.useStoreAddress ? allStores.find((s) => s.id == settings.useStoreAddress) : undefined;
903
- const storeAddressToUse = !!storeToUse ? storeToUse.address : undefined;
904
- return await (0, expedition_1.applyFeesToCart)(fetchProduct, getIfAddressIsInsideZones, getDistanceFromAddress, newCart, deliveryType, grassProduct, concreteOrder, deliveryType === 'pickup' ? false : cartContainsInstallation, cartContainsVrac, (0, object_1.recursiveCheckObject)(settings, 'useAvailableVracStores'), isPro, deliveryType === 'pickup' ? !!settings && !!settings.addOnePalletToPickup : false, cartContainsSample, !!settings ? !!settings.saveToShippingPayload : false, !!!settings
905
- ? undefined
906
- : !!settings.useStoreAddress && !!storeAddressToUse
907
- ? storeAddressToUse
908
- : !!settings.useDeliveryAddress && !!newCart.shipping_address
909
- ? newCart.shipping_address.address
910
- : undefined, locale, undefined, false, cartContainsAccessoriesOnly, undefined, allStores, customPriceList, !!useFees);
911
- };
912
- exports.fetchFeesBeforeCart = fetchFeesBeforeCart;
913
- const shouldShowProCustomPromo = (userData, isPro, product, customMinPrice) => {
914
- if (!!!product || !!!isPro || !!!userData)
915
- return false;
916
- if (!!customMinPrice) {
917
- if (customMinPrice.type === G2_1.CustomPriceItemTypeEnum.REG && customMinPrice.code2 !== 'NET')
918
- return false;
919
- return true;
920
- }
921
- const customerGroup = (0, object_1.recursiveCheckObject)(userData, 'userData.basic_info.customer_professionnal_info.external_customer_group');
922
- const customerType = !!customerGroup ? (0, g2_1.getG2CustomerTypeFromCode)(customerGroup) : undefined;
923
- const prodPriceClass = !!product.price_classes_range
924
- ? product.price_classes_range.find((range) => !!customerType && range.external_slug ? range.external_slug === customerType : range.class === 'aspirant')
925
- : !!product.prices_list
926
- ? product.prices_list.find((range) => !!customerType && range.external_slug ? range.external_slug === customerType : range.group_id === 'aspirant')
927
- : undefined;
928
- return !!prodPriceClass && !!prodPriceClass.custom_promo_applies;
929
- };
930
- exports.shouldShowProCustomPromo = shouldShowProCustomPromo;
931
- const applyProCustomPromo = (decli, userData) => {
932
- const customerCode = userData.basic_info.customer_professionnal_info &&
933
- userData.basic_info.customer_professionnal_info.external_customer_group;
934
- if (!!!customerCode)
935
- return {};
936
- const customerCustomPromo = (0, g2_1.getG2DiscountFromCode)(customerCode);
937
- if (!!!customerCustomPromo)
938
- return {};
939
- const regPrice = decli.regular_price.amount;
940
- const newDiscountAmount = (0, toNumber_1.default)(regPrice) * ((100 - customerCustomPromo) / 100);
941
- let newPromoObj = (0, IDiscountRule_1.getDefaultDiscountRule)('product');
942
- newPromoObj = Object.assign(Object.assign({}, newPromoObj), { appliesTo: Object.assign(Object.assign({}, newPromoObj.appliesTo), { label: IDiscountRule_1.AppliesToEnum.PRODUCT, value: decli.sku }), rules: [
943
- {
944
- field: IDiscountRule_1.RuleFieldEnum.CUSTOMER,
945
- condition: IDiscountRule_1.RuleConditionEnum.AND,
946
- ruleDetails: [
947
- {
948
- operator: '==',
949
- value: [userData.id],
950
- condition: IDiscountRule_1.RuleConditionEnum.AND
951
- }
952
- ]
953
- }
954
- ], result: {
955
- action: IDiscountRule_1.ResultActionEnum.PERCENT,
956
- action_value: customerCustomPromo
957
- } });
958
- return {
959
- discount_rules: [newPromoObj],
960
- promo_price: {
961
- currency: 'CAD',
962
- amount: (0, round_1.default)(newDiscountAmount, 3)
963
- }
964
- };
965
- };
966
- exports.applyProCustomPromo = applyProCustomPromo;
967
- const getFormattedProdGR = (decli, productSlug, isPro) => {
968
- const { promo_price, discount_price, tier_pricing } = decli, rest = __rest(decli, ["promo_price", "discount_price", "tier_pricing"]);
969
- return !!isPro ? Object.assign(Object.assign({}, rest), (productSlug !== 'kentucky' ? { tier_pricing } : {})) : decli;
970
- };
971
- exports.getFormattedProdGR = getFormattedProdGR;
972
- const shouldHideItemIfRegPriceIs0 = (item, productSlug, isUpsellOfInstallProd) => {
973
- const regPriceIs0 = item.regular_price.amount == 0;
974
- if (!regPriceIs0)
975
- return false;
976
- if (!item.is_service)
977
- return false;
978
- if (!!isUpsellOfInstallProd)
979
- return false;
980
- if (expedition_1.slugsToCheckFromExpeditionFees.shipping.includes(productSlug))
981
- return false;
982
- return true;
983
- };
984
- exports.shouldHideItemIfRegPriceIs0 = shouldHideItemIfRegPriceIs0;
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.shouldHideItemIfRegPriceIs0 = exports.getFormattedProdGR = exports.applyProCustomPromo = exports.shouldShowProCustomPromo = exports.fetchFeesBeforeCart = exports.getVracType = exports.getConcreteItemsByAvailability = exports.getConcreteQteText = exports.getInstallItemPrice = exports.getInstallationArray = exports.roundGrassQte = exports.handleGrassProductQtyRoundForShipping = exports.getGrassSubQuestionsByType = exports.getGrassServicesFees = exports.getGrassQteText = exports.getMinQtyFeeAmountText = exports.getMinQtyFeeText = exports.getAllMinGrassQuantities = exports.isMinQtyFee = exports.fuseGrassProducts = exports.getAllInstallFromItems = exports.checkIfProductIsInstallation = exports.checkIfProductIsOfType = exports.getProductFormOptions = exports.getParentProductCategoryGroup = exports.getProdName = exports.splitOnDashes = exports.getRoundedUnitProductQuantities = exports.getRoundedSellUnitProductQuantities = exports.getDescriptionString = exports.getDescriptionLength = exports.getProductAttributes = exports.productUnitSupportsDecimals = exports.getCorrectPluralSellUnit = exports.getPluralUnitLabelWithSlug = exports.getUnitLabelWithSlug = exports.getProductUnitLabel = exports.getProductSellUnitLabel = void 0;
18
+ const ceil_1 = __importDefault(require("lodash/ceil"));
19
+ const maxBy_1 = __importDefault(require("lodash/maxBy"));
20
+ const orderBy_1 = __importDefault(require("lodash/orderBy"));
21
+ const toNumber_1 = __importDefault(require("lodash/toNumber"));
22
+ const round_1 = __importDefault(require("lodash/round"));
23
+ const flatten_1 = __importDefault(require("lodash/flatten"));
24
+ const uniqBy_1 = __importDefault(require("lodash/uniqBy"));
25
+ const sumBy_1 = __importDefault(require("lodash/sumBy"));
26
+ const floor_1 = __importDefault(require("lodash/floor"));
27
+ const Cart_1 = require("../../../Interfaces/Cart");
28
+ const G2_1 = require("../../../Interfaces/G2");
29
+ const IDiscountRule_1 = require("../../../Interfaces/Rules/IDiscountRule");
30
+ const string_1 = require("../../../utils/string");
31
+ const locale_1 = require("../../../utils/locale");
32
+ const inventories_1 = require("../../../utils/inventories");
33
+ const products_1 = require("../../../utils/products");
34
+ const expedition_1 = require("./expedition");
35
+ const products_2 = require("../constants/products");
36
+ const g2_1 = require("./g2");
37
+ const cart_1 = require("./cart");
38
+ const products_3 = require("../interfaces/products");
39
+ const data_1 = require("../interfaces/data");
40
+ const cart_2 = require("../interfaces/cart");
41
+ const upsells_1 = require("./upsells");
42
+ const object_1 = require("../../../utils/object");
43
+ const pluralSellUnits = {
44
+ p2: { fr: 'pi²', en: 'sqft' },
45
+ sac: { fr: 'sacs', en: 'bags' },
46
+ unite: { fr: 'unités', en: 'units' },
47
+ tonne: { fr: 'tonnes', en: 'tons' },
48
+ rouleau: { fr: 'rouleaux', en: 'rolls' }
49
+ };
50
+ const pluralSellUnitsBySlug = {
51
+ p2: { fr: 'pi²', en: 'sqft' },
52
+ sac: { fr: 'sacs', en: 'bags' },
53
+ unite: { fr: 'unités', en: 'units' },
54
+ tonne: { fr: 'tonnes', en: 'tons' },
55
+ roul: { fr: 'rouleaux', en: 'rolls' },
56
+ pal: { fr: 'palettes', en: 'pallets' },
57
+ rg: { fr: 'rangs', en: 'rows' },
58
+ ensemble: { fr: 'ensembles', en: 'kits' },
59
+ pl: { fr: 'pL', en: 'linear feet' },
60
+ mcx: { fr: 'morceaux', en: 'pieces' },
61
+ vg3: { fr: 'vg³', en: 'yd³' },
62
+ demipalsm: { fr: 'Demi-palettes (petite)', en: 'Half-pallets (small)' },
63
+ demipallg: { fr: 'Demi-palettes (lg)', en: 'Half-pallets (lg)' },
64
+ tonnes: { fr: 'tonnes', en: 'tons' },
65
+ bte: { fr: 'boîtes', en: 'boxes' },
66
+ pqt: { fr: 'paquets', en: 'bundles' },
67
+ '': { fr: 'unités', en: 'units' }
68
+ };
69
+ const sellUnitsBySlug = {
70
+ p2: { fr: 'pi²', en: 'sqft' },
71
+ sac: { fr: 'sac', en: 'bag' },
72
+ unite: { fr: 'unité', en: 'unit' },
73
+ tonne: { fr: 'tonne', en: 'ton' },
74
+ roul: { fr: 'rouleau', en: 'roll' },
75
+ pal: { fr: 'palette', en: 'pallet' },
76
+ rg: { fr: 'rang', en: 'row' },
77
+ ensemble: { fr: 'ensemble', en: 'kit' },
78
+ pl: { fr: 'pL', en: 'linear feet' },
79
+ mcx: { fr: 'morceau', en: 'piece' },
80
+ vg3: { fr: 'vg³', en: 'yd³' },
81
+ demipalsm: { fr: 'Demi-palette (petite)', en: 'Half-pallet (small)' },
82
+ demipallg: { fr: 'Demi-palette (lg)', en: 'Half-pallet (lg)' },
83
+ tonnes: { fr: 'tonne', en: 'ton' },
84
+ bte: { fr: 'boîte', en: 'box' },
85
+ pqt: { fr: 'paquet', en: 'bundle' },
86
+ '': { fr: 'unité', en: 'unit' }
87
+ };
88
+ const getProductSellUnitLabel = (otherUnits, locale = 'fr', returnUnitForSlugs, options = {}) => {
89
+ if (!!!otherUnits)
90
+ return '';
91
+ const sellingUnit = otherUnits.find((unit) => !!unit.is_sale_unit);
92
+ if (!!!sellingUnit)
93
+ return '';
94
+ return (0, exports.getUnitLabelWithSlug)(sellingUnit.unit_slug, locale, options.returnPlural, returnUnitForSlugs, options.returnShortByDefault);
95
+ };
96
+ exports.getProductSellUnitLabel = getProductSellUnitLabel;
97
+ const getProductUnitLabel = (otherUnits, type, locale = 'fr', returnUnitForSlugs, options = {}) => {
98
+ if (!!!otherUnits)
99
+ return '';
100
+ const unitToUse = otherUnits.find((unit) => (type == 'sale_unit' ? unit.is_sale_unit : unit.is_inventory_unit));
101
+ if (!!!unitToUse)
102
+ return '';
103
+ return (0, exports.getUnitLabelWithSlug)(unitToUse.unit_slug, locale, options.returnPlural, returnUnitForSlugs, options.returnShortByDefault);
104
+ };
105
+ exports.getProductUnitLabel = getProductUnitLabel;
106
+ const getUnitLabelWithSlug = (unitSlug, locale = 'fr', getPluralVersion = false, returnUnitForSlugs, returnShortByDefault) => {
107
+ if (!!returnUnitForSlugs && !!returnUnitForSlugs.includes(unitSlug)) {
108
+ return (0, exports.getUnitLabelWithSlug)('unite', locale, getPluralVersion);
109
+ }
110
+ if (!!getPluralVersion)
111
+ return (0, exports.getPluralUnitLabelWithSlug)(unitSlug, locale, returnUnitForSlugs, returnShortByDefault);
112
+ const shortVersion = !!(0, inventories_1.getUnitShortDict)(unitSlug) ? (0, locale_1.translateILang)((0, inventories_1.getUnitShortDict)(unitSlug), locale) : '';
113
+ const longVersion = !!sellUnitsBySlug[unitSlug] ? (0, locale_1.translateILang)(sellUnitsBySlug[unitSlug], locale) : '';
114
+ if (!!returnShortByDefault)
115
+ return shortVersion;
116
+ return longVersion || shortVersion || unitSlug;
117
+ };
118
+ exports.getUnitLabelWithSlug = getUnitLabelWithSlug;
119
+ const getPluralUnitLabelWithSlug = (unitSlug, locale = 'fr', returnUnitForSlugs, useShortIfDifferent) => {
120
+ if (!!returnUnitForSlugs && !!returnUnitForSlugs.includes(unitSlug)) {
121
+ return (0, locale_1.translateILang)(pluralSellUnitsBySlug['unite'], locale);
122
+ }
123
+ const shortVersion = !!(0, inventories_1.getUnitShortDict)(unitSlug) ? (0, locale_1.translateILang)((0, inventories_1.getUnitShortDict)(unitSlug), locale) : '';
124
+ const normalVersion = !!sellUnitsBySlug[unitSlug] ? (0, locale_1.translateILang)(sellUnitsBySlug[unitSlug], locale) : '';
125
+ const pluralVersion = !!pluralSellUnitsBySlug[unitSlug] ? (0, locale_1.translateILang)(pluralSellUnitsBySlug[unitSlug], locale) : '';
126
+ if (useShortIfDifferent && shortVersion != normalVersion)
127
+ return shortVersion;
128
+ return pluralVersion || shortVersion || unitSlug;
129
+ };
130
+ exports.getPluralUnitLabelWithSlug = getPluralUnitLabelWithSlug;
131
+ const getCorrectPluralSellUnit = (sellUnit, locale = 'fr') => {
132
+ if (!!!sellUnit.unit)
133
+ return '';
134
+ const frSellUnit = (0, string_1.string_to_slug)((0, locale_1.translateILang)(sellUnit.unit, 'fr'));
135
+ return !!pluralSellUnits[frSellUnit]
136
+ ? (0, locale_1.translateILang)(pluralSellUnits[frSellUnit], locale)
137
+ : (0, locale_1.translateILang)(sellUnit.unit, locale);
138
+ };
139
+ exports.getCorrectPluralSellUnit = getCorrectPluralSellUnit;
140
+ const productUnitSupportsDecimals = (unitSlug, isService) => {
141
+ return !!isService || !!['p2', 'pl', 'vg3', 'tonne'].includes(unitSlug);
142
+ };
143
+ exports.productUnitSupportsDecimals = productUnitSupportsDecimals;
144
+ const getProductAttributes = (product) => {
145
+ const arrColor = !!product.attributes[data_1.AttributesIdEnumGR.SUBCOLOR]
146
+ ? product.attributes[data_1.AttributesIdEnumGR.SUBCOLOR]
147
+ : [];
148
+ const arrDimensions = !!product.attributes[data_1.AttributesIdEnumGR.DIMENSIONS]
149
+ ? product.attributes[data_1.AttributesIdEnumGR.DIMENSIONS]
150
+ : [];
151
+ const arrFormats = !!product.attributes[data_1.AttributesIdEnumGR.FORMATS]
152
+ ? product.attributes[data_1.AttributesIdEnumGR.FORMATS]
153
+ : [];
154
+ return { colors: arrColor, dimensions: arrDimensions, formats: arrFormats };
155
+ };
156
+ exports.getProductAttributes = getProductAttributes;
157
+ const getDescriptionLength = (description, locale = 'fr') => {
158
+ if (!!!description || !!!(0, locale_1.getLocaleOfDictionnary)(description, locale))
159
+ return 0;
160
+ return (0, string_1.stripHTML)((0, locale_1.getLocaleOfDictionnary)(description, locale)).length;
161
+ };
162
+ exports.getDescriptionLength = getDescriptionLength;
163
+ const getDescriptionString = (showFullDesc, maxLength, description, locale = 'fr') => {
164
+ if (!!showFullDesc || (0, exports.getDescriptionLength)(description, locale) <= maxLength) {
165
+ return (0, string_1.stripHTML)((0, locale_1.getLocaleOfDictionnary)(description, locale));
166
+ }
167
+ let truncated = (0, string_1.stripHTML)((0, locale_1.getLocaleOfDictionnary)(description, locale)).slice(0, maxLength).split(' ');
168
+ truncated.pop();
169
+ return truncated.join(' ') + ' [...]';
170
+ };
171
+ exports.getDescriptionString = getDescriptionString;
172
+ const getRoundedSellUnitProductQuantities = (value, otherUnits = [], value2, targetIsSecondaryInput = false) => {
173
+ var _a;
174
+ const saleUnit = otherUnits.find((unit) => unit.is_sale_unit);
175
+ const commandUnit = otherUnits.find((unit) => unit.is_command_unit);
176
+ const commandStep = otherUnits.find((unit) => unit.is_command_step);
177
+ let roundedQuantities = {
178
+ qte1: value,
179
+ qte2: value2
180
+ };
181
+ if (!!targetIsSecondaryInput && typeof value2 === 'number') {
182
+ if (!!commandStep && !!commandStep.fitting_unit && !!commandUnit && !!commandUnit.fitting_unit && !!saleUnit) {
183
+ const nbCmdUnitPerCmdStep = (0, round_1.default)(commandStep.fitting_unit / commandUnit.fitting_unit, 5);
184
+ const nbSaleUnitPerCmdStep = (0, round_1.default)(commandStep.fitting_unit / ((_a = saleUnit.fitting_unit) !== null && _a !== void 0 ? _a : 1), (0, exports.productUnitSupportsDecimals)(saleUnit.unit_slug) ? 5 : 0);
185
+ const roundedValue = value2 === 0
186
+ ? 0
187
+ : _roundNbUnitPerCmdStep(value2, nbCmdUnitPerCmdStep, (0, exports.productUnitSupportsDecimals)(saleUnit.unit_slug) ? 2 : 0);
188
+ const nbOfRoundedCmdUnits = roundedValue / nbCmdUnitPerCmdStep;
189
+ const nbOfRoundedSaleUnits = nbOfRoundedCmdUnits * nbSaleUnitPerCmdStep;
190
+ roundedQuantities = {
191
+ qte1: value2 === 0
192
+ ? 0
193
+ : (0, round_1.default)(nbOfRoundedSaleUnits, !!saleUnit && (0, exports.productUnitSupportsDecimals)(saleUnit.unit_slug) ? 2 : 0),
194
+ qte2: roundedValue
195
+ };
196
+ }
197
+ }
198
+ else if (!!commandStep && !!commandStep.fitting_unit && !!saleUnit && !!saleUnit.fitting_unit) {
199
+ const cmdStepFittingUnit = commandStep.fitting_unit;
200
+ const saleFittingUnit = saleUnit.fitting_unit;
201
+ const nbSaleUnitPerCmdStep = (0, round_1.default)(cmdStepFittingUnit / saleFittingUnit, (0, exports.productUnitSupportsDecimals)(saleUnit.unit_slug) ? 5 : 0);
202
+ const roundedValue = value === 0
203
+ ? 0
204
+ : _roundNbUnitPerCmdStep(value, nbSaleUnitPerCmdStep, (0, exports.productUnitSupportsDecimals)(saleUnit.unit_slug) ? 2 : 0);
205
+ let commandUnitQty = undefined;
206
+ if (!!commandUnit && !!commandUnit.fitting_unit) {
207
+ if (value === 0) {
208
+ commandUnitQty = 0;
209
+ }
210
+ else {
211
+ const nbOfCmdSteps = (0, round_1.default)(roundedValue / nbSaleUnitPerCmdStep, (0, exports.productUnitSupportsDecimals)(saleUnit.unit_slug) ? 5 : 0);
212
+ commandUnitQty =
213
+ nbOfCmdSteps *
214
+ (0, round_1.default)(cmdStepFittingUnit / commandUnit.fitting_unit, (0, exports.productUnitSupportsDecimals)(commandUnit.unit_slug) ? 5 : 0);
215
+ commandUnitQty = (0, round_1.default)(commandUnitQty, (0, exports.productUnitSupportsDecimals)(commandUnit.unit_slug) ? 2 : 0);
216
+ }
217
+ }
218
+ roundedQuantities = {
219
+ qte1: roundedValue,
220
+ qte2: commandUnitQty
221
+ };
222
+ }
223
+ return roundedQuantities;
224
+ };
225
+ exports.getRoundedSellUnitProductQuantities = getRoundedSellUnitProductQuantities;
226
+ const getRoundedUnitProductQuantities = (value, otherUnits = [], type) => {
227
+ const unitToTest = type == 'sale_unit'
228
+ ? otherUnits.find((unit) => unit.is_sale_unit)
229
+ : otherUnits.find((unit) => unit.is_inventory_unit);
230
+ const commandStep = otherUnits.find((unit) => unit.is_command_step);
231
+ let roundedQuantities = value;
232
+ if (!!commandStep && !!commandStep.fitting_unit && unitToTest && unitToTest.fitting_unit) {
233
+ const cmdStepFittingUnit = commandStep.fitting_unit;
234
+ const fittingUnit = unitToTest.fitting_unit;
235
+ const nbUnitPerCmdStep = cmdStepFittingUnit / fittingUnit;
236
+ const roundedValue = value === 0
237
+ ? 0
238
+ : _roundNbUnitPerCmdStepV2(value, nbUnitPerCmdStep, (0, exports.productUnitSupportsDecimals)(unitToTest.unit_slug) ? 5 : 0);
239
+ roundedQuantities = roundedValue;
240
+ }
241
+ return roundedQuantities;
242
+ };
243
+ exports.getRoundedUnitProductQuantities = getRoundedUnitProductQuantities;
244
+ const _roundNbUnitPerCmdStepV2 = (value, nbUnitPerCmdStep, decimalsToCheck = 0) => {
245
+ const currentFittingValue = (0, floor_1.default)(value / nbUnitPerCmdStep, 5);
246
+ const roundedUp = (0, round_1.default)((0, ceil_1.default)(currentFittingValue) * nbUnitPerCmdStep, decimalsToCheck);
247
+ return roundedUp;
248
+ };
249
+ const _roundNbUnitPerCmdStep = (value, nbUnitPerCmdStep, decimalsToCheck = 0) => {
250
+ let numberBuffer = 0;
251
+ if (decimalsToCheck > 0) {
252
+ let buffer = '';
253
+ buffer = buffer.padStart(decimalsToCheck - 1, '0');
254
+ numberBuffer = (0, toNumber_1.default)(`0.${buffer}1`);
255
+ }
256
+ const rounded = (0, round_1.default)(value / nbUnitPerCmdStep, decimalsToCheck) * nbUnitPerCmdStep;
257
+ const roundedUp = Math.ceil(value / nbUnitPerCmdStep) * nbUnitPerCmdStep;
258
+ if (rounded == 0 && roundedUp > 0)
259
+ return roundedUp;
260
+ if ((0, round_1.default)(value % nbUnitPerCmdStep, decimalsToCheck) == 0)
261
+ return rounded;
262
+ if ((0, round_1.default)(value, decimalsToCheck) > rounded + numberBuffer)
263
+ return roundedUp;
264
+ if ((0, round_1.default)(rounded, decimalsToCheck) % nbUnitPerCmdStep <= numberBuffer)
265
+ return rounded;
266
+ return roundedUp;
267
+ };
268
+ const splitOnDashes = (stringToSplit, dummyStringToReplace = { currentValue: '%%-%%', newValue: ' - ' }) => {
269
+ let splited = stringToSplit.split(' - ');
270
+ if (splited.length === 1)
271
+ splited = stringToSplit.split(' -');
272
+ if (splited.length === 1)
273
+ splited = stringToSplit.split('- ');
274
+ return [
275
+ splited[0].replace(dummyStringToReplace.currentValue, dummyStringToReplace.newValue),
276
+ ...(!!splited[1]
277
+ ? [splited.slice(1).join(' - ').replace(dummyStringToReplace.currentValue, dummyStringToReplace.newValue)]
278
+ : [])
279
+ ];
280
+ };
281
+ exports.splitOnDashes = splitOnDashes;
282
+ const getProdName = (product, locale) => {
283
+ let name;
284
+ if (!!product.full_name) {
285
+ name = (0, locale_1.getLocaleOfDictionnary)(product.full_name, locale);
286
+ }
287
+ else {
288
+ name = (0, locale_1.getLocaleOfDictionnary)(product.name, locale);
289
+ if (!!product.use_parent && !!product.parent_name) {
290
+ if (typeof product.parent_name === 'string') {
291
+ name = product.parent_name;
292
+ }
293
+ }
294
+ }
295
+ let newNameArray = [];
296
+ const dashesToFind = [' - ', '- ', ' -'];
297
+ if (name.includes('(')) {
298
+ let newStr = '';
299
+ let strWithParenthesisToCheck = name;
300
+ while (strWithParenthesisToCheck.includes('(')) {
301
+ let positionStart = strWithParenthesisToCheck.indexOf('(');
302
+ let positionEnd = strWithParenthesisToCheck.indexOf(')');
303
+ let substrToCheck = strWithParenthesisToCheck.substring(positionStart, positionEnd + 1);
304
+ for (let dash of dashesToFind) {
305
+ substrToCheck = substrToCheck.replace(dash, '-');
306
+ }
307
+ newStr += strWithParenthesisToCheck.substring(0, positionStart) + substrToCheck;
308
+ strWithParenthesisToCheck =
309
+ positionEnd === strWithParenthesisToCheck.length - 1 ? '' : strWithParenthesisToCheck.substring(positionEnd + 1);
310
+ }
311
+ newStr += strWithParenthesisToCheck;
312
+ const positionOfFirst = newStr.indexOf(')');
313
+ let firstPart = newStr.substring(0, positionOfFirst);
314
+ if (positionOfFirst !== newStr.length - 1 && dashesToFind.some((str) => firstPart.includes(str))) {
315
+ const secondPart = newStr.substring(positionOfFirst);
316
+ for (let str of dashesToFind) {
317
+ firstPart.replace(str, '%%-%%');
318
+ }
319
+ newNameArray = (0, exports.splitOnDashes)(`${firstPart}${secondPart}`);
320
+ }
321
+ else {
322
+ newNameArray = (0, exports.splitOnDashes)(newStr);
323
+ }
324
+ }
325
+ else {
326
+ newNameArray = (0, exports.splitOnDashes)(name);
327
+ }
328
+ return newNameArray;
329
+ };
330
+ exports.getProdName = getProdName;
331
+ const getParentProductCategoryGroup = (prod) => {
332
+ let type = 'other';
333
+ if (!!prod.categories && !!prod.categories['lvl0']) {
334
+ const categorySlug = prod.categories['lvl0'];
335
+ switch (categorySlug) {
336
+ case 'gazon':
337
+ if (!!(0, exports.checkIfProductIsOfType)(prod, 'gazon')) {
338
+ type = 'gazon';
339
+ }
340
+ break;
341
+ case 'amenagement-paysager':
342
+ if (!!(0, exports.checkIfProductIsOfType)(prod, 'beton')) {
343
+ type = 'beton';
344
+ }
345
+ break;
346
+ default:
347
+ if (!!(0, exports.checkIfProductIsOfType)(prod, 'vrac')) {
348
+ type = 'vrac';
349
+ }
350
+ break;
351
+ }
352
+ }
353
+ return type;
354
+ };
355
+ exports.getParentProductCategoryGroup = getParentProductCategoryGroup;
356
+ const getProductFormOptions = (product, attributes) => {
357
+ let allColorOptions = [];
358
+ let allDimensionOptions = [];
359
+ let allFormatOptions = [];
360
+ const product_attributes = (0, exports.getProductAttributes)(product);
361
+ let overridenAttributes = product.declinations
362
+ .map((declination) => declination.overriden_attributes)
363
+ .filter((ova) => !!ova);
364
+ overridenAttributes = (0, flatten_1.default)(overridenAttributes);
365
+ overridenAttributes = (0, uniqBy_1.default)(overridenAttributes, 'slug');
366
+ const getOverriddenValues = (prodAttributes, attrId) => {
367
+ const overridenOptions = !!overridenAttributes.length
368
+ ? overridenAttributes.filter((attr) => attr.id === attrId)
369
+ : [];
370
+ let finalOptions = [];
371
+ for (const attr of prodAttributes) {
372
+ let isOverridden = false;
373
+ for (const ovOption of overridenOptions) {
374
+ if (!isOverridden) {
375
+ if (!!attr && attr.slug === ovOption.slug) {
376
+ isOverridden = true;
377
+ finalOptions = [
378
+ ...finalOptions,
379
+ Object.assign(Object.assign({}, attr), { other_details: Object.assign(Object.assign({}, attr.other_details), { image: ovOption.overriden_values }) })
380
+ ];
381
+ }
382
+ }
383
+ }
384
+ if (!isOverridden) {
385
+ finalOptions = [...finalOptions, attr];
386
+ }
387
+ }
388
+ return finalOptions;
389
+ };
390
+ const subColorsAttr = attributes.find((attr) => attr.id === data_1.AttributesIdEnumGR.SUBCOLOR);
391
+ if (!!subColorsAttr) {
392
+ const subColors = subColorsAttr.values;
393
+ const colorsAttributes = subColors.filter((sub) => product_attributes.colors.includes(sub.slug));
394
+ const finalColors = getOverriddenValues(colorsAttributes, data_1.AttributesIdEnumGR.SUBCOLOR);
395
+ allColorOptions = (0, orderBy_1.default)(finalColors, (color) => product.declinations.findIndex((d) => d.attributes[data_1.AttributesIdEnumGR.SUBCOLOR].includes(color.slug)));
396
+ }
397
+ const dimensionsAttr = attributes.find((attr) => attr.id === data_1.AttributesIdEnumGR.DIMENSIONS);
398
+ if (!!dimensionsAttr) {
399
+ const dimensions = dimensionsAttr.values;
400
+ const dimensionsAttributes = dimensions.filter((d) => product_attributes.dimensions.includes(d.slug));
401
+ const finalDimensions = getOverriddenValues(dimensionsAttributes, data_1.AttributesIdEnumGR.DIMENSIONS);
402
+ allDimensionOptions = finalDimensions;
403
+ }
404
+ const formatsAttr = attributes.find((attr) => attr.id === data_1.AttributesIdEnumGR.FORMATS);
405
+ if (!!formatsAttr) {
406
+ const formats = formatsAttr.values;
407
+ allFormatOptions = formats.filter((f) => product_attributes.formats.includes(f.slug));
408
+ }
409
+ return {
410
+ allColors: allColorOptions,
411
+ allDimensions: allDimensionOptions,
412
+ allFormats: allFormatOptions
413
+ };
414
+ };
415
+ exports.getProductFormOptions = getProductFormOptions;
416
+ const checkIfProductIsOfType = (product, type, excludeUndefined) => {
417
+ const attr = !!product && !!product.attributes ? product.attributes : {};
418
+ if (!!!attr[data_1.AttributesIdEnumGR.TYPE] && !!excludeUndefined)
419
+ return true;
420
+ return (!!attr[data_1.AttributesIdEnumGR.TYPE] &&
421
+ Array.isArray(attr[data_1.AttributesIdEnumGR.TYPE]) &&
422
+ attr[data_1.AttributesIdEnumGR.TYPE].includes(type));
423
+ };
424
+ exports.checkIfProductIsOfType = checkIfProductIsOfType;
425
+ const checkIfProductIsInstallation = (item) => {
426
+ return !!item.is_service && !!item.parent_slug && !!item.parent_slug.includes('installation');
427
+ };
428
+ exports.checkIfProductIsInstallation = checkIfProductIsInstallation;
429
+ const getAllInstallFromItems = (items) => {
430
+ return items.filter((i) => (!!i.parent_slug && products_2.installationProductsSlugs.includes(i.parent_slug)) ||
431
+ Object.values(products_2.installationProSpecSkus).includes(i.sku));
432
+ };
433
+ exports.getAllInstallFromItems = getAllInstallFromItems;
434
+ const fuseGrassProducts = (recursiveItems, isPro) => {
435
+ const specialityGrass = recursiveItems[0];
436
+ const kentuckyGrass = (specialityGrass.sub_items || []).find((sub) => sub.sku === products_2.kentucky);
437
+ let newItems = [];
438
+ if (!!kentuckyGrass) {
439
+ const kentuckyPrice = (0, products_1.getLowestPrice)(kentuckyGrass);
440
+ const regPriceKentucky = kentuckyGrass.regular_price.amount;
441
+ const newGrassRegPrice = !!kentuckyPrice.promo ? regPriceKentucky : kentuckyPrice.price.amount;
442
+ const newGrassDiscountPrice = (!!specialityGrass.discount_price
443
+ ? specialityGrass.discount_price.amount
444
+ : specialityGrass.regular_price.amount) +
445
+ (!!kentuckyPrice.promo ? kentuckyPrice.price.amount : regPriceKentucky);
446
+ const getLowestPriceSpecialityGrass = (0, products_1.getLowestPrice)(specialityGrass);
447
+ newItems = [
448
+ Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, specialityGrass), { regular_price: Object.assign(Object.assign({}, specialityGrass.regular_price), { amount: newGrassRegPrice + specialityGrass.regular_price.amount }) }), (!!newGrassDiscountPrice
449
+ ? {
450
+ discount_price: Object.assign(Object.assign({}, (specialityGrass.discount_price || { currency: 'CAD' })), { amount: newGrassDiscountPrice })
451
+ }
452
+ : {})), (!!specialityGrass.promo_price
453
+ ? {
454
+ promo_price: Object.assign(Object.assign({}, specialityGrass.promo_price), { amount: specialityGrass.promo_price.amount + kentuckyPrice.price.amount })
455
+ }
456
+ : {})), (!!!isPro && !!kentuckyGrass.tier_pricing
457
+ ? {
458
+ tier_pricing: kentuckyGrass.tier_pricing.map((t) => (Object.assign(Object.assign({}, t), { price: Object.assign(Object.assign({}, t.price), { amount: t.price.amount + getLowestPriceSpecialityGrass.price.amount }) })))
459
+ }
460
+ : {})), { sub_items: [
461
+ Object.assign(Object.assign({}, kentuckyGrass), { hide_from_summary: true }),
462
+ ...(specialityGrass.sub_items || []).slice(1)
463
+ ] }),
464
+ ...recursiveItems.slice(1)
465
+ ];
466
+ }
467
+ return newItems;
468
+ };
469
+ exports.fuseGrassProducts = fuseGrassProducts;
470
+ const isMinQtyFee = (slug) => {
471
+ return ['minimum-facturable-commande', 'frais-minimum-gazon-pour-installation'].includes(slug);
472
+ };
473
+ exports.isMinQtyFee = isMinQtyFee;
474
+ const getAllMinGrassQuantities = (grassProduct, isPro) => {
475
+ return {
476
+ pickup: (0, expedition_1.getMinGrassQte)(grassProduct, 'pickup', isPro),
477
+ shipping: (0, expedition_1.getMinGrassQte)(grassProduct, 'shipping', isPro),
478
+ install: (0, expedition_1.getMinQteInstall)(isPro)
479
+ };
480
+ };
481
+ exports.getAllMinGrassQuantities = getAllMinGrassQuantities;
482
+ const getMinQtyFeeText = (parent_slug = '', grassProduct, isPro, locale = 'fr', expeditionMethod, shortVersion) => {
483
+ const type = parent_slug === 'frais-minimum-gazon-pour-installation' ? 'install' : 'order';
484
+ const minQuantities = (0, exports.getAllMinGrassQuantities)(grassProduct, isPro);
485
+ const localeSellUnit = (0, locale_1.translateILang)(pluralSellUnits.p2, locale);
486
+ const localeStepUnit = (0, locale_1.translateILang)((0, inventories_1.getUnitShortDict)('roul'), locale).toLowerCase();
487
+ const localeMinUnit = (0, locale_1.translateILang)((0, inventories_1.getUnitShortDict)('pal'), locale).toLowerCase();
488
+ let str = '';
489
+ const endStr = (0, locale_1.translateILang)({
490
+ fr: ` Ce frais correspond au prix du gazon choisi multiplié par la différence entre la quantité choisie et le minimum.`,
491
+ en: ` Ce frais correspond au prix du gazon choisi multiplié par la différence entre la quantité choisie et le minimum.`
492
+ }, locale);
493
+ if (!!!expeditionMethod && type === 'order' && minQuantities.pickup !== minQuantities.shipping) {
494
+ const strMinShipping = `${minQuantities.shipping}${localeSellUnit} (${minQuantities.shipping / 740} ${localeMinUnit})`;
495
+ const strMinPickup = !!minQuantities.pickup
496
+ ? `${minQuantities.pickup}${localeSellUnit} (${minQuantities.pickup / 740} ${localeMinUnit})`
497
+ : '';
498
+ str = (0, locale_1.translateILang)({
499
+ fr: `Les commandes de gazon sont disponibles à partir de 10${localeSellUnit} (1 ${localeStepUnit}), mais le minimum facturable pour la livraison est de ${strMinShipping}${!!strMinPickup ? ` et de ${strMinPickup} pour la cueillette.` : ``}`,
500
+ en: `Sod orders are available starting at 10${localeSellUnit} (1 ${localeStepUnit}), but the minimum chargeable for delivery is ${strMinShipping}${!!strMinPickup ? ` and ${strMinPickup} for pick-up.` : ``}`
501
+ }, locale);
502
+ if (!!!shortVersion) {
503
+ str += endStr;
504
+ }
505
+ return str;
506
+ }
507
+ const minBillableQty = type === 'install'
508
+ ? minQuantities.install
509
+ : expeditionMethod === 'pickup'
510
+ ? minQuantities.pickup
511
+ : minQuantities.shipping;
512
+ const minQtyPallets = minBillableQty !== 0 ? minBillableQty / 740 : 0;
513
+ const minBillableStr = `${minBillableQty}${localeSellUnit}${type === 'order' ? ' (' + minQtyPallets + ' ' + localeMinUnit + ')' : ''}`;
514
+ str = (0, locale_1.translateILang)({
515
+ fr: `${type === 'install'
516
+ ? "L'installation"
517
+ : expeditionMethod === 'pickup'
518
+ ? 'La cueillette'
519
+ : expeditionMethod === 'delivery'
520
+ ? 'La livraison'
521
+ : 'La commande'} de gazon est disponible à partir de 10${localeSellUnit} (1 ${localeStepUnit}), mais le minimum facturable est de ${minBillableStr}.`,
522
+ en: `Sod ${type === 'install'
523
+ ? 'installation'
524
+ : expeditionMethod === 'pickup'
525
+ ? 'pick-up'
526
+ : expeditionMethod === 'delivery'
527
+ ? 'delivery'
528
+ : 'ordering'} is available starting at 10${localeSellUnit} (1 ${localeStepUnit}), but the minimum billable is ${minBillableStr}.`
529
+ }, locale);
530
+ if (!!!shortVersion) {
531
+ str += endStr;
532
+ }
533
+ return str;
534
+ };
535
+ exports.getMinQtyFeeText = getMinQtyFeeText;
536
+ const getMinQtyFeeAmountText = (parent_slug = '', locale = 'fr', servicesFees, showMinFeeAmount = true) => {
537
+ const serviceOrFee = servicesFees.find((i) => i.parent_slug === parent_slug);
538
+ if (!!!serviceOrFee)
539
+ return '';
540
+ const amount = (0, toNumber_1.default)(serviceOrFee.regular_price.amount) * serviceOrFee.qte;
541
+ return (0, locale_1.translateILang)({
542
+ fr: `Une différence de ${!!showMinFeeAmount ? amount.toFixed(2) + '$' : '%LOADER%'}%BOLD% vous sera chargée si la quantité de gazon au panier est plus petite que le minimum requis.`,
543
+ en: `A difference of ${!!showMinFeeAmount ? amount.toFixed(2) + '$' : '%LOADER%'}%BOLD% will be charged if the quantity of sod in the cart is less than the minimum required.`
544
+ }, locale);
545
+ };
546
+ exports.getMinQtyFeeAmountText = getMinQtyFeeAmountText;
547
+ const getGrassQteText = (chosenDeclination, locale = 'fr') => {
548
+ let txt = '';
549
+ let nbRolls = 0;
550
+ let nbSquareFeet = 0;
551
+ const units = !!!chosenDeclination ? [] : chosenDeclination.other_units;
552
+ if (!!units && !!units.length) {
553
+ const itemRolls = units.find((measure) => measure.unit_slug === 'roul');
554
+ const itemSquareFeet = units.find((measure) => measure.unit_slug === 'pal');
555
+ if (!!itemSquareFeet && !!itemSquareFeet.fitting_unit) {
556
+ nbSquareFeet = itemSquareFeet.fitting_unit;
557
+ }
558
+ if (!!itemRolls && !!itemRolls.fitting_unit && nbSquareFeet !== 0) {
559
+ nbRolls = nbSquareFeet / itemRolls.fitting_unit;
560
+ }
561
+ }
562
+ txt = (0, locale_1.translateILang)({
563
+ fr: 'Pour ce produit, vous devez commander par pieds carrés. Une palette = *nbRolls* rouleaux (*nbSquareFeet*pi2)',
564
+ en: 'For this product, you have to order by square feet. A pallet = *nbRolls* rolls (*nbSquareFeet*pi2)'
565
+ }, locale);
566
+ txt = txt.replace('*nbRolls*', String(nbRolls));
567
+ txt = txt.replace('*nbSquareFeet*', String(nbSquareFeet));
568
+ return txt;
569
+ };
570
+ exports.getGrassQteText = getGrassQteText;
571
+ const getGrassServicesFees = async (grassProduct, isPro, useFees, expeditionMethod, fetchProduct, getIfAddressIsInsideZones, getDistanceFromAddress, locale, allStores, chosenGrass, baseGrass, customPriceList) => {
572
+ const installItems = await (0, exports.getInstallationArray)(grassProduct.qte, (!!baseGrass ? baseGrass : chosenGrass).product_upsells, fetchProduct, locale, isPro, chosenGrass.sku, customPriceList, { engrais: true, roulage: true });
573
+ const cart = Object.assign(Object.assign({}, (0, Cart_1.getDefaultCart)()), { items: [
574
+ chosenGrass,
575
+ ...(!!baseGrass ? [baseGrass] : []),
576
+ ...installItems.filter((item) => !!!(0, exports.isMinQtyFee)(item.parent_slug || ''))
577
+ ] });
578
+ const applied = await (0, exports.fetchFeesBeforeCart)(!!useFees, cart, expeditionMethod, fetchProduct, getIfAddressIsInsideZones, getDistanceFromAddress, locale, allStores, isPro, grassProduct, undefined, { useStoreAddress: 'sainte-julie' }, customPriceList);
579
+ return [...installItems, ...applied.itemsToAdd];
580
+ };
581
+ exports.getGrassServicesFees = getGrassServicesFees;
582
+ const getGrassSubQuestionsByType = (type) => {
583
+ if (type === 'pro') {
584
+ return products_2.otherGrassSubQuestions.filter((sub) => !!sub.proOnly);
585
+ }
586
+ return products_2.otherGrassSubQuestions.filter((sub) => 'installation-gazon' === sub.associatedProductSlug || (!!sub.installOnly && !!!sub.proOnly));
587
+ };
588
+ exports.getGrassSubQuestionsByType = getGrassSubQuestionsByType;
589
+ const handleGrassProductQtyRoundForShipping = (cartData, grassProduct) => {
590
+ if (!!!cartData || !!!grassProduct)
591
+ return;
592
+ const product = cartData.items.find((item) => item.sku === grassProduct.sku);
593
+ if (!!!product)
594
+ return;
595
+ const productOtherUnits = product.other_units;
596
+ if (!!!productOtherUnits)
597
+ return;
598
+ const palUnit = productOtherUnits.find((u) => u.unit_slug === 'pal');
599
+ const rounded = (0, exports.roundGrassQte)(product.qte, !!!cartData.is_pickup, palUnit);
600
+ if (!!!rounded || rounded === grassProduct.qte)
601
+ return;
602
+ let itemsToChange = [];
603
+ const recursiveGrassItem = (0, cart_1.getRecursiveItems)(cartData.items).find((item) => item.sku === grassProduct.sku);
604
+ const getItemsToChange = (item) => {
605
+ if (!!item.sub_items) {
606
+ item.sub_items.forEach((subItem) => getItemsToChange(subItem));
607
+ }
608
+ if (item.parent_slug === 'frais-de-mobilisation') {
609
+ const totalPallet = (0, expedition_1.getPalletQty)(cartData.items.map((i) => {
610
+ if ((0, exports.checkIfProductIsOfType)(i, 'gazon')) {
611
+ return Object.assign(Object.assign({}, i), { qte: rounded });
612
+ }
613
+ return i;
614
+ }), 'grass');
615
+ itemsToChange.push({
616
+ sku: item.sku,
617
+ qte: (0, ceil_1.default)(totalPallet / expedition_1.installationFeePalletTier)
618
+ });
619
+ return;
620
+ }
621
+ if (!!item.is_upsell_of_sku) {
622
+ const parentUpsellProd = cartData.items.find((i) => i.sku === item.is_upsell_of_sku);
623
+ if (!!parentUpsellProd) {
624
+ const sameUpsell = (parentUpsellProd.product_upsells || []).find((up) => up.recommendation_sku === item.sku);
625
+ if (!!sameUpsell) {
626
+ const anUpsellProduct = Object.assign(Object.assign(Object.assign(Object.assign({}, item), { parent_slug: sameUpsell.recommendation_parent_slug, recommended_qte: sameUpsell.recommendation_qty, recommended_sku: sameUpsell.recommendation_sku, matching_qte: !!sameUpsell.matching_qty, auto_add: sameUpsell.auto_add, auto_add_exceptions: sameUpsell.auto_add_exceptions, actual_qte: sameUpsell.actual_qty }), (!!sameUpsell.is_recommendation ? { is_recommendation: true } : {})), (!!sameUpsell.show_recommendation_msg ? { show_recommendation_msg: true } : {}));
627
+ const ratio = (0, upsells_1.calculateUpsellQte)(anUpsellProduct, rounded);
628
+ if (!!ratio) {
629
+ itemsToChange.push({
630
+ sku: item.sku,
631
+ qte: ratio
632
+ });
633
+ return;
634
+ }
635
+ }
636
+ }
637
+ }
638
+ itemsToChange.push({
639
+ sku: item.sku,
640
+ qte: rounded
641
+ });
642
+ return;
643
+ };
644
+ if (!!recursiveGrassItem) {
645
+ getItemsToChange(recursiveGrassItem);
646
+ }
647
+ return { rounded, itemsToChange };
648
+ };
649
+ exports.handleGrassProductQtyRoundForShipping = handleGrassProductQtyRoundForShipping;
650
+ const roundGrassQte = (currentQte, isShipping, palUnit) => {
651
+ let newQte = currentQte;
652
+ switch (true) {
653
+ case currentQte < 1480:
654
+ const rest1480 = currentQte % 10;
655
+ if (rest1480 !== 0) {
656
+ newQte = currentQte - rest1480 + 10;
657
+ }
658
+ break;
659
+ case currentQte >= 1480 && !!!isShipping:
660
+ const rest1480Install = currentQte % 10;
661
+ if (rest1480Install !== 0) {
662
+ newQte = currentQte - rest1480Install + 10;
663
+ }
664
+ break;
665
+ case currentQte >= 1480:
666
+ if (!!palUnit && !!palUnit.fitting_unit) {
667
+ let rest1480 = currentQte % palUnit.fitting_unit;
668
+ if (rest1480 !== 0 && !!((rest1480 - 400) % palUnit.fitting_unit)) {
669
+ newQte = currentQte - rest1480;
670
+ if (newQte + 400 > currentQte) {
671
+ newQte = newQte + 400;
672
+ }
673
+ else if (newQte + palUnit.fitting_unit > currentQte) {
674
+ newQte = newQte + palUnit.fitting_unit;
675
+ }
676
+ }
677
+ }
678
+ break;
679
+ }
680
+ return newQte;
681
+ };
682
+ exports.roundGrassQte = roundGrassQte;
683
+ const getInstallationArray = async (qte, baseGrassUpsells, fetchProduct, locale, isPro, chosenSku, customPriceList, returnOtherFees) => {
684
+ const upsell = baseGrassUpsells;
685
+ if (!!!upsell)
686
+ return [];
687
+ const installation_upsell = upsell.filter((upsell) => upsell.recommendation_parent_slug === 'installation-gazon');
688
+ const installation_parent = await fetchProduct('installation-gazon', locale, true, true);
689
+ let installation_decli;
690
+ const minQteInstall = (0, expedition_1.getMinQteInstall)(isPro);
691
+ let arrayFinal = [];
692
+ if (!!installation_parent && !!installation_upsell && !!installation_upsell.length) {
693
+ let installation_array = [];
694
+ if (!!isPro) {
695
+ installation_array = installation_parent.declinations.filter((decli) => !!decli.attributes &&
696
+ !!decli.attributes[data_1.AttributesIdEnumGR.CLIENT_TYPE] &&
697
+ !!decli.attributes[data_1.AttributesIdEnumGR.CLIENT_TYPE].includes('pro'));
698
+ }
699
+ else {
700
+ installation_array = installation_parent.declinations.filter((decli) => !!decli.attributes &&
701
+ !!decli.attributes[data_1.AttributesIdEnumGR.CLIENT_TYPE] &&
702
+ !!decli.attributes[data_1.AttributesIdEnumGR.CLIENT_TYPE].includes('au-detail'));
703
+ }
704
+ const installation_qte_array = installation_upsell.filter((upsell) => installation_array.find((decli) => decli.sku === upsell.recommendation_sku));
705
+ const closestQte = (0, maxBy_1.default)(installation_qte_array.filter((upsell) => {
706
+ return upsell.actual_qty <= qte;
707
+ }), 'actual_qty');
708
+ if (!!closestQte) {
709
+ installation_decli = installation_parent.declinations.find((decli) => decli.sku === closestQte.recommendation_sku);
710
+ if (!!installation_decli) {
711
+ if (!!isPro && !!customPriceList) {
712
+ installation_decli = (0, g2_1.checkForCustomPriceEquivalent)(installation_decli, customPriceList);
713
+ }
714
+ if (!(0, exports.shouldHideItemIfRegPriceIs0)(installation_decli, installation_parent.slug)) {
715
+ arrayFinal.push(Object.assign(Object.assign({}, installation_decli), { parent_slug: 'installation-gazon', qte: qte, is_upsell_of_sku: chosenSku, product_upsells: installation_parent.product_upsells }));
716
+ }
717
+ }
718
+ if (qte < minQteInstall) {
719
+ const minimum_installation_fee = await fetchProduct('frais-minimum-gazon-pour-installation', locale, true, true);
720
+ if (!!minimum_installation_fee) {
721
+ let minInstallDecli = minimum_installation_fee.declinations[0];
722
+ minInstallDecli = Object.assign(Object.assign({}, minInstallDecli), { regular_price: Object.assign(Object.assign({}, minInstallDecli.regular_price), { amount: installation_decli.regular_price.amount }) });
723
+ if (!!isPro && !!customPriceList) {
724
+ minInstallDecli = (0, g2_1.checkForCustomPriceEquivalent)(Object.assign(Object.assign({}, minInstallDecli), { price_override: true }), customPriceList);
725
+ }
726
+ if (!(0, exports.shouldHideItemIfRegPriceIs0)(minInstallDecli, minimum_installation_fee.slug)) {
727
+ arrayFinal.push(Object.assign(Object.assign({}, minInstallDecli), { parent_slug: 'frais-minimum-gazon-pour-installation', qte: minQteInstall - qte, is_upsell_of_sku: installation_decli.sku, price_override: true }));
728
+ }
729
+ }
730
+ }
731
+ const mobilisation_fee = await fetchProduct('frais-de-mobilisation', locale, true, true);
732
+ if (!!mobilisation_fee && !!isPro) {
733
+ let mobilisationDecli = mobilisation_fee.declinations[0];
734
+ if (!!customPriceList) {
735
+ mobilisationDecli = (0, g2_1.checkForCustomPriceEquivalent)(mobilisationDecli, customPriceList);
736
+ }
737
+ if (!(0, exports.shouldHideItemIfRegPriceIs0)(mobilisationDecli, mobilisation_fee.slug, true)) {
738
+ arrayFinal.push(Object.assign(Object.assign({}, mobilisationDecli), { parent_slug: 'frais-de-mobilisation', qte: (0, ceil_1.default)(qte > minQteInstall
739
+ ? qte / (740 * expedition_1.installationFeePalletTier)
740
+ : minQteInstall / (740 * expedition_1.installationFeePalletTier)), is_upsell_of_sku: installation_decli.sku, product_upsells: mobilisation_fee.product_upsells }));
741
+ }
742
+ }
743
+ if (!!returnOtherFees) {
744
+ if (!!returnOtherFees.engrais) {
745
+ const fertilisation = await fetchProduct('installation-fertilisation', locale, true, true);
746
+ if (!!fertilisation) {
747
+ let minFertilisationDecli = fertilisation.declinations[0];
748
+ if (!!isPro && !!customPriceList) {
749
+ minFertilisationDecli = (0, g2_1.checkForCustomPriceEquivalent)(minFertilisationDecli, customPriceList);
750
+ }
751
+ if (!(0, exports.shouldHideItemIfRegPriceIs0)(minFertilisationDecli, fertilisation.slug, true)) {
752
+ arrayFinal.push(Object.assign(Object.assign({}, minFertilisationDecli), { parent_slug: fertilisation.slug, qte: qte < minQteInstall ? minQteInstall : qte, is_upsell_of_sku: installation_decli.sku, product_upsells: fertilisation.product_upsells }));
753
+ }
754
+ }
755
+ }
756
+ if (returnOtherFees.roulage) {
757
+ const roullage = await fetchProduct('installation-roulage', locale, true, true);
758
+ if (!!roullage) {
759
+ let minRoulageDecli = roullage.declinations[0];
760
+ if (!!isPro && !!customPriceList) {
761
+ minRoulageDecli = (0, g2_1.checkForCustomPriceEquivalent)(minRoulageDecli, customPriceList);
762
+ }
763
+ if (!(0, exports.shouldHideItemIfRegPriceIs0)(minRoulageDecli, roullage.slug, true)) {
764
+ arrayFinal.push(Object.assign(Object.assign({}, minRoulageDecli), { parent_slug: roullage.slug, qte: qte < minQteInstall ? minQteInstall : qte, is_upsell_of_sku: installation_decli.sku, product_upsells: roullage.product_upsells }));
765
+ }
766
+ }
767
+ }
768
+ }
769
+ }
770
+ }
771
+ return arrayFinal;
772
+ };
773
+ exports.getInstallationArray = getInstallationArray;
774
+ const getInstallItemPrice = (parentSlug, servicesFees) => {
775
+ let price = 0;
776
+ switch (parentSlug) {
777
+ case 'installation-gazon':
778
+ const itemsToUse = servicesFees.filter((i) => i.parent_slug && ['installation-gazon', 'frais-de-mobilisation'].includes(i.parent_slug));
779
+ if (!!itemsToUse) {
780
+ price = (0, sumBy_1.default)(itemsToUse, (item) => (0, products_1.getLowestPrice)(item).price.amount * item.qte);
781
+ }
782
+ break;
783
+ default:
784
+ const itemToUse = servicesFees.find((i) => i.parent_slug === parentSlug);
785
+ if (!!itemToUse) {
786
+ price = (0, products_1.getLowestPrice)(itemToUse).price.amount * itemToUse.qte;
787
+ }
788
+ break;
789
+ }
790
+ return price;
791
+ };
792
+ exports.getInstallItemPrice = getInstallItemPrice;
793
+ const getConcreteQteText = (declination, locale = 'fr') => {
794
+ let txt = '';
795
+ if (!!!declination)
796
+ return txt;
797
+ let nbSaleUnitsPerCmdStep = 0;
798
+ let nbUnitsPerPal = 0;
799
+ const other_units = declination.other_units;
800
+ if (!!!other_units || !!!other_units.length) {
801
+ return '';
802
+ }
803
+ else {
804
+ const commandStep = other_units.find((unit) => unit.is_command_step);
805
+ const commandUnit = other_units.find((unit) => unit.is_command_unit);
806
+ const saleUnit = other_units.find((unit) => unit.is_sale_unit);
807
+ const unitsPerPal = other_units.find((unit) => unit.unit_slug === 'pal');
808
+ if (!!commandStep &&
809
+ !!commandStep.fitting_unit &&
810
+ !!commandUnit &&
811
+ !!commandUnit.fitting_unit &&
812
+ !!saleUnit &&
813
+ !!saleUnit.fitting_unit &&
814
+ !!unitsPerPal &&
815
+ !!unitsPerPal.fitting_unit) {
816
+ const cmdSameAsSale = commandStep.unit_slug === saleUnit.unit_slug;
817
+ const nbP2PerRgSlug = !!cmdSameAsSale ? commandUnit.unit_slug : saleUnit.unit_slug;
818
+ nbSaleUnitsPerCmdStep = !!cmdSameAsSale
819
+ ? commandStep.fitting_unit / commandUnit.fitting_unit
820
+ : commandStep.fitting_unit / saleUnit.fitting_unit;
821
+ nbUnitsPerPal =
822
+ commandStep.fitting_unit == 1 && !!!commandStep.is_sale_unit
823
+ ? unitsPerPal.fitting_unit *
824
+ (0, round_1.default)(nbSaleUnitsPerCmdStep, (0, exports.productUnitSupportsDecimals)(saleUnit.unit_slug) ? 5 : 0)
825
+ : unitsPerPal.fitting_unit / saleUnit.fitting_unit;
826
+ txt = (0, locale_1.translateILang)({
827
+ fr: 'Pour ce produit, vous devez commander par *cmdStep* (*nbUnitsPerCmdStep*).',
828
+ en: 'For this product, you have to order by *cmdStep* (*nbUnitsPerCmdStep*).'
829
+ }, locale);
830
+ if (unitsPerPal.unit_slug != commandStep.unit_slug) {
831
+ txt += (0, locale_1.translateILang)({
832
+ fr: ' Une palette = *nbUnitsPerPal*.',
833
+ en: ' A pallet = *nbUnitsPerPal*.'
834
+ }, locale);
835
+ }
836
+ txt = txt.replace('*cmdStep*', String(`${(0, locale_1.translateILang)(inventories_1.unitDict[commandStep.unit_slug], locale).toLowerCase()}`));
837
+ txt = txt.replace('*nbUnitsPerCmdStep*', String(`${(0, round_1.default)(nbSaleUnitsPerCmdStep, 2)} ${(0, locale_1.translateILang)(inventories_1.unitDict[nbP2PerRgSlug], locale).toLowerCase()}`));
838
+ txt = txt.replace('*nbUnitsPerPal*', String(`${(0, round_1.default)(nbUnitsPerPal, 2)} ${(0, locale_1.translateILang)(inventories_1.unitDict[saleUnit.unit_slug], locale).toLowerCase()}`));
839
+ }
840
+ else {
841
+ return '';
842
+ }
843
+ }
844
+ return txt;
845
+ };
846
+ exports.getConcreteQteText = getConcreteQteText;
847
+ const getConcreteItemsByAvailability = (cartData, availabilityType, returnTrueIfUndefined) => {
848
+ return cartData.items.filter((i) => {
849
+ return ((i.attributes[data_1.AttributesIdEnumGR.AVAILABILITY] &&
850
+ i.attributes[data_1.AttributesIdEnumGR.AVAILABILITY][0] === availabilityType) ||
851
+ !!returnTrueIfUndefined);
852
+ });
853
+ };
854
+ exports.getConcreteItemsByAvailability = getConcreteItemsByAvailability;
855
+ const getVracType = async (stores, cartData, getInventoryItemCallback, inventoyItemArray) => {
856
+ const items = cartData.items;
857
+ if (!!!items ||
858
+ !!!items.length ||
859
+ (!!!(0, cart_1.checkIfCartContainsType)(cart_2.CartGeneralTypeEnum.VRAC, cartData) &&
860
+ !!!cartData.items.find((item) => !!item.is_other_type && item.is_other_type === 'vrac')))
861
+ return;
862
+ let allStoreIds = stores.map((store) => store.id);
863
+ let itemFormat = '';
864
+ await Promise.all(items.map(async (item) => {
865
+ const productInventory = !!!item.is_service
866
+ ? !!inventoyItemArray && !!inventoyItemArray.length
867
+ ? inventoyItemArray.find((i) => i.sku === item.sku)
868
+ : await getInventoryItemCallback(item.sku)
869
+ : undefined;
870
+ if (!!!productInventory)
871
+ return;
872
+ allStoreIds = allStoreIds.filter((id) => {
873
+ const sameStoreInProdInventory = productInventory.inventories.find((i) => i.store_id === id);
874
+ if (!!!sameStoreInProdInventory)
875
+ return true;
876
+ return !!!sameStoreInProdInventory.unavailable_in_store;
877
+ });
878
+ if (!!!itemFormat && !!item.attributes && !!item.attributes[data_1.AttributesIdEnumGR.FORMATS]) {
879
+ itemFormat = item.attributes[data_1.AttributesIdEnumGR.FORMATS][0];
880
+ }
881
+ }));
882
+ const onlySteJulieNobel = allStoreIds.length === 1 && allStoreIds[0] === 'sainte-julie-nobel';
883
+ if (!!itemFormat.includes('sac')) {
884
+ return {
885
+ vrac_type: !!onlySteJulieNobel ? products_3.VracTypeEnum.NOBEL_SAC : products_3.VracTypeEnum.AUTRE_SAC,
886
+ vrac_store_ids: allStoreIds
887
+ };
888
+ }
889
+ else {
890
+ return {
891
+ vrac_type: !!onlySteJulieNobel ? products_3.VracTypeEnum.NOBEL_TONNE : products_3.VracTypeEnum.AUTRE_TONNE,
892
+ vrac_store_ids: allStoreIds
893
+ };
894
+ }
895
+ };
896
+ exports.getVracType = getVracType;
897
+ const fetchFeesBeforeCart = async (useFees, newCart, deliveryType, fetchProduct, getIfAddressIsInsideZones, getDistanceFromAddress, locale, allStores, isPro, grassProduct, concreteOrder, settings, customPriceList) => {
898
+ const cartContainsVrac = (0, cart_1.checkIfCartContainsType)(cart_2.CartGeneralTypeEnum.VRAC, newCart);
899
+ const cartContainsInstallation = (0, cart_1.checkIfCartContainsType)(cart_2.CartGeneralTypeEnum.INSTALLATION, newCart);
900
+ const cartContainsSample = (0, cart_1.checkIfCartContainsType)(cart_2.CartGeneralTypeEnum.SAMPLE, newCart);
901
+ const cartContainsAccessoriesOnly = (0, cart_1.checkIfCartContainsType)(cart_2.CartGeneralTypeEnum.ONLY_ACCESSORIES, newCart);
902
+ const storeToUse = !!settings && !!settings.useStoreAddress ? allStores.find((s) => s.id == settings.useStoreAddress) : undefined;
903
+ const storeAddressToUse = !!storeToUse ? storeToUse.address : undefined;
904
+ return await (0, expedition_1.applyFeesToCart)(fetchProduct, getIfAddressIsInsideZones, getDistanceFromAddress, newCart, deliveryType, grassProduct, concreteOrder, deliveryType === 'pickup' ? false : cartContainsInstallation, cartContainsVrac, (0, object_1.recursiveCheckObject)(settings, 'useAvailableVracStores'), isPro, deliveryType === 'pickup' ? !!settings && !!settings.addOnePalletToPickup : false, cartContainsSample, !!settings ? !!settings.saveToShippingPayload : false, !!!settings
905
+ ? undefined
906
+ : !!settings.useStoreAddress && !!storeAddressToUse
907
+ ? storeAddressToUse
908
+ : !!settings.useDeliveryAddress && !!newCart.shipping_address
909
+ ? newCart.shipping_address.address
910
+ : undefined, locale, undefined, false, cartContainsAccessoriesOnly, undefined, allStores, customPriceList, !!useFees);
911
+ };
912
+ exports.fetchFeesBeforeCart = fetchFeesBeforeCart;
913
+ const shouldShowProCustomPromo = (userData, isPro, product, customMinPrice) => {
914
+ if (!!!product || !!!isPro || !!!userData)
915
+ return false;
916
+ if (!!customMinPrice) {
917
+ if (customMinPrice.type === G2_1.CustomPriceItemTypeEnum.REG && customMinPrice.code2 !== 'NET')
918
+ return false;
919
+ return true;
920
+ }
921
+ const customerGroup = (0, object_1.recursiveCheckObject)(userData, 'userData.basic_info.customer_professionnal_info.external_customer_group');
922
+ const customerType = !!customerGroup ? (0, g2_1.getG2CustomerTypeFromCode)(customerGroup) : undefined;
923
+ const prodPriceClass = !!product.price_classes_range
924
+ ? product.price_classes_range.find((range) => !!customerType && range.external_slug ? range.external_slug === customerType : range.class === 'aspirant')
925
+ : !!product.prices_list
926
+ ? product.prices_list.find((range) => !!customerType && range.external_slug ? range.external_slug === customerType : range.group_id === 'aspirant')
927
+ : undefined;
928
+ return !!prodPriceClass && !!prodPriceClass.custom_promo_applies;
929
+ };
930
+ exports.shouldShowProCustomPromo = shouldShowProCustomPromo;
931
+ const applyProCustomPromo = (decli, userData) => {
932
+ const customerCode = userData.basic_info.customer_professionnal_info &&
933
+ userData.basic_info.customer_professionnal_info.external_customer_group;
934
+ if (!!!customerCode)
935
+ return {};
936
+ const customerCustomPromo = (0, g2_1.getG2DiscountFromCode)(customerCode);
937
+ if (!!!customerCustomPromo)
938
+ return {};
939
+ const regPrice = decli.regular_price.amount;
940
+ const newDiscountAmount = (0, toNumber_1.default)(regPrice) * ((100 - customerCustomPromo) / 100);
941
+ let newPromoObj = (0, IDiscountRule_1.getDefaultDiscountRule)('product');
942
+ newPromoObj = Object.assign(Object.assign({}, newPromoObj), { appliesTo: Object.assign(Object.assign({}, newPromoObj.appliesTo), { label: IDiscountRule_1.AppliesToEnum.PRODUCT, value: decli.sku }), rules: [
943
+ {
944
+ field: IDiscountRule_1.RuleFieldEnum.CUSTOMER,
945
+ condition: IDiscountRule_1.RuleConditionEnum.AND,
946
+ ruleDetails: [
947
+ {
948
+ operator: '==',
949
+ value: [userData.id],
950
+ condition: IDiscountRule_1.RuleConditionEnum.AND
951
+ }
952
+ ]
953
+ }
954
+ ], result: {
955
+ action: IDiscountRule_1.ResultActionEnum.PERCENT,
956
+ action_value: customerCustomPromo
957
+ } });
958
+ return {
959
+ discount_rules: [newPromoObj],
960
+ promo_price: {
961
+ currency: 'CAD',
962
+ amount: (0, round_1.default)(newDiscountAmount, 3)
963
+ }
964
+ };
965
+ };
966
+ exports.applyProCustomPromo = applyProCustomPromo;
967
+ const getFormattedProdGR = (decli, productSlug, isPro) => {
968
+ const { promo_price, discount_price, tier_pricing } = decli, rest = __rest(decli, ["promo_price", "discount_price", "tier_pricing"]);
969
+ return !!isPro ? Object.assign(Object.assign({}, rest), (productSlug !== 'kentucky' ? { tier_pricing } : {})) : decli;
970
+ };
971
+ exports.getFormattedProdGR = getFormattedProdGR;
972
+ const shouldHideItemIfRegPriceIs0 = (item, productSlug, isUpsellOfInstallProd) => {
973
+ const regPriceIs0 = item.regular_price.amount == 0;
974
+ if (!regPriceIs0)
975
+ return false;
976
+ if (!item.is_service)
977
+ return false;
978
+ if (!!isUpsellOfInstallProd)
979
+ return false;
980
+ if (expedition_1.slugsToCheckFromExpeditionFees.shipping.includes(productSlug))
981
+ return false;
982
+ return true;
983
+ };
984
+ exports.shouldHideItemIfRegPriceIs0 = shouldHideItemIfRegPriceIs0;
985
985
  //# sourceMappingURL=products.js.map