addio-admin-sdk 1.7.89 → 1.7.90

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (558) hide show
  1. package/.babelrc +17 -17
  2. package/.env.dev +14 -14
  3. package/.github/workflows/publish_coverage.yam_ +69 -69
  4. package/addio-sdk-doc.md +1473 -1473
  5. package/changelog.md +537 -537
  6. package/dist/Interfaces/Address/index.d.ts +21 -21
  7. package/dist/Interfaces/Address/index.js +16 -16
  8. package/dist/Interfaces/Algolia/index.d.ts +164 -164
  9. package/dist/Interfaces/Algolia/index.js +2 -2
  10. package/dist/Interfaces/Attachement/index.d.ts +5 -5
  11. package/dist/Interfaces/Attachement/index.js +2 -2
  12. package/dist/Interfaces/Attribute/index.d.ts +52 -52
  13. package/dist/Interfaces/Attribute/index.js +10 -10
  14. package/dist/Interfaces/BGJob/index.d.ts +56 -56
  15. package/dist/Interfaces/BGJob/index.js +25 -25
  16. package/dist/Interfaces/BaseClass/index.d.ts +8 -8
  17. package/dist/Interfaces/BaseClass/index.js +2 -2
  18. package/dist/Interfaces/Blog/IBlogArticle.d.ts +18 -18
  19. package/dist/Interfaces/Blog/IBlogArticle.js +2 -2
  20. package/dist/Interfaces/Blog/IBlogAuthor.d.ts +7 -7
  21. package/dist/Interfaces/Blog/IBlogAuthor.js +2 -2
  22. package/dist/Interfaces/Blog/IBlogCategory.d.ts +9 -9
  23. package/dist/Interfaces/Blog/IBlogCategory.js +2 -2
  24. package/dist/Interfaces/Blog/IBlogComment.d.ts +13 -13
  25. package/dist/Interfaces/Blog/IBlogComment.js +2 -2
  26. package/dist/Interfaces/Blog/IBlogKeywords.d.ts +9 -9
  27. package/dist/Interfaces/Blog/IBlogKeywords.js +2 -2
  28. package/dist/Interfaces/Booking/index.d.ts +74 -74
  29. package/dist/Interfaces/Booking/index.js +17 -17
  30. package/dist/Interfaces/Brand/index.d.ts +15 -15
  31. package/dist/Interfaces/Brand/index.js +2 -2
  32. package/dist/Interfaces/CMS/index.d.ts +25 -25
  33. package/dist/Interfaces/CMS/index.js +2 -2
  34. package/dist/Interfaces/Cart/IElavonPayload.d.ts +93 -93
  35. package/dist/Interfaces/Cart/IElavonPayload.js +17 -17
  36. package/dist/Interfaces/Cart/IPandaPayload.d.ts +64 -64
  37. package/dist/Interfaces/Cart/IPandaPayload.js +18 -18
  38. package/dist/Interfaces/Cart/IPaymentCard.d.ts +22 -22
  39. package/dist/Interfaces/Cart/IPaymentCard.js +44 -44
  40. package/dist/Interfaces/Cart/IPaypalPayload.d.ts +9 -9
  41. package/dist/Interfaces/Cart/IPaypalPayload.js +2 -2
  42. package/dist/Interfaces/Cart/IPaysafePayload.d.ts +72 -72
  43. package/dist/Interfaces/Cart/IPaysafePayload.js +2 -2
  44. package/dist/Interfaces/Cart/IStripePayload.d.ts +66 -66
  45. package/dist/Interfaces/Cart/IStripePayload.js +2 -2
  46. package/dist/Interfaces/Cart/index.d.ts +425 -425
  47. package/dist/Interfaces/Cart/index.js +192 -192
  48. package/dist/Interfaces/Catalogue/index.d.ts +68 -68
  49. package/dist/Interfaces/Catalogue/index.js +37 -37
  50. package/dist/Interfaces/Category/index.d.ts +33 -33
  51. package/dist/Interfaces/Category/index.js +2 -2
  52. package/dist/Interfaces/Chart/index.d.ts +11 -11
  53. package/dist/Interfaces/Chart/index.js +2 -2
  54. package/dist/Interfaces/Class/index.d.ts +8 -8
  55. package/dist/Interfaces/Class/index.js +2 -2
  56. package/dist/Interfaces/Consent/index.d.ts +6 -6
  57. package/dist/Interfaces/Consent/index.js +2 -2
  58. package/dist/Interfaces/Context/IContextProps.d.ts +4 -4
  59. package/dist/Interfaces/Context/IContextProps.js +2 -2
  60. package/dist/Interfaces/Context/IContextState.d.ts +15 -15
  61. package/dist/Interfaces/Context/IContextState.js +2 -2
  62. package/dist/Interfaces/Customer/ICustomerBadge.d.ts +2 -2
  63. package/dist/Interfaces/Customer/ICustomerBadge.js +2 -2
  64. package/dist/Interfaces/Customer/ICustomerRating.d.ts +10 -10
  65. package/dist/Interfaces/Customer/ICustomerRating.js +2 -2
  66. package/dist/Interfaces/Customer/IStoreCredit.d.ts +12 -12
  67. package/dist/Interfaces/Customer/IStoreCredit.js +2 -2
  68. package/dist/Interfaces/Customer/index.d.ts +97 -97
  69. package/dist/Interfaces/Customer/index.js +141 -141
  70. package/dist/Interfaces/Declination/index.d.ts +114 -114
  71. package/dist/Interfaces/Declination/index.js +60 -60
  72. package/dist/Interfaces/Document/index.d.ts +8 -8
  73. package/dist/Interfaces/Document/index.js +2 -2
  74. package/dist/Interfaces/Elastic/index.d.ts +89 -89
  75. package/dist/Interfaces/Elastic/index.js +2 -2
  76. package/dist/Interfaces/Email/CustomGR/I3DPrintEmail.d.ts +11 -11
  77. package/dist/Interfaces/Email/CustomGR/I3DPrintEmail.js +2 -2
  78. package/dist/Interfaces/Email/CustomGR/IBorrowToolsEmail.d.ts +15 -15
  79. package/dist/Interfaces/Email/CustomGR/IBorrowToolsEmail.js +2 -2
  80. package/dist/Interfaces/Email/CustomGR/IPickupMaterialsEmail.d.ts +12 -12
  81. package/dist/Interfaces/Email/CustomGR/IPickupMaterialsEmail.js +2 -2
  82. package/dist/Interfaces/Email/CustomGR/IPreMeetingFormEmail.d.ts +36 -36
  83. package/dist/Interfaces/Email/CustomGR/IPreMeetingFormEmail.js +2 -2
  84. package/dist/Interfaces/Email/CustomGR/ISponsorRequestEmail.d.ts +12 -12
  85. package/dist/Interfaces/Email/CustomGR/ISponsorRequestEmail.js +2 -2
  86. package/dist/Interfaces/Email/CustomGR/ITransportEmail.d.ts +12 -12
  87. package/dist/Interfaces/Email/CustomGR/ITransportEmail.js +2 -2
  88. package/dist/Interfaces/Email/CustomGR/ITransportQuoteEmail.d.ts +12 -12
  89. package/dist/Interfaces/Email/CustomGR/ITransportQuoteEmail.js +2 -2
  90. package/dist/Interfaces/Email/CustomGR/IVegetalsEmail.d.ts +16 -16
  91. package/dist/Interfaces/Email/CustomGR/IVegetalsEmail.js +2 -2
  92. package/dist/Interfaces/Email/CustomGR/IWishlistEmail.d.ts +15 -15
  93. package/dist/Interfaces/Email/CustomGR/IWishlistEmail.js +2 -2
  94. package/dist/Interfaces/Email/IAbandonnedCartEmail.d.ts +29 -29
  95. package/dist/Interfaces/Email/IAbandonnedCartEmail.js +2 -2
  96. package/dist/Interfaces/Email/IAccountConfirmationEmail.d.ts +22 -22
  97. package/dist/Interfaces/Email/IAccountConfirmationEmail.js +2 -2
  98. package/dist/Interfaces/Email/IApplicationEmail.d.ts +19 -19
  99. package/dist/Interfaces/Email/IApplicationEmail.js +2 -2
  100. package/dist/Interfaces/Email/IBackInStockEmail.d.ts +21 -21
  101. package/dist/Interfaces/Email/IBackInStockEmail.js +2 -2
  102. package/dist/Interfaces/Email/IContactEmail.d.ts +20 -20
  103. package/dist/Interfaces/Email/IContactEmail.js +2 -2
  104. package/dist/Interfaces/Email/ICustomerBookingAdminEmail.d.ts +15 -15
  105. package/dist/Interfaces/Email/ICustomerBookingAdminEmail.js +2 -2
  106. package/dist/Interfaces/Email/ICustomerBookingEmail.d.ts +14 -14
  107. package/dist/Interfaces/Email/ICustomerBookingEmail.js +2 -2
  108. package/dist/Interfaces/Email/IEmail.d.ts +20 -20
  109. package/dist/Interfaces/Email/IEmail.js +56 -56
  110. package/dist/Interfaces/Email/IOrderConfirmationEmail.d.ts +47 -47
  111. package/dist/Interfaces/Email/IOrderConfirmationEmail.js +2 -2
  112. package/dist/Interfaces/Email/IPasswordResetEmail.d.ts +17 -17
  113. package/dist/Interfaces/Email/IPasswordResetEmail.js +2 -2
  114. package/dist/Interfaces/Email/IPhotoShootEmail.d.ts +14 -14
  115. package/dist/Interfaces/Email/IPhotoShootEmail.js +2 -2
  116. package/dist/Interfaces/Email/IPickupConfirmation.d.ts +23 -23
  117. package/dist/Interfaces/Email/IPickupConfirmation.js +2 -2
  118. package/dist/Interfaces/Email/IShippingConfirmation.d.ts +23 -23
  119. package/dist/Interfaces/Email/IShippingConfirmation.js +2 -2
  120. package/dist/Interfaces/Email/IWelcomeEmail.d.ts +19 -19
  121. package/dist/Interfaces/Email/IWelcomeEmail.js +2 -2
  122. package/dist/Interfaces/ExportSchema/index.d.ts +7 -7
  123. package/dist/Interfaces/ExportSchema/index.js +2 -2
  124. package/dist/Interfaces/ExternalService/BaseExternalService.d.ts +12 -12
  125. package/dist/Interfaces/ExternalService/BaseExternalService.js +2 -2
  126. package/dist/Interfaces/ExternalService/ExternalProductsService.d.ts +4 -4
  127. package/dist/Interfaces/ExternalService/ExternalProductsService.js +2 -2
  128. package/dist/Interfaces/ExternalService/index.d.ts +9 -9
  129. package/dist/Interfaces/ExternalService/index.js +2 -2
  130. package/dist/Interfaces/FirstOrderTracking/index.d.ts +5 -5
  131. package/dist/Interfaces/FirstOrderTracking/index.js +2 -2
  132. package/dist/Interfaces/G2/index.d.ts +556 -556
  133. package/dist/Interfaces/G2/index.js +36 -36
  134. package/dist/Interfaces/Indexed/Product/IIndexedLastSavedProduct.d.ts +20 -20
  135. package/dist/Interfaces/Indexed/Product/IIndexedLastSavedProduct.js +2 -2
  136. package/dist/Interfaces/Indexed/Product/index.d.ts +97 -97
  137. package/dist/Interfaces/Indexed/Product/index.js +212 -212
  138. package/dist/Interfaces/Inventory/index.d.ts +19 -19
  139. package/dist/Interfaces/Inventory/index.js +8 -8
  140. package/dist/Interfaces/Invoice/index.d.ts +4 -4
  141. package/dist/Interfaces/Invoice/index.js +2 -2
  142. package/dist/Interfaces/MarketplacePublication/MarketplaceOrderData.d.ts +3 -3
  143. package/dist/Interfaces/MarketplacePublication/MarketplaceOrderData.js +2 -2
  144. package/dist/Interfaces/MarketplacePublication/index.d.ts +23 -23
  145. package/dist/Interfaces/MarketplacePublication/index.js +22 -22
  146. package/dist/Interfaces/Menu/index.d.ts +23 -23
  147. package/dist/Interfaces/Menu/index.js +10 -10
  148. package/dist/Interfaces/Note/index.d.ts +10 -10
  149. package/dist/Interfaces/Note/index.js +7 -7
  150. package/dist/Interfaces/Operations/ICreatedBy.d.ts +6 -6
  151. package/dist/Interfaces/Operations/ICreatedBy.js +2 -2
  152. package/dist/Interfaces/Operations/IUpdate.d.ts +5 -5
  153. package/dist/Interfaces/Operations/IUpdate.js +2 -2
  154. package/dist/Interfaces/Order/index.d.ts +4 -4
  155. package/dist/Interfaces/Order/index.js +2 -2
  156. package/dist/Interfaces/Org/IRelUser.d.ts +9 -9
  157. package/dist/Interfaces/Org/IRelUser.js +2 -2
  158. package/dist/Interfaces/Org/index.d.ts +29 -29
  159. package/dist/Interfaces/Org/index.js +12 -12
  160. package/dist/Interfaces/Payment/index.d.ts +13 -13
  161. package/dist/Interfaces/Payment/index.js +2 -2
  162. package/dist/Interfaces/Product/IAttributeFamily.d.ts +6 -6
  163. package/dist/Interfaces/Product/IAttributeFamily.js +2 -2
  164. package/dist/Interfaces/Product/IImportProduct.d.ts +42 -42
  165. package/dist/Interfaces/Product/IImportProduct.js +791 -791
  166. package/dist/Interfaces/Product/IInventoryItem.d.ts +84 -84
  167. package/dist/Interfaces/Product/IInventoryItem.js +36 -36
  168. package/dist/Interfaces/Product/IPricing.d.ts +177 -177
  169. package/dist/Interfaces/Product/IPricing.js +174 -174
  170. package/dist/Interfaces/Product/index.d.ts +127 -127
  171. package/dist/Interfaces/Product/index.js +56 -56
  172. package/dist/Interfaces/ProductAttribute/index.d.ts +11 -11
  173. package/dist/Interfaces/ProductAttribute/index.js +2 -2
  174. package/dist/Interfaces/PromiseToPurchase/BankType.d.ts +41 -41
  175. package/dist/Interfaces/PromiseToPurchase/BankType.js +41 -41
  176. package/dist/Interfaces/PromiseToPurchase/IIndexedBankUsed.d.ts +33 -33
  177. package/dist/Interfaces/PromiseToPurchase/IIndexedBankUsed.js +15 -15
  178. package/dist/Interfaces/PromiseToPurchase/IIndexedCustomerPromiseToPurchase.d.ts +19 -19
  179. package/dist/Interfaces/PromiseToPurchase/IIndexedCustomerPromiseToPurchase.js +2 -2
  180. package/dist/Interfaces/PromiseToPurchase/index.d.ts +50 -50
  181. package/dist/Interfaces/PromiseToPurchase/index.js +13 -13
  182. package/dist/Interfaces/PurchaseOrder/index.d.ts +17 -17
  183. package/dist/Interfaces/PurchaseOrder/index.js +2 -2
  184. package/dist/Interfaces/Query/IBrandQueryOptions.d.ts +11 -11
  185. package/dist/Interfaces/Query/IBrandQueryOptions.js +2 -2
  186. package/dist/Interfaces/Query/ICategoryQueryOptions.d.ts +11 -11
  187. package/dist/Interfaces/Query/ICategoryQueryOptions.js +2 -2
  188. package/dist/Interfaces/Query/IProductQueryOptions.d.ts +16 -16
  189. package/dist/Interfaces/Query/IProductQueryOptions.js +2 -2
  190. package/dist/Interfaces/Quote/index.d.ts +5 -5
  191. package/dist/Interfaces/Quote/index.js +2 -2
  192. package/dist/Interfaces/Refunds/index.d.ts +106 -106
  193. package/dist/Interfaces/Refunds/index.js +2 -2
  194. package/dist/Interfaces/Rules/IDiscountRule.d.ts +137 -137
  195. package/dist/Interfaces/Rules/IDiscountRule.js +95 -95
  196. package/dist/Interfaces/Schedule/index.d.ts +48 -48
  197. package/dist/Interfaces/Schedule/index.js +2 -2
  198. package/dist/Interfaces/Services/IAddServiceResponse.d.ts +4 -4
  199. package/dist/Interfaces/Services/IAddServiceResponse.js +2 -2
  200. package/dist/Interfaces/Services/IService.d.ts +12 -12
  201. package/dist/Interfaces/Services/IService.js +2 -2
  202. package/dist/Interfaces/Services/IServiceSecret.d.ts +8 -8
  203. package/dist/Interfaces/Services/IServiceSecret.js +2 -2
  204. package/dist/Interfaces/Shipping/Shipstation/carriers.d.ts +10 -10
  205. package/dist/Interfaces/Shipping/Shipstation/carriers.js +2 -2
  206. package/dist/Interfaces/Shipping/Shipstation/order.d.ts +227 -227
  207. package/dist/Interfaces/Shipping/Shipstation/order.js +2 -2
  208. package/dist/Interfaces/Shipping/Shipstation/quote.d.ts +31 -31
  209. package/dist/Interfaces/Shipping/Shipstation/quote.js +2 -2
  210. package/dist/Interfaces/Shipping/Shiptime/order.d.ts +54 -54
  211. package/dist/Interfaces/Shipping/Shiptime/order.js +48 -48
  212. package/dist/Interfaces/Shipping/Shiptime/quote.d.ts +111 -111
  213. package/dist/Interfaces/Shipping/Shiptime/quote.js +2 -2
  214. package/dist/Interfaces/Slider/GR.d.ts +114 -114
  215. package/dist/Interfaces/Slider/GR.js +271 -271
  216. package/dist/Interfaces/Slider/index.d.ts +30 -30
  217. package/dist/Interfaces/Slider/index.js +2 -2
  218. package/dist/Interfaces/Space/IExternalService.d.ts +52 -52
  219. package/dist/Interfaces/Space/IExternalService.js +43 -43
  220. package/dist/Interfaces/Space/IMember.d.ts +16 -16
  221. package/dist/Interfaces/Space/IMember.js +9 -9
  222. package/dist/Interfaces/Space/index.d.ts +390 -390
  223. package/dist/Interfaces/Space/index.js +160 -160
  224. package/dist/Interfaces/Specials/gr.d.ts +61 -61
  225. package/dist/Interfaces/Specials/gr.js +2 -2
  226. package/dist/Interfaces/StockNotification/index.d.ts +7 -7
  227. package/dist/Interfaces/StockNotification/index.js +2 -2
  228. package/dist/Interfaces/Store/index.d.ts +62 -62
  229. package/dist/Interfaces/Store/index.js +27 -27
  230. package/dist/Interfaces/Supplier/ICommand.d.ts +11 -11
  231. package/dist/Interfaces/Supplier/ICommand.js +2 -2
  232. package/dist/Interfaces/Supplier/index.d.ts +36 -36
  233. package/dist/Interfaces/Supplier/index.js +24 -24
  234. package/dist/Interfaces/TCG/index.d.ts +110 -110
  235. package/dist/Interfaces/TCG/index.js +27 -27
  236. package/dist/Interfaces/Tag/index.d.ts +18 -18
  237. package/dist/Interfaces/Tag/index.js +2 -2
  238. package/dist/Interfaces/Tax/index.d.ts +13 -13
  239. package/dist/Interfaces/Tax/index.js +2 -2
  240. package/dist/Interfaces/TransferRequest/index.d.ts +103 -103
  241. package/dist/Interfaces/TransferRequest/index.js +43 -43
  242. package/dist/Interfaces/Translation/index.d.ts +8 -8
  243. package/dist/Interfaces/Translation/index.js +5 -5
  244. package/dist/Interfaces/Update/index.d.ts +10 -10
  245. package/dist/Interfaces/Update/index.js +2 -2
  246. package/dist/Interfaces/User/IUser.d.ts +65 -65
  247. package/dist/Interfaces/User/IUser.js +8 -8
  248. package/dist/Interfaces/Version/index.d.ts +11 -11
  249. package/dist/Interfaces/Version/index.js +2 -2
  250. package/dist/Interfaces/Wishlist/index.d.ts +7 -7
  251. package/dist/Interfaces/Wishlist/index.js +2 -2
  252. package/dist/constants/Interfaces/IBaseApi.d.ts +15 -15
  253. package/dist/constants/Interfaces/IBaseApi.js +2 -2
  254. package/dist/constants/Interfaces/IEndpointResult.d.ts +9 -9
  255. package/dist/constants/Interfaces/IEndpointResult.js +2 -2
  256. package/dist/constants/enums.d.ts +6 -6
  257. package/dist/constants/enums.js +10 -10
  258. package/dist/constants/services.d.ts +2 -2
  259. package/dist/constants/services.js +111 -111
  260. package/dist/constants/version.d.ts +2 -2
  261. package/dist/constants/version.js +5 -5
  262. package/dist/index.d.ts +32 -32
  263. package/dist/index.js +242 -242
  264. package/dist/lib/Attribute/index.d.ts +14 -14
  265. package/dist/lib/Attribute/index.js +143 -143
  266. package/dist/lib/BGJob/index.d.ts +9 -9
  267. package/dist/lib/BGJob/index.js +212 -212
  268. package/dist/lib/BackgroundWorker/index.d.ts +34 -34
  269. package/dist/lib/BackgroundWorker/index.js +59 -59
  270. package/dist/lib/Blog/BlogArticle.d.ts +5 -5
  271. package/dist/lib/Blog/BlogArticle.js +10 -10
  272. package/dist/lib/Blog/BlogAuthor.d.ts +5 -5
  273. package/dist/lib/Blog/BlogAuthor.js +10 -10
  274. package/dist/lib/Blog/BlogCategory.d.ts +5 -5
  275. package/dist/lib/Blog/BlogCategory.js +10 -10
  276. package/dist/lib/Blog/BlogKeyword.d.ts +5 -5
  277. package/dist/lib/Blog/BlogKeyword.js +10 -10
  278. package/dist/lib/Booking/index.d.ts +70 -70
  279. package/dist/lib/Booking/index.js +576 -576
  280. package/dist/lib/Brand/index.d.ts +17 -17
  281. package/dist/lib/Brand/index.js +113 -113
  282. package/dist/lib/Cart/index.d.ts +206 -206
  283. package/dist/lib/Cart/index.js +3165 -3164
  284. package/dist/lib/Cart/index.js.map +1 -1
  285. package/dist/lib/Catalogue/index.d.ts +9 -9
  286. package/dist/lib/Catalogue/index.js +69 -69
  287. package/dist/lib/Category/index.d.ts +27 -27
  288. package/dist/lib/Category/index.js +190 -190
  289. package/dist/lib/Class/index.d.ts +12 -12
  290. package/dist/lib/Class/index.js +58 -58
  291. package/dist/lib/Consent/index.d.ts +4 -4
  292. package/dist/lib/Consent/index.js +29 -29
  293. package/dist/lib/Customer/index.d.ts +11 -11
  294. package/dist/lib/Customer/index.js +68 -68
  295. package/dist/lib/Declination/index.d.ts +9 -9
  296. package/dist/lib/Declination/index.js +24 -24
  297. package/dist/lib/Discount/index.d.ts +18 -18
  298. package/dist/lib/Discount/index.js +470 -470
  299. package/dist/lib/ElasticSearch/index.d.ts +8 -8
  300. package/dist/lib/ElasticSearch/index.js +45 -45
  301. package/dist/lib/Elavon/index.d.ts +18 -18
  302. package/dist/lib/Elavon/index.js +130 -130
  303. package/dist/lib/Email/AbandonedCartEmail.d.ts +8 -8
  304. package/dist/lib/Email/AbandonedCartEmail.js +16 -16
  305. package/dist/lib/Email/AccountConfirmationEmail.d.ts +11 -11
  306. package/dist/lib/Email/AccountConfirmationEmail.js +22 -22
  307. package/dist/lib/Email/AdminOrderConfirmationEmail.d.ts +8 -8
  308. package/dist/lib/Email/AdminOrderConfirmationEmail.js +16 -16
  309. package/dist/lib/Email/ApplicationEmail.d.ts +8 -8
  310. package/dist/lib/Email/ApplicationEmail.js +16 -16
  311. package/dist/lib/Email/BackInStockEmail.d.ts +8 -8
  312. package/dist/lib/Email/BackInStockEmail.js +16 -16
  313. package/dist/lib/Email/ContactEmail.d.ts +8 -8
  314. package/dist/lib/Email/ContactEmail.js +16 -16
  315. package/dist/lib/Email/CustomerBookingAdminEmail.d.ts +8 -8
  316. package/dist/lib/Email/CustomerBookingAdminEmail.js +16 -16
  317. package/dist/lib/Email/CustomerBookingEmail.d.ts +8 -8
  318. package/dist/lib/Email/CustomerBookingEmail.js +16 -16
  319. package/dist/lib/Email/OrderConfirmationEmail.d.ts +8 -8
  320. package/dist/lib/Email/OrderConfirmationEmail.js +16 -16
  321. package/dist/lib/Email/OrderDenounciationEmail.d.ts +8 -8
  322. package/dist/lib/Email/OrderDenounciationEmail.js +16 -16
  323. package/dist/lib/Email/OrderSampleEmail.d.ts +8 -8
  324. package/dist/lib/Email/OrderSampleEmail.js +16 -16
  325. package/dist/lib/Email/OtherTypeEmails.d.ts +8 -8
  326. package/dist/lib/Email/OtherTypeEmails.js +19 -19
  327. package/dist/lib/Email/PasswordResetEmail.d.ts +8 -8
  328. package/dist/lib/Email/PasswordResetEmail.js +16 -16
  329. package/dist/lib/Email/PhotoShootEmail.d.ts +8 -8
  330. package/dist/lib/Email/PhotoShootEmail.js +16 -16
  331. package/dist/lib/Email/PickUpConfirmation.d.ts +8 -8
  332. package/dist/lib/Email/PickUpConfirmation.js +16 -16
  333. package/dist/lib/Email/ShippingConfirmation.d.ts +8 -8
  334. package/dist/lib/Email/ShippingConfirmation.js +16 -16
  335. package/dist/lib/Email/WelcomeEmail.d.ts +8 -8
  336. package/dist/lib/Email/WelcomeEmail.js +16 -16
  337. package/dist/lib/Email/index.d.ts +8 -8
  338. package/dist/lib/Email/index.js +23 -23
  339. package/dist/lib/ExternalService/Ebay.d.ts +62 -62
  340. package/dist/lib/ExternalService/Ebay.js +102 -102
  341. package/dist/lib/ExternalService/index.d.ts +5 -5
  342. package/dist/lib/ExternalService/index.js +10 -10
  343. package/dist/lib/FirstOrderTracking/index.d.ts +5 -5
  344. package/dist/lib/FirstOrderTracking/index.js +10 -10
  345. package/dist/lib/Indexed/IndexedCart.d.ts +13 -13
  346. package/dist/lib/Indexed/IndexedCart.js +86 -86
  347. package/dist/lib/Indexed/Product.d.ts +17 -17
  348. package/dist/lib/Indexed/Product.js +48 -48
  349. package/dist/lib/Inventory/index.d.ts +49 -49
  350. package/dist/lib/Inventory/index.js +314 -314
  351. package/dist/lib/Invoice/index.d.ts +5 -5
  352. package/dist/lib/Invoice/index.js +10 -10
  353. package/dist/lib/MarketplacePublication/index.d.ts +9 -9
  354. package/dist/lib/MarketplacePublication/index.js +118 -118
  355. package/dist/lib/Menu/index.d.ts +11 -11
  356. package/dist/lib/Menu/index.js +105 -105
  357. package/dist/lib/MongoDB/BaseAPI.d.ts +18 -18
  358. package/dist/lib/MongoDB/BaseAPI.js +200 -200
  359. package/dist/lib/Note/index.d.ts +4 -4
  360. package/dist/lib/Note/index.js +6 -6
  361. package/dist/lib/Order/index.d.ts +7 -7
  362. package/dist/lib/Order/index.js +33 -33
  363. package/dist/lib/Org/index.d.ts +27 -27
  364. package/dist/lib/Org/index.js +175 -175
  365. package/dist/lib/PandaPay/index.d.ts +16 -16
  366. package/dist/lib/PandaPay/index.js +170 -170
  367. package/dist/lib/Paysafe/index.d.ts +11 -11
  368. package/dist/lib/Paysafe/index.js +40 -40
  369. package/dist/lib/Product/index.d.ts +154 -154
  370. package/dist/lib/Product/index.js +793 -793
  371. package/dist/lib/ProductAttribute/index.d.ts +15 -15
  372. package/dist/lib/ProductAttribute/index.js +45 -45
  373. package/dist/lib/PromiseToPurchase/index.d.ts +37 -37
  374. package/dist/lib/PromiseToPurchase/index.js +264 -264
  375. package/dist/lib/PurchaseOrder/index.d.ts +9 -9
  376. package/dist/lib/PurchaseOrder/index.js +16 -16
  377. package/dist/lib/Schedule/index.d.ts +5 -5
  378. package/dist/lib/Schedule/index.js +12 -12
  379. package/dist/lib/Service/Enum/ServiceEnum.d.ts +3 -3
  380. package/dist/lib/Service/Enum/ServiceEnum.js +7 -7
  381. package/dist/lib/Service/index.d.ts +5 -5
  382. package/dist/lib/Service/index.js +13 -13
  383. package/dist/lib/Shipment/index.d.ts +28 -28
  384. package/dist/lib/Shipment/index.js +357 -357
  385. package/dist/lib/Slider/index.d.ts +16 -16
  386. package/dist/lib/Slider/index.js +113 -113
  387. package/dist/lib/Space/index.d.ts +883 -883
  388. package/dist/lib/Space/index.js +5134 -5134
  389. package/dist/lib/StockNotification/index.d.ts +4 -4
  390. package/dist/lib/StockNotification/index.js +6 -6
  391. package/dist/lib/Store/index.d.ts +5 -5
  392. package/dist/lib/Store/index.js +12 -12
  393. package/dist/lib/Supplier/Command.d.ts +5 -5
  394. package/dist/lib/Supplier/Command.js +10 -10
  395. package/dist/lib/Supplier/index.d.ts +25 -25
  396. package/dist/lib/Supplier/index.js +22 -22
  397. package/dist/lib/Tags/index.d.ts +6 -6
  398. package/dist/lib/Tags/index.js +21 -21
  399. package/dist/lib/Tax/index.d.ts +8 -8
  400. package/dist/lib/Tax/index.js +54 -54
  401. package/dist/lib/TransferRequest/index.d.ts +112 -112
  402. package/dist/lib/TransferRequest/index.js +794 -794
  403. package/dist/lib/Update/index.d.ts +10 -10
  404. package/dist/lib/Update/index.js +22 -22
  405. package/dist/lib/User/index.d.ts +35 -35
  406. package/dist/lib/User/index.js +248 -248
  407. package/dist/lib/Wishlist/index.d.ts +5 -5
  408. package/dist/lib/Wishlist/index.js +10 -10
  409. package/dist/lib/base.d.ts +14 -14
  410. package/dist/lib/base.js +62 -62
  411. package/dist/lib/baseService.d.ts +17 -17
  412. package/dist/lib/baseService.js +43 -43
  413. package/dist/rules/GR/constants/data.d.ts +26 -26
  414. package/dist/rules/GR/constants/data.js +55 -55
  415. package/dist/rules/GR/constants/products.d.ts +8 -8
  416. package/dist/rules/GR/constants/products.js +234 -234
  417. package/dist/rules/GR/interfaces/cart.d.ts +84 -84
  418. package/dist/rules/GR/interfaces/cart.js +41 -41
  419. package/dist/rules/GR/interfaces/data.d.ts +97 -97
  420. package/dist/rules/GR/interfaces/data.js +104 -104
  421. package/dist/rules/GR/interfaces/products.d.ts +61 -61
  422. package/dist/rules/GR/interfaces/products.js +10 -10
  423. package/dist/rules/GR/utils/cart.d.ts +53 -53
  424. package/dist/rules/GR/utils/cart.js +637 -637
  425. package/dist/rules/GR/utils/data.d.ts +3 -3
  426. package/dist/rules/GR/utils/data.js +25 -25
  427. package/dist/rules/GR/utils/expedition.d.ts +71 -71
  428. package/dist/rules/GR/utils/expedition.js +1542 -1542
  429. package/dist/rules/GR/utils/g2.d.ts +176 -176
  430. package/dist/rules/GR/utils/g2.js +849 -849
  431. package/dist/rules/GR/utils/invoices.d.ts +24 -24
  432. package/dist/rules/GR/utils/invoices.js +174 -174
  433. package/dist/rules/GR/utils/products.d.ts +104 -104
  434. package/dist/rules/GR/utils/products.js +984 -984
  435. package/dist/rules/GR/utils/upsells.d.ts +79 -79
  436. package/dist/rules/GR/utils/upsells.js +183 -183
  437. package/dist/services/database/BaseProvider.d.ts +29 -29
  438. package/dist/services/database/BaseProvider.js +28 -28
  439. package/dist/services/database/BatchUtils.d.ts +14 -14
  440. package/dist/services/database/BatchUtils.js +43 -43
  441. package/dist/services/database/Config.d.ts +2 -2
  442. package/dist/services/database/Config.js +5 -5
  443. package/dist/services/database/DatabaseService.d.ts +41 -41
  444. package/dist/services/database/DatabaseService.js +152 -152
  445. package/dist/services/database/FirebaseProvider.d.ts +17 -17
  446. package/dist/services/database/FirebaseProvider.js +218 -218
  447. package/dist/services/database/NotFirebaseProvider.d.ts +35 -35
  448. package/dist/services/database/NotFirebaseProvider.js +243 -243
  449. package/dist/services/g2/G2OrderSlip.d.ts +42 -42
  450. package/dist/services/g2/G2OrderSlip.js +210 -210
  451. package/dist/services/g2/utils.d.ts +9 -9
  452. package/dist/services/g2/utils.js +703 -703
  453. package/dist/services/logs/index.d.ts +20 -20
  454. package/dist/services/logs/index.js +61 -61
  455. package/dist/services/products/BaseClass.d.ts +50 -50
  456. package/dist/services/products/BaseClass.js +64 -64
  457. package/dist/services/products/TCGService.d.ts +29 -29
  458. package/dist/services/products/TCGService.js +499 -499
  459. package/dist/services/products/utils.d.ts +9 -9
  460. package/dist/services/products/utils.js +94 -94
  461. package/dist/utils/algolia.d.ts +6 -6
  462. package/dist/utils/algolia.js +21 -21
  463. package/dist/utils/anonymisation.d.ts +30 -30
  464. package/dist/utils/anonymisation.js +250 -250
  465. package/dist/utils/array.d.ts +5 -5
  466. package/dist/utils/array.js +14 -14
  467. package/dist/utils/aws.d.ts +14 -14
  468. package/dist/utils/aws.js +126 -126
  469. package/dist/utils/booking.d.ts +22 -22
  470. package/dist/utils/booking.js +118 -118
  471. package/dist/utils/cart.d.ts +134 -134
  472. package/dist/utils/cart.js +862 -862
  473. package/dist/utils/categories.d.ts +2 -2
  474. package/dist/utils/categories.js +54 -54
  475. package/dist/utils/cmv.d.ts +10 -10
  476. package/dist/utils/cmv.js +107 -107
  477. package/dist/utils/console.d.ts +6 -6
  478. package/dist/utils/console.js +59 -59
  479. package/dist/utils/context.d.ts +20 -20
  480. package/dist/utils/context.js +61 -61
  481. package/dist/utils/currency.d.ts +6 -6
  482. package/dist/utils/currency.js +61 -61
  483. package/dist/utils/data.d.ts +31 -31
  484. package/dist/utils/data.js +294 -294
  485. package/dist/utils/date.d.ts +1 -1
  486. package/dist/utils/date.js +16 -16
  487. package/dist/utils/dimensions.d.ts +3 -3
  488. package/dist/utils/dimensions.js +16 -16
  489. package/dist/utils/discount.d.ts +46 -46
  490. package/dist/utils/discount.js +934 -934
  491. package/dist/utils/errors.d.ts +113 -113
  492. package/dist/utils/errors.js +113 -113
  493. package/dist/utils/file-admin.d.ts +8 -8
  494. package/dist/utils/file-admin.js +38 -38
  495. package/dist/utils/file.d.ts +38 -38
  496. package/dist/utils/file.js +200 -200
  497. package/dist/utils/firebase-admin.d.ts +2 -2
  498. package/dist/utils/firebase-admin.js +61 -61
  499. package/dist/utils/firebase.d.ts +41 -41
  500. package/dist/utils/firebase.js +131 -131
  501. package/dist/utils/import.d.ts +1 -1
  502. package/dist/utils/import.js +21 -21
  503. package/dist/utils/inventories.d.ts +49 -49
  504. package/dist/utils/inventories.js +392 -392
  505. package/dist/utils/locale.d.ts +15 -15
  506. package/dist/utils/locale.js +78 -78
  507. package/dist/utils/locale.js.map +1 -1
  508. package/dist/utils/mailchimp.d.ts +58 -58
  509. package/dist/utils/mailchimp.js +495 -495
  510. package/dist/utils/mathUtils.d.ts +17 -17
  511. package/dist/utils/mathUtils.js +315 -315
  512. package/dist/utils/mongodb.d.ts +1 -1
  513. package/dist/utils/mongodb.js +22 -22
  514. package/dist/utils/object.d.ts +13 -13
  515. package/dist/utils/object.js +115 -115
  516. package/dist/utils/payment.d.ts +10 -10
  517. package/dist/utils/payment.js +23 -23
  518. package/dist/utils/products.d.ts +32 -32
  519. package/dist/utils/products.js +186 -186
  520. package/dist/utils/promiseToPurchase.d.ts +56 -56
  521. package/dist/utils/promiseToPurchase.js +195 -195
  522. package/dist/utils/prosprsearch.d.ts +26 -26
  523. package/dist/utils/prosprsearch.js +182 -182
  524. package/dist/utils/refunds.d.ts +2 -2
  525. package/dist/utils/refunds.js +21 -21
  526. package/dist/utils/sdc.d.ts +10 -10
  527. package/dist/utils/sdc.js +1302 -1302
  528. package/dist/utils/searchIndexes.d.ts +21 -21
  529. package/dist/utils/searchIndexes.js +210 -210
  530. package/dist/utils/services.d.ts +42 -42
  531. package/dist/utils/services.js +409 -409
  532. package/dist/utils/shipment.d.ts +110 -110
  533. package/dist/utils/shipment.js +345 -345
  534. package/dist/utils/simpletexting.d.ts +2 -2
  535. package/dist/utils/simpletexting.js +45 -45
  536. package/dist/utils/sliders.d.ts +4 -4
  537. package/dist/utils/sliders.js +24 -24
  538. package/dist/utils/string.d.ts +16 -16
  539. package/dist/utils/string.js +191 -191
  540. package/dist/utils/tcgService.d.ts +2 -2
  541. package/dist/utils/tcgService.js +8 -8
  542. package/dist/utils/tools.d.ts +1 -1
  543. package/dist/utils/tools.js +9 -9
  544. package/dist/utils/transferRequests.d.ts +19 -19
  545. package/dist/utils/transferRequests.js +43 -43
  546. package/dist/utils/update.d.ts +7 -7
  547. package/dist/utils/update.js +125 -125
  548. package/dist/utils/weight.d.ts +3 -3
  549. package/dist/utils/weight.js +16 -16
  550. package/dist/utils/zones.d.ts +11 -11
  551. package/dist/utils/zones.js +218 -218
  552. package/package.json +110 -110
  553. package/publish.sh +143 -143
  554. package/readme.md +182 -182
  555. package/.env +0 -15
  556. package/dist/lib/Queue/index.d.ts +0 -40
  557. package/dist/lib/Queue/index.js +0 -255
  558. package/dist/lib/Queue/index.js.map +0 -1
