addio-admin-sdk 1.7.86 → 1.7.87

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 (560) hide show
  1. package/.babelrc +17 -17
  2. package/.env +14 -0
  3. package/.env.dev +14 -14
  4. package/.github/workflows/publish_coverage.yam_ +69 -69
  5. package/addio-sdk-doc.md +1473 -1473
  6. package/changelog.md +537 -537
  7. package/dist/Interfaces/Address/index.d.ts +21 -21
  8. package/dist/Interfaces/Address/index.js +16 -16
  9. package/dist/Interfaces/Algolia/index.d.ts +164 -164
  10. package/dist/Interfaces/Algolia/index.js +2 -2
  11. package/dist/Interfaces/Attachement/index.d.ts +5 -5
  12. package/dist/Interfaces/Attachement/index.js +2 -2
  13. package/dist/Interfaces/Attribute/index.d.ts +52 -52
  14. package/dist/Interfaces/Attribute/index.js +10 -10
  15. package/dist/Interfaces/BGJob/index.d.ts +56 -56
  16. package/dist/Interfaces/BGJob/index.js +25 -25
  17. package/dist/Interfaces/BaseClass/index.d.ts +8 -8
  18. package/dist/Interfaces/BaseClass/index.js +2 -2
  19. package/dist/Interfaces/Blog/IBlogArticle.d.ts +18 -18
  20. package/dist/Interfaces/Blog/IBlogArticle.js +2 -2
  21. package/dist/Interfaces/Blog/IBlogAuthor.d.ts +7 -7
  22. package/dist/Interfaces/Blog/IBlogAuthor.js +2 -2
  23. package/dist/Interfaces/Blog/IBlogCategory.d.ts +9 -9
  24. package/dist/Interfaces/Blog/IBlogCategory.js +2 -2
  25. package/dist/Interfaces/Blog/IBlogComment.d.ts +13 -13
  26. package/dist/Interfaces/Blog/IBlogComment.js +2 -2
  27. package/dist/Interfaces/Blog/IBlogKeywords.d.ts +9 -9
  28. package/dist/Interfaces/Blog/IBlogKeywords.js +2 -2
  29. package/dist/Interfaces/Booking/index.d.ts +74 -74
  30. package/dist/Interfaces/Booking/index.js +17 -17
  31. package/dist/Interfaces/Brand/index.d.ts +15 -15
  32. package/dist/Interfaces/Brand/index.js +2 -2
  33. package/dist/Interfaces/CMS/index.d.ts +25 -25
  34. package/dist/Interfaces/CMS/index.js +2 -2
  35. package/dist/Interfaces/Cart/IElavonPayload.d.ts +93 -93
  36. package/dist/Interfaces/Cart/IElavonPayload.js +17 -17
  37. package/dist/Interfaces/Cart/IPandaPayload.d.ts +64 -64
  38. package/dist/Interfaces/Cart/IPandaPayload.js +18 -18
  39. package/dist/Interfaces/Cart/IPaymentCard.d.ts +22 -22
  40. package/dist/Interfaces/Cart/IPaymentCard.js +44 -44
  41. package/dist/Interfaces/Cart/IPaypalPayload.d.ts +9 -9
  42. package/dist/Interfaces/Cart/IPaypalPayload.js +2 -2
  43. package/dist/Interfaces/Cart/IPaysafePayload.d.ts +72 -72
  44. package/dist/Interfaces/Cart/IPaysafePayload.js +2 -2
  45. package/dist/Interfaces/Cart/IStripePayload.d.ts +66 -66
  46. package/dist/Interfaces/Cart/IStripePayload.js +2 -2
  47. package/dist/Interfaces/Cart/index.d.ts +424 -424
  48. package/dist/Interfaces/Cart/index.js +192 -192
  49. package/dist/Interfaces/Catalogue/index.d.ts +68 -68
  50. package/dist/Interfaces/Catalogue/index.js +37 -37
  51. package/dist/Interfaces/Category/index.d.ts +33 -33
  52. package/dist/Interfaces/Category/index.js +2 -2
  53. package/dist/Interfaces/Chart/index.d.ts +11 -11
  54. package/dist/Interfaces/Chart/index.js +2 -2
  55. package/dist/Interfaces/Class/index.d.ts +8 -8
  56. package/dist/Interfaces/Class/index.js +2 -2
  57. package/dist/Interfaces/Consent/index.d.ts +6 -6
  58. package/dist/Interfaces/Consent/index.js +2 -2
  59. package/dist/Interfaces/Context/IContextProps.d.ts +4 -4
  60. package/dist/Interfaces/Context/IContextProps.js +2 -2
  61. package/dist/Interfaces/Context/IContextState.d.ts +15 -15
  62. package/dist/Interfaces/Context/IContextState.js +2 -2
  63. package/dist/Interfaces/Customer/ICustomerBadge.d.ts +2 -2
  64. package/dist/Interfaces/Customer/ICustomerBadge.js +2 -2
  65. package/dist/Interfaces/Customer/ICustomerRating.d.ts +10 -10
  66. package/dist/Interfaces/Customer/ICustomerRating.js +2 -2
  67. package/dist/Interfaces/Customer/IStoreCredit.d.ts +12 -12
  68. package/dist/Interfaces/Customer/IStoreCredit.js +2 -2
  69. package/dist/Interfaces/Customer/index.d.ts +97 -97
  70. package/dist/Interfaces/Customer/index.js +141 -141
  71. package/dist/Interfaces/Declination/index.d.ts +114 -114
  72. package/dist/Interfaces/Declination/index.js +60 -60
  73. package/dist/Interfaces/Document/index.d.ts +8 -8
  74. package/dist/Interfaces/Document/index.js +2 -2
  75. package/dist/Interfaces/Elastic/index.d.ts +89 -89
  76. package/dist/Interfaces/Elastic/index.js +2 -2
  77. package/dist/Interfaces/Email/CustomGR/I3DPrintEmail.d.ts +11 -11
  78. package/dist/Interfaces/Email/CustomGR/I3DPrintEmail.js +2 -2
  79. package/dist/Interfaces/Email/CustomGR/IBorrowToolsEmail.d.ts +15 -15
  80. package/dist/Interfaces/Email/CustomGR/IBorrowToolsEmail.js +2 -2
  81. package/dist/Interfaces/Email/CustomGR/IPickupMaterialsEmail.d.ts +12 -12
  82. package/dist/Interfaces/Email/CustomGR/IPickupMaterialsEmail.js +2 -2
  83. package/dist/Interfaces/Email/CustomGR/IPreMeetingFormEmail.d.ts +36 -36
  84. package/dist/Interfaces/Email/CustomGR/IPreMeetingFormEmail.js +2 -2
  85. package/dist/Interfaces/Email/CustomGR/ISponsorRequestEmail.d.ts +12 -12
  86. package/dist/Interfaces/Email/CustomGR/ISponsorRequestEmail.js +2 -2
  87. package/dist/Interfaces/Email/CustomGR/ITransportEmail.d.ts +12 -12
  88. package/dist/Interfaces/Email/CustomGR/ITransportEmail.js +2 -2
  89. package/dist/Interfaces/Email/CustomGR/ITransportQuoteEmail.d.ts +12 -12
  90. package/dist/Interfaces/Email/CustomGR/ITransportQuoteEmail.js +2 -2
  91. package/dist/Interfaces/Email/CustomGR/IVegetalsEmail.d.ts +16 -16
  92. package/dist/Interfaces/Email/CustomGR/IVegetalsEmail.js +2 -2
  93. package/dist/Interfaces/Email/CustomGR/IWishlistEmail.d.ts +15 -15
  94. package/dist/Interfaces/Email/CustomGR/IWishlistEmail.js +2 -2
  95. package/dist/Interfaces/Email/IAbandonnedCartEmail.d.ts +29 -29
  96. package/dist/Interfaces/Email/IAbandonnedCartEmail.js +2 -2
  97. package/dist/Interfaces/Email/IAccountConfirmationEmail.d.ts +22 -22
  98. package/dist/Interfaces/Email/IAccountConfirmationEmail.js +2 -2
  99. package/dist/Interfaces/Email/IApplicationEmail.d.ts +19 -19
  100. package/dist/Interfaces/Email/IApplicationEmail.js +2 -2
  101. package/dist/Interfaces/Email/IBackInStockEmail.d.ts +21 -21
  102. package/dist/Interfaces/Email/IBackInStockEmail.js +2 -2
  103. package/dist/Interfaces/Email/IContactEmail.d.ts +20 -20
  104. package/dist/Interfaces/Email/IContactEmail.js +2 -2
  105. package/dist/Interfaces/Email/ICustomerBookingAdminEmail.d.ts +15 -15
  106. package/dist/Interfaces/Email/ICustomerBookingAdminEmail.js +2 -2
  107. package/dist/Interfaces/Email/ICustomerBookingEmail.d.ts +14 -14
  108. package/dist/Interfaces/Email/ICustomerBookingEmail.js +2 -2
  109. package/dist/Interfaces/Email/IEmail.d.ts +20 -20
  110. package/dist/Interfaces/Email/IEmail.js +56 -56
  111. package/dist/Interfaces/Email/IOrderConfirmationEmail.d.ts +47 -47
  112. package/dist/Interfaces/Email/IOrderConfirmationEmail.js +2 -2
  113. package/dist/Interfaces/Email/IPasswordResetEmail.d.ts +17 -17
  114. package/dist/Interfaces/Email/IPasswordResetEmail.js +2 -2
  115. package/dist/Interfaces/Email/IPhotoShootEmail.d.ts +14 -14
  116. package/dist/Interfaces/Email/IPhotoShootEmail.js +2 -2
  117. package/dist/Interfaces/Email/IPickupConfirmation.d.ts +23 -23
  118. package/dist/Interfaces/Email/IPickupConfirmation.js +2 -2
  119. package/dist/Interfaces/Email/IShippingConfirmation.d.ts +23 -23
  120. package/dist/Interfaces/Email/IShippingConfirmation.js +2 -2
  121. package/dist/Interfaces/Email/IWelcomeEmail.d.ts +19 -19
  122. package/dist/Interfaces/Email/IWelcomeEmail.js +2 -2
  123. package/dist/Interfaces/ExportSchema/index.d.ts +7 -7
  124. package/dist/Interfaces/ExportSchema/index.js +2 -2
  125. package/dist/Interfaces/ExternalService/BaseExternalService.d.ts +12 -12
  126. package/dist/Interfaces/ExternalService/BaseExternalService.js +2 -2
  127. package/dist/Interfaces/ExternalService/ExternalProductsService.d.ts +4 -4
  128. package/dist/Interfaces/ExternalService/ExternalProductsService.js +2 -2
  129. package/dist/Interfaces/ExternalService/index.d.ts +9 -9
  130. package/dist/Interfaces/ExternalService/index.js +2 -2
  131. package/dist/Interfaces/FirstOrderTracking/index.d.ts +5 -5
  132. package/dist/Interfaces/FirstOrderTracking/index.js +2 -2
  133. package/dist/Interfaces/G2/index.d.ts +556 -556
  134. package/dist/Interfaces/G2/index.js +36 -36
  135. package/dist/Interfaces/Indexed/Product/IIndexedLastSavedProduct.d.ts +20 -20
  136. package/dist/Interfaces/Indexed/Product/IIndexedLastSavedProduct.js +2 -2
  137. package/dist/Interfaces/Indexed/Product/index.d.ts +97 -97
  138. package/dist/Interfaces/Indexed/Product/index.js +212 -212
  139. package/dist/Interfaces/Inventory/index.d.ts +19 -19
  140. package/dist/Interfaces/Inventory/index.js +8 -8
  141. package/dist/Interfaces/Invoice/index.d.ts +4 -4
  142. package/dist/Interfaces/Invoice/index.js +2 -2
  143. package/dist/Interfaces/MarketplacePublication/MarketplaceOrderData.d.ts +3 -3
  144. package/dist/Interfaces/MarketplacePublication/MarketplaceOrderData.js +2 -2
  145. package/dist/Interfaces/MarketplacePublication/index.d.ts +23 -23
  146. package/dist/Interfaces/MarketplacePublication/index.js +22 -22
  147. package/dist/Interfaces/Menu/index.d.ts +23 -23
  148. package/dist/Interfaces/Menu/index.js +10 -10
  149. package/dist/Interfaces/Note/index.d.ts +10 -0
  150. package/dist/Interfaces/Note/index.js +8 -0
  151. package/dist/Interfaces/Note/index.js.map +1 -0
  152. package/dist/Interfaces/Operations/ICreatedBy.d.ts +6 -6
  153. package/dist/Interfaces/Operations/ICreatedBy.js +2 -2
  154. package/dist/Interfaces/Operations/IUpdate.d.ts +5 -5
  155. package/dist/Interfaces/Operations/IUpdate.js +2 -2
  156. package/dist/Interfaces/Order/index.d.ts +4 -4
  157. package/dist/Interfaces/Order/index.js +2 -2
  158. package/dist/Interfaces/Org/IRelUser.d.ts +9 -9
  159. package/dist/Interfaces/Org/IRelUser.js +2 -2
  160. package/dist/Interfaces/Org/index.d.ts +29 -29
  161. package/dist/Interfaces/Org/index.js +12 -12
  162. package/dist/Interfaces/Payment/index.d.ts +13 -13
  163. package/dist/Interfaces/Payment/index.js +2 -2
  164. package/dist/Interfaces/Product/IAttributeFamily.d.ts +6 -6
  165. package/dist/Interfaces/Product/IAttributeFamily.js +2 -2
  166. package/dist/Interfaces/Product/IImportProduct.d.ts +42 -42
  167. package/dist/Interfaces/Product/IImportProduct.js +791 -791
  168. package/dist/Interfaces/Product/IInventoryItem.d.ts +84 -84
  169. package/dist/Interfaces/Product/IInventoryItem.js +36 -36
  170. package/dist/Interfaces/Product/IPricing.d.ts +177 -177
  171. package/dist/Interfaces/Product/IPricing.js +174 -174
  172. package/dist/Interfaces/Product/index.d.ts +127 -127
  173. package/dist/Interfaces/Product/index.js +56 -56
  174. package/dist/Interfaces/ProductAttribute/index.d.ts +11 -11
  175. package/dist/Interfaces/ProductAttribute/index.js +2 -2
  176. package/dist/Interfaces/PromiseToPurchase/BankType.d.ts +41 -41
  177. package/dist/Interfaces/PromiseToPurchase/BankType.js +41 -41
  178. package/dist/Interfaces/PromiseToPurchase/IIndexedBankUsed.d.ts +33 -33
  179. package/dist/Interfaces/PromiseToPurchase/IIndexedBankUsed.js +15 -15
  180. package/dist/Interfaces/PromiseToPurchase/IIndexedCustomerPromiseToPurchase.d.ts +19 -19
  181. package/dist/Interfaces/PromiseToPurchase/IIndexedCustomerPromiseToPurchase.js +2 -2
  182. package/dist/Interfaces/PromiseToPurchase/index.d.ts +50 -50
  183. package/dist/Interfaces/PromiseToPurchase/index.js +13 -13
  184. package/dist/Interfaces/PurchaseOrder/index.d.ts +17 -17
  185. package/dist/Interfaces/PurchaseOrder/index.js +2 -2
  186. package/dist/Interfaces/Query/IBrandQueryOptions.d.ts +11 -11
  187. package/dist/Interfaces/Query/IBrandQueryOptions.js +2 -2
  188. package/dist/Interfaces/Query/ICategoryQueryOptions.d.ts +11 -11
  189. package/dist/Interfaces/Query/ICategoryQueryOptions.js +2 -2
  190. package/dist/Interfaces/Query/IProductQueryOptions.d.ts +16 -16
  191. package/dist/Interfaces/Query/IProductQueryOptions.js +2 -2
  192. package/dist/Interfaces/Quote/index.d.ts +5 -5
  193. package/dist/Interfaces/Quote/index.js +2 -2
  194. package/dist/Interfaces/Refunds/index.d.ts +106 -106
  195. package/dist/Interfaces/Refunds/index.js +2 -2
  196. package/dist/Interfaces/Rules/IDiscountRule.d.ts +137 -137
  197. package/dist/Interfaces/Rules/IDiscountRule.js +95 -95
  198. package/dist/Interfaces/Schedule/index.d.ts +48 -48
  199. package/dist/Interfaces/Schedule/index.js +2 -2
  200. package/dist/Interfaces/Services/IAddServiceResponse.d.ts +4 -4
  201. package/dist/Interfaces/Services/IAddServiceResponse.js +2 -2
  202. package/dist/Interfaces/Services/IService.d.ts +12 -12
  203. package/dist/Interfaces/Services/IService.js +2 -2
  204. package/dist/Interfaces/Services/IServiceSecret.d.ts +8 -8
  205. package/dist/Interfaces/Services/IServiceSecret.js +2 -2
  206. package/dist/Interfaces/Shipping/Shipstation/carriers.d.ts +10 -10
  207. package/dist/Interfaces/Shipping/Shipstation/carriers.js +2 -2
  208. package/dist/Interfaces/Shipping/Shipstation/order.d.ts +227 -227
  209. package/dist/Interfaces/Shipping/Shipstation/order.js +2 -2
  210. package/dist/Interfaces/Shipping/Shipstation/quote.d.ts +31 -31
  211. package/dist/Interfaces/Shipping/Shipstation/quote.js +2 -2
  212. package/dist/Interfaces/Shipping/Shiptime/order.d.ts +54 -54
  213. package/dist/Interfaces/Shipping/Shiptime/order.js +48 -48
  214. package/dist/Interfaces/Shipping/Shiptime/quote.d.ts +111 -111
  215. package/dist/Interfaces/Shipping/Shiptime/quote.js +2 -2
  216. package/dist/Interfaces/Slider/GR.d.ts +114 -114
  217. package/dist/Interfaces/Slider/GR.js +271 -271
  218. package/dist/Interfaces/Slider/index.d.ts +30 -30
  219. package/dist/Interfaces/Slider/index.js +2 -2
  220. package/dist/Interfaces/Space/IExternalService.d.ts +52 -52
  221. package/dist/Interfaces/Space/IExternalService.js +43 -43
  222. package/dist/Interfaces/Space/IMember.d.ts +16 -16
  223. package/dist/Interfaces/Space/IMember.js +9 -9
  224. package/dist/Interfaces/Space/index.d.ts +385 -385
  225. package/dist/Interfaces/Space/index.js +159 -159
  226. package/dist/Interfaces/Specials/gr.d.ts +61 -61
  227. package/dist/Interfaces/Specials/gr.js +2 -2
  228. package/dist/Interfaces/StockNotification/index.d.ts +7 -7
  229. package/dist/Interfaces/StockNotification/index.js +2 -2
  230. package/dist/Interfaces/Store/index.d.ts +62 -62
  231. package/dist/Interfaces/Store/index.js +27 -27
  232. package/dist/Interfaces/Supplier/ICommand.d.ts +11 -11
  233. package/dist/Interfaces/Supplier/ICommand.js +2 -2
  234. package/dist/Interfaces/Supplier/index.d.ts +36 -36
  235. package/dist/Interfaces/Supplier/index.js +24 -24
  236. package/dist/Interfaces/TCG/index.d.ts +110 -110
  237. package/dist/Interfaces/TCG/index.js +27 -27
  238. package/dist/Interfaces/Tag/index.d.ts +18 -18
  239. package/dist/Interfaces/Tag/index.js +2 -2
  240. package/dist/Interfaces/Tax/index.d.ts +13 -13
  241. package/dist/Interfaces/Tax/index.js +2 -2
  242. package/dist/Interfaces/TransferRequest/index.d.ts +103 -103
  243. package/dist/Interfaces/TransferRequest/index.js +43 -43
  244. package/dist/Interfaces/Translation/index.d.ts +8 -8
  245. package/dist/Interfaces/Translation/index.js +5 -5
  246. package/dist/Interfaces/Update/index.d.ts +10 -10
  247. package/dist/Interfaces/Update/index.js +2 -2
  248. package/dist/Interfaces/User/IUser.d.ts +65 -65
  249. package/dist/Interfaces/User/IUser.js +8 -8
  250. package/dist/Interfaces/Version/index.d.ts +11 -11
  251. package/dist/Interfaces/Version/index.js +2 -2
  252. package/dist/Interfaces/Wishlist/index.d.ts +7 -7
  253. package/dist/Interfaces/Wishlist/index.js +2 -2
  254. package/dist/constants/Interfaces/IBaseApi.d.ts +15 -15
  255. package/dist/constants/Interfaces/IBaseApi.js +2 -2
  256. package/dist/constants/Interfaces/IEndpointResult.d.ts +9 -9
  257. package/dist/constants/Interfaces/IEndpointResult.js +2 -2
  258. package/dist/constants/enums.d.ts +6 -6
  259. package/dist/constants/enums.js +10 -10
  260. package/dist/constants/services.d.ts +2 -2
  261. package/dist/constants/services.js +111 -111
  262. package/dist/constants/version.d.ts +2 -2
  263. package/dist/constants/version.js +5 -5
  264. package/dist/index.d.ts +32 -32
  265. package/dist/index.js +242 -242
  266. package/dist/lib/Attribute/index.d.ts +14 -14
  267. package/dist/lib/Attribute/index.js +143 -143
  268. package/dist/lib/BGJob/index.d.ts +9 -9
  269. package/dist/lib/BGJob/index.js +212 -212
  270. package/dist/lib/BackgroundWorker/index.d.ts +34 -34
  271. package/dist/lib/BackgroundWorker/index.js +59 -59
  272. package/dist/lib/Blog/BlogArticle.d.ts +5 -5
  273. package/dist/lib/Blog/BlogArticle.js +10 -10
  274. package/dist/lib/Blog/BlogAuthor.d.ts +5 -5
  275. package/dist/lib/Blog/BlogAuthor.js +10 -10
  276. package/dist/lib/Blog/BlogCategory.d.ts +5 -5
  277. package/dist/lib/Blog/BlogCategory.js +10 -10
  278. package/dist/lib/Blog/BlogKeyword.d.ts +5 -5
  279. package/dist/lib/Blog/BlogKeyword.js +10 -10
  280. package/dist/lib/Booking/index.d.ts +70 -70
  281. package/dist/lib/Booking/index.js +576 -576
  282. package/dist/lib/Brand/index.d.ts +17 -17
  283. package/dist/lib/Brand/index.js +113 -113
  284. package/dist/lib/Cart/index.d.ts +206 -206
  285. package/dist/lib/Cart/index.js +3164 -3164
  286. package/dist/lib/Catalogue/index.d.ts +9 -9
  287. package/dist/lib/Catalogue/index.js +69 -69
  288. package/dist/lib/Category/index.d.ts +27 -27
  289. package/dist/lib/Category/index.js +190 -190
  290. package/dist/lib/Class/index.d.ts +12 -12
  291. package/dist/lib/Class/index.js +58 -58
  292. package/dist/lib/Consent/index.d.ts +4 -4
  293. package/dist/lib/Consent/index.js +29 -29
  294. package/dist/lib/Customer/index.d.ts +11 -11
  295. package/dist/lib/Customer/index.js +68 -68
  296. package/dist/lib/Declination/index.d.ts +9 -9
  297. package/dist/lib/Declination/index.js +24 -24
  298. package/dist/lib/Discount/index.d.ts +18 -18
  299. package/dist/lib/Discount/index.js +470 -470
  300. package/dist/lib/ElasticSearch/index.d.ts +8 -8
  301. package/dist/lib/ElasticSearch/index.js +45 -45
  302. package/dist/lib/Elavon/index.d.ts +18 -18
  303. package/dist/lib/Elavon/index.js +130 -130
  304. package/dist/lib/Email/AbandonedCartEmail.d.ts +8 -8
  305. package/dist/lib/Email/AbandonedCartEmail.js +16 -16
  306. package/dist/lib/Email/AccountConfirmationEmail.d.ts +11 -11
  307. package/dist/lib/Email/AccountConfirmationEmail.js +22 -22
  308. package/dist/lib/Email/AdminOrderConfirmationEmail.d.ts +8 -8
  309. package/dist/lib/Email/AdminOrderConfirmationEmail.js +16 -16
  310. package/dist/lib/Email/ApplicationEmail.d.ts +8 -8
  311. package/dist/lib/Email/ApplicationEmail.js +16 -16
  312. package/dist/lib/Email/BackInStockEmail.d.ts +8 -8
  313. package/dist/lib/Email/BackInStockEmail.js +16 -16
  314. package/dist/lib/Email/ContactEmail.d.ts +8 -8
  315. package/dist/lib/Email/ContactEmail.js +16 -16
  316. package/dist/lib/Email/CustomerBookingAdminEmail.d.ts +8 -8
  317. package/dist/lib/Email/CustomerBookingAdminEmail.js +16 -16
  318. package/dist/lib/Email/CustomerBookingEmail.d.ts +8 -8
  319. package/dist/lib/Email/CustomerBookingEmail.js +16 -16
  320. package/dist/lib/Email/OrderConfirmationEmail.d.ts +8 -8
  321. package/dist/lib/Email/OrderConfirmationEmail.js +16 -16
  322. package/dist/lib/Email/OrderDenounciationEmail.d.ts +8 -8
  323. package/dist/lib/Email/OrderDenounciationEmail.js +16 -16
  324. package/dist/lib/Email/OrderSampleEmail.d.ts +8 -8
  325. package/dist/lib/Email/OrderSampleEmail.js +16 -16
  326. package/dist/lib/Email/OtherTypeEmails.d.ts +8 -8
  327. package/dist/lib/Email/OtherTypeEmails.js +19 -19
  328. package/dist/lib/Email/PasswordResetEmail.d.ts +8 -8
  329. package/dist/lib/Email/PasswordResetEmail.js +16 -16
  330. package/dist/lib/Email/PhotoShootEmail.d.ts +8 -8
  331. package/dist/lib/Email/PhotoShootEmail.js +16 -16
  332. package/dist/lib/Email/PickUpConfirmation.d.ts +8 -8
  333. package/dist/lib/Email/PickUpConfirmation.js +16 -16
  334. package/dist/lib/Email/ShippingConfirmation.d.ts +8 -8
  335. package/dist/lib/Email/ShippingConfirmation.js +16 -16
  336. package/dist/lib/Email/WelcomeEmail.d.ts +8 -8
  337. package/dist/lib/Email/WelcomeEmail.js +16 -16
  338. package/dist/lib/Email/index.d.ts +8 -8
  339. package/dist/lib/Email/index.js +23 -23
  340. package/dist/lib/ExternalService/Ebay.d.ts +62 -62
  341. package/dist/lib/ExternalService/Ebay.js +102 -102
  342. package/dist/lib/ExternalService/index.d.ts +5 -5
  343. package/dist/lib/ExternalService/index.js +10 -10
  344. package/dist/lib/FirstOrderTracking/index.d.ts +5 -5
  345. package/dist/lib/FirstOrderTracking/index.js +10 -10
  346. package/dist/lib/Indexed/IndexedCart.d.ts +13 -13
  347. package/dist/lib/Indexed/IndexedCart.js +86 -86
  348. package/dist/lib/Indexed/Product.d.ts +17 -17
  349. package/dist/lib/Indexed/Product.js +48 -48
  350. package/dist/lib/Inventory/index.d.ts +49 -49
  351. package/dist/lib/Inventory/index.js +314 -314
  352. package/dist/lib/Invoice/index.d.ts +5 -5
  353. package/dist/lib/Invoice/index.js +10 -10
  354. package/dist/lib/MarketplacePublication/index.d.ts +9 -9
  355. package/dist/lib/MarketplacePublication/index.js +118 -118
  356. package/dist/lib/Menu/index.d.ts +11 -11
  357. package/dist/lib/Menu/index.js +103 -103
  358. package/dist/lib/MongoDB/BaseAPI.d.ts +18 -18
  359. package/dist/lib/MongoDB/BaseAPI.js +200 -200
  360. package/dist/lib/Note/index.d.ts +4 -0
  361. package/dist/lib/Note/index.js +7 -0
  362. package/dist/lib/Note/index.js.map +1 -0
  363. package/dist/lib/Order/index.d.ts +7 -7
  364. package/dist/lib/Order/index.js +33 -33
  365. package/dist/lib/Org/index.d.ts +27 -27
  366. package/dist/lib/Org/index.js +175 -175
  367. package/dist/lib/PandaPay/index.d.ts +16 -16
  368. package/dist/lib/PandaPay/index.js +170 -170
  369. package/dist/lib/Paysafe/index.d.ts +11 -11
  370. package/dist/lib/Paysafe/index.js +40 -40
  371. package/dist/lib/Product/index.d.ts +154 -154
  372. package/dist/lib/Product/index.js +793 -793
  373. package/dist/lib/ProductAttribute/index.d.ts +15 -15
  374. package/dist/lib/ProductAttribute/index.js +45 -45
  375. package/dist/lib/PromiseToPurchase/index.d.ts +37 -37
  376. package/dist/lib/PromiseToPurchase/index.js +264 -264
  377. package/dist/lib/PurchaseOrder/index.d.ts +9 -9
  378. package/dist/lib/PurchaseOrder/index.js +16 -16
  379. package/dist/lib/Schedule/index.d.ts +5 -5
  380. package/dist/lib/Schedule/index.js +12 -12
  381. package/dist/lib/Service/Enum/ServiceEnum.d.ts +3 -3
  382. package/dist/lib/Service/Enum/ServiceEnum.js +7 -7
  383. package/dist/lib/Service/index.d.ts +5 -5
  384. package/dist/lib/Service/index.js +13 -13
  385. package/dist/lib/Shipment/index.d.ts +28 -28
  386. package/dist/lib/Shipment/index.js +357 -357
  387. package/dist/lib/Slider/index.d.ts +16 -16
  388. package/dist/lib/Slider/index.js +113 -113
  389. package/dist/lib/Space/index.d.ts +873 -873
  390. package/dist/lib/Space/index.js +5094 -5094
  391. package/dist/lib/StockNotification/index.d.ts +4 -4
  392. package/dist/lib/StockNotification/index.js +6 -6
  393. package/dist/lib/Store/index.d.ts +5 -5
  394. package/dist/lib/Store/index.js +12 -12
  395. package/dist/lib/Supplier/Command.d.ts +5 -5
  396. package/dist/lib/Supplier/Command.js +10 -10
  397. package/dist/lib/Supplier/index.d.ts +25 -25
  398. package/dist/lib/Supplier/index.js +22 -22
  399. package/dist/lib/Tags/index.d.ts +6 -6
  400. package/dist/lib/Tags/index.js +21 -21
  401. package/dist/lib/Tax/index.d.ts +8 -8
  402. package/dist/lib/Tax/index.js +54 -54
  403. package/dist/lib/TransferRequest/index.d.ts +112 -112
  404. package/dist/lib/TransferRequest/index.js +794 -794
  405. package/dist/lib/Update/index.d.ts +10 -10
  406. package/dist/lib/Update/index.js +22 -22
  407. package/dist/lib/User/index.d.ts +35 -35
  408. package/dist/lib/User/index.js +248 -248
  409. package/dist/lib/Wishlist/index.d.ts +5 -5
  410. package/dist/lib/Wishlist/index.js +10 -10
  411. package/dist/lib/base.d.ts +14 -14
  412. package/dist/lib/base.js +62 -62
  413. package/dist/lib/baseService.d.ts +17 -17
  414. package/dist/lib/baseService.js +43 -43
  415. package/dist/rules/GR/constants/data.d.ts +26 -26
  416. package/dist/rules/GR/constants/data.js +55 -55
  417. package/dist/rules/GR/constants/products.d.ts +8 -8
  418. package/dist/rules/GR/constants/products.js +234 -234
  419. package/dist/rules/GR/interfaces/cart.d.ts +84 -83
  420. package/dist/rules/GR/interfaces/cart.js +41 -40
  421. package/dist/rules/GR/interfaces/cart.js.map +1 -1
  422. package/dist/rules/GR/interfaces/data.d.ts +97 -97
  423. package/dist/rules/GR/interfaces/data.js +104 -104
  424. package/dist/rules/GR/interfaces/products.d.ts +61 -61
  425. package/dist/rules/GR/interfaces/products.js +10 -10
  426. package/dist/rules/GR/utils/cart.d.ts +53 -53
  427. package/dist/rules/GR/utils/cart.js +637 -631
  428. package/dist/rules/GR/utils/cart.js.map +1 -1
  429. package/dist/rules/GR/utils/data.d.ts +3 -3
  430. package/dist/rules/GR/utils/data.js +25 -25
  431. package/dist/rules/GR/utils/expedition.d.ts +71 -71
  432. package/dist/rules/GR/utils/expedition.js +1542 -1542
  433. package/dist/rules/GR/utils/g2.d.ts +176 -176
  434. package/dist/rules/GR/utils/g2.js +845 -845
  435. package/dist/rules/GR/utils/invoices.d.ts +24 -24
  436. package/dist/rules/GR/utils/invoices.js +174 -171
  437. package/dist/rules/GR/utils/invoices.js.map +1 -1
  438. package/dist/rules/GR/utils/products.d.ts +104 -104
  439. package/dist/rules/GR/utils/products.js +984 -984
  440. package/dist/rules/GR/utils/upsells.d.ts +79 -79
  441. package/dist/rules/GR/utils/upsells.js +183 -183
  442. package/dist/services/database/BaseProvider.d.ts +29 -29
  443. package/dist/services/database/BaseProvider.js +28 -28
  444. package/dist/services/database/BatchUtils.d.ts +14 -14
  445. package/dist/services/database/BatchUtils.js +43 -43
  446. package/dist/services/database/Config.d.ts +2 -2
  447. package/dist/services/database/Config.js +5 -5
  448. package/dist/services/database/DatabaseService.d.ts +41 -41
  449. package/dist/services/database/DatabaseService.js +152 -152
  450. package/dist/services/database/FirebaseProvider.d.ts +17 -17
  451. package/dist/services/database/FirebaseProvider.js +218 -218
  452. package/dist/services/database/NotFirebaseProvider.d.ts +35 -35
  453. package/dist/services/database/NotFirebaseProvider.js +243 -243
  454. package/dist/services/g2/G2OrderSlip.d.ts +42 -42
  455. package/dist/services/g2/G2OrderSlip.js +210 -210
  456. package/dist/services/g2/utils.d.ts +9 -9
  457. package/dist/services/g2/utils.js +703 -695
  458. package/dist/services/g2/utils.js.map +1 -1
  459. package/dist/services/logs/index.d.ts +20 -20
  460. package/dist/services/logs/index.js +61 -61
  461. package/dist/services/products/BaseClass.d.ts +50 -50
  462. package/dist/services/products/BaseClass.js +64 -64
  463. package/dist/services/products/TCGService.d.ts +29 -29
  464. package/dist/services/products/TCGService.js +499 -499
  465. package/dist/services/products/utils.d.ts +9 -9
  466. package/dist/services/products/utils.js +94 -94
  467. package/dist/utils/algolia.d.ts +6 -6
  468. package/dist/utils/algolia.js +21 -21
  469. package/dist/utils/anonymisation.d.ts +30 -30
  470. package/dist/utils/anonymisation.js +250 -250
  471. package/dist/utils/array.d.ts +5 -5
  472. package/dist/utils/array.js +14 -14
  473. package/dist/utils/aws.d.ts +14 -14
  474. package/dist/utils/aws.js +126 -126
  475. package/dist/utils/booking.d.ts +22 -22
  476. package/dist/utils/booking.js +118 -118
  477. package/dist/utils/cart.d.ts +103 -102
  478. package/dist/utils/cart.js +690 -652
  479. package/dist/utils/cart.js.map +1 -1
  480. package/dist/utils/categories.d.ts +2 -2
  481. package/dist/utils/categories.js +54 -54
  482. package/dist/utils/cmv.d.ts +10 -10
  483. package/dist/utils/cmv.js +107 -107
  484. package/dist/utils/console.d.ts +6 -6
  485. package/dist/utils/console.js +59 -59
  486. package/dist/utils/context.d.ts +20 -20
  487. package/dist/utils/context.js +61 -61
  488. package/dist/utils/currency.d.ts +6 -6
  489. package/dist/utils/currency.js +61 -61
  490. package/dist/utils/data.d.ts +31 -31
  491. package/dist/utils/data.js +293 -293
  492. package/dist/utils/date.d.ts +1 -1
  493. package/dist/utils/date.js +16 -16
  494. package/dist/utils/dimensions.d.ts +3 -3
  495. package/dist/utils/dimensions.js +16 -16
  496. package/dist/utils/discount.d.ts +46 -46
  497. package/dist/utils/discount.js +934 -934
  498. package/dist/utils/errors.d.ts +113 -113
  499. package/dist/utils/errors.js +113 -113
  500. package/dist/utils/file-admin.d.ts +8 -8
  501. package/dist/utils/file-admin.js +38 -38
  502. package/dist/utils/file.d.ts +38 -38
  503. package/dist/utils/file.js +200 -200
  504. package/dist/utils/firebase-admin.d.ts +2 -2
  505. package/dist/utils/firebase-admin.js +61 -61
  506. package/dist/utils/firebase.d.ts +41 -41
  507. package/dist/utils/firebase.js +131 -131
  508. package/dist/utils/import.d.ts +1 -1
  509. package/dist/utils/import.js +21 -21
  510. package/dist/utils/inventories.d.ts +49 -49
  511. package/dist/utils/inventories.js +392 -392
  512. package/dist/utils/locale.d.ts +15 -15
  513. package/dist/utils/locale.js +78 -78
  514. package/dist/utils/mailchimp.d.ts +58 -58
  515. package/dist/utils/mailchimp.js +495 -495
  516. package/dist/utils/mathUtils.d.ts +17 -17
  517. package/dist/utils/mathUtils.js +315 -315
  518. package/dist/utils/mongodb.d.ts +1 -1
  519. package/dist/utils/mongodb.js +22 -22
  520. package/dist/utils/object.d.ts +13 -13
  521. package/dist/utils/object.js +115 -115
  522. package/dist/utils/payment.d.ts +10 -10
  523. package/dist/utils/payment.js +23 -23
  524. package/dist/utils/products.d.ts +32 -32
  525. package/dist/utils/products.js +186 -186
  526. package/dist/utils/promiseToPurchase.d.ts +56 -56
  527. package/dist/utils/promiseToPurchase.js +195 -195
  528. package/dist/utils/prosprsearch.d.ts +26 -26
  529. package/dist/utils/prosprsearch.js +182 -182
  530. package/dist/utils/refunds.d.ts +2 -2
  531. package/dist/utils/refunds.js +21 -21
  532. package/dist/utils/sdc.d.ts +10 -10
  533. package/dist/utils/sdc.js +1302 -1302
  534. package/dist/utils/searchIndexes.d.ts +21 -21
  535. package/dist/utils/searchIndexes.js +210 -210
  536. package/dist/utils/services.d.ts +42 -42
  537. package/dist/utils/services.js +409 -409
  538. package/dist/utils/shipment.d.ts +110 -110
  539. package/dist/utils/shipment.js +345 -345
  540. package/dist/utils/simpletexting.d.ts +2 -2
  541. package/dist/utils/simpletexting.js +45 -45
  542. package/dist/utils/sliders.d.ts +4 -4
  543. package/dist/utils/sliders.js +24 -24
  544. package/dist/utils/string.d.ts +16 -16
  545. package/dist/utils/string.js +191 -191
  546. package/dist/utils/tcgService.d.ts +2 -2
  547. package/dist/utils/tcgService.js +8 -8
  548. package/dist/utils/tools.d.ts +1 -1
  549. package/dist/utils/tools.js +9 -9
  550. package/dist/utils/transferRequests.d.ts +19 -19
  551. package/dist/utils/transferRequests.js +43 -43
  552. package/dist/utils/update.d.ts +7 -7
  553. package/dist/utils/update.js +125 -125
  554. package/dist/utils/weight.d.ts +3 -3
  555. package/dist/utils/weight.js +16 -16
  556. package/dist/utils/zones.d.ts +11 -11
  557. package/dist/utils/zones.js +218 -218
  558. package/package.json +110 -110
  559. package/publish.sh +143 -143
  560. package/readme.md +182 -182
@@ -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