@@ -1,850 +1,850 @@
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.getCustomIncentiveInfo = exports.getDiscountRulesWithCustomIncentive = exports.getCustomIncentiveAmount = exports.checkForCustomPriceEquivalent = exports.isEscompteSuppItem = exports.buildEscompteSuppCartItem = exports.groupArrayOfItemsByItemAndCorrespondingEscompteItem = exports.getItemEscompteSupp = exports.getCustomPriceList = exports.fetchCustomPriceList = exports.getG2CustomerTypeFromCode = exports.getG2DiscountFromCode = exports.updateCustomerWithG2Info = exports.checkIfCustomerExistsInG2 = exports.transformG2CustomerToCustomer = exports.getAllNewOrUpdatedCustomersFromG2 = exports.getG2Customer = exports.fetchProductFromG2WithSku = exports.getG2ProductExternalValues = void 0;
18
- const uuid_1 = require("uuid");
19
- const crypto_js_1 = __importDefault(require("crypto-js"));
20
- const moment_1 = __importDefault(require("moment"));
21
- const maxBy_1 = __importDefault(require("lodash/maxBy"));
22
- const orderBy_1 = __importDefault(require("lodash/orderBy"));
23
- const toNumber_1 = __importDefault(require("lodash/toNumber"));
24
- const minBy_1 = __importDefault(require("lodash/minBy"));
25
- const uniqBy_1 = __importDefault(require("lodash/uniqBy"));
26
- const chunk_1 = __importDefault(require("lodash/chunk"));
27
- const Customer_1 = require("../../../Interfaces/Customer");
28
- const G2_1 = require("../../../Interfaces/G2");
29
- const Cart_1 = require("../../../Interfaces/Cart");
30
- const data_1 = require("../../../utils/data");
31
- const object_1 = require("../../../utils/object");
32
- const context_1 = require("../../../utils/context");
33
- const locale_1 = require("../../../utils/locale");
34
- const data_2 = require("../interfaces/data");
35
- const flatten_1 = __importDefault(require("lodash/flatten"));
36
- const groupBy_1 = __importDefault(require("lodash/groupBy"));
37
- const string_1 = require("../../../utils/string");
38
- const products_1 = require("../../../utils/products");
39
- const __1 = require("../../..");
40
- const anonymisation_1 = require("../../../utils/anonymisation");
41
- const discount_1 = require("../../../utils/discount");
42
- const cart_1 = require("../../../utils/cart");
43
- const round_1 = __importDefault(require("lodash/round"));
44
- const getG2ProductExternalValues = async (sku, g2Service, space, org) => {
45
- var _a, _b, _c;
46
- const g2Auth = g2Service.external_service_infos.api;
47
- if (!!!g2Auth)
48
- return;
49
- let externalValues = undefined;
50
- try {
51
- const productG2 = await (0, exports.fetchProductFromG2WithSku)(sku, space, org);
52
- if (!!productG2) {
53
- const noArticle = (_a = productG2.article.noArticle) !== null && _a !== void 0 ? _a : undefined;
54
- const catégorie1 = (_b = productG2.article['catégorie1']) !== null && _b !== void 0 ? _b : undefined;
55
- const catégorie2 = (_c = productG2.article['catégorie2']) !== null && _c !== void 0 ? _c : undefined;
56
- if (!!noArticle || !!catégorie1 || catégorie2) {
57
- externalValues = { noArticle, catégorie1, catégorie2 };
58
- }
59
- }
60
- return externalValues;
61
- }
62
- catch (e) {
63
- console.log('error on fetching external_values for sku from G2: ', e.toString());
64
- }
65
- };
66
- exports.getG2ProductExternalValues = getG2ProductExternalValues;
67
- const fetchProductFromG2WithSku = async (sku, space, org, logError) => {
68
- if (!!!space || !!!org)
69
- return;
70
- const api = __1.API_URL;
71
- const token = (0, context_1.getSpaceToken)(space, org);
72
- const callG2 = async (skuToUse) => {
73
- try {
74
- const g2ProductsQuery = await fetch(`${api}/services/g2/products/${skuToUse}`, {
75
- method: 'GET',
76
- headers: {
77
- 'Content-Type': 'application/json',
78
- Authorization: `Bearer ${token}`
79
- }
80
- });
81
- if (!!!g2ProductsQuery || g2ProductsQuery.status > 300)
82
- throw await g2ProductsQuery.json();
83
- const productG2 = await g2ProductsQuery.json();
84
- if (!!productG2 && productG2[0])
85
- return productG2[0];
86
- else
87
- throw 'Response has no value or array of products is empty.';
88
- }
89
- catch (e) {
90
- if (!!logError)
91
- console.log(`error on fetching prod from G2 for sku ${skuToUse}: `, e.toString());
92
- return;
93
- }
94
- };
95
- let g2Prod = await callG2(sku);
96
- if (!!!g2Prod && !sku.includes('-1')) {
97
- g2Prod = await callG2(`${sku}-1`);
98
- }
99
- return g2Prod;
100
- };
101
- exports.fetchProductFromG2WithSku = fetchProductFromG2WithSku;
102
- const getG2Customer = async (spaceToken, customerId) => {
103
- let allG2Customers = [];
104
- try {
105
- const api = __1.API_URL;
106
- const g2CustomersQuery = await fetch(`${api}/services/g2/customers/${customerId}`, {
107
- method: 'GET',
108
- headers: {
109
- 'Content-Type': 'application/json',
110
- Authorization: `Bearer ${spaceToken}`
111
- }
112
- });
113
- const G2RequestRes = await g2CustomersQuery.json();
114
- if (!!g2CustomersQuery.status && g2CustomersQuery.status !== 200)
115
- throw `Error - ${g2CustomersQuery.status}`;
116
- if (!!!G2RequestRes || !!!G2RequestRes.length)
117
- throw 'Error - no data';
118
- allG2Customers = G2RequestRes;
119
- }
120
- catch (e) {
121
- console.log('error on querying G2: ', e);
122
- }
123
- return allG2Customers;
124
- };
125
- exports.getG2Customer = getG2Customer;
126
- const getAllNewOrUpdatedCustomersFromG2 = async (space, allG2Customers) => {
127
- let allCurrentCustomers = [];
128
- try {
129
- const customerQuery = await space.customers.get();
130
- if (!!customerQuery && !!customerQuery.length)
131
- throw 'Error - no data';
132
- allCurrentCustomers = customerQuery.map((customer) => customer.data());
133
- }
134
- catch (e) {
135
- console.log('error on fetching customers: ', e.toString());
136
- return;
137
- }
138
- let allNewCustomers = [];
139
- let allUpdatedCustomers = [];
140
- for (let g2 of allG2Customers) {
141
- const sameCustomerInDb = allCurrentCustomers.find((c) => !!c.id && c.id.toUpperCase() === g2.client.noClient.toUpperCase());
142
- if (!!!sameCustomerInDb) {
143
- allNewCustomers.push((0, exports.transformG2CustomerToCustomer)(g2));
144
- continue;
145
- }
146
- if (!!(0, object_1.difference)(sameCustomerInDb, (0, exports.transformG2CustomerToCustomer)(g2))) {
147
- allUpdatedCustomers.push((0, exports.transformG2CustomerToCustomer)(g2, sameCustomerInDb));
148
- }
149
- }
150
- return { new: allNewCustomers, updated: allUpdatedCustomers };
151
- };
152
- exports.getAllNewOrUpdatedCustomersFromG2 = getAllNewOrUpdatedCustomersFromG2;
153
- const transformG2CustomerToCustomer = (g2Customer, prevCustomer, allGroups) => {
154
- const client = g2Customer.client;
155
- const getCustomerNameInfo = (aName) => {
156
- return {
157
- customer_firstname: aName.replace(/[0-9]/g, '').replace(/\-\-/g, '').split(' ')[0].trim(),
158
- customer_lastname: aName
159
- .replace(/[0-9]/g, '')
160
- .replace(/\-\-/g, '')
161
- .trim()
162
- .split(' ')
163
- .map((aString, key) => (!!!key ? undefined : aString))
164
- .filter((s) => !!s)
165
- .join(' '),
166
- customer_phone: aName.replace(/[^0-9]/g, '').trim()
167
- };
168
- };
169
- const getOtherCustomerInfo = (propsStr) => {
170
- const clientToCheck = client;
171
- if (!!!clientToCheck[propsStr])
172
- return {};
173
- const email = !!clientToCheck[`${propsStr}Email`] ? clientToCheck[`${propsStr}Email`].toLowerCase() : undefined;
174
- const fax = !!clientToCheck[`${propsStr}FAX`] ? (0, data_1.formatPhoneNumberDB)(clientToCheck[`${propsStr}FAX`]) : undefined;
175
- return Object.assign(Object.assign({}, (!!email
176
- ? {
177
- customer_email: email
178
- }
179
- : {
180
- customer_communicationPreference: 'phone'
181
- })), (!!fax
182
- ? {
183
- customer_photocopier: fax
184
- }
185
- : {}));
186
- };
187
- const getPrevCustomerAddress = (expeditionInfo) => {
188
- const defaultBilling = expeditionInfo.findIndex((ei) => ei.is_default && ei.is_default.includes(Customer_1.defaultExpeditionOptionsEnum.BILLING));
189
- if (defaultBilling !== -1) {
190
- return [
191
- ...expeditionInfo.slice(0, defaultBilling),
192
- Object.assign(Object.assign({}, expeditionInfo[defaultBilling]), { address: Object.assign(Object.assign({}, expeditionInfo[defaultBilling].address), getClientAddress()) }),
193
- ...expeditionInfo.slice(defaultBilling + 1)
194
- ];
195
- }
196
- return [
197
- ...expeditionInfo,
198
- {
199
- address: Object.assign(Object.assign({}, getClientAddress()), { id: (0, uuid_1.v4)() }),
200
- is_default: [Customer_1.defaultExpeditionOptionsEnum.BILLING],
201
- expedition_recipient_name: !!client.nom ? client.nom : '',
202
- expedition_recipient_phone: !!client.téléphone ? (0, data_1.formatPhoneNumberDB)(client.téléphone) : ''
203
- }
204
- ];
205
- };
206
- const getClientAddress = () => {
207
- return {
208
- city: client.ville,
209
- country: !!client.pays ? client.pays : 'CA',
210
- line1: client.adresse || '',
211
- postal_code: !!client.codePostal ? client.codePostal.toUpperCase() : '',
212
- state: client.province || ''
213
- };
214
- };
215
- const shouldCheckForCompany = () => {
216
- return !!client.nom || !!client.téléphone || !!client.personneRessourceComptes;
217
- };
218
- const defaultProGroup = 'aspirant';
219
- const getCustomerGroupFromTypeCode = (type) => {
220
- if (!!!allGroups)
221
- return defaultProGroup;
222
- const sameGroup = allGroups.find((g) => g.external_slug === type);
223
- return !!sameGroup ? sameGroup.slug : defaultProGroup;
224
- };
225
- const mapG2LangToAddioPreferredLang = (g2Lang) => {
226
- return g2Lang === 2 ? 'en' : 'fr';
227
- };
228
- const preferredLang = mapG2LangToAddioPreferredLang(client.langue);
229
- let customerWithNewInfo = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, (0, Customer_1.getDefaultCustomer)()), (!!prevCustomer ? prevCustomer : { id: client.noClient.toUpperCase() })), (!!!prevCustomer
230
- ? {
231
- hash: crypto_js_1.default.AES.encrypt(client.noClient.toUpperCase(), client.noClient.toUpperCase()).toString(),
232
- type: Customer_1.CustomerTypeEnum.COMPANY
233
- }
234
- : {})), (!!client.limiteDeCrédit && Math.round((0, toNumber_1.default)(client.limiteDeCrédit))
235
- ? {
236
- has_credit_line: true,
237
- credit_line_max: client.limiteDeCrédit
238
- }
239
- : {})), (!!client.noReprésentant ? { represented_by: client.noReprésentant } : {})), { basic_info: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, (0, Customer_1.getDefaultBasicCustomer)()), (!!prevCustomer ? prevCustomer.basic_info : { customer_type: Customer_1.BasicCustomerTypeEnum.PRO })), (!!client.email ? { customer_email: client.email.split(';')[0].toLowerCase() } : {})), (!!client.fax ? { customer_photocopier: client.fax } : {})), (!!client.personneRessourceVentes ? getCustomerNameInfo(client.personneRessourceVentes) : {})), (preferredLang ? { customer_prefered_lang: preferredLang } : {})), { customer_professionnal_info: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, (!!prevCustomer ? prevCustomer.basic_info.customer_professionnal_info : {})), { professionnal_title: !!client.groupeDeClient && !!(0, exports.getG2CustomerTypeFromCode)(client.groupeDeClient)
240
- ? getCustomerGroupFromTypeCode((0, exports.getG2CustomerTypeFromCode)(client.groupeDeClient))
241
- : defaultProGroup, proof_doc_value: client.noClient.toUpperCase() }), (!!client.noCondition ? { terms_code: client.noCondition } : {})), (!!client.groupeDeClient ? { external_customer_group: client.groupeDeClient } : {})), (!!client.codeFA ? { external_customer_code: client.codeFA } : {})), (!!client.classePrix ? { external_price_class: client.classePrix.toString() } : {})), (!!client.classement5 ? { external_customer_class: client.classement5 } : {})) }) }), ((!!prevCustomer && !!prevCustomer.company_info) || shouldCheckForCompany()
242
- ? {
243
- company_info: Object.assign(Object.assign(Object.assign({}, (!!prevCustomer && !!prevCustomer.company_info ? prevCustomer.company_info : {})), { invoice_info: Object.assign(Object.assign(Object.assign({}, (!!prevCustomer && !!prevCustomer.company_info && !!prevCustomer.company_info.invoice_info
244
- ? prevCustomer.company_info.invoice_info
245
- : {})), { legal_name: !!client.nom ? client.nom : '' }), (!!client.téléphone ? { phone: (0, data_1.formatPhoneNumberDB)(client.téléphone) } : {})) }), (!!client.personneRessourceComptes || !!client.personneRessourceAutres
246
- ? {
247
- other_users: [
248
- ...(!!client.personneRessourceComptes
249
- ? [
250
- Object.assign(Object.assign(Object.assign({}, (0, Customer_1.getDefaultBasicCustomer)()), getCustomerNameInfo(client.personneRessourceComptes)), getOtherCustomerInfo('personneRessourceComptes'))
251
- ]
252
- : []),
253
- ...(!!client.personneRessourceAutres
254
- ? [
255
- Object.assign(Object.assign(Object.assign({}, (0, Customer_1.getDefaultBasicCustomer)()), getCustomerNameInfo(client.personneRessourceAutres)), getOtherCustomerInfo('personneRessourceAutres'))
256
- ]
257
- : [])
258
- ]
259
- }
260
- : {}))
261
- }
262
- : {})), { expedition_info: !!prevCustomer && prevCustomer.expedition_info && prevCustomer.expedition_info.length
263
- ? prevCustomer.expedition_info.length > 1
264
- ? getPrevCustomerAddress(prevCustomer.expedition_info)
265
- : [
266
- Object.assign(Object.assign({}, prevCustomer.expedition_info[0]), { address: Object.assign(Object.assign({}, (prevCustomer.expedition_info[0].address ? prevCustomer.expedition_info[0].address : {})), getClientAddress()), is_default: [
267
- ...(prevCustomer.expedition_info[0].is_default || []),
268
- ...(!!!prevCustomer.expedition_info[0].is_default ||
269
- !!!prevCustomer.expedition_info[0].is_default.includes(Customer_1.defaultExpeditionOptionsEnum.BILLING)
270
- ? [Customer_1.defaultExpeditionOptionsEnum.BILLING]
271
- : [])
272
- ] })
273
- ]
274
- : [
275
- {
276
- address: Object.assign(Object.assign({}, getClientAddress()), { id: (0, uuid_1.v4)() }),
277
- is_default: [Customer_1.defaultExpeditionOptionsEnum.BILLING],
278
- expedition_recipient_name: !!client.nom ? client.nom : '',
279
- expedition_recipient_phone: !!client.téléphone ? (0, data_1.formatPhoneNumberDB)(client.téléphone) : ''
280
- }
281
- ] });
282
- if (!!__1.isTestEnv &&
283
- !!prevCustomer &&
284
- !!prevCustomer.basic_info.customer_email &&
285
- prevCustomer.basic_info.customer_email.includes('@dummy.com')) {
286
- const allPropsToReset = anonymisation_1.g2Properties.map((p) => p.path);
287
- for (let prop of allPropsToReset) {
288
- const prevValue = (0, object_1.recursiveCheckObject)(prevCustomer, prop);
289
- const currentValue = (0, object_1.recursiveCheckObject)(customerWithNewInfo, prop);
290
- if (prevValue == currentValue)
291
- continue;
292
- customerWithNewInfo = (0, object_1.recursiveSetObject)(customerWithNewInfo, prevValue, prop);
293
- }
294
- }
295
- return customerWithNewInfo;
296
- };
297
- exports.transformG2CustomerToCustomer = transformG2CustomerToCustomer;
298
- const checkIfCustomerExistsInG2 = async (customerID, space, org) => {
299
- try {
300
- const token = (0, context_1.getSpaceToken)(space, org);
301
- if (!!!token)
302
- throw new Error('no token found for space');
303
- const api = __1.API_URL;
304
- let response = await fetch(`${api}/services/g2/customers/${customerID}/exists`, {
305
- method: 'GET',
306
- headers: {
307
- 'Content-Type': 'application/json',
308
- Authorization: `Bearer ${token}`
309
- }
310
- });
311
- if (!!response.status && response.status !== 200)
312
- throw `Error - ${response.status}`;
313
- const { exists } = await response.json();
314
- return exists;
315
- }
316
- catch (e) {
317
- console.log('error on checking customer in G2: ', e.toString());
318
- return false;
319
- }
320
- };
321
- exports.checkIfCustomerExistsInG2 = checkIfCustomerExistsInG2;
322
- const updateCustomerWithG2Info = async (customerID, space, org, addToDB = true, skipEmailCheck = false) => {
323
- console.log('===============');
324
- console.log('in v2 sdk updateCustomerWithG2Info');
325
- try {
326
- const token = (0, context_1.getSpaceToken)(space, org);
327
- if (!!!token)
328
- return;
329
- const api = __1.API_URL;
330
- console.log('----------------------');
331
- let delay1 = (0, moment_1.default)();
332
- let updatedCustomerQuery = await fetch(`${api}/services/g2/customers/${customerID}/convert`, {
333
- method: 'GET',
334
- headers: {
335
- 'Content-Type': 'application/json',
336
- Authorization: `Bearer ${token}`
337
- }
338
- });
339
- console.log('called api to update customer delay: ', (0, moment_1.default)().diff(delay1, 'seconds'));
340
- if (!!updatedCustomerQuery.status && updatedCustomerQuery.status !== 200)
341
- throw `Error - ${updatedCustomerQuery.status}`;
342
- const G2RequestRes = await updatedCustomerQuery.json();
343
- if (!!!G2RequestRes)
344
- throw 'Error - no data';
345
- let updatedCustomer = (0, anonymisation_1.hideG2CustomerInfoIfNeeded)(G2RequestRes.customer);
346
- if (!!addToDB) {
347
- console.log('----------------------');
348
- let delay4 = (0, moment_1.default)();
349
- await space.addCustomer(updatedCustomer, undefined, skipEmailCheck);
350
- console.log('saving to database delay: ', (0, moment_1.default)().diff(delay4, 'seconds'));
351
- }
352
- console.log('=====================');
353
- return updatedCustomer;
354
- }
355
- catch (e) {
356
- console.log('error on updating customer info with G2: ', e.toString());
357
- return;
358
- }
359
- };
360
- exports.updateCustomerWithG2Info = updateCustomerWithG2Info;
361
- const getG2DiscountFromCode = (code) => {
362
- const onlyNb = code.replace(/[^0-9]/gi, '');
363
- return !!!onlyNb || !!isNaN(Number(onlyNb)) ? undefined : (0, toNumber_1.default)(onlyNb);
364
- };
365
- exports.getG2DiscountFromCode = getG2DiscountFromCode;
366
- const getG2CustomerTypeFromCode = (code) => {
367
- let parsedCode = code;
368
- const possiblePrefixes = ['BASE', 'PAYS', 'RENC'];
369
- for (let prefix of possiblePrefixes) {
370
- parsedCode = parsedCode.replace(prefix, '');
371
- }
372
- parsedCode = parsedCode.replace(/[0-9]/gi, '');
373
- const possibleTypes = ['AM', 'AL', 'AS', 'AMN'];
374
- const checkWithPossibleTypes = (codeToCheck, removeFrom) => {
375
- if (!!!possibleTypes.includes(codeToCheck)) {
376
- if (codeToCheck.length === 1)
377
- return '';
378
- if (removeFrom == 'start') {
379
- return checkWithPossibleTypes(codeToCheck.substring(1), removeFrom);
380
- }
381
- else {
382
- return checkWithPossibleTypes(codeToCheck.replace(/.$/, ''), removeFrom);
383
- }
384
- }
385
- return codeToCheck;
386
- };
387
- if (!!parsedCode) {
388
- let removedValues = checkWithPossibleTypes(parsedCode, 'end');
389
- if (!!!removedValues)
390
- removedValues = checkWithPossibleTypes(parsedCode, 'start');
391
- parsedCode = removedValues;
392
- }
393
- return parsedCode;
394
- };
395
- exports.getG2CustomerTypeFromCode = getG2CustomerTypeFromCode;
396
- const fetchCustomPriceList = async (spaceToken, customerId, ignoreDashPriceList, onlyForProductSlugs) => {
397
- let prices = [];
398
- try {
399
- const api = __1.API_URL;
400
- const g2PriceListQuery = await fetch(`${api}/services/g2/customers/${customerId}/customPrices`, {
401
- method: 'POST',
402
- headers: {
403
- 'Content-Type': 'application/json',
404
- Authorization: `Bearer ${spaceToken}`
405
- },
406
- body: JSON.stringify(Object.assign({ ignoreDashPriceList: !!ignoreDashPriceList }, (!!onlyForProductSlugs ? { onlyForProductSlugs } : {})))
407
- });
408
- prices = await g2PriceListQuery.json();
409
- if (!!g2PriceListQuery.status && g2PriceListQuery.status !== 200)
410
- throw `Error - ${g2PriceListQuery.status}`;
411
- if (!!!prices || !!!prices.length)
412
- throw 'Error - no data';
413
- }
414
- catch (e) {
415
- console.log('error on fetching custom prices:', e.toString());
416
- }
417
- return prices;
418
- };
419
- exports.fetchCustomPriceList = fetchCustomPriceList;
420
- const getCustomPriceList = async (space, idClient, ignoreDashPriceList, onlyForProductSlugs) => {
421
- let priceList = [];
422
- let escomptesClient = [];
423
- let ententesClient = [];
424
- let G2Auth = '';
425
- let G2Url = '';
426
- const G2Service = space.services({ field: 'external_service_name', value: 'G2' });
427
- if (!!G2Service && !!G2Service.length) {
428
- G2Auth = G2Service[0].external_service_infos.api;
429
- G2Url = G2Service[0].external_service_infos.api_url;
430
- }
431
- if (!!!G2Auth || !!!G2Url)
432
- throw `Error on fetching G2 API info from space`;
433
- try {
434
- const customerReq = await fetch(`${G2Url}/clients?noClient=${idClient}`, {
435
- method: 'GET',
436
- headers: {
437
- Authorization: G2Auth
438
- }
439
- });
440
- const customers = await customerReq.json();
441
- if (customerReq.status !== 200) {
442
- throw `Error on fetching customers from G2 API: ${customerReq.status}`;
443
- }
444
- const allG2Customers = customers;
445
- const g2Customer = allG2Customers[0];
446
- if (!!!g2Customer)
447
- return priceList;
448
- const today = (0, moment_1.default)();
449
- const allCurrentEntentes = g2Customer.soumissions.filter((s) => !!s.soumission.actif &&
450
- !!s.soumission.dateDébut &&
451
- !!s.soumission.dateFin &&
452
- today.isBetween((0, moment_1.default)(s.soumission.dateDébut), (0, moment_1.default)(s.soumission.dateFin)));
453
- const mostRecent = (0, orderBy_1.default)(allCurrentEntentes, (e) => (0, moment_1.default)(e.soumission.dateDébut).unix(), 'desc');
454
- if (!!mostRecent) {
455
- ententesClient = mostRecent;
456
- }
457
- const { noClient, groupeDeClient, classePrix } = g2Customer.client;
458
- const customerType = !!!groupeDeClient ? undefined : (0, exports.getG2CustomerTypeFromCode)(groupeDeClient);
459
- try {
460
- const escomptesNumClient = await fetch(`${G2Url}/escompteclient?code=${noClient}`, {
461
- method: 'GET',
462
- headers: {
463
- Authorization: G2Auth
464
- }
465
- });
466
- const numClientResults = await escomptesNumClient.json();
467
- if (!!numClientResults.status && numClientResults.status !== 200) {
468
- console.log(`Error on fetching escompteClients from G2 API with noClient ${noClient}: ${numClientResults.status}`);
469
- }
470
- else {
471
- escomptesClient = [...escomptesClient, ...numClientResults.map((r) => r.escompteClient)];
472
- }
473
- }
474
- catch (e) {
475
- console.log('error on fetching escomptesClient from G2: ', e.toString());
476
- }
477
- try {
478
- if (!!groupeDeClient && groupeDeClient !== noClient) {
479
- const escomptesGroupeClient = await fetch(`${G2Url}/escompteclient?code=${groupeDeClient}`, {
480
- method: 'GET',
481
- headers: {
482
- Authorization: G2Auth
483
- }
484
- });
485
- const groupeClientResults = await escomptesGroupeClient.json();
486
- if (!!groupeClientResults.statuts && groupeClientResults.status !== 200) {
487
- console.log(`Error on fetching escompteClients from G2 API with groupeClient ${groupeDeClient}: ${groupeClientResults.status}`);
488
- }
489
- else {
490
- const groupeClientEscomptes = groupeClientResults.map((r) => r.escompteClient);
491
- const noDuplicates = groupeClientEscomptes.filter((es) => !!!es.code2 || !!!escomptesClient.some((e) => !!e.code2 && e.code2 === es.code2));
492
- escomptesClient = [...escomptesClient, ...noDuplicates];
493
- }
494
- }
495
- else {
496
- console.log('ignoring groupeClient escomptes because id and groupeClient are same');
497
- }
498
- }
499
- catch (e) {
500
- console.log('error on fetching escomptesClient from G2: ', e.toString());
501
- }
502
- let allProducts = [];
503
- try {
504
- if (!!onlyForProductSlugs && !!onlyForProductSlugs.length) {
505
- if (onlyForProductSlugs.length <= 10) {
506
- allProducts = await space.indexedProducts.get({
507
- query: [{ field: 'slug', operator: 'in', value: onlyForProductSlugs }]
508
- });
509
- }
510
- else {
511
- const batchResults = [];
512
- for (let group of (0, chunk_1.default)(onlyForProductSlugs, 10)) {
513
- let query = await space.indexedProducts.get({
514
- query: [{ field: 'slug', operator: 'in', value: group }]
515
- });
516
- batchResults.push(query);
517
- }
518
- allProducts = (0, flatten_1.default)(batchResults);
519
- }
520
- }
521
- else {
522
- allProducts = await space.indexedProducts.get({
523
- query: [{ field: 'draft', operator: '!=', value: true }]
524
- });
525
- }
526
- }
527
- catch (e) {
528
- console.log('error on fetching all products : ', e.toString());
529
- }
530
- if (!!!allProducts.length)
531
- return priceList;
532
- const allCustomerGroups = space.preferences.customers.groups() || [];
533
- const customerGroupByPriceClass = !!classePrix
534
- ? allCustomerGroups.find((g) => g.external_price_list_slug == classePrix.toString())
535
- : undefined;
536
- for (let prod of allProducts) {
537
- const data = prod.data();
538
- if (!!!data || !!data.draft)
539
- continue;
540
- const type = !!data.attributes && data.attributes[data_2.AttributesIdEnumGR.TYPE];
541
- for (let decli of data.declinations.filter((d) => !!!d.is_sample)) {
542
- let isNetPrice = !!decli.external_values && decli.external_values['catégorie2'] === 'NET';
543
- const sku = decli.sku;
544
- let basePrice = (0, toNumber_1.default)(decli.regular_price.amount);
545
- if (!!decli.prices_list && !!decli.prices_list.length && !!!ignoreDashPriceList) {
546
- let priceListItemToUse = undefined;
547
- const samePriceClassInPriceList = !!customerGroupByPriceClass
548
- ? decli.prices_list.find((pl) => pl.group_id == customerGroupByPriceClass.slug)
549
- : undefined;
550
- if (!!samePriceClassInPriceList && !isNaN((0, toNumber_1.default)(samePriceClassInPriceList.amount))) {
551
- priceListItemToUse = samePriceClassInPriceList;
552
- }
553
- else if (!!groupeDeClient) {
554
- const samePriceInPriceList = !!customerType
555
- ? decli.prices_list.find((p) => !!p.external_slug && p.external_slug === customerType)
556
- : undefined;
557
- const proPriceInPriceList = decli.prices_list.find((p) => p.group_id === 'aspirant');
558
- if (!!samePriceInPriceList && !isNaN((0, toNumber_1.default)(samePriceInPriceList.amount))) {
559
- priceListItemToUse = samePriceClassInPriceList;
560
- }
561
- else if (!!proPriceInPriceList && !isNaN((0, toNumber_1.default)(proPriceInPriceList.amount))) {
562
- priceListItemToUse = proPriceInPriceList;
563
- }
564
- }
565
- if (!!priceListItemToUse) {
566
- basePrice = (0, toNumber_1.default)(priceListItemToUse.amount);
567
- if (!!!isNetPrice) {
568
- isNetPrice = !!priceListItemToUse.is_net_price;
569
- }
570
- }
571
- }
572
- let comparePrices = [
573
- Object.assign(Object.assign({ price: basePrice, type: G2_1.CustomPriceItemTypeEnum.REG }, (!!(0, object_1.recursiveCheckObject)(decli, 'external_values.catégorie1')
574
- ? { code1: (0, object_1.recursiveCheckObject)(decli, 'external_values.catégorie1') }
575
- : {})), (!!(0, object_1.recursiveCheckObject)(decli, 'external_values.catégorie2')
576
- ? { code2: (0, object_1.recursiveCheckObject)(decli, 'external_values.catégorie2') }
577
- : {}))
578
- ];
579
- let foundEntenteForProduct = false;
580
- if (!!ententesClient.length) {
581
- for (let entente of ententesClient) {
582
- if (!!foundEntenteForProduct)
583
- break;
584
- let sameProd = entente.articles.find((a) => !!a.article.noArticle && a.article.noArticle === sku);
585
- if (!!!sameProd) {
586
- sameProd = entente.articles.find((a) => !!a.article.noArticle && a.article.noArticle.includes(sku));
587
- }
588
- if (!!sameProd) {
589
- const priceToSet = typeof sameProd.article.prixUnitaireNet === 'number'
590
- ? sameProd.article.prixUnitaireNet
591
- : typeof sameProd.article.prixUnitaire === 'number'
592
- ? sameProd.article.prixUnitaire
593
- : undefined;
594
- if (typeof priceToSet === 'number') {
595
- foundEntenteForProduct = true;
596
- comparePrices.push(Object.assign(Object.assign({ price: (0, toNumber_1.default)(priceToSet), type: G2_1.CustomPriceItemTypeEnum.ENTENTE }, (!!decli.external_values ? { code2: decli.external_values['catégorie2'] } : {})), (!!sameProd.article.pourcEscompte
597
- ? Object.assign(Object.assign({}, (typeof sameProd.article.prixUnitaire === 'number'
598
- ? { reg: sameProd.article.prixUnitaire }
599
- : {})), { percent: sameProd.article.pourcEscompte }) : {})));
600
- }
601
- }
602
- }
603
- }
604
- if (!!escomptesClient.length) {
605
- const findBestDeal = (escomptesToCheck) => {
606
- const bestDeal = (0, maxBy_1.default)(escomptesToCheck, (escompte) => (0, toNumber_1.default)(escompte.pourcEscompte));
607
- if (!!bestDeal) {
608
- comparePrices.push(Object.assign({ price: basePrice * ((100 - (0, toNumber_1.default)(bestDeal.pourcEscompte)) / 100), type: G2_1.CustomPriceItemTypeEnum.ESCOMPTE, percent: (0, toNumber_1.default)(bestDeal.pourcEscompte), code1: bestDeal.code1 }, (!!bestDeal.code2 ? { code2: bestDeal.code2 } : {})));
609
- }
610
- };
611
- if (!!!foundEntenteForProduct) {
612
- if (!!isNetPrice) {
613
- const sameCat1Escompte = escomptesClient.filter((e) => {
614
- if (!!!e.code2)
615
- return false;
616
- return decli.external_values && e.code2 === decli.external_values['catégorie1'] && e.code2 == 'DALLE';
617
- });
618
- if (!!sameCat1Escompte && !!sameCat1Escompte.length) {
619
- findBestDeal(sameCat1Escompte);
620
- }
621
- }
622
- else {
623
- const no2ndCode = escomptesClient.filter((e) => !!!e.code2);
624
- if (!!no2ndCode.length) {
625
- findBestDeal(no2ndCode);
626
- }
627
- let sameSkuEscompte = escomptesClient.filter((e) => e.code2 && e.code2 === sku);
628
- if (!!!sameSkuEscompte.length) {
629
- sameSkuEscompte = escomptesClient.filter((e) => e.code2 && e.code2.includes(sku));
630
- }
631
- if (!!sameSkuEscompte.length) {
632
- findBestDeal(sameSkuEscompte);
633
- }
634
- if (!!!sameSkuEscompte.length) {
635
- const sameBrandEscompte = escomptesClient.filter((e) => {
636
- if (!!!e.code2)
637
- return;
638
- return (decli.external_values &&
639
- (e.code2 === decli.external_values['catégorie2'] || e.code2 === decli.external_values['catégorie1']));
640
- });
641
- if (!!sameBrandEscompte) {
642
- findBestDeal(sameBrandEscompte);
643
- }
644
- }
645
- }
646
- }
647
- }
648
- comparePrices = (0, uniqBy_1.default)(comparePrices, (p) => p.price);
649
- const lowestPrice = (0, minBy_1.default)(comparePrices, (p) => p.price);
650
- let appliedPrice = lowestPrice;
651
- if (!!lowestPrice && lowestPrice.type == G2_1.CustomPriceItemTypeEnum.REG) {
652
- const ententeFound = comparePrices.find((p) => p.type == G2_1.CustomPriceItemTypeEnum.ENTENTE);
653
- if (!!ententeFound)
654
- appliedPrice = Object.assign(Object.assign({}, ententeFound), { reg: ententeFound.price });
655
- }
656
- let customPriceItemToPush = undefined;
657
- if (!!appliedPrice) {
658
- customPriceItemToPush = Object.assign(Object.assign({ sku: sku, parent_slug: data.slug, name: `${!!decli.parent_name &&
659
- !!!(0, locale_1.getPrincipalWord)(decli.name, space).trim().includes((0, locale_1.getPrincipalWord)(decli.parent_name).trim())
660
- ? (0, locale_1.getPrincipalWord)(decli.name, space) + ' - '
661
- : ''}${(0, locale_1.getPrincipalWord)(decli.name, space)}`, reg: basePrice }, (!!type
662
- ? {
663
- prod_type: type[0]
664
- }
665
- : {})), appliedPrice);
666
- }
667
- if (!!customPriceItemToPush) {
668
- priceList.push(customPriceItemToPush);
669
- }
670
- }
671
- }
672
- return priceList;
673
- }
674
- catch (e) {
675
- console.log('error on fetching customer from G2: ', e.toString());
676
- return e.toString();
677
- }
678
- };
679
- exports.getCustomPriceList = getCustomPriceList;
680
- const getItemEscompteSupp = (customPriceList, item) => {
681
- const code2InItem = (0, object_1.recursiveCheckObject)(item, `external_values.catégorie2`);
682
- let code2InPriceList = undefined;
683
- const customPriceItem = customPriceList.find((priceItem) => priceItem.sku === item.sku);
684
- if (!!customPriceItem && !!customPriceItem.code2) {
685
- code2InPriceList = customPriceItem.code2;
686
- }
687
- const code2ToCheck = code2InPriceList !== null && code2InPriceList !== void 0 ? code2InPriceList : code2InItem;
688
- if (!!!code2ToCheck)
689
- return;
690
- let foundEsc = customPriceList.find((priceItem) => priceItem.sku === 'ESC' + code2ToCheck);
691
- if (!!!foundEsc && !!code2InItem) {
692
- foundEsc = customPriceList.find((priceItem) => priceItem.sku === 'ESC' + code2InItem);
693
- }
694
- return foundEsc;
695
- };
696
- exports.getItemEscompteSupp = getItemEscompteSupp;
697
- const groupArrayOfItemsByItemAndCorrespondingEscompteItem = (items) => {
698
- return (0, flatten_1.default)(Object.values((0, groupBy_1.default)(items, (item) => ((0, exports.isEscompteSuppItem)(item.sku) ? (0, string_1.splitFromFirstChar)('-', item.sku)[1] : item.sku))));
699
- };
700
- exports.groupArrayOfItemsByItemAndCorrespondingEscompteItem = groupArrayOfItemsByItemAndCorrespondingEscompteItem;
701
- const buildEscompteSuppCartItem = (escompteItems, customPriceList, escompteSuppItem, item) => {
702
- if (!!!escompteItems[0])
703
- return;
704
- const priceToUse = (0, products_1.getLowestPrice)(item);
705
- const escompteDecli = escompteItems[0].data().declinations.find((decli) => decli.sku === escompteSuppItem.sku);
706
- if (!!!escompteDecli)
707
- return;
708
- const sameInCustomPriceList = customPriceList.find((c) => c.sku === escompteDecli.sku);
709
- if (!!sameInCustomPriceList &&
710
- sameInCustomPriceList.type === G2_1.CustomPriceItemTypeEnum.REG &&
711
- sameInCustomPriceList.price === 0)
712
- return;
713
- const escompteEquivalent = (0, exports.checkForCustomPriceEquivalent)(escompteDecli, customPriceList);
714
- return Object.assign(Object.assign({}, escompteEquivalent), { is_upsell_of_sku: item.sku, is_temp_prod: true, price_override: true, qte_override: true, qte: item.qte * priceToUse.price.amount, sku: `${escompteEquivalent.sku}-${item.sku}`, regular_price: (0, products_1.getLowestPrice)(escompteEquivalent).price });
715
- };
716
- exports.buildEscompteSuppCartItem = buildEscompteSuppCartItem;
717
- const isEscompteSuppItem = (itemSku) => {
718
- return Object.values(G2_1.EscomptesDeclinationSkusEnum).some((subString) => itemSku.includes(subString));
719
- };
720
- exports.isEscompteSuppItem = isEscompteSuppItem;
721
- const checkForCustomPriceEquivalent = (item, customPriceList, options = {}) => {
722
- var _a;
723
- const sameInCustomPriceList = customPriceList.find((i) => i.sku === item.sku);
724
- if (!!!sameInCustomPriceList)
725
- return item;
726
- const hasOverriddenPrice = item.price_override;
727
- if (!!hasOverriddenPrice && sameInCustomPriceList.type === G2_1.CustomPriceItemTypeEnum.REG)
728
- return item;
729
- const { regular_price, promo_price, discount_price, tier_pricing } = item, rest = __rest(item, ["regular_price", "promo_price", "discount_price", "tier_pricing"]);
730
- const isReg = sameInCustomPriceList.type === G2_1.CustomPriceItemTypeEnum.REG;
731
- const isEntente = sameInCustomPriceList.type === G2_1.CustomPriceItemTypeEnum.ENTENTE;
732
- const isPA = !!sameInCustomPriceList.PA_percent;
733
- const shouldUseCustomPriceForRegPrice = (!!isReg && !!!sameInCustomPriceList.percent) || (!!options.setNetPriceAsRegular && !!isEntente);
734
- const currentDiscountPrice = item.discount_price || { currency: 'CAD' };
735
- const currentPromoPrice = item.promo_price || { currency: 'CAD' };
736
- const calculatedRegPrice = !!item.price_override
737
- ? regular_price.amount
738
- : (!!isReg || !!isEntente) && sameInCustomPriceList.price == 0
739
- ? 0
740
- : !!shouldUseCustomPriceForRegPrice
741
- ? sameInCustomPriceList.price
742
- : sameInCustomPriceList.reg;
743
- let updatedCartItem = Object.assign(Object.assign(Object.assign(Object.assign({}, rest), { regular_price: Object.assign(Object.assign(Object.assign({}, regular_price), { amount: calculatedRegPrice }), (sameInCustomPriceList.type !== G2_1.CustomPriceItemTypeEnum.REG && !!!regular_price.price_type
744
- ? { price_type: sameInCustomPriceList.type }
745
- : {})) }), (!!!hasOverriddenPrice
746
- ? Object.assign(Object.assign({}, (sameInCustomPriceList.percent || !!!isReg
747
- ? Object.assign({}, (!!sameInCustomPriceList.percent &&
748
- [G2_1.CustomPriceItemTypeEnum.ESCOMPTE, G2_1.CustomPriceItemTypeEnum.NORMAL_ESCOMPTE].includes(sameInCustomPriceList.type)
749
- ? {
750
- promo_price: Object.assign(Object.assign({}, currentPromoPrice), (!currentPromoPrice.overridden
751
- ? {
752
- amount: sameInCustomPriceList.price,
753
- price_type: sameInCustomPriceList.type
754
- }
755
- : {}))
756
- }
757
- :
758
- !!!options.setNetPriceAsRegular
759
- ? Object.assign({ discount_price: Object.assign(Object.assign({}, currentDiscountPrice), (!currentDiscountPrice.overridden
760
- ? {
761
- amount: sameInCustomPriceList.price,
762
- price_type: sameInCustomPriceList.type
763
- }
764
- : {})) }, (!!currentPromoPrice.overridden ? { promo_price: currentPromoPrice } : {})) : {})) :
765
- currentDiscountPrice.price_type === 'tierpricing' && !!!options.removeTierPricing
766
- ? {
767
- discount_price: Object.assign(Object.assign({}, item.discount_price), { original_amount: !!isReg || !!!options.setNetPriceAsRegular ? null : sameInCustomPriceList.price })
768
- }
769
- : {})), (!!isPA
770
- ? {
771
- promo_price: Object.assign(Object.assign({}, currentPromoPrice), { amount: (_a = sameInCustomPriceList.PA_price) !== null && _a !== void 0 ? _a : sameInCustomPriceList.price, price_type: sameInCustomPriceList.type, percent_applied: sameInCustomPriceList.PA_percent }),
772
- discount_price: Object.assign(Object.assign({}, currentDiscountPrice), { amount: sameInCustomPriceList.price, price_type: sameInCustomPriceList.type, percent_applied: sameInCustomPriceList.percent })
773
- }
774
- : {})) : {})), (!!!options.removeTierPricing && !!tier_pricing
775
- ? {
776
- tier_pricing
777
- }
778
- : {}));
779
- const priceUsedForPromoCalculations = !!updatedCartItem.discount_price
780
- ? updatedCartItem.discount_price.amount
781
- : updatedCartItem.regular_price.amount;
782
- const initialPriceToCompare = !!currentDiscountPrice ? currentDiscountPrice.amount : item.regular_price.amount;
783
- if (typeof currentPromoPrice.percent_applied == 'number' &&
784
- !!currentPromoPrice.overridden &&
785
- priceUsedForPromoCalculations != initialPriceToCompare) {
786
- updatedCartItem = Object.assign(Object.assign({}, updatedCartItem), { promo_price: Object.assign(Object.assign({}, (updatedCartItem.promo_price || { currency: 'CAD' })), { amount: (0, round_1.default)((0, cart_1.calculateAmountForCustomPromo)(updatedCartItem, Cart_1.CustomPromoType.EXTRA_PROMO, currentPromoPrice.percent_applied), priceUsedForPromoCalculations.toString().split('.').length) }) });
787
- }
788
- return updatedCartItem;
789
- };
790
- exports.checkForCustomPriceEquivalent = checkForCustomPriceEquivalent;
791
- const getCustomIncentiveAmount = (customPriceList) => {
792
- if (!!!customPriceList)
793
- return;
794
- const ententeSku = 'INCITATIF';
795
- let amount = 0;
796
- const entente = customPriceList.find((priceItem) => priceItem.sku === ententeSku);
797
- if (!!!entente || !!!entente.price || entente.type == G2_1.CustomPriceItemTypeEnum.REG)
798
- return;
799
- amount = entente.price * -100;
800
- return amount;
801
- };
802
- exports.getCustomIncentiveAmount = getCustomIncentiveAmount;
803
- const getDiscountRulesWithCustomIncentive = (incentiveAmount, discountRules) => {
804
- let hasBeenUpdated = false;
805
- const updatedDiscountRules = discountRules.map((rule) => {
806
- const promoType = (0, discount_1.getCartPromoType)(rule);
807
- if (promoType === Cart_1.CartPromoAppliesToEnum.TOTAL_AFTER_TAXES) {
808
- hasBeenUpdated = true;
809
- const updatedRule = rule;
810
- updatedRule.result.action_value = incentiveAmount;
811
- updatedRule.overridden = true;
812
- return updatedRule;
813
- }
814
- else {
815
- return rule;
816
- }
817
- });
818
- if (!hasBeenUpdated)
819
- return;
820
- return updatedDiscountRules;
821
- };
822
- exports.getDiscountRulesWithCustomIncentive = getDiscountRulesWithCustomIncentive;
823
- const getCustomIncentiveInfo = (customPriceList, discountRules, defaultIncentiveAmount) => {
824
- let discountRulesWithCustomIncentive;
825
- let customIncentiveAmount = (0, exports.getCustomIncentiveAmount)(customPriceList);
826
- const incentiveDiscountRule = (0, discount_1.getPaymentIncentiveDiscount)(discountRules);
827
- if (!!!customIncentiveAmount) {
828
- if (!!incentiveDiscountRule && !!incentiveDiscountRule.overridden) {
829
- return {
830
- amount: defaultIncentiveAmount || 0,
831
- updatedDiscountRules: discountRules.map((dr) => {
832
- if (dr.id !== incentiveDiscountRule.id)
833
- return dr;
834
- return Object.assign(Object.assign(Object.assign({}, dr), (defaultIncentiveAmount ? { result: Object.assign(Object.assign({}, dr.result), { action_value: defaultIncentiveAmount }) } : {})), { overridden: false });
835
- }),
836
- reset: true
837
- };
838
- }
839
- return;
840
- }
841
- discountRulesWithCustomIncentive = (0, exports.getDiscountRulesWithCustomIncentive)(customIncentiveAmount, discountRules);
842
- if (!!!discountRulesWithCustomIncentive)
843
- return;
844
- return {
845
- amount: customIncentiveAmount,
846
- updatedDiscountRules: discountRulesWithCustomIncentive
847
- };
848
- };
849
- exports.getCustomIncentiveInfo = getCustomIncentiveInfo;
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.getCustomIncentiveInfo = exports.getDiscountRulesWithCustomIncentive = exports.getCustomIncentiveAmount = exports.checkForCustomPriceEquivalent = exports.isEscompteSuppItem = exports.buildEscompteSuppCartItem = exports.groupArrayOfItemsByItemAndCorrespondingEscompteItem = exports.getItemEscompteSupp = exports.getCustomPriceList = exports.fetchCustomPriceList = exports.getG2CustomerTypeFromCode = exports.getG2DiscountFromCode = exports.updateCustomerWithG2Info = exports.checkIfCustomerExistsInG2 = exports.transformG2CustomerToCustomer = exports.getAllNewOrUpdatedCustomersFromG2 = exports.getG2Customer = exports.fetchProductFromG2WithSku = exports.getG2ProductExternalValues = void 0;
18
+ const uuid_1 = require("uuid");
19
+ const crypto_js_1 = __importDefault(require("crypto-js"));
20
+ const moment_1 = __importDefault(require("moment"));
21
+ const maxBy_1 = __importDefault(require("lodash/maxBy"));
22
+ const orderBy_1 = __importDefault(require("lodash/orderBy"));
23
+ const toNumber_1 = __importDefault(require("lodash/toNumber"));
24
+ const minBy_1 = __importDefault(require("lodash/minBy"));
25
+ const uniqBy_1 = __importDefault(require("lodash/uniqBy"));
26
+ const chunk_1 = __importDefault(require("lodash/chunk"));
27
+ const Customer_1 = require("../../../Interfaces/Customer");
28
+ const G2_1 = require("../../../Interfaces/G2");
29
+ const Cart_1 = require("../../../Interfaces/Cart");
30
+ const data_1 = require("../../../utils/data");
31
+ const object_1 = require("../../../utils/object");
32
+ const context_1 = require("../../../utils/context");
33
+ const locale_1 = require("../../../utils/locale");
34
+ const data_2 = require("../interfaces/data");
35
+ const flatten_1 = __importDefault(require("lodash/flatten"));
36
+ const groupBy_1 = __importDefault(require("lodash/groupBy"));
37
+ const string_1 = require("../../../utils/string");
38
+ const products_1 = require("../../../utils/products");
39
+ const __1 = require("../../..");
40
+ const anonymisation_1 = require("../../../utils/anonymisation");
41
+ const discount_1 = require("../../../utils/discount");
42
+ const cart_1 = require("../../../utils/cart");
43
+ const round_1 = __importDefault(require("lodash/round"));
44
+ const getG2ProductExternalValues = async (sku, g2Service, space, org) => {
45
+ var _a, _b, _c;
46
+ const g2Auth = g2Service.external_service_infos.api;
47
+ if (!!!g2Auth)
48
+ return;
49
+ let externalValues = undefined;
50
+ try {
51
+ const productG2 = await (0, exports.fetchProductFromG2WithSku)(sku, space, org);
52
+ if (!!productG2) {
53
+ const noArticle = (_a = productG2.article.noArticle) !== null && _a !== void 0 ? _a : undefined;
54
+ const catégorie1 = (_b = productG2.article['catégorie1']) !== null && _b !== void 0 ? _b : undefined;
55
+ const catégorie2 = (_c = productG2.article['catégorie2']) !== null && _c !== void 0 ? _c : undefined;
56
+ if (!!noArticle || !!catégorie1 || catégorie2) {
57
+ externalValues = { noArticle, catégorie1, catégorie2 };
58
+ }
59
+ }
60
+ return externalValues;
61
+ }
62
+ catch (e) {
63
+ console.log('error on fetching external_values for sku from G2: ', e.toString());
64
+ }
65
+ };
66
+ exports.getG2ProductExternalValues = getG2ProductExternalValues;
67
+ const fetchProductFromG2WithSku = async (sku, space, org, logError) => {
68
+ if (!!!space || !!!org)
69
+ return;
70
+ const api = __1.API_URL;
71
+ const token = (0, context_1.getSpaceToken)(space, org);
72
+ const callG2 = async (skuToUse) => {
73
+ try {
74
+ const g2ProductsQuery = await fetch(`${api}/services/g2/products/${skuToUse}`, {
75
+ method: 'GET',
76
+ headers: {
77
+ 'Content-Type': 'application/json',
78
+ Authorization: `Bearer ${token}`
79
+ }
80
+ });
81
+ if (!!!g2ProductsQuery || g2ProductsQuery.status > 300)
82
+ throw await g2ProductsQuery.json();
83
+ const productG2 = await g2ProductsQuery.json();
84
+ if (!!productG2 && productG2[0])
85
+ return productG2[0];
86
+ else
87
+ throw 'Response has no value or array of products is empty.';
88
+ }
89
+ catch (e) {
90
+ if (!!logError)
91
+ console.log(`error on fetching prod from G2 for sku ${skuToUse}: `, e.toString());
92
+ return;
93
+ }
94
+ };
95
+ let g2Prod = await callG2(sku);
96
+ if (!!!g2Prod && !sku.includes('-1')) {
97
+ g2Prod = await callG2(`${sku}-1`);
98
+ }
99
+ return g2Prod;
100
+ };
101
+ exports.fetchProductFromG2WithSku = fetchProductFromG2WithSku;
102
+ const getG2Customer = async (spaceToken, customerId) => {
103
+ let allG2Customers = [];
104
+ try {
105
+ const api = __1.API_URL;
106
+ const g2CustomersQuery = await fetch(`${api}/services/g2/customers/${customerId}`, {
107
+ method: 'GET',
108
+ headers: {
109
+ 'Content-Type': 'application/json',
110
+ Authorization: `Bearer ${spaceToken}`
111
+ }
112
+ });
113
+ const G2RequestRes = await g2CustomersQuery.json();
114
+ if (!!g2CustomersQuery.status && g2CustomersQuery.status !== 200)
115
+ throw `Error - ${g2CustomersQuery.status}`;
116
+ if (!!!G2RequestRes || !!!G2RequestRes.length)
117
+ throw 'Error - no data';
118
+ allG2Customers = G2RequestRes;
119
+ }
120
+ catch (e) {
121
+ console.log('error on querying G2: ', e);
122
+ }
123
+ return allG2Customers;
124
+ };
125
+ exports.getG2Customer = getG2Customer;
126
+ const getAllNewOrUpdatedCustomersFromG2 = async (space, allG2Customers) => {
127
+ let allCurrentCustomers = [];
128
+ try {
129
+ const customerQuery = await space.customers.get();
130
+ if (!!customerQuery && !!customerQuery.length)
131
+ throw 'Error - no data';
132
+ allCurrentCustomers = customerQuery.map((customer) => customer.data());
133
+ }
134
+ catch (e) {
135
+ console.log('error on fetching customers: ', e.toString());
136
+ return;
137
+ }
138
+ let allNewCustomers = [];
139
+ let allUpdatedCustomers = [];
140
+ for (let g2 of allG2Customers) {
141
+ const sameCustomerInDb = allCurrentCustomers.find((c) => !!c.id && c.id.toUpperCase() === g2.client.noClient.toUpperCase());
142
+ if (!!!sameCustomerInDb) {
143
+ allNewCustomers.push((0, exports.transformG2CustomerToCustomer)(g2));
144
+ continue;
145
+ }
146
+ if (!!(0, object_1.difference)(sameCustomerInDb, (0, exports.transformG2CustomerToCustomer)(g2))) {
147
+ allUpdatedCustomers.push((0, exports.transformG2CustomerToCustomer)(g2, sameCustomerInDb));
148
+ }
149
+ }
150
+ return { new: allNewCustomers, updated: allUpdatedCustomers };
151
+ };
152
+ exports.getAllNewOrUpdatedCustomersFromG2 = getAllNewOrUpdatedCustomersFromG2;
153
+ const transformG2CustomerToCustomer = (g2Customer, prevCustomer, allGroups) => {
154
+ const client = g2Customer.client;
155
+ const getCustomerNameInfo = (aName) => {
156
+ return {
157
+ customer_firstname: aName.replace(/[0-9]/g, '').replace(/\-\-/g, '').split(' ')[0].trim(),
158
+ customer_lastname: aName
159
+ .replace(/[0-9]/g, '')
160
+ .replace(/\-\-/g, '')
161
+ .trim()
162
+ .split(' ')
163
+ .map((aString, key) => (!!!key ? undefined : aString))
164
+ .filter((s) => !!s)
165
+ .join(' '),
166
+ customer_phone: aName.replace(/[^0-9]/g, '').trim()
167
+ };
168
+ };
169
+ const getOtherCustomerInfo = (propsStr) => {
170
+ const clientToCheck = client;
171
+ if (!!!clientToCheck[propsStr])
172
+ return {};
173
+ const email = !!clientToCheck[`${propsStr}Email`] ? clientToCheck[`${propsStr}Email`].toLowerCase() : undefined;
174
+ const fax = !!clientToCheck[`${propsStr}FAX`] ? (0, data_1.formatPhoneNumberDB)(clientToCheck[`${propsStr}FAX`]) : undefined;
175
+ return Object.assign(Object.assign({}, (!!email
176
+ ? {
177
+ customer_email: email
178
+ }
179
+ : {
180
+ customer_communicationPreference: 'phone'
181
+ })), (!!fax
182
+ ? {
183
+ customer_photocopier: fax
184
+ }
185
+ : {}));
186
+ };
187
+ const getPrevCustomerAddress = (expeditionInfo) => {
188
+ const defaultBilling = expeditionInfo.findIndex((ei) => ei.is_default && ei.is_default.includes(Customer_1.defaultExpeditionOptionsEnum.BILLING));
189
+ if (defaultBilling !== -1) {
190
+ return [
191
+ ...expeditionInfo.slice(0, defaultBilling),
192
+ Object.assign(Object.assign({}, expeditionInfo[defaultBilling]), { address: Object.assign(Object.assign({}, expeditionInfo[defaultBilling].address), getClientAddress()) }),
193
+ ...expeditionInfo.slice(defaultBilling + 1)
194
+ ];
195
+ }
196
+ return [
197
+ ...expeditionInfo,
198
+ {
199
+ address: Object.assign(Object.assign({}, getClientAddress()), { id: (0, uuid_1.v4)() }),
200
+ is_default: [Customer_1.defaultExpeditionOptionsEnum.BILLING],
201
+ expedition_recipient_name: !!client.nom ? client.nom : '',
202
+ expedition_recipient_phone: !!client.téléphone ? (0, data_1.formatPhoneNumberDB)(client.téléphone) : ''
203
+ }
204
+ ];
205
+ };
206
+ const getClientAddress = () => {
207
+ return {
208
+ city: client.ville,
209
+ country: !!client.pays ? client.pays : 'CA',
210
+ line1: client.adresse || '',
211
+ postal_code: !!client.codePostal ? client.codePostal.toUpperCase() : '',
212
+ state: client.province || ''
213
+ };
214
+ };
215
+ const shouldCheckForCompany = () => {
216
+ return !!client.nom || !!client.téléphone || !!client.personneRessourceComptes;
217
+ };
218
+ const defaultProGroup = 'aspirant';
219
+ const getCustomerGroupFromTypeCode = (type) => {
220
+ if (!!!allGroups)
221
+ return defaultProGroup;
222
+ const sameGroup = allGroups.find((g) => g.external_slug === type);
223
+ return !!sameGroup ? sameGroup.slug : defaultProGroup;
224
+ };
225
+ const mapG2LangToAddioPreferredLang = (g2Lang) => {
226
+ return g2Lang === 2 ? 'en' : 'fr';
227
+ };
228
+ const preferredLang = mapG2LangToAddioPreferredLang(client.langue);
229
+ let customerWithNewInfo = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, (0, Customer_1.getDefaultCustomer)()), (!!prevCustomer ? prevCustomer : { id: client.noClient.toUpperCase() })), (!!!prevCustomer
230
+ ? {
231
+ hash: crypto_js_1.default.AES.encrypt(client.noClient.toUpperCase(), client.noClient.toUpperCase()).toString(),
232
+ type: Customer_1.CustomerTypeEnum.COMPANY
233
+ }
234
+ : {})), (!!client.limiteDeCrédit && Math.round((0, toNumber_1.default)(client.limiteDeCrédit))
235
+ ? {
236
+ has_credit_line: true,
237
+ credit_line_max: client.limiteDeCrédit
238
+ }
239
+ : {})), (!!client.noReprésentant ? { represented_by: client.noReprésentant } : {})), { basic_info: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, (0, Customer_1.getDefaultBasicCustomer)()), (!!prevCustomer ? prevCustomer.basic_info : { customer_type: Customer_1.BasicCustomerTypeEnum.PRO })), (!!client.email ? { customer_email: client.email.split(';')[0].toLowerCase() } : {})), (!!client.fax ? { customer_photocopier: client.fax } : {})), (!!client.personneRessourceVentes ? getCustomerNameInfo(client.personneRessourceVentes) : {})), (preferredLang ? { customer_prefered_lang: preferredLang } : {})), { customer_professionnal_info: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, (!!prevCustomer ? prevCustomer.basic_info.customer_professionnal_info : {})), { professionnal_title: !!client.groupeDeClient && !!(0, exports.getG2CustomerTypeFromCode)(client.groupeDeClient)
240
+ ? getCustomerGroupFromTypeCode((0, exports.getG2CustomerTypeFromCode)(client.groupeDeClient))
241
+ : defaultProGroup, proof_doc_value: client.noClient.toUpperCase() }), (!!client.noCondition ? { terms_code: client.noCondition } : {})), (!!client.groupeDeClient ? { external_customer_group: client.groupeDeClient } : {})), (!!client.codeFA ? { external_customer_code: client.codeFA } : {})), (!!client.classePrix ? { external_price_class: client.classePrix.toString() } : {})), (!!client.classement5 ? { external_customer_class: client.classement5 } : {})) }) }), ((!!prevCustomer && !!prevCustomer.company_info) || shouldCheckForCompany()
242
+ ? {
243
+ company_info: Object.assign(Object.assign(Object.assign({}, (!!prevCustomer && !!prevCustomer.company_info ? prevCustomer.company_info : {})), { invoice_info: Object.assign(Object.assign(Object.assign({}, (!!prevCustomer && !!prevCustomer.company_info && !!prevCustomer.company_info.invoice_info
244
+ ? prevCustomer.company_info.invoice_info
245
+ : {})), { legal_name: !!client.nom ? client.nom : '' }), (!!client.téléphone ? { phone: (0, data_1.formatPhoneNumberDB)(client.téléphone) } : {})) }), (!!client.personneRessourceComptes || !!client.personneRessourceAutres
246
+ ? {
247
+ other_users: [
248
+ ...(!!client.personneRessourceComptes
249
+ ? [
250
+ Object.assign(Object.assign(Object.assign({}, (0, Customer_1.getDefaultBasicCustomer)()), getCustomerNameInfo(client.personneRessourceComptes)), getOtherCustomerInfo('personneRessourceComptes'))
251
+ ]
252
+ : []),
253
+ ...(!!client.personneRessourceAutres
254
+ ? [
255
+ Object.assign(Object.assign(Object.assign({}, (0, Customer_1.getDefaultBasicCustomer)()), getCustomerNameInfo(client.personneRessourceAutres)), getOtherCustomerInfo('personneRessourceAutres'))
256
+ ]
257
+ : [])
258
+ ]
259
+ }
260
+ : {}))
261
+ }
262
+ : {})), { expedition_info: !!prevCustomer && prevCustomer.expedition_info && prevCustomer.expedition_info.length
263
+ ? prevCustomer.expedition_info.length > 1
264
+ ? getPrevCustomerAddress(prevCustomer.expedition_info)
265
+ : [
266
+ Object.assign(Object.assign({}, prevCustomer.expedition_info[0]), { address: Object.assign(Object.assign({}, (prevCustomer.expedition_info[0].address ? prevCustomer.expedition_info[0].address : {})), getClientAddress()), is_default: [
267
+ ...(prevCustomer.expedition_info[0].is_default || []),
268
+ ...(!!!prevCustomer.expedition_info[0].is_default ||
269
+ !!!prevCustomer.expedition_info[0].is_default.includes(Customer_1.defaultExpeditionOptionsEnum.BILLING)
270
+ ? [Customer_1.defaultExpeditionOptionsEnum.BILLING]
271
+ : [])
272
+ ] })
273
+ ]
274
+ : [
275
+ {
276
+ address: Object.assign(Object.assign({}, getClientAddress()), { id: (0, uuid_1.v4)() }),
277
+ is_default: [Customer_1.defaultExpeditionOptionsEnum.BILLING],
278
+ expedition_recipient_name: !!client.nom ? client.nom : '',
279
+ expedition_recipient_phone: !!client.téléphone ? (0, data_1.formatPhoneNumberDB)(client.téléphone) : ''
280
+ }
281
+ ] });
282
+ if (!!__1.isTestEnv &&
283
+ !!prevCustomer &&
284
+ !!prevCustomer.basic_info.customer_email &&
285
+ prevCustomer.basic_info.customer_email.includes('@dummy.com')) {
286
+ const allPropsToReset = anonymisation_1.g2Properties.map((p) => p.path);
287
+ for (let prop of allPropsToReset) {
288
+ const prevValue = (0, object_1.recursiveCheckObject)(prevCustomer, prop);
289
+ const currentValue = (0, object_1.recursiveCheckObject)(customerWithNewInfo, prop);
290
+ if (prevValue == currentValue)
291
+ continue;
292
+ customerWithNewInfo = (0, object_1.recursiveSetObject)(customerWithNewInfo, prevValue, prop);
293
+ }
294
+ }
295
+ return customerWithNewInfo;
296
+ };
297
+ exports.transformG2CustomerToCustomer = transformG2CustomerToCustomer;
298
+ const checkIfCustomerExistsInG2 = async (customerID, space, org) => {
299
+ try {
300
+ const token = (0, context_1.getSpaceToken)(space, org);
301
+ if (!!!token)
302
+ throw new Error('no token found for space');
303
+ const api = __1.API_URL;
304
+ let response = await fetch(`${api}/services/g2/customers/${customerID}/exists`, {
305
+ method: 'GET',
306
+ headers: {
307
+ 'Content-Type': 'application/json',
308
+ Authorization: `Bearer ${token}`
309
+ }
310
+ });
311
+ if (!!response.status && response.status !== 200)
312
+ throw `Error - ${response.status}`;
313
+ const { exists } = await response.json();
314
+ return exists;
315
+ }
316
+ catch (e) {
317
+ console.log('error on checking customer in G2: ', e.toString());
318
+ return false;
319
+ }
320
+ };
321
+ exports.checkIfCustomerExistsInG2 = checkIfCustomerExistsInG2;
322
+ const updateCustomerWithG2Info = async (customerID, space, org, addToDB = true, skipEmailCheck = false) => {
323
+ console.log('===============');
324
+ console.log('in v2 sdk updateCustomerWithG2Info');
325
+ try {
326
+ const token = (0, context_1.getSpaceToken)(space, org);
327
+ if (!!!token)
328
+ return;
329
+ const api = __1.API_URL;
330
+ console.log('----------------------');
331
+ let delay1 = (0, moment_1.default)();
332
+ let updatedCustomerQuery = await fetch(`${api}/services/g2/customers/${customerID}/convert`, {
333
+ method: 'GET',
334
+ headers: {
335
+ 'Content-Type': 'application/json',
336
+ Authorization: `Bearer ${token}`
337
+ }
338
+ });
339
+ console.log('called api to update customer delay: ', (0, moment_1.default)().diff(delay1, 'seconds'));
340
+ if (!!updatedCustomerQuery.status && updatedCustomerQuery.status !== 200)
341
+ throw `Error - ${updatedCustomerQuery.status}`;
342
+ const G2RequestRes = await updatedCustomerQuery.json();
343
+ if (!!!G2RequestRes)
344
+ throw 'Error - no data';
345
+ let updatedCustomer = (0, anonymisation_1.hideG2CustomerInfoIfNeeded)(G2RequestRes.customer);
346
+ if (!!addToDB) {
347
+ console.log('----------------------');
348
+ let delay4 = (0, moment_1.default)();
349
+ await space.addCustomer(updatedCustomer, undefined, skipEmailCheck);
350
+ console.log('saving to database delay: ', (0, moment_1.default)().diff(delay4, 'seconds'));
351
+ }
352
+ console.log('=====================');
353
+ return updatedCustomer;
354
+ }
355
+ catch (e) {
356
+ console.log('error on updating customer info with G2: ', e.toString());
357
+ return;
358
+ }
359
+ };
360
+ exports.updateCustomerWithG2Info = updateCustomerWithG2Info;
361
+ const getG2DiscountFromCode = (code) => {
362
+ const onlyNb = code.replace(/[^0-9]/gi, '');
363
+ return !!!onlyNb || !!isNaN(Number(onlyNb)) ? undefined : (0, toNumber_1.default)(onlyNb);
364
+ };
365
+ exports.getG2DiscountFromCode = getG2DiscountFromCode;
366
+ const getG2CustomerTypeFromCode = (code) => {
367
+ let parsedCode = code;
368
+ const possiblePrefixes = ['BASE', 'PAYS', 'RENC'];
369
+ for (let prefix of possiblePrefixes) {
370
+ parsedCode = parsedCode.replace(prefix, '');
371
+ }
372
+ parsedCode = parsedCode.replace(/[0-9]/gi, '');
373
+ const possibleTypes = ['AM', 'AL', 'AS', 'AMN'];
374
+ const checkWithPossibleTypes = (codeToCheck, removeFrom) => {
375
+ if (!!!possibleTypes.includes(codeToCheck)) {
376
+ if (codeToCheck.length === 1)
377
+ return '';
378
+ if (removeFrom == 'start') {
379
+ return checkWithPossibleTypes(codeToCheck.substring(1), removeFrom);
380
+ }
381
+ else {
382
+ return checkWithPossibleTypes(codeToCheck.replace(/.$/, ''), removeFrom);
383
+ }
384
+ }
385
+ return codeToCheck;
386
+ };
387
+ if (!!parsedCode) {
388
+ let removedValues = checkWithPossibleTypes(parsedCode, 'end');
389
+ if (!!!removedValues)
390
+ removedValues = checkWithPossibleTypes(parsedCode, 'start');
391
+ parsedCode = removedValues;
392
+ }
393
+ return parsedCode;
394
+ };
395
+ exports.getG2CustomerTypeFromCode = getG2CustomerTypeFromCode;
396
+ const fetchCustomPriceList = async (spaceToken, customerId, ignoreDashPriceList, onlyForProductSlugs) => {
397
+ let prices = [];
398
+ try {
399
+ const api = __1.API_URL;
400
+ const g2PriceListQuery = await fetch(`${api}/services/g2/customers/${customerId}/customPrices`, {
401
+ method: 'POST',
402
+ headers: {
403
+ 'Content-Type': 'application/json',
404
+ Authorization: `Bearer ${spaceToken}`
405
+ },
406
+ body: JSON.stringify(Object.assign({ ignoreDashPriceList: !!ignoreDashPriceList }, (!!onlyForProductSlugs ? { onlyForProductSlugs } : {})))
407
+ });
408
+ prices = await g2PriceListQuery.json();
409
+ if (!!g2PriceListQuery.status && g2PriceListQuery.status !== 200)
410
+ throw `Error - ${g2PriceListQuery.status}`;
411
+ if (!!!prices || !!!prices.length)
412
+ throw 'Error - no data';
413
+ }
414
+ catch (e) {
415
+ console.log('error on fetching custom prices:', e.toString());
416
+ }
417
+ return prices;
418
+ };
419
+ exports.fetchCustomPriceList = fetchCustomPriceList;
420
+ const getCustomPriceList = async (space, idClient, ignoreDashPriceList, onlyForProductSlugs) => {
421
+ let priceList = [];
422
+ let escomptesClient = [];
423
+ let ententesClient = [];
424
+ let G2Auth = '';
425
+ let G2Url = '';
426
+ const G2Service = space.services({ field: 'external_service_name', value: 'G2' });
427
+ if (!!G2Service && !!G2Service.length) {
428
+ G2Auth = G2Service[0].external_service_infos.api;
429
+ G2Url = G2Service[0].external_service_infos.api_url;
430
+ }
431
+ if (!!!G2Auth || !!!G2Url)
432
+ throw `Error on fetching G2 API info from space`;
433
+ try {
434
+ const customerReq = await fetch(`${G2Url}/clients?noClient=${idClient}`, {
435
+ method: 'GET',
436
+ headers: {
437
+ Authorization: G2Auth
438
+ }
439
+ });
440
+ const customers = await customerReq.json();
441
+ if (customerReq.status !== 200) {
442
+ throw `Error on fetching customers from G2 API: ${customerReq.status}`;
443
+ }
444
+ const allG2Customers = customers;
445
+ const g2Customer = allG2Customers[0];
446
+ if (!!!g2Customer)
447
+ return priceList;
448
+ const today = (0, moment_1.default)();
449
+ const allCurrentEntentes = g2Customer.soumissions.filter((s) => !!s.soumission.actif &&
450
+ !!s.soumission.dateDébut &&
451
+ !!s.soumission.dateFin &&
452
+ today.isBetween((0, moment_1.default)(s.soumission.dateDébut), (0, moment_1.default)(s.soumission.dateFin)));
453
+ const mostRecent = (0, orderBy_1.default)(allCurrentEntentes, (e) => (0, moment_1.default)(e.soumission.dateDébut).unix(), 'desc');
454
+ if (!!mostRecent) {
455
+ ententesClient = mostRecent;
456
+ }
457
+ const { noClient, groupeDeClient, classePrix } = g2Customer.client;
458
+ const customerType = !!!groupeDeClient ? undefined : (0, exports.getG2CustomerTypeFromCode)(groupeDeClient);
459
+ try {
460
+ const escomptesNumClient = await fetch(`${G2Url}/escompteclient?code=${noClient}`, {
461
+ method: 'GET',
462
+ headers: {
463
+ Authorization: G2Auth
464
+ }
465
+ });
466
+ const numClientResults = await escomptesNumClient.json();
467
+ if (!!numClientResults.status && numClientResults.status !== 200) {
468
+ console.log(`Error on fetching escompteClients from G2 API with noClient ${noClient}: ${numClientResults.status}`);
469
+ }
470
+ else {
471
+ escomptesClient = [...escomptesClient, ...numClientResults.map((r) => r.escompteClient)];
472
+ }
473
+ }
474
+ catch (e) {
475
+ console.log('error on fetching escomptesClient from G2: ', e.toString());
476
+ }
477
+ try {
478
+ if (!!groupeDeClient && groupeDeClient !== noClient) {
479
+ const escomptesGroupeClient = await fetch(`${G2Url}/escompteclient?code=${groupeDeClient}`, {
480
+ method: 'GET',
481
+ headers: {
482
+ Authorization: G2Auth
483
+ }
484
+ });
485
+ const groupeClientResults = await escomptesGroupeClient.json();
486
+ if (!!groupeClientResults.statuts && groupeClientResults.status !== 200) {
487
+ console.log(`Error on fetching escompteClients from G2 API with groupeClient ${groupeDeClient}: ${groupeClientResults.status}`);
488
+ }
489
+ else {
490
+ const groupeClientEscomptes = groupeClientResults.map((r) => r.escompteClient);
491
+ const noDuplicates = groupeClientEscomptes.filter((es) => !!!es.code2 || !!!escomptesClient.some((e) => !!e.code2 && e.code2 === es.code2));
492
+ escomptesClient = [...escomptesClient, ...noDuplicates];
493
+ }
494
+ }
495
+ else {
496
+ console.log('ignoring groupeClient escomptes because id and groupeClient are same');
497
+ }
498
+ }
499
+ catch (e) {
500
+ console.log('error on fetching escomptesClient from G2: ', e.toString());
501
+ }
502
+ let allProducts = [];
503
+ try {
504
+ if (!!onlyForProductSlugs && !!onlyForProductSlugs.length) {
505
+ if (onlyForProductSlugs.length <= 10) {
506
+ allProducts = await space.indexedProducts.get({
507
+ query: [{ field: 'slug', operator: 'in', value: onlyForProductSlugs }]
508
+ });
509
+ }
510
+ else {
511
+ const batchResults = [];
512
+ for (let group of (0, chunk_1.default)(onlyForProductSlugs, 10)) {
513
+ let query = await space.indexedProducts.get({
514
+ query: [{ field: 'slug', operator: 'in', value: group }]
515
+ });
516
+ batchResults.push(query);
517
+ }
518
+ allProducts = (0, flatten_1.default)(batchResults);
519
+ }
520
+ }
521
+ else {
522
+ allProducts = await space.indexedProducts.get({
523
+ query: [{ field: 'draft', operator: '!=', value: true }]
524
+ });
525
+ }
526
+ }
527
+ catch (e) {
528
+ console.log('error on fetching all products : ', e.toString());
529
+ }
530
+ if (!!!allProducts.length)
531
+ return priceList;
532
+ const allCustomerGroups = space.preferences.customers.groups() || [];
533
+ const customerGroupByPriceClass = !!classePrix
534
+ ? allCustomerGroups.find((g) => g.external_price_list_slug == classePrix.toString())
535
+ : undefined;
536
+ for (let prod of allProducts) {
537
+ const data = prod.data();
538
+ if (!!!data || !!data.draft)
539
+ continue;
540
+ const type = !!data.attributes && data.attributes[data_2.AttributesIdEnumGR.TYPE];
541
+ for (let decli of data.declinations.filter((d) => !!!d.is_sample)) {
542
+ let isNetPrice = !!decli.external_values && decli.external_values['catégorie2'] === 'NET';
543
+ const sku = decli.sku;
544
+ let basePrice = (0, toNumber_1.default)(decli.regular_price.amount);
545
+ if (!!decli.prices_list && !!decli.prices_list.length && !!!ignoreDashPriceList) {
546
+ let priceListItemToUse = undefined;
547
+ const samePriceClassInPriceList = !!customerGroupByPriceClass
548
+ ? decli.prices_list.find((pl) => pl.group_id == customerGroupByPriceClass.slug)
549
+ : undefined;
550
+ if (!!samePriceClassInPriceList && !isNaN((0, toNumber_1.default)(samePriceClassInPriceList.amount))) {
551
+ priceListItemToUse = samePriceClassInPriceList;
552
+ }
553
+ else if (!!groupeDeClient) {
554
+ const samePriceInPriceList = !!customerType
555
+ ? decli.prices_list.find((p) => !!p.external_slug && p.external_slug === customerType)
556
+ : undefined;
557
+ const proPriceInPriceList = decli.prices_list.find((p) => p.group_id === 'aspirant');
558
+ if (!!samePriceInPriceList && !isNaN((0, toNumber_1.default)(samePriceInPriceList.amount))) {
559
+ priceListItemToUse = samePriceClassInPriceList;
560
+ }
561
+ else if (!!proPriceInPriceList && !isNaN((0, toNumber_1.default)(proPriceInPriceList.amount))) {
562
+ priceListItemToUse = proPriceInPriceList;
563
+ }
564
+ }
565
+ if (!!priceListItemToUse) {
566
+ basePrice = (0, toNumber_1.default)(priceListItemToUse.amount);
567
+ if (!!!isNetPrice) {
568
+ isNetPrice = !!priceListItemToUse.is_net_price;
569
+ }
570
+ }
571
+ }
572
+ let comparePrices = [
573
+ Object.assign(Object.assign({ price: basePrice, type: G2_1.CustomPriceItemTypeEnum.REG }, (!!(0, object_1.recursiveCheckObject)(decli, 'external_values.catégorie1')
574
+ ? { code1: (0, object_1.recursiveCheckObject)(decli, 'external_values.catégorie1') }
575
+ : {})), (!!(0, object_1.recursiveCheckObject)(decli, 'external_values.catégorie2')
576
+ ? { code2: (0, object_1.recursiveCheckObject)(decli, 'external_values.catégorie2') }
577
+ : {}))
578
+ ];
579
+ let foundEntenteForProduct = false;
580
+ if (!!ententesClient.length) {
581
+ for (let entente of ententesClient) {
582
+ if (!!foundEntenteForProduct)
583
+ break;
584
+ let sameProd = entente.articles.find((a) => !!a.article.noArticle && a.article.noArticle === sku);
585
+ if (!!!sameProd) {
586
+ sameProd = entente.articles.find((a) => !!a.article.noArticle && a.article.noArticle.includes(sku));
587
+ }
588
+ if (!!sameProd) {
589
+ const priceToSet = typeof sameProd.article.prixUnitaireNet === 'number'
590
+ ? sameProd.article.prixUnitaireNet
591
+ : typeof sameProd.article.prixUnitaire === 'number'
592
+ ? sameProd.article.prixUnitaire
593
+ : undefined;
594
+ if (typeof priceToSet === 'number') {
595
+ foundEntenteForProduct = true;
596
+ comparePrices.push(Object.assign(Object.assign({ price: (0, toNumber_1.default)(priceToSet), type: G2_1.CustomPriceItemTypeEnum.ENTENTE }, (!!decli.external_values ? { code2: decli.external_values['catégorie2'] } : {})), (!!sameProd.article.pourcEscompte
597
+ ? Object.assign(Object.assign({}, (typeof sameProd.article.prixUnitaire === 'number'
598
+ ? { reg: sameProd.article.prixUnitaire }
599
+ : {})), { percent: sameProd.article.pourcEscompte }) : {})));
600
+ }
601
+ }
602
+ }
603
+ }
604
+ if (!!escomptesClient.length) {
605
+ const findBestDeal = (escomptesToCheck) => {
606
+ const bestDeal = (0, maxBy_1.default)(escomptesToCheck, (escompte) => (0, toNumber_1.default)(escompte.pourcEscompte));
607
+ if (!!bestDeal) {
608
+ comparePrices.push(Object.assign({ price: basePrice * ((100 - (0, toNumber_1.default)(bestDeal.pourcEscompte)) / 100), type: G2_1.CustomPriceItemTypeEnum.ESCOMPTE, percent: (0, toNumber_1.default)(bestDeal.pourcEscompte), code1: bestDeal.code1 }, (!!bestDeal.code2 ? { code2: bestDeal.code2 } : {})));
609
+ }
610
+ };
611
+ if (!!!foundEntenteForProduct) {
612
+ if (!!isNetPrice) {
613
+ const sameCat1Escompte = escomptesClient.filter((e) => {
614
+ if (!!!e.code2)
615
+ return false;
616
+ return decli.external_values && e.code2 === decli.external_values['catégorie1'] && e.code2 == 'DALLE';
617
+ });
618
+ if (!!sameCat1Escompte && !!sameCat1Escompte.length) {
619
+ findBestDeal(sameCat1Escompte);
620
+ }
621
+ }
622
+ else {
623
+ const no2ndCode = escomptesClient.filter((e) => !!!e.code2);
624
+ if (!!no2ndCode.length) {
625
+ findBestDeal(no2ndCode);
626
+ }
627
+ let sameSkuEscompte = escomptesClient.filter((e) => e.code2 && e.code2 === sku);
628
+ if (!!!sameSkuEscompte.length) {
629
+ sameSkuEscompte = escomptesClient.filter((e) => e.code2 && e.code2.includes(sku));
630
+ }
631
+ if (!!sameSkuEscompte.length) {
632
+ findBestDeal(sameSkuEscompte);
633
+ }
634
+ if (!!!sameSkuEscompte.length) {
635
+ const sameBrandEscompte = escomptesClient.filter((e) => {
636
+ if (!!!e.code2)
637
+ return;
638
+ return (decli.external_values &&
639
+ (e.code2 === decli.external_values['catégorie2'] || e.code2 === decli.external_values['catégorie1']));
640
+ });
641
+ if (!!sameBrandEscompte) {
642
+ findBestDeal(sameBrandEscompte);
643
+ }
644
+ }
645
+ }
646
+ }
647
+ }
648
+ comparePrices = (0, uniqBy_1.default)(comparePrices, (p) => p.price);
649
+ const lowestPrice = (0, minBy_1.default)(comparePrices, (p) => p.price);
650
+ let appliedPrice = lowestPrice;
651
+ if (!!lowestPrice && lowestPrice.type == G2_1.CustomPriceItemTypeEnum.REG) {
652
+ const ententeFound = comparePrices.find((p) => p.type == G2_1.CustomPriceItemTypeEnum.ENTENTE);
653
+ if (!!ententeFound)
654
+ appliedPrice = Object.assign(Object.assign({}, ententeFound), { reg: ententeFound.price });
655
+ }
656
+ let customPriceItemToPush = undefined;
657
+ if (!!appliedPrice) {
658
+ customPriceItemToPush = Object.assign(Object.assign({ sku: sku, parent_slug: data.slug, name: `${!!decli.parent_name &&
659
+ !!!(0, locale_1.getPrincipalWord)(decli.name, space).trim().includes((0, locale_1.getPrincipalWord)(decli.parent_name).trim())
660
+ ? (0, locale_1.getPrincipalWord)(decli.name, space) + ' - '
661
+ : ''}${(0, locale_1.getPrincipalWord)(decli.name, space)}`, reg: basePrice }, (!!type
662
+ ? {
663
+ prod_type: type[0]
664
+ }
665
+ : {})), appliedPrice);
666
+ }
667
+ if (!!customPriceItemToPush) {
668
+ priceList.push(customPriceItemToPush);
669
+ }
670
+ }
671
+ }
672
+ return priceList;
673
+ }
674
+ catch (e) {
675
+ console.log('error on fetching customer from G2: ', e.toString());
676
+ return e.toString();
677
+ }
678
+ };
679
+ exports.getCustomPriceList = getCustomPriceList;
680
+ const getItemEscompteSupp = (customPriceList, item) => {
681
+ const code2InItem = (0, object_1.recursiveCheckObject)(item, `external_values.catégorie2`);
682
+ let code2InPriceList = undefined;
683
+ const customPriceItem = customPriceList.find((priceItem) => priceItem.sku === item.sku);
684
+ if (!!customPriceItem && !!customPriceItem.code2) {
685
+ code2InPriceList = customPriceItem.code2;
686
+ }
687
+ const code2ToCheck = code2InPriceList !== null && code2InPriceList !== void 0 ? code2InPriceList : code2InItem;
688
+ if (!!!code2ToCheck)
689
+ return;
690
+ let foundEsc = customPriceList.find((priceItem) => priceItem.sku === 'ESC' + code2ToCheck);
691
+ if (!!!foundEsc && !!code2InItem) {
692
+ foundEsc = customPriceList.find((priceItem) => priceItem.sku === 'ESC' + code2InItem);
693
+ }
694
+ return foundEsc;
695
+ };
696
+ exports.getItemEscompteSupp = getItemEscompteSupp;
697
+ const groupArrayOfItemsByItemAndCorrespondingEscompteItem = (items) => {
698
+ return (0, flatten_1.default)(Object.values((0, groupBy_1.default)(items, (item) => ((0, exports.isEscompteSuppItem)(item.sku) ? (0, string_1.splitFromFirstChar)('-', item.sku)[1] : item.sku))));
699
+ };
700
+ exports.groupArrayOfItemsByItemAndCorrespondingEscompteItem = groupArrayOfItemsByItemAndCorrespondingEscompteItem;
701
+ const buildEscompteSuppCartItem = (escompteItems, customPriceList, escompteSuppItem, item) => {
702
+ if (!!!escompteItems[0])
703
+ return;
704
+ const priceToUse = (0, products_1.getLowestPrice)(item);
705
+ const escompteDecli = escompteItems[0].data().declinations.find((decli) => decli.sku === escompteSuppItem.sku);
706
+ if (!!!escompteDecli)
707
+ return;
708
+ const sameInCustomPriceList = customPriceList.find((c) => c.sku === escompteDecli.sku);
709
+ if (!!sameInCustomPriceList &&
710
+ sameInCustomPriceList.type === G2_1.CustomPriceItemTypeEnum.REG &&
711
+ sameInCustomPriceList.price === 0)
712
+ return;
713
+ const escompteEquivalent = (0, exports.checkForCustomPriceEquivalent)(escompteDecli, customPriceList);
714
+ return Object.assign(Object.assign({}, escompteEquivalent), { is_upsell_of_sku: item.sku, is_temp_prod: true, price_override: true, qte_override: true, qte: item.qte * priceToUse.price.amount, sku: `${escompteEquivalent.sku}-${item.sku}`, regular_price: (0, products_1.getLowestPrice)(escompteEquivalent).price });
715
+ };
716
+ exports.buildEscompteSuppCartItem = buildEscompteSuppCartItem;
717
+ const isEscompteSuppItem = (itemSku) => {
718
+ return Object.values(G2_1.EscomptesDeclinationSkusEnum).some((subString) => itemSku.includes(subString));
719
+ };
720
+ exports.isEscompteSuppItem = isEscompteSuppItem;
721
+ const checkForCustomPriceEquivalent = (item, customPriceList, options = {}) => {
722
+ var _a;
723
+ const sameInCustomPriceList = customPriceList.find((i) => i.sku === item.sku);
724
+ if (!!!sameInCustomPriceList)
725
+ return item;
726
+ const hasOverriddenPrice = item.price_override;
727
+ if (!!hasOverriddenPrice && sameInCustomPriceList.type === G2_1.CustomPriceItemTypeEnum.REG)
728
+ return item;
729
+ const { regular_price, promo_price, discount_price, tier_pricing } = item, rest = __rest(item, ["regular_price", "promo_price", "discount_price", "tier_pricing"]);
730
+ const isReg = sameInCustomPriceList.type === G2_1.CustomPriceItemTypeEnum.REG;
731
+ const isEntente = sameInCustomPriceList.type === G2_1.CustomPriceItemTypeEnum.ENTENTE;
732
+ const isPA = !!sameInCustomPriceList.PA_percent;
733
+ const shouldUseCustomPriceForRegPrice = (!!isReg && !!!sameInCustomPriceList.percent) || (!!options.setNetPriceAsRegular && !!isEntente);
734
+ const currentDiscountPrice = item.discount_price || { currency: 'CAD' };
735
+ const currentPromoPrice = item.promo_price || { currency: 'CAD' };
736
+ const calculatedRegPrice = !!item.price_override
737
+ ? regular_price.amount
738
+ : (!!isReg || !!isEntente) && sameInCustomPriceList.price == 0
739
+ ? 0
740
+ : !!shouldUseCustomPriceForRegPrice
741
+ ? sameInCustomPriceList.price
742
+ : sameInCustomPriceList.reg;
743
+ let updatedCartItem = Object.assign(Object.assign(Object.assign(Object.assign({}, rest), { regular_price: Object.assign(Object.assign(Object.assign({}, regular_price), { amount: calculatedRegPrice }), (sameInCustomPriceList.type !== G2_1.CustomPriceItemTypeEnum.REG && !!!regular_price.price_type
744
+ ? { price_type: sameInCustomPriceList.type }
745
+ : {})) }), (!!!hasOverriddenPrice
746
+ ? Object.assign(Object.assign({}, (sameInCustomPriceList.percent || !!!isReg
747
+ ? Object.assign({}, (!!sameInCustomPriceList.percent &&
748
+ [G2_1.CustomPriceItemTypeEnum.ESCOMPTE, G2_1.CustomPriceItemTypeEnum.NORMAL_ESCOMPTE].includes(sameInCustomPriceList.type)
749
+ ? {
750
+ promo_price: Object.assign(Object.assign({}, currentPromoPrice), (!currentPromoPrice.overridden
751
+ ? {
752
+ amount: sameInCustomPriceList.price,
753
+ price_type: sameInCustomPriceList.type
754
+ }
755
+ : {}))
756
+ }
757
+ :
758
+ !!!options.setNetPriceAsRegular
759
+ ? Object.assign({ discount_price: Object.assign(Object.assign({}, currentDiscountPrice), (!currentDiscountPrice.overridden
760
+ ? {
761
+ amount: sameInCustomPriceList.price,
762
+ price_type: sameInCustomPriceList.type
763
+ }
764
+ : {})) }, (!!currentPromoPrice.overridden ? { promo_price: currentPromoPrice } : {})) : {})) :
765
+ currentDiscountPrice.price_type === 'tierpricing' && !!!options.removeTierPricing
766
+ ? {
767
+ discount_price: Object.assign(Object.assign({}, item.discount_price), { original_amount: !!isReg || !!!options.setNetPriceAsRegular ? null : sameInCustomPriceList.price })
768
+ }
769
+ : {})), (!!isPA
770
+ ? {
771
+ promo_price: Object.assign(Object.assign({}, currentPromoPrice), { amount: (_a = sameInCustomPriceList.PA_price) !== null && _a !== void 0 ? _a : sameInCustomPriceList.price, price_type: sameInCustomPriceList.type, percent_applied: sameInCustomPriceList.PA_percent }),
772
+ discount_price: Object.assign(Object.assign({}, currentDiscountPrice), { amount: sameInCustomPriceList.price, price_type: sameInCustomPriceList.type, percent_applied: sameInCustomPriceList.percent })
773
+ }
774
+ : {})) : {})), (!!!options.removeTierPricing && !!tier_pricing
775
+ ? {
776
+ tier_pricing
777
+ }
778
+ : {}));
779
+ const priceUsedForPromoCalculations = !!updatedCartItem.discount_price
780
+ ? updatedCartItem.discount_price.amount
781
+ : updatedCartItem.regular_price.amount;
782
+ const initialPriceToCompare = !!currentDiscountPrice ? currentDiscountPrice.amount : item.regular_price.amount;
783
+ if (typeof currentPromoPrice.percent_applied == 'number' &&
784
+ !!currentPromoPrice.overridden &&
785
+ priceUsedForPromoCalculations != initialPriceToCompare) {
786
+ updatedCartItem = Object.assign(Object.assign({}, updatedCartItem), { promo_price: Object.assign(Object.assign({}, (updatedCartItem.promo_price || { currency: 'CAD' })), { amount: (0, round_1.default)((0, cart_1.calculateAmountForCustomPromo)(updatedCartItem, Cart_1.CustomPromoType.EXTRA_PROMO, currentPromoPrice.percent_applied), priceUsedForPromoCalculations.toString().split('.').length) }) });
787
+ }
788
+ return updatedCartItem;
789
+ };
790
+ exports.checkForCustomPriceEquivalent = checkForCustomPriceEquivalent;
791
+ const getCustomIncentiveAmount = (customPriceList) => {
792
+ if (!!!customPriceList)
793
+ return;
794
+ const ententeSku = 'INCITATIF';
795
+ let amount = 0;
796
+ const entente = customPriceList.find((priceItem) => priceItem.sku === ententeSku);
797
+ if (!!!entente || !!!entente.price || entente.type == G2_1.CustomPriceItemTypeEnum.REG)
798
+ return;
799
+ amount = entente.price * -100;
800
+ return amount;
801
+ };
802
+ exports.getCustomIncentiveAmount = getCustomIncentiveAmount;
803
+ const getDiscountRulesWithCustomIncentive = (incentiveAmount, discountRules) => {
804
+ let hasBeenUpdated = false;
805
+ const updatedDiscountRules = discountRules.map((rule) => {
806
+ const promoType = (0, discount_1.getCartPromoType)(rule);
807
+ if (promoType === Cart_1.CartPromoAppliesToEnum.TOTAL_AFTER_TAXES) {
808
+ hasBeenUpdated = true;
809
+ const updatedRule = rule;
810
+ updatedRule.result.action_value = incentiveAmount;
811
+ updatedRule.overridden = true;
812
+ return updatedRule;
813
+ }
814
+ else {
815
+ return rule;
816
+ }
817
+ });
818
+ if (!hasBeenUpdated)
819
+ return;
820
+ return updatedDiscountRules;
821
+ };
822
+ exports.getDiscountRulesWithCustomIncentive = getDiscountRulesWithCustomIncentive;
823
+ const getCustomIncentiveInfo = (customPriceList, discountRules, defaultIncentiveAmount) => {
824
+ let discountRulesWithCustomIncentive;
825
+ let customIncentiveAmount = (0, exports.getCustomIncentiveAmount)(customPriceList);
826
+ const incentiveDiscountRule = (0, discount_1.getPaymentIncentiveDiscount)(discountRules);
827
+ if (!!!customIncentiveAmount) {
828
+ if (!!incentiveDiscountRule && !!incentiveDiscountRule.overridden) {
829
+ return {
830
+ amount: defaultIncentiveAmount || 0,
831
+ updatedDiscountRules: discountRules.map((dr) => {
832
+ if (dr.id !== incentiveDiscountRule.id)
833
+ return dr;
834
+ return Object.assign(Object.assign(Object.assign({}, dr), (defaultIncentiveAmount ? { result: Object.assign(Object.assign({}, dr.result), { action_value: defaultIncentiveAmount }) } : {})), { overridden: false });
835
+ }),
836
+ reset: true
837
+ };
838
+ }
839
+ return;
840
+ }
841
+ discountRulesWithCustomIncentive = (0, exports.getDiscountRulesWithCustomIncentive)(customIncentiveAmount, discountRules);
842
+ if (!!!discountRulesWithCustomIncentive)
843
+ return;
844
+ return {
845
+ amount: customIncentiveAmount,
846
+ updatedDiscountRules: discountRulesWithCustomIncentive
847
+ };
848
+ };
849
+ exports.getCustomIncentiveInfo = getCustomIncentiveInfo;
850
850
  //# sourceMappingURL=g2.js.map