addio-admin-sdk 1.7.90 → 1.7.96

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 (557) hide show
  1. package/.babelrc +17 -17
  2. package/.env +15 -0
  3. package/.env.dev +14 -14
  4. package/.github/workflows/publish_coverage.yam_ +69 -69
  5. package/addio-sdk-doc.md +1473 -1473
  6. package/changelog.md +537 -537
  7. package/dist/Interfaces/Address/index.d.ts +21 -21
  8. package/dist/Interfaces/Address/index.js +16 -16
  9. package/dist/Interfaces/Algolia/index.d.ts +164 -164
  10. package/dist/Interfaces/Algolia/index.js +2 -2
  11. package/dist/Interfaces/Attachement/index.d.ts +5 -5
  12. package/dist/Interfaces/Attachement/index.js +2 -2
  13. package/dist/Interfaces/Attribute/index.d.ts +52 -52
  14. package/dist/Interfaces/Attribute/index.js +10 -10
  15. package/dist/Interfaces/BGJob/index.d.ts +56 -56
  16. package/dist/Interfaces/BGJob/index.js +25 -25
  17. package/dist/Interfaces/BaseClass/index.d.ts +8 -8
  18. package/dist/Interfaces/BaseClass/index.js +2 -2
  19. package/dist/Interfaces/Blog/IBlogArticle.d.ts +18 -18
  20. package/dist/Interfaces/Blog/IBlogArticle.js +2 -2
  21. package/dist/Interfaces/Blog/IBlogAuthor.d.ts +7 -7
  22. package/dist/Interfaces/Blog/IBlogAuthor.js +2 -2
  23. package/dist/Interfaces/Blog/IBlogCategory.d.ts +9 -9
  24. package/dist/Interfaces/Blog/IBlogCategory.js +2 -2
  25. package/dist/Interfaces/Blog/IBlogComment.d.ts +13 -13
  26. package/dist/Interfaces/Blog/IBlogComment.js +2 -2
  27. package/dist/Interfaces/Blog/IBlogKeywords.d.ts +9 -9
  28. package/dist/Interfaces/Blog/IBlogKeywords.js +2 -2
  29. package/dist/Interfaces/Booking/index.d.ts +74 -74
  30. package/dist/Interfaces/Booking/index.js +17 -17
  31. package/dist/Interfaces/Brand/index.d.ts +15 -15
  32. package/dist/Interfaces/Brand/index.js +2 -2
  33. package/dist/Interfaces/CMS/index.d.ts +25 -25
  34. package/dist/Interfaces/CMS/index.js +2 -2
  35. package/dist/Interfaces/Cart/IElavonPayload.d.ts +93 -93
  36. package/dist/Interfaces/Cart/IElavonPayload.js +17 -17
  37. package/dist/Interfaces/Cart/IPandaPayload.d.ts +64 -64
  38. package/dist/Interfaces/Cart/IPandaPayload.js +18 -18
  39. package/dist/Interfaces/Cart/IPaymentCard.d.ts +22 -22
  40. package/dist/Interfaces/Cart/IPaymentCard.js +44 -44
  41. package/dist/Interfaces/Cart/IPaypalPayload.d.ts +9 -9
  42. package/dist/Interfaces/Cart/IPaypalPayload.js +2 -2
  43. package/dist/Interfaces/Cart/IPaysafePayload.d.ts +72 -72
  44. package/dist/Interfaces/Cart/IPaysafePayload.js +2 -2
  45. package/dist/Interfaces/Cart/IStripePayload.d.ts +66 -66
  46. package/dist/Interfaces/Cart/IStripePayload.js +2 -2
  47. package/dist/Interfaces/Cart/index.d.ts +425 -425
  48. package/dist/Interfaces/Cart/index.js +192 -192
  49. package/dist/Interfaces/Catalogue/index.d.ts +68 -68
  50. package/dist/Interfaces/Catalogue/index.js +37 -37
  51. package/dist/Interfaces/Category/index.d.ts +33 -33
  52. package/dist/Interfaces/Category/index.js +2 -2
  53. package/dist/Interfaces/Chart/index.d.ts +11 -11
  54. package/dist/Interfaces/Chart/index.js +2 -2
  55. package/dist/Interfaces/Class/index.d.ts +8 -8
  56. package/dist/Interfaces/Class/index.js +2 -2
  57. package/dist/Interfaces/Consent/index.d.ts +6 -6
  58. package/dist/Interfaces/Consent/index.js +2 -2
  59. package/dist/Interfaces/Context/IContextProps.d.ts +4 -4
  60. package/dist/Interfaces/Context/IContextProps.js +2 -2
  61. package/dist/Interfaces/Context/IContextState.d.ts +15 -15
  62. package/dist/Interfaces/Context/IContextState.js +2 -2
  63. package/dist/Interfaces/Customer/ICustomerBadge.d.ts +2 -2
  64. package/dist/Interfaces/Customer/ICustomerBadge.js +2 -2
  65. package/dist/Interfaces/Customer/ICustomerRating.d.ts +10 -10
  66. package/dist/Interfaces/Customer/ICustomerRating.js +2 -2
  67. package/dist/Interfaces/Customer/IStoreCredit.d.ts +12 -12
  68. package/dist/Interfaces/Customer/IStoreCredit.js +2 -2
  69. package/dist/Interfaces/Customer/index.d.ts +97 -97
  70. package/dist/Interfaces/Customer/index.js +141 -141
  71. package/dist/Interfaces/Declination/index.d.ts +114 -114
  72. package/dist/Interfaces/Declination/index.js +60 -60
  73. package/dist/Interfaces/Document/index.d.ts +8 -8
  74. package/dist/Interfaces/Document/index.js +2 -2
  75. package/dist/Interfaces/Elastic/index.d.ts +89 -89
  76. package/dist/Interfaces/Elastic/index.js +2 -2
  77. package/dist/Interfaces/Email/CustomGR/I3DPrintEmail.d.ts +11 -11
  78. package/dist/Interfaces/Email/CustomGR/I3DPrintEmail.js +2 -2
  79. package/dist/Interfaces/Email/CustomGR/IBorrowToolsEmail.d.ts +15 -15
  80. package/dist/Interfaces/Email/CustomGR/IBorrowToolsEmail.js +2 -2
  81. package/dist/Interfaces/Email/CustomGR/IPickupMaterialsEmail.d.ts +12 -12
  82. package/dist/Interfaces/Email/CustomGR/IPickupMaterialsEmail.js +2 -2
  83. package/dist/Interfaces/Email/CustomGR/IPreMeetingFormEmail.d.ts +36 -36
  84. package/dist/Interfaces/Email/CustomGR/IPreMeetingFormEmail.js +2 -2
  85. package/dist/Interfaces/Email/CustomGR/ISponsorRequestEmail.d.ts +12 -12
  86. package/dist/Interfaces/Email/CustomGR/ISponsorRequestEmail.js +2 -2
  87. package/dist/Interfaces/Email/CustomGR/ITransportEmail.d.ts +12 -12
  88. package/dist/Interfaces/Email/CustomGR/ITransportEmail.js +2 -2
  89. package/dist/Interfaces/Email/CustomGR/ITransportQuoteEmail.d.ts +12 -12
  90. package/dist/Interfaces/Email/CustomGR/ITransportQuoteEmail.js +2 -2
  91. package/dist/Interfaces/Email/CustomGR/IVegetalsEmail.d.ts +16 -16
  92. package/dist/Interfaces/Email/CustomGR/IVegetalsEmail.js +2 -2
  93. package/dist/Interfaces/Email/CustomGR/IWishlistEmail.d.ts +15 -15
  94. package/dist/Interfaces/Email/CustomGR/IWishlistEmail.js +2 -2
  95. package/dist/Interfaces/Email/IAbandonnedCartEmail.d.ts +29 -29
  96. package/dist/Interfaces/Email/IAbandonnedCartEmail.js +2 -2
  97. package/dist/Interfaces/Email/IAccountConfirmationEmail.d.ts +22 -22
  98. package/dist/Interfaces/Email/IAccountConfirmationEmail.js +2 -2
  99. package/dist/Interfaces/Email/IApplicationEmail.d.ts +19 -19
  100. package/dist/Interfaces/Email/IApplicationEmail.js +2 -2
  101. package/dist/Interfaces/Email/IBackInStockEmail.d.ts +21 -21
  102. package/dist/Interfaces/Email/IBackInStockEmail.js +2 -2
  103. package/dist/Interfaces/Email/IContactEmail.d.ts +20 -20
  104. package/dist/Interfaces/Email/IContactEmail.js +2 -2
  105. package/dist/Interfaces/Email/ICustomerBookingAdminEmail.d.ts +15 -15
  106. package/dist/Interfaces/Email/ICustomerBookingAdminEmail.js +2 -2
  107. package/dist/Interfaces/Email/ICustomerBookingEmail.d.ts +14 -14
  108. package/dist/Interfaces/Email/ICustomerBookingEmail.js +2 -2
  109. package/dist/Interfaces/Email/IEmail.d.ts +20 -20
  110. package/dist/Interfaces/Email/IEmail.js +56 -56
  111. package/dist/Interfaces/Email/IOrderConfirmationEmail.d.ts +47 -47
  112. package/dist/Interfaces/Email/IOrderConfirmationEmail.js +2 -2
  113. package/dist/Interfaces/Email/IPasswordResetEmail.d.ts +17 -17
  114. package/dist/Interfaces/Email/IPasswordResetEmail.js +2 -2
  115. package/dist/Interfaces/Email/IPhotoShootEmail.d.ts +14 -14
  116. package/dist/Interfaces/Email/IPhotoShootEmail.js +2 -2
  117. package/dist/Interfaces/Email/IPickupConfirmation.d.ts +23 -23
  118. package/dist/Interfaces/Email/IPickupConfirmation.js +2 -2
  119. package/dist/Interfaces/Email/IShippingConfirmation.d.ts +23 -23
  120. package/dist/Interfaces/Email/IShippingConfirmation.js +2 -2
  121. package/dist/Interfaces/Email/IWelcomeEmail.d.ts +19 -19
  122. package/dist/Interfaces/Email/IWelcomeEmail.js +2 -2
  123. package/dist/Interfaces/ExportSchema/index.d.ts +7 -7
  124. package/dist/Interfaces/ExportSchema/index.js +2 -2
  125. package/dist/Interfaces/ExternalService/BaseExternalService.d.ts +12 -12
  126. package/dist/Interfaces/ExternalService/BaseExternalService.js +2 -2
  127. package/dist/Interfaces/ExternalService/ExternalProductsService.d.ts +4 -4
  128. package/dist/Interfaces/ExternalService/ExternalProductsService.js +2 -2
  129. package/dist/Interfaces/ExternalService/index.d.ts +9 -9
  130. package/dist/Interfaces/ExternalService/index.js +2 -2
  131. package/dist/Interfaces/FirstOrderTracking/index.d.ts +5 -5
  132. package/dist/Interfaces/FirstOrderTracking/index.js +2 -2
  133. package/dist/Interfaces/G2/index.d.ts +556 -556
  134. package/dist/Interfaces/G2/index.js +36 -36
  135. package/dist/Interfaces/Indexed/Product/IIndexedLastSavedProduct.d.ts +20 -20
  136. package/dist/Interfaces/Indexed/Product/IIndexedLastSavedProduct.js +2 -2
  137. package/dist/Interfaces/Indexed/Product/index.d.ts +97 -97
  138. package/dist/Interfaces/Indexed/Product/index.js +212 -212
  139. package/dist/Interfaces/Inventory/index.d.ts +19 -19
  140. package/dist/Interfaces/Inventory/index.js +8 -8
  141. package/dist/Interfaces/Invoice/index.d.ts +4 -4
  142. package/dist/Interfaces/Invoice/index.js +2 -2
  143. package/dist/Interfaces/MarketplacePublication/MarketplaceOrderData.d.ts +3 -3
  144. package/dist/Interfaces/MarketplacePublication/MarketplaceOrderData.js +2 -2
  145. package/dist/Interfaces/MarketplacePublication/index.d.ts +23 -23
  146. package/dist/Interfaces/MarketplacePublication/index.js +22 -22
  147. package/dist/Interfaces/Menu/index.d.ts +23 -23
  148. package/dist/Interfaces/Menu/index.js +10 -10
  149. package/dist/Interfaces/Note/index.d.ts +10 -10
  150. package/dist/Interfaces/Note/index.js +7 -7
  151. package/dist/Interfaces/Operations/ICreatedBy.d.ts +6 -6
  152. package/dist/Interfaces/Operations/ICreatedBy.js +2 -2
  153. package/dist/Interfaces/Operations/IUpdate.d.ts +5 -5
  154. package/dist/Interfaces/Operations/IUpdate.js +2 -2
  155. package/dist/Interfaces/Order/index.d.ts +4 -4
  156. package/dist/Interfaces/Order/index.js +2 -2
  157. package/dist/Interfaces/Org/IRelUser.d.ts +9 -9
  158. package/dist/Interfaces/Org/IRelUser.js +2 -2
  159. package/dist/Interfaces/Org/index.d.ts +29 -29
  160. package/dist/Interfaces/Org/index.js +12 -12
  161. package/dist/Interfaces/Payment/index.d.ts +13 -13
  162. package/dist/Interfaces/Payment/index.js +2 -2
  163. package/dist/Interfaces/Product/IAttributeFamily.d.ts +6 -6
  164. package/dist/Interfaces/Product/IAttributeFamily.js +2 -2
  165. package/dist/Interfaces/Product/IImportProduct.d.ts +42 -42
  166. package/dist/Interfaces/Product/IImportProduct.js +791 -791
  167. package/dist/Interfaces/Product/IInventoryItem.d.ts +84 -84
  168. package/dist/Interfaces/Product/IInventoryItem.js +36 -36
  169. package/dist/Interfaces/Product/IPricing.d.ts +177 -177
  170. package/dist/Interfaces/Product/IPricing.js +174 -174
  171. package/dist/Interfaces/Product/index.d.ts +127 -127
  172. package/dist/Interfaces/Product/index.js +56 -56
  173. package/dist/Interfaces/ProductAttribute/index.d.ts +11 -11
  174. package/dist/Interfaces/ProductAttribute/index.js +2 -2
  175. package/dist/Interfaces/PromiseToPurchase/BankType.d.ts +41 -41
  176. package/dist/Interfaces/PromiseToPurchase/BankType.js +41 -41
  177. package/dist/Interfaces/PromiseToPurchase/IIndexedBankUsed.d.ts +33 -33
  178. package/dist/Interfaces/PromiseToPurchase/IIndexedBankUsed.js +15 -15
  179. package/dist/Interfaces/PromiseToPurchase/IIndexedCustomerPromiseToPurchase.d.ts +19 -19
  180. package/dist/Interfaces/PromiseToPurchase/IIndexedCustomerPromiseToPurchase.js +2 -2
  181. package/dist/Interfaces/PromiseToPurchase/index.d.ts +50 -50
  182. package/dist/Interfaces/PromiseToPurchase/index.js +13 -13
  183. package/dist/Interfaces/PurchaseOrder/index.d.ts +17 -17
  184. package/dist/Interfaces/PurchaseOrder/index.js +2 -2
  185. package/dist/Interfaces/Query/IBrandQueryOptions.d.ts +11 -11
  186. package/dist/Interfaces/Query/IBrandQueryOptions.js +2 -2
  187. package/dist/Interfaces/Query/ICategoryQueryOptions.d.ts +11 -11
  188. package/dist/Interfaces/Query/ICategoryQueryOptions.js +2 -2
  189. package/dist/Interfaces/Query/IProductQueryOptions.d.ts +16 -16
  190. package/dist/Interfaces/Query/IProductQueryOptions.js +2 -2
  191. package/dist/Interfaces/Quote/index.d.ts +5 -5
  192. package/dist/Interfaces/Quote/index.js +2 -2
  193. package/dist/Interfaces/Refunds/index.d.ts +106 -106
  194. package/dist/Interfaces/Refunds/index.js +2 -2
  195. package/dist/Interfaces/Rules/IDiscountRule.d.ts +137 -137
  196. package/dist/Interfaces/Rules/IDiscountRule.js +95 -95
  197. package/dist/Interfaces/Schedule/index.d.ts +48 -48
  198. package/dist/Interfaces/Schedule/index.js +2 -2
  199. package/dist/Interfaces/Services/IAddServiceResponse.d.ts +4 -4
  200. package/dist/Interfaces/Services/IAddServiceResponse.js +2 -2
  201. package/dist/Interfaces/Services/IService.d.ts +12 -12
  202. package/dist/Interfaces/Services/IService.js +2 -2
  203. package/dist/Interfaces/Services/IServiceSecret.d.ts +8 -8
  204. package/dist/Interfaces/Services/IServiceSecret.js +2 -2
  205. package/dist/Interfaces/Shipping/Shipstation/carriers.d.ts +10 -10
  206. package/dist/Interfaces/Shipping/Shipstation/carriers.js +2 -2
  207. package/dist/Interfaces/Shipping/Shipstation/order.d.ts +227 -227
  208. package/dist/Interfaces/Shipping/Shipstation/order.js +2 -2
  209. package/dist/Interfaces/Shipping/Shipstation/quote.d.ts +31 -31
  210. package/dist/Interfaces/Shipping/Shipstation/quote.js +2 -2
  211. package/dist/Interfaces/Shipping/Shiptime/order.d.ts +54 -54
  212. package/dist/Interfaces/Shipping/Shiptime/order.js +48 -48
  213. package/dist/Interfaces/Shipping/Shiptime/quote.d.ts +111 -111
  214. package/dist/Interfaces/Shipping/Shiptime/quote.js +2 -2
  215. package/dist/Interfaces/Slider/GR.d.ts +114 -114
  216. package/dist/Interfaces/Slider/GR.js +271 -271
  217. package/dist/Interfaces/Slider/index.d.ts +30 -30
  218. package/dist/Interfaces/Slider/index.js +2 -2
  219. package/dist/Interfaces/Space/IExternalService.d.ts +52 -52
  220. package/dist/Interfaces/Space/IExternalService.js +43 -43
  221. package/dist/Interfaces/Space/IMember.d.ts +16 -16
  222. package/dist/Interfaces/Space/IMember.js +9 -9
  223. package/dist/Interfaces/Space/index.d.ts +390 -390
  224. package/dist/Interfaces/Space/index.js +160 -160
  225. package/dist/Interfaces/Specials/gr.d.ts +61 -61
  226. package/dist/Interfaces/Specials/gr.js +2 -2
  227. package/dist/Interfaces/StockNotification/index.d.ts +7 -7
  228. package/dist/Interfaces/StockNotification/index.js +2 -2
  229. package/dist/Interfaces/Store/index.d.ts +62 -62
  230. package/dist/Interfaces/Store/index.js +27 -27
  231. package/dist/Interfaces/Supplier/ICommand.d.ts +11 -11
  232. package/dist/Interfaces/Supplier/ICommand.js +2 -2
  233. package/dist/Interfaces/Supplier/index.d.ts +36 -36
  234. package/dist/Interfaces/Supplier/index.js +24 -24
  235. package/dist/Interfaces/TCG/index.d.ts +110 -110
  236. package/dist/Interfaces/TCG/index.js +27 -27
  237. package/dist/Interfaces/Tag/index.d.ts +18 -18
  238. package/dist/Interfaces/Tag/index.js +2 -2
  239. package/dist/Interfaces/Tax/index.d.ts +13 -13
  240. package/dist/Interfaces/Tax/index.js +2 -2
  241. package/dist/Interfaces/TransferRequest/index.d.ts +103 -103
  242. package/dist/Interfaces/TransferRequest/index.js +43 -43
  243. package/dist/Interfaces/Translation/index.d.ts +8 -8
  244. package/dist/Interfaces/Translation/index.js +5 -5
  245. package/dist/Interfaces/Update/index.d.ts +10 -10
  246. package/dist/Interfaces/Update/index.js +2 -2
  247. package/dist/Interfaces/User/IUser.d.ts +65 -65
  248. package/dist/Interfaces/User/IUser.js +8 -8
  249. package/dist/Interfaces/Version/index.d.ts +11 -11
  250. package/dist/Interfaces/Version/index.js +2 -2
  251. package/dist/Interfaces/Wishlist/index.d.ts +7 -7
  252. package/dist/Interfaces/Wishlist/index.js +2 -2
  253. package/dist/constants/Interfaces/IBaseApi.d.ts +15 -15
  254. package/dist/constants/Interfaces/IBaseApi.js +2 -2
  255. package/dist/constants/Interfaces/IEndpointResult.d.ts +9 -9
  256. package/dist/constants/Interfaces/IEndpointResult.js +2 -2
  257. package/dist/constants/enums.d.ts +6 -6
  258. package/dist/constants/enums.js +10 -10
  259. package/dist/constants/services.d.ts +2 -2
  260. package/dist/constants/services.js +111 -111
  261. package/dist/constants/version.d.ts +2 -2
  262. package/dist/constants/version.js +5 -5
  263. package/dist/index.d.ts +32 -32
  264. package/dist/index.js +242 -242
  265. package/dist/lib/Attribute/index.d.ts +14 -14
  266. package/dist/lib/Attribute/index.js +143 -143
  267. package/dist/lib/BGJob/index.d.ts +9 -9
  268. package/dist/lib/BGJob/index.js +212 -212
  269. package/dist/lib/BackgroundWorker/index.d.ts +34 -34
  270. package/dist/lib/BackgroundWorker/index.js +59 -59
  271. package/dist/lib/Blog/BlogArticle.d.ts +5 -5
  272. package/dist/lib/Blog/BlogArticle.js +10 -10
  273. package/dist/lib/Blog/BlogAuthor.d.ts +5 -5
  274. package/dist/lib/Blog/BlogAuthor.js +10 -10
  275. package/dist/lib/Blog/BlogCategory.d.ts +5 -5
  276. package/dist/lib/Blog/BlogCategory.js +10 -10
  277. package/dist/lib/Blog/BlogKeyword.d.ts +5 -5
  278. package/dist/lib/Blog/BlogKeyword.js +10 -10
  279. package/dist/lib/Booking/index.d.ts +70 -70
  280. package/dist/lib/Booking/index.js +576 -576
  281. package/dist/lib/Brand/index.d.ts +17 -17
  282. package/dist/lib/Brand/index.js +113 -113
  283. package/dist/lib/Cart/index.d.ts +206 -206
  284. package/dist/lib/Cart/index.js +3165 -3165
  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/Queue/index.d.ts +40 -0
  378. package/dist/lib/Queue/index.js +255 -0
  379. package/dist/lib/Queue/index.js.map +1 -0
  380. package/dist/lib/Schedule/index.d.ts +5 -5
  381. package/dist/lib/Schedule/index.js +12 -12
  382. package/dist/lib/Service/Enum/ServiceEnum.d.ts +3 -3
  383. package/dist/lib/Service/Enum/ServiceEnum.js +7 -7
  384. package/dist/lib/Service/index.d.ts +5 -5
  385. package/dist/lib/Service/index.js +13 -13
  386. package/dist/lib/Shipment/index.d.ts +28 -28
  387. package/dist/lib/Shipment/index.js +357 -357
  388. package/dist/lib/Slider/index.d.ts +16 -16
  389. package/dist/lib/Slider/index.js +113 -113
  390. package/dist/lib/Space/index.d.ts +883 -883
  391. package/dist/lib/Space/index.js +5134 -5134
  392. package/dist/lib/StockNotification/index.d.ts +4 -4
  393. package/dist/lib/StockNotification/index.js +6 -6
  394. package/dist/lib/Store/index.d.ts +5 -5
  395. package/dist/lib/Store/index.js +12 -12
  396. package/dist/lib/Supplier/Command.d.ts +5 -5
  397. package/dist/lib/Supplier/Command.js +10 -10
  398. package/dist/lib/Supplier/index.d.ts +25 -25
  399. package/dist/lib/Supplier/index.js +22 -22
  400. package/dist/lib/Tags/index.d.ts +6 -6
  401. package/dist/lib/Tags/index.js +21 -21
  402. package/dist/lib/Tax/index.d.ts +8 -8
  403. package/dist/lib/Tax/index.js +54 -54
  404. package/dist/lib/TransferRequest/index.d.ts +112 -112
  405. package/dist/lib/TransferRequest/index.js +794 -794
  406. package/dist/lib/Update/index.d.ts +10 -10
  407. package/dist/lib/Update/index.js +22 -22
  408. package/dist/lib/User/index.d.ts +35 -35
  409. package/dist/lib/User/index.js +248 -248
  410. package/dist/lib/Wishlist/index.d.ts +5 -5
  411. package/dist/lib/Wishlist/index.js +10 -10
  412. package/dist/lib/base.d.ts +14 -14
  413. package/dist/lib/base.js +62 -62
  414. package/dist/lib/baseService.d.ts +17 -17
  415. package/dist/lib/baseService.js +43 -43
  416. package/dist/rules/GR/constants/data.d.ts +26 -26
  417. package/dist/rules/GR/constants/data.js +55 -55
  418. package/dist/rules/GR/constants/products.d.ts +8 -8
  419. package/dist/rules/GR/constants/products.js +234 -234
  420. package/dist/rules/GR/interfaces/cart.d.ts +84 -84
  421. package/dist/rules/GR/interfaces/cart.js +41 -41
  422. package/dist/rules/GR/interfaces/data.d.ts +97 -97
  423. package/dist/rules/GR/interfaces/data.js +104 -104
  424. package/dist/rules/GR/interfaces/products.d.ts +61 -61
  425. package/dist/rules/GR/interfaces/products.js +10 -10
  426. package/dist/rules/GR/utils/cart.d.ts +53 -53
  427. package/dist/rules/GR/utils/cart.js +637 -637
  428. package/dist/rules/GR/utils/data.d.ts +3 -3
  429. package/dist/rules/GR/utils/data.js +25 -25
  430. package/dist/rules/GR/utils/expedition.d.ts +71 -71
  431. package/dist/rules/GR/utils/expedition.js +1542 -1542
  432. package/dist/rules/GR/utils/g2.d.ts +176 -176
  433. package/dist/rules/GR/utils/g2.js +849 -849
  434. package/dist/rules/GR/utils/invoices.d.ts +24 -24
  435. package/dist/rules/GR/utils/invoices.js +174 -174
  436. package/dist/rules/GR/utils/products.d.ts +104 -104
  437. package/dist/rules/GR/utils/products.js +984 -984
  438. package/dist/rules/GR/utils/upsells.d.ts +79 -79
  439. package/dist/rules/GR/utils/upsells.js +183 -183
  440. package/dist/services/database/BaseProvider.d.ts +29 -29
  441. package/dist/services/database/BaseProvider.js +28 -28
  442. package/dist/services/database/BatchUtils.d.ts +14 -14
  443. package/dist/services/database/BatchUtils.js +43 -43
  444. package/dist/services/database/Config.d.ts +2 -2
  445. package/dist/services/database/Config.js +5 -5
  446. package/dist/services/database/DatabaseService.d.ts +41 -41
  447. package/dist/services/database/DatabaseService.js +152 -152
  448. package/dist/services/database/FirebaseProvider.d.ts +17 -17
  449. package/dist/services/database/FirebaseProvider.js +218 -218
  450. package/dist/services/database/NotFirebaseProvider.d.ts +35 -35
  451. package/dist/services/database/NotFirebaseProvider.js +243 -243
  452. package/dist/services/g2/G2OrderSlip.d.ts +42 -42
  453. package/dist/services/g2/G2OrderSlip.js +210 -210
  454. package/dist/services/g2/utils.d.ts +9 -9
  455. package/dist/services/g2/utils.js +703 -703
  456. package/dist/services/logs/index.d.ts +20 -20
  457. package/dist/services/logs/index.js +61 -61
  458. package/dist/services/products/BaseClass.d.ts +50 -50
  459. package/dist/services/products/BaseClass.js +64 -64
  460. package/dist/services/products/TCGService.d.ts +29 -29
  461. package/dist/services/products/TCGService.js +499 -499
  462. package/dist/services/products/utils.d.ts +9 -9
  463. package/dist/services/products/utils.js +94 -94
  464. package/dist/utils/algolia.d.ts +6 -6
  465. package/dist/utils/algolia.js +21 -21
  466. package/dist/utils/anonymisation.d.ts +30 -30
  467. package/dist/utils/anonymisation.js +250 -250
  468. package/dist/utils/array.d.ts +5 -5
  469. package/dist/utils/array.js +14 -14
  470. package/dist/utils/aws.d.ts +14 -14
  471. package/dist/utils/aws.js +126 -126
  472. package/dist/utils/booking.d.ts +22 -22
  473. package/dist/utils/booking.js +118 -118
  474. package/dist/utils/cart.d.ts +134 -134
  475. package/dist/utils/cart.js +867 -862
  476. package/dist/utils/cart.js.map +1 -1
  477. package/dist/utils/categories.d.ts +2 -2
  478. package/dist/utils/categories.js +54 -54
  479. package/dist/utils/cmv.d.ts +10 -10
  480. package/dist/utils/cmv.js +107 -107
  481. package/dist/utils/console.d.ts +6 -6
  482. package/dist/utils/console.js +59 -59
  483. package/dist/utils/context.d.ts +20 -20
  484. package/dist/utils/context.js +61 -61
  485. package/dist/utils/currency.d.ts +6 -6
  486. package/dist/utils/currency.js +61 -61
  487. package/dist/utils/data.d.ts +31 -31
  488. package/dist/utils/data.js +294 -294
  489. package/dist/utils/date.d.ts +1 -1
  490. package/dist/utils/date.js +16 -16
  491. package/dist/utils/dimensions.d.ts +3 -3
  492. package/dist/utils/dimensions.js +16 -16
  493. package/dist/utils/discount.d.ts +46 -46
  494. package/dist/utils/discount.js +934 -934
  495. package/dist/utils/errors.d.ts +113 -113
  496. package/dist/utils/errors.js +113 -113
  497. package/dist/utils/file-admin.d.ts +8 -8
  498. package/dist/utils/file-admin.js +38 -38
  499. package/dist/utils/file.d.ts +38 -38
  500. package/dist/utils/file.js +200 -200
  501. package/dist/utils/firebase-admin.d.ts +2 -2
  502. package/dist/utils/firebase-admin.js +61 -61
  503. package/dist/utils/firebase.d.ts +41 -41
  504. package/dist/utils/firebase.js +131 -131
  505. package/dist/utils/import.d.ts +1 -1
  506. package/dist/utils/import.js +21 -21
  507. package/dist/utils/inventories.d.ts +49 -49
  508. package/dist/utils/inventories.js +392 -392
  509. package/dist/utils/locale.d.ts +15 -15
  510. package/dist/utils/locale.js +78 -78
  511. package/dist/utils/mailchimp.d.ts +58 -58
  512. package/dist/utils/mailchimp.js +495 -495
  513. package/dist/utils/mathUtils.d.ts +17 -17
  514. package/dist/utils/mathUtils.js +315 -315
  515. package/dist/utils/mongodb.d.ts +1 -1
  516. package/dist/utils/mongodb.js +22 -22
  517. package/dist/utils/object.d.ts +13 -13
  518. package/dist/utils/object.js +115 -115
  519. package/dist/utils/payment.d.ts +10 -10
  520. package/dist/utils/payment.js +23 -23
  521. package/dist/utils/products.d.ts +32 -32
  522. package/dist/utils/products.js +186 -186
  523. package/dist/utils/promiseToPurchase.d.ts +56 -56
  524. package/dist/utils/promiseToPurchase.js +195 -195
  525. package/dist/utils/prosprsearch.d.ts +26 -26
  526. package/dist/utils/prosprsearch.js +182 -182
  527. package/dist/utils/refunds.d.ts +2 -2
  528. package/dist/utils/refunds.js +21 -21
  529. package/dist/utils/sdc.d.ts +10 -10
  530. package/dist/utils/sdc.js +1302 -1302
  531. package/dist/utils/searchIndexes.d.ts +21 -21
  532. package/dist/utils/searchIndexes.js +210 -210
  533. package/dist/utils/services.d.ts +42 -42
  534. package/dist/utils/services.js +409 -409
  535. package/dist/utils/shipment.d.ts +110 -110
  536. package/dist/utils/shipment.js +345 -345
  537. package/dist/utils/simpletexting.d.ts +2 -2
  538. package/dist/utils/simpletexting.js +45 -45
  539. package/dist/utils/sliders.d.ts +4 -4
  540. package/dist/utils/sliders.js +24 -24
  541. package/dist/utils/string.d.ts +16 -16
  542. package/dist/utils/string.js +191 -191
  543. package/dist/utils/tcgService.d.ts +2 -2
  544. package/dist/utils/tcgService.js +8 -8
  545. package/dist/utils/tools.d.ts +1 -1
  546. package/dist/utils/tools.js +9 -9
  547. package/dist/utils/transferRequests.d.ts +19 -19
  548. package/dist/utils/transferRequests.js +43 -43
  549. package/dist/utils/update.d.ts +7 -7
  550. package/dist/utils/update.js +125 -125
  551. package/dist/utils/weight.d.ts +3 -3
  552. package/dist/utils/weight.js +16 -16
  553. package/dist/utils/zones.d.ts +11 -11
  554. package/dist/utils/zones.js +218 -218
  555. package/package.json +110 -110
  556. package/publish.sh +143 -143
  557. package/readme.md +182 -182
@@ -1,577 +1,577 @@
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
- const find_1 = __importDefault(require("lodash/find"));
18
- const round_1 = __importDefault(require("lodash/round"));
19
- const toNumber_1 = __importDefault(require("lodash/toNumber"));
20
- const Booking_1 = require("../../Interfaces/Booking");
21
- const Cart_1 = require("../../Interfaces/Cart");
22
- const Customer_1 = require("../../Interfaces/Customer");
23
- const IDiscountRule_1 = require("../../Interfaces/Rules/IDiscountRule");
24
- const booking_1 = require("../../utils/booking");
25
- const console_1 = require("../../utils/console");
26
- const data_1 = require("../../utils/data");
27
- const locale_1 = require("../../utils/locale");
28
- const Cart_2 = __importDefault(require("../Cart"));
29
- const Space_1 = __importDefault(require("../Space"));
30
- const data_2 = require("../../rules/GR/constants/data");
31
- const baseService_1 = require("../baseService");
32
- const DatabaseService_1 = __importDefault(require("../../services/database/DatabaseService"));
33
- const expedition_1 = require("../../rules/GR/utils/expedition");
34
- const object_1 = require("../../utils/object");
35
- class Booking extends baseService_1.BaseServiceClass {
36
- constructor() {
37
- super(...arguments);
38
- this.assignToClient = async ({ clientId, clientRef, overrideExistingClient }, doNotSave) => {
39
- if (!!!clientRef && !!!clientId)
40
- throw new Error(`Can't access client. Please provide id or ref`);
41
- if (!!!overrideExistingClient && !!this._data.to_client)
42
- throw new Error(`Can't override existing client. If you want to, pass 'overrideExistingClient' props to true`);
43
- if (!!clientRef) {
44
- this._data = Object.assign(Object.assign({}, this._data), { to_client: clientRef });
45
- }
46
- if (DatabaseService_1.default.getPathParent(this._collection.path) == '/')
47
- throw new Error(`Can't access parent space collection`);
48
- if (!!clientId) {
49
- const clientToAssign = DatabaseService_1.default.addToPath(DatabaseService_1.default.addToPath(DatabaseService_1.default.getPathParent(this._collection.path), 'customers'), clientId);
50
- this._data = Object.assign(Object.assign({}, this._data), { to_client: clientToAssign });
51
- }
52
- return await this.save(undefined, undefined, !!doNotSave ? false : true);
53
- };
54
- this.assignToUser = async (userRef, save) => {
55
- try {
56
- this._data = Object.assign(Object.assign({}, this._data), { by_user: userRef });
57
- return await this.save(undefined, undefined, save);
58
- }
59
- catch (error) {
60
- (0, console_1.errorMessage)(`Error while assigning user to booking. ${error} - ${JSON.stringify(error)}`);
61
- }
62
- };
63
- this.addOrUpdateItem = async ({ item: { sku, name, price, regPrice, parentSlug, discount, client_discount, units, custom_id }, qty }) => {
64
- if (!!!sku && !!!custom_id)
65
- throw new Error(`Can't find product without SKU`);
66
- if (!!qty && qty <= 0)
67
- throw new Error(`Use 'removeItem'`);
68
- if (!!(0, find_1.default)(this._data.items, (item) => !!item.custom_id ? item.custom_id === custom_id : !!item.item_sku && item.item_sku === sku)) {
69
- this._data = Object.assign(Object.assign({}, this._data), { items: this._data.items.map((_item) => {
70
- if (!!_item.custom_id ? _item.custom_id !== custom_id : _item.item_sku !== sku)
71
- return _item;
72
- (0, console_1.workingMessage)(`Updating item ${!!_item.item_sku ? _item.item_sku : _item.custom_id} with price: ${price} and quantity: ${!!qty ? qty : _item.qty}`);
73
- return Object.assign(Object.assign(Object.assign(Object.assign({}, _item), { item_name: name, item_sku: sku, item_price: price, item_reg_price: regPrice, qty: !!qty ? qty : _item.qty, item_discount: discount, parent_slug: parentSlug }), (!!custom_id ? { custom_id } : {})), (typeof client_discount === 'number' ? { item_client_discount: client_discount } : {}));
74
- }) });
75
- }
76
- else {
77
- this._data = Object.assign(Object.assign({}, this._data), { items: [
78
- ...this._data.items,
79
- Object.assign(Object.assign(Object.assign({ item_name: name, item_price: price, item_sku: sku, qty, parent_slug: parentSlug, item_discount: discount }, (!!custom_id ? { custom_id } : {})), (typeof client_discount === 'number' ? { item_client_discount: client_discount } : {})), { units: units })
80
- ] });
81
- }
82
- this._data = Object.assign(Object.assign({}, this._data), { is_paillis: !!this._data.items.find((item) => data_2.PAILLIS_SKUS.includes(item.item_sku)), shipping_price: !!this._data.items.find((item) => data_2.PAILLIS_DROPSHIP_SKUS.includes(item.item_sku))
83
- ? data_2.bookingFees.shippingFee_paillisDropship
84
- : !!this._data.shipping_price
85
- ? this._data.shipping_price
86
- : !!this._data.is_pickup
87
- ? !!this._data.type && this._data.type === Booking_1.BookingTypeEnum.BETON
88
- ? data_2.bookingFees.preparationFee_beton
89
- : data_2.bookingFees.preparationFee_accessoires
90
- : !!this._data.type && this._data.type === Booking_1.BookingTypeEnum.BETON
91
- ? data_2.bookingFees.shippingFee_beton
92
- : data_2.bookingFees.shippingFee_accessoires });
93
- if (!!this._data.type && this._data.type === Booking_1.BookingTypeEnum.BETON) {
94
- this.recalculatePalletFee();
95
- }
96
- return await this.save();
97
- };
98
- this.removeItem = async ({ item: { sku, custom_id } }) => {
99
- if (!!!sku && !!!custom_id)
100
- throw new Error(`Can't find product without SKU`);
101
- if (!!!this._data.items.length)
102
- return true;
103
- const index = this._data.items.findIndex((i) => !!i.custom_id && custom_id ? i.custom_id === custom_id : !!sku ? i.item_sku === sku : false);
104
- if (index === -1)
105
- return true;
106
- this._data = Object.assign(Object.assign({}, this._data), { items: [...this._data.items.slice(0, index), ...this._data.items.slice(index + 1)] });
107
- const isBeton = this._data.type === Booking_1.BookingTypeEnum.BETON;
108
- const hasDropShipItems = this._data.items.find((item) => data_2.PAILLIS_DROPSHIP_SKUS.includes(item.item_sku));
109
- this._data = Object.assign(Object.assign({}, this._data), (!!sku
110
- ? {
111
- is_paillis: !!this._data.items.find((item) => data_2.PAILLIS_SKUS.includes(item.item_sku)),
112
- shipping_price: !!hasDropShipItems
113
- ? data_2.bookingFees.shippingFee_paillisDropship
114
- : !!this._data.is_pickup
115
- ? !!isBeton
116
- ? data_2.bookingFees.preparationFee_beton
117
- : data_2.bookingFees.preparationFee_accessoires
118
- : !!isBeton
119
- ? data_2.bookingFees.shippingFee_beton
120
- : data_2.bookingFees.shippingFee_accessoires
121
- }
122
- : {}));
123
- if (!!this._data.type && this._data.type === Booking_1.BookingTypeEnum.BETON) {
124
- this.recalculatePalletFee();
125
- }
126
- return await this.save();
127
- };
128
- this.recalculatePalletFee = () => {
129
- const totalPallets = (0, booking_1.getTotalPalletQty)(this._data.items);
130
- this._data = Object.assign(Object.assign({}, this._data), { palettes_qty: totalPallets });
131
- };
132
- this.setToBeApproved = async (priceList, fees) => {
133
- this._data = Object.assign(Object.assign({}, this._data), { status: Booking_1.BookingStatusEnum.APPROVING });
134
- try {
135
- const space = await Space_1.default.getCurrentSpaceWithRef(this._collection.path, this._user);
136
- try {
137
- const cartQuery = await space.carts.get({
138
- query: [{ field: 'is_booking', operator: '==', value: this._data.id }]
139
- });
140
- if (!!cartQuery && cartQuery.length) {
141
- (0, console_1.errorMessage)(`Cart already exists for booking. Returning.`);
142
- return 'cart-exists';
143
- }
144
- }
145
- catch (e) {
146
- console.log('error on checking if cart exists for booking: ', e.toString());
147
- }
148
- return await this.createOrder({ priceList, fees, space });
149
- }
150
- catch (error) {
151
- (0, console_1.errorMessage)(`Error while creating order from booking, reverting to booking. ${error} ${JSON.stringify(error)}`);
152
- this._data = Object.assign(Object.assign({}, this._data), { status: Booking_1.BookingStatusEnum.BOOKING });
153
- await this.save();
154
- return 'error-on-creating-order';
155
- }
156
- };
157
- this.approve = async () => {
158
- var _a;
159
- if (!!!this._data.order)
160
- throw new Error(`Can't find relative order.`);
161
- this._data = Object.assign(Object.assign({}, this._data), { status: Booking_1.BookingStatusEnum.APPROVED });
162
- try {
163
- if (DatabaseService_1.default.getPathParent(this._collection.path) == '/')
164
- throw new Error(`can't access parent space`);
165
- const space = await Space_1.default.getCurrentSpaceWithRef(this._collection.path, this._user);
166
- const cartSnap = await DatabaseService_1.default.getDocumentByPath(this._data.order);
167
- const data = cartSnap.data;
168
- if (!!!data)
169
- throw new Error('data is undefined for fetched cart');
170
- const newCartData = Object.assign(Object.assign({}, data), { billing_info: Object.assign(Object.assign({}, data.billing_info), (!!data.billing_address
171
- ? { expedition_recipient_phone: (0, data_1.formatPhoneNumberDB)(data.billing_address.expedition_recipient_phone) }
172
- : {})), shipping_info: Object.assign(Object.assign({}, data.shipping_info), (!!data.shipping_address
173
- ? { expedition_recipient_phone: (0, data_1.formatPhoneNumberDB)(data.shipping_address.expedition_recipient_phone) }
174
- : {})), shipping_payload: Object.assign(Object.assign({}, ((_a = data.shipping_payload) !== null && _a !== void 0 ? _a : {})), { delivery_or_pickup_date: !!this._data.is_pickup
175
- ? this._data.pickup_date
176
- : this._data.shipping_date, delivery_notes: !!this._data.notes ? this._data.notes : '', totalPallet: this._data.palettes_qty, isOutOfArea: !!this._data.isBookingOutOfZone, orderOrProjectNumber: this._data.project_identifiant, contact_infos: {
177
- contact_firstname: this._data.contact_firstname,
178
- contact_name: this._data.contact_name,
179
- contact_phone: this._data.contact_phone,
180
- contact_email: this._data.contact_firstname
181
- } }) });
182
- if (!!newCartData.ref && !Object.keys((0, object_1.difference)(data, newCartData)).length) {
183
- console.log('Cart has ref and already contains all updated data, was button clicked twice??');
184
- }
185
- const cartObj = new Cart_2.default(newCartData, {
186
- path: DatabaseService_1.default.addToPath(DatabaseService_1.default.getPathParent(this._collection.path), 'carts')
187
- }, this._user);
188
- await cartObj.processPOSPayment({
189
- cartTotal: cartObj.data().total,
190
- charge_credit: true
191
- }, cartObj, space);
192
- return await this.save();
193
- }
194
- catch (error) {
195
- (0, console_1.errorMessage)(`Error while approving order from booking, reverting to booking. ${error} ${JSON.stringify(error)}`);
196
- this._data = Object.assign(Object.assign({}, this._data), { status: Booking_1.BookingStatusEnum.APPROVING });
197
- await this.save();
198
- }
199
- };
200
- this.newRefuse = async () => {
201
- if (typeof this._data.order == 'string') {
202
- await DatabaseService_1.default.deleteDocumentByPath(this._data.order);
203
- }
204
- else {
205
- await DatabaseService_1.default.deleteDocumentByPath(this._data.order.path);
206
- }
207
- this._data = Object.assign(Object.assign({}, this._data), { status: Booking_1.BookingStatusEnum.REFUSED, order: false });
208
- return await this.save();
209
- };
210
- this.refuse = async () => {
211
- if (typeof this._data.order == 'string') {
212
- await DatabaseService_1.default.deleteDocumentByPath(this._data.order);
213
- }
214
- else {
215
- await DatabaseService_1.default.deleteDocumentByPath(this._data.order.path);
216
- }
217
- this._data = Object.assign(Object.assign({}, this._data), { status: Booking_1.BookingStatusEnum.BOOKING, order: false });
218
- return await this.save();
219
- };
220
- this.reOpen = async () => {
221
- if (typeof this._data.order == 'string') {
222
- await DatabaseService_1.default.deleteDocumentByPath(this._data.order);
223
- }
224
- else {
225
- await DatabaseService_1.default.deleteDocumentByPath(this._data.order.path);
226
- }
227
- this._data = Object.assign(Object.assign({}, this._data), { status: Booking_1.BookingStatusEnum.BOOKING, order: false });
228
- return await this.save();
229
- };
230
- this.cancel = async () => {
231
- const previous = this._data.status;
232
- this._data = Object.assign(Object.assign({}, this._data), { status: Booking_1.BookingStatusEnum.CANCELLED });
233
- try {
234
- if (!!this._data.order) {
235
- return await this.deleteOrder();
236
- }
237
- await this.save();
238
- }
239
- catch (error) {
240
- (0, console_1.errorMessage)(`Error while deleting order from booking, reverting to previous state. ${error} ${JSON.stringify(error)}`);
241
- this._data = Object.assign(Object.assign({}, this._data), { status: previous });
242
- await this.save();
243
- }
244
- };
245
- this.setIsDone = async () => {
246
- this._data = Object.assign(Object.assign({}, this._data), { status: Booking_1.BookingStatusEnum.DONE });
247
- return await this.save();
248
- };
249
- this.calculateRegularPriceForItem = (item) => {
250
- if (typeof item.item_reg_price == 'number')
251
- return item.item_reg_price;
252
- const clientDiscount = (0, toNumber_1.default)(item.item_client_discount || 0);
253
- const extraDiscount = (0, toNumber_1.default)(item.item_discount || 0);
254
- const firstSubtotal = !!extraDiscount && extraDiscount !== 100
255
- ? (0, toNumber_1.default)((item.item_price * 100) / (100 - extraDiscount))
256
- : item.item_price;
257
- const secondSubtotal = !!clientDiscount && clientDiscount !== 100
258
- ? (0, toNumber_1.default)((firstSubtotal * 100) / (100 - clientDiscount))
259
- : firstSubtotal;
260
- return (0, round_1.default)(secondSubtotal, 2);
261
- };
262
- this.calculateShippingFeeQte = (dataToCheck) => {
263
- const data = dataToCheck || this.data();
264
- const bookingType = data.type || Booking_1.BookingTypeEnum.ACCESSOIRES;
265
- if (bookingType == Booking_1.BookingTypeEnum.ACCESSOIRES)
266
- return 1;
267
- const pallets = Math.ceil(data.palettes_qty || 0);
268
- return Math.ceil(pallets / (expedition_1.expeditionFeePalletTier !== null && expedition_1.expeditionFeePalletTier !== void 0 ? expedition_1.expeditionFeePalletTier : 1));
269
- };
270
- this.calculateShippingAmount = (dataToCheck, useDiscountAmount) => {
271
- const data = dataToCheck || this.data();
272
- const bookingType = data.type || Booking_1.BookingTypeEnum.ACCESSOIRES;
273
- let currentShippingAmount = data.shipping_price || 0;
274
- if (!!useDiscountAmount)
275
- currentShippingAmount = this.calculateShippingWithDiscount();
276
- if (bookingType == Booking_1.BookingTypeEnum.ACCESSOIRES)
277
- return currentShippingAmount;
278
- const feeQty = this.calculateShippingFeeQte(dataToCheck);
279
- if (feeQty == 0)
280
- return currentShippingAmount;
281
- return feeQty * currentShippingAmount;
282
- };
283
- this.createOrder = async ({ space, sendMail, priceList, fees = {} }) => {
284
- var _a, _b, _c;
285
- if (process.env.IS_TEST_ENV)
286
- console.log('sendMail, are you set somewhere?', sendMail);
287
- if (DatabaseService_1.default.getPathParent(this._collection.path) == '/')
288
- throw new Error(`Can't access parent space collection`);
289
- const customer = (await DatabaseService_1.default.getDocumentByPath(this.data().to_client)).data;
290
- const type = !!this.data().type ? this.data().type : undefined;
291
- let pallet;
292
- let extraFeeOutOfZone;
293
- let shippingProd;
294
- let preparationFee;
295
- let extraFeeAfterDate;
296
- try {
297
- pallet = !!fees.pallet ? fees.pallet : await (0, booking_1.getPalletFee)(space, priceList);
298
- if (!!fees.extraFeeOutOfZone && !!fees.extraFeeAfterDate) {
299
- extraFeeOutOfZone = fees.extraFeeOutOfZone;
300
- extraFeeAfterDate = fees.extraFeeAfterDate;
301
- }
302
- else {
303
- const { pastDateFee, outOfZoneFee } = await (0, booking_1.getAllBookingExtraFees)(space, priceList);
304
- extraFeeOutOfZone = outOfZoneFee;
305
- extraFeeAfterDate = pastDateFee;
306
- }
307
- if (this.data().type === Booking_1.BookingTypeEnum.BETON) {
308
- shippingProd = (_a = fees.shippingProd) !== null && _a !== void 0 ? _a : (await (0, booking_1.getBetonShippingFee)(space, priceList));
309
- preparationFee = (_b = fees.preparationFee) !== null && _b !== void 0 ? _b : (await (0, booking_1.getBetonPreparationFee)(space, priceList));
310
- }
311
- }
312
- catch (_error) { }
313
- const order = new Cart_2.default({
314
- items: [
315
- ...(await Promise.all(this._data.items.map(async (item) => {
316
- try {
317
- const parent = !!item.custom_id
318
- ? undefined
319
- : (await space.cartItem.get({
320
- query: [
321
- {
322
- field: 'slug',
323
- operator: 'in',
324
- value: [item.parent_slug.toLowerCase(), item.parent_slug]
325
- }
326
- ]
327
- }))[0];
328
- const declination = !!item.custom_id
329
- ? undefined
330
- : parent.declinations.find((declination) => !![item.item_sku.toLowerCase().trim(), item.item_sku.toUpperCase().trim()].includes(declination.sku));
331
- const getDeclinationPrice = () => {
332
- let newPrice = {};
333
- if (typeof item.item_discount == 'number' || typeof item.item_client_discount == 'number') {
334
- newPrice = {
335
- regular_price: {
336
- currency: 'CAD',
337
- amount: this.calculateRegularPriceForItem(item)
338
- },
339
- discount_price: {
340
- currency: 'CAD',
341
- amount: item.item_price
342
- }
343
- };
344
- }
345
- else {
346
- newPrice = {
347
- regular_price: {
348
- amount: item.item_price,
349
- currency: 'CAD'
350
- },
351
- discount_price: null
352
- };
353
- }
354
- return newPrice;
355
- };
356
- if (!!!declination) {
357
- if (!!!item.custom_id)
358
- return undefined;
359
- return Object.assign(Object.assign(Object.assign(Object.assign({}, (0, Cart_1.getDefaultCartItem)()), { is_temp_prod: true, sku: item.item_sku, parent_name: (0, locale_1.getLanguageDictFromString)('TEMP', space.preferences.languages()), name: (0, locale_1.getLanguageDictFromString)(item.item_name, space.preferences.languages()), qte: item.qty, parent_slug: item.parent_slug, images_path: [] }), (!!parent ? { categories: parent.categories } : {})), getDeclinationPrice());
360
- }
361
- const { tier_pricing } = declination, rest = __rest(declination, ["tier_pricing"]);
362
- return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, rest), { qte: item.qty, images_path: [
363
- ...(!!parent.image_files[0]
364
- ? [parent.image_files[0]]
365
- : []),
366
- ...(declination || { images_path: [] }).images_path
367
- ], parent_slug: item.parent_slug }), (!!parent ? { categories: parent.categories } : {})), getDeclinationPrice()), (!!item.units ? { other_units: item.units } : {}));
368
- }
369
- catch (error) {
370
- if (process.env.NODE_ENV !== 'production')
371
- return undefined;
372
- }
373
- }))).filter((i) => !!i),
374
- ...(!!this._data.extra_zone_fee && !!extraFeeOutOfZone
375
- ? [
376
- Object.assign(Object.assign({}, extraFeeOutOfZone), { is_service: true, qte: 1, parent_slug: 'frais-supplementaires-booking', is_upsell_of_sku: 'summary' })
377
- ]
378
- : []),
379
- ...(!!type &&
380
- type === Booking_1.BookingTypeEnum.ACCESSOIRES &&
381
- !!this._data.extra_fee_if_after_date &&
382
- !!extraFeeAfterDate
383
- ? [
384
- Object.assign(Object.assign({}, extraFeeAfterDate), { is_service: true, qte: 1, parent_slug: 'frais-supplementaires-booking', is_upsell_of_sku: 'summary' })
385
- ]
386
- : []),
387
- ...(!!type && type === Booking_1.BookingTypeEnum.BETON && !!preparationFee
388
- ? [
389
- Object.assign(Object.assign({}, preparationFee), { is_service: true, qte: 1, parent_slug: 'frais-preparation-general-beton', is_upsell_of_sku: 'summary' })
390
- ]
391
- : []),
392
- ...(!!this.data().shipping_price && !!shippingProd
393
- ? [
394
- Object.assign(Object.assign({}, shippingProd), { is_service: true, qte: this.calculateShippingFeeQte(), name: [
395
- { lang: 'fr', value: 'Frais de livraison' },
396
- { lang: 'en', value: 'Shipping fees' }
397
- ], regular_price: Object.assign(Object.assign({}, shippingProd.regular_price), { amount: this.calculateShippingWithDiscount() }), parent_slug: 'livraison-beton-accessoires', is_upsell_of_sku: 'summary' })
398
- ]
399
- : []),
400
- ...(!!this.data().palettes_qty && !!pallet
401
- ? [
402
- Object.assign(Object.assign({}, pallet), { is_service: true, parent_slug: 'frais-palette', qte: this.data().palettes_qty, regular_price: Object.assign(Object.assign({}, pallet.regular_price), { amount: !!this.data().type && this.data().type === Booking_1.BookingTypeEnum.ACCESSOIRES
403
- ? data_2.bookingFees.palletFee_accessoires
404
- : data_2.bookingFees.palletFee_beton }), is_upsell_of_sku: 'summary' })
405
- ]
406
- : [])
407
- ],
408
- customer_info: (0, data_1.getProCustomerInfo)(customer.basic_info, customer.company_info),
409
- customer_id: customer.id,
410
- billing_address: !!this.data().billing_info
411
- ? this.data().billing_info
412
- : customer.expedition_info.find((e) => !!e.is_default && !!e.is_default.includes(Customer_1.defaultExpeditionOptionsEnum.BILLING)) || customer.expedition_info[0],
413
- shipping_address: Object.assign(Object.assign({}, (!!this.data().shipping_info
414
- ? this.data().shipping_info
415
- : customer.expedition_info.find((e) => !!e.is_default && !!e.is_default.includes(Customer_1.defaultExpeditionOptionsEnum.SHIPPING)) || customer.expedition_info[0])), { expedition_recipient_name: !!this.data().contact_firstname && !!this.data().contact_name
416
- ? `${this.data().contact_firstname} ${this.data().contact_name}`
417
- : !!this.data().shipping_info
418
- ? this.data().shipping_info.expedition_recipient_name || ''
419
- : (customer.expedition_info.find((e) => !!e.is_default && !!e.is_default.includes(Customer_1.defaultExpeditionOptionsEnum.SHIPPING)) || customer.expedition_info[0]).expedition_recipient_name, expedition_recipient_phone: !!this.data().contact_phone
420
- ? this.data().contact_phone
421
- : !!this.data().shipping_info
422
- ? this.data().shipping_info.expedition_recipient_phone || ''
423
- : (customer.expedition_info.find((e) => !!e.is_default && !!e.is_default.includes(Customer_1.defaultExpeditionOptionsEnum.SHIPPING)) || customer.expedition_info[0]).expedition_recipient_phone }),
424
- user_email: !!this.data().contact_email
425
- ? this.data().contact_email
426
- : customer.basic_info.customer_email,
427
- status: !!this.data().is_pickup
428
- ? Cart_1.CartStatusEnum.CHECKOUT_PICKUP
429
- : Cart_1.CartStatusEnum.CHECKOUT_SHIPPING,
430
- boxes: [],
431
- cart_type: 'web',
432
- discount_rules: [
433
- Object.assign(Object.assign({}, (0, IDiscountRule_1.getDefaultDiscountRule)('promotion')), { name: [
434
- { lang: 'fr', value: `Escompte sur booking` },
435
- { lang: 'en', value: `Promo on booking` }
436
- ], appliesTo: {
437
- value: 'cart'
438
- }, result: {
439
- action: IDiscountRule_1.ResultActionEnum.PERCENT_AFTER_TAXES,
440
- action_value: this.data().type === Booking_1.BookingTypeEnum.BETON
441
- ? data_2.paidOnReceptionPromoPercent.beton
442
- : data_2.paidOnReceptionPromoPercent.accessoires,
443
- exclude_services_and_fees: true
444
- }, rules: [
445
- {
446
- field: IDiscountRule_1.RuleFieldEnum.PAYMENT_METHOD,
447
- ruleDetails: [
448
- {
449
- operator: 'contains',
450
- value: [Cart_1.PaymentTypeEnum.CREDIT, Cart_1.PaymentTypeEnum.ONEXPEDITION, Cart_1.PaymentTypeEnum.INTERACTRANSFER],
451
- condition: IDiscountRule_1.RuleConditionEnum.OR
452
- }
453
- ],
454
- condition: IDiscountRule_1.RuleConditionEnum.AND
455
- },
456
- {
457
- field: IDiscountRule_1.RuleFieldEnum.CART_TYPE,
458
- ruleDetails: [{ operator: '==', value: ['booking'], condition: IDiscountRule_1.RuleConditionEnum.AND }],
459
- condition: IDiscountRule_1.RuleConditionEnum.AND
460
- },
461
- {
462
- field: IDiscountRule_1.RuleFieldEnum.CUSTOMER_TERMS_CODE,
463
- ruleDetails: [{ operator: '==', value: ['NET30'], condition: IDiscountRule_1.RuleConditionEnum.AND }],
464
- condition: IDiscountRule_1.RuleConditionEnum.AND
465
- }
466
- ] })
467
- ],
468
- locale: 'fr',
469
- shipping: !!shippingProd ? 0 : this.calculateShippingWithDiscount(),
470
- shipping_message: '',
471
- subtotal: 0,
472
- taxes: [],
473
- total: 0,
474
- is_pickup: !!this.data().is_pickup,
475
- is_booking: this.data().id || false,
476
- is_booking_beton: this.data().type === Booking_1.BookingTypeEnum.BETON,
477
- shipping_payload: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ delivery_or_pickup_date: !!this._data.is_pickup
478
- ? this._data.pickup_date
479
- : this._data.shipping_date }, (!!!this._data.is_pickup ? { delivery_period: 'AM' } : {})), (!!this._data.is_pickup
480
- ? {
481
- pickup_store: space.data().stores_warehouses.find((sw) => sw.id === this._data.pickup_id)
482
- }
483
- : {})), { delivery_notes: !!this._data.notes ? this._data.notes : '', totalPallet: this._data.palettes_qty, isOutOfArea: !!this._data.isBookingOutOfZone, orderOrProjectNumber: this._data.project_identifiant }), (!!this._data.delivery_on_site ? { onSiteDelivery: true } : {})), { contact_infos: {
484
- contact_firstname: this._data.contact_firstname,
485
- contact_name: this._data.contact_name,
486
- contact_phone: this._data.contact_phone,
487
- contact_email: this._data.contact_firstname
488
- } }), (!!this._data.payment_on_reception && !!this._data.payment_on_reception_percent
489
- ? { chosen_payment: Cart_1.PaymentTypeEnum.ONEXPEDITION }
490
- : {}))
491
- }, {
492
- path: DatabaseService_1.default.addToPath(DatabaseService_1.default.getPathParent(this._collection.path), 'carts')
493
- }, this._user);
494
- await order.postConstruct(undefined, true, { skipDiscountRules: true, skipTierPricing: true });
495
- this._data = Object.assign(Object.assign({}, this._data), { order: DatabaseService_1.default.addToPath(DatabaseService_1.default.addToPath(DatabaseService_1.default.getPathParent(this._collection.path), 'carts'), (_c = order.data().id) !== null && _c !== void 0 ? _c : '') });
496
- return await this.save();
497
- };
498
- this.delete = async () => {
499
- await this.deleteOrder();
500
- return await super.delete();
501
- };
502
- this.deleteOrder = async () => {
503
- if (!!!this._data.order)
504
- return;
505
- if (typeof this._data.order == 'string') {
506
- await DatabaseService_1.default.deleteDocumentByPath(this._data.order);
507
- }
508
- else {
509
- await DatabaseService_1.default.deleteDocumentByPath(this._data.order.path);
510
- }
511
- this._data = Object.assign(Object.assign({}, this._data), { order: undefined });
512
- return await this.save();
513
- };
514
- this.setIsFromWeb = async (isFromWeb = true, saveToDatabase = true) => {
515
- this._data = Object.assign(Object.assign({}, this._data), { is_from_web: isFromWeb });
516
- return await this.save(undefined, undefined, saveToDatabase);
517
- };
518
- this.setType = async (type) => {
519
- this._data = Object.assign(Object.assign({}, this._data), { is_pickup: type === 'pickup' });
520
- return await this.save();
521
- };
522
- this.setNotes = async (notes) => {
523
- this._data = Object.assign(Object.assign({}, this._data), { notes: notes });
524
- return await this.save();
525
- };
526
- this.setPalettesQty = async (palettes_qty) => {
527
- this._data = Object.assign(Object.assign({}, this._data), { palettes_qty });
528
- return this.save();
529
- };
530
- this.setShippingPrice = async (shipping_price) => {
531
- this._data = Object.assign(Object.assign({}, this._data), { shipping_price });
532
- return this.save();
533
- };
534
- this.setShippingAddress = async (address, save = false) => {
535
- this._data = Object.assign(Object.assign({}, this._data), { shipping_info: address });
536
- await this.save(undefined, undefined, save);
537
- };
538
- this.setBillingAddress = async (address, save = false) => {
539
- this._data = Object.assign(Object.assign({}, this._data), { billing_info: address });
540
- await this.save(undefined, undefined, save);
541
- };
542
- this.addDiscount = async (discount, isPercent) => {
543
- this._data = Object.assign(Object.assign({}, this._data), { discount_percent: !!isPercent ? discount : undefined, discount_price: !!!isPercent ? discount : undefined });
544
- await this.save();
545
- };
546
- this.setPaymentOnReception = async (paymentOnReception, percent) => {
547
- this._data = Object.assign(Object.assign({}, this._data), { payment_on_reception: paymentOnReception, payment_on_reception_percent: percent });
548
- await this.save();
549
- };
550
- this.setContactInfo = async (contactInfo, dataToUse, saveToObj = true) => {
551
- this._data = Object.assign(Object.assign({}, (!!dataToUse ? dataToUse : this._data)), contactInfo);
552
- if (!!saveToObj) {
553
- await this.save();
554
- }
555
- return this._data;
556
- };
557
- this.setShippingPromo = async (values) => {
558
- this._data = Object.assign(Object.assign({}, this._data), { shipping_discount: values });
559
- await this.save();
560
- };
561
- this.calculateShippingWithDiscount = () => {
562
- let shippingPrice = this._data.shipping_price;
563
- if (!this._data.is_pickup) {
564
- const currentDiscount = this._data.shipping_discount;
565
- if (!!currentDiscount) {
566
- if (!!currentDiscount.amount)
567
- shippingPrice = currentDiscount.amount;
568
- if (!!currentDiscount.percent)
569
- shippingPrice = shippingPrice - shippingPrice * (currentDiscount.percent / 100);
570
- }
571
- }
572
- return shippingPrice;
573
- };
574
- }
575
- }
576
- exports.default = Booking;
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
+ const find_1 = __importDefault(require("lodash/find"));
18
+ const round_1 = __importDefault(require("lodash/round"));
19
+ const toNumber_1 = __importDefault(require("lodash/toNumber"));
20
+ const Booking_1 = require("../../Interfaces/Booking");
21
+ const Cart_1 = require("../../Interfaces/Cart");
22
+ const Customer_1 = require("../../Interfaces/Customer");
23
+ const IDiscountRule_1 = require("../../Interfaces/Rules/IDiscountRule");
24
+ const booking_1 = require("../../utils/booking");
25
+ const console_1 = require("../../utils/console");
26
+ const data_1 = require("../../utils/data");
27
+ const locale_1 = require("../../utils/locale");
28
+ const Cart_2 = __importDefault(require("../Cart"));
29
+ const Space_1 = __importDefault(require("../Space"));
30
+ const data_2 = require("../../rules/GR/constants/data");
31
+ const baseService_1 = require("../baseService");
32
+ const DatabaseService_1 = __importDefault(require("../../services/database/DatabaseService"));
33
+ const expedition_1 = require("../../rules/GR/utils/expedition");
34
+ const object_1 = require("../../utils/object");
35
+ class Booking extends baseService_1.BaseServiceClass {
36
+ constructor() {
37
+ super(...arguments);
38
+ this.assignToClient = async ({ clientId, clientRef, overrideExistingClient }, doNotSave) => {
39
+ if (!!!clientRef && !!!clientId)
40
+ throw new Error(`Can't access client. Please provide id or ref`);
41
+ if (!!!overrideExistingClient && !!this._data.to_client)
42
+ throw new Error(`Can't override existing client. If you want to, pass 'overrideExistingClient' props to true`);
43
+ if (!!clientRef) {
44
+ this._data = Object.assign(Object.assign({}, this._data), { to_client: clientRef });
45
+ }
46
+ if (DatabaseService_1.default.getPathParent(this._collection.path) == '/')
47
+ throw new Error(`Can't access parent space collection`);
48
+ if (!!clientId) {
49
+ const clientToAssign = DatabaseService_1.default.addToPath(DatabaseService_1.default.addToPath(DatabaseService_1.default.getPathParent(this._collection.path), 'customers'), clientId);
50
+ this._data = Object.assign(Object.assign({}, this._data), { to_client: clientToAssign });
51
+ }
52
+ return await this.save(undefined, undefined, !!doNotSave ? false : true);
53
+ };
54
+ this.assignToUser = async (userRef, save) => {
55
+ try {
56
+ this._data = Object.assign(Object.assign({}, this._data), { by_user: userRef });
57
+ return await this.save(undefined, undefined, save);
58
+ }
59
+ catch (error) {
60
+ (0, console_1.errorMessage)(`Error while assigning user to booking. ${error} - ${JSON.stringify(error)}`);
61
+ }
62
+ };
63
+ this.addOrUpdateItem = async ({ item: { sku, name, price, regPrice, parentSlug, discount, client_discount, units, custom_id }, qty }) => {
64
+ if (!!!sku && !!!custom_id)
65
+ throw new Error(`Can't find product without SKU`);
66
+ if (!!qty && qty <= 0)
67
+ throw new Error(`Use 'removeItem'`);
68
+ if (!!(0, find_1.default)(this._data.items, (item) => !!item.custom_id ? item.custom_id === custom_id : !!item.item_sku && item.item_sku === sku)) {
69
+ this._data = Object.assign(Object.assign({}, this._data), { items: this._data.items.map((_item) => {
70
+ if (!!_item.custom_id ? _item.custom_id !== custom_id : _item.item_sku !== sku)
71
+ return _item;
72
+ (0, console_1.workingMessage)(`Updating item ${!!_item.item_sku ? _item.item_sku : _item.custom_id} with price: ${price} and quantity: ${!!qty ? qty : _item.qty}`);
73
+ return Object.assign(Object.assign(Object.assign(Object.assign({}, _item), { item_name: name, item_sku: sku, item_price: price, item_reg_price: regPrice, qty: !!qty ? qty : _item.qty, item_discount: discount, parent_slug: parentSlug }), (!!custom_id ? { custom_id } : {})), (typeof client_discount === 'number' ? { item_client_discount: client_discount } : {}));
74
+ }) });
75
+ }
76
+ else {
77
+ this._data = Object.assign(Object.assign({}, this._data), { items: [
78
+ ...this._data.items,
79
+ Object.assign(Object.assign(Object.assign({ item_name: name, item_price: price, item_sku: sku, qty, parent_slug: parentSlug, item_discount: discount }, (!!custom_id ? { custom_id } : {})), (typeof client_discount === 'number' ? { item_client_discount: client_discount } : {})), { units: units })
80
+ ] });
81
+ }
82
+ this._data = Object.assign(Object.assign({}, this._data), { is_paillis: !!this._data.items.find((item) => data_2.PAILLIS_SKUS.includes(item.item_sku)), shipping_price: !!this._data.items.find((item) => data_2.PAILLIS_DROPSHIP_SKUS.includes(item.item_sku))
83
+ ? data_2.bookingFees.shippingFee_paillisDropship
84
+ : !!this._data.shipping_price
85
+ ? this._data.shipping_price
86
+ : !!this._data.is_pickup
87
+ ? !!this._data.type && this._data.type === Booking_1.BookingTypeEnum.BETON
88
+ ? data_2.bookingFees.preparationFee_beton
89
+ : data_2.bookingFees.preparationFee_accessoires
90
+ : !!this._data.type && this._data.type === Booking_1.BookingTypeEnum.BETON
91
+ ? data_2.bookingFees.shippingFee_beton
92
+ : data_2.bookingFees.shippingFee_accessoires });
93
+ if (!!this._data.type && this._data.type === Booking_1.BookingTypeEnum.BETON) {
94
+ this.recalculatePalletFee();
95
+ }
96
+ return await this.save();
97
+ };
98
+ this.removeItem = async ({ item: { sku, custom_id } }) => {
99
+ if (!!!sku && !!!custom_id)
100
+ throw new Error(`Can't find product without SKU`);
101
+ if (!!!this._data.items.length)
102
+ return true;
103
+ const index = this._data.items.findIndex((i) => !!i.custom_id && custom_id ? i.custom_id === custom_id : !!sku ? i.item_sku === sku : false);
104
+ if (index === -1)
105
+ return true;
106
+ this._data = Object.assign(Object.assign({}, this._data), { items: [...this._data.items.slice(0, index), ...this._data.items.slice(index + 1)] });
107
+ const isBeton = this._data.type === Booking_1.BookingTypeEnum.BETON;
108
+ const hasDropShipItems = this._data.items.find((item) => data_2.PAILLIS_DROPSHIP_SKUS.includes(item.item_sku));
109
+ this._data = Object.assign(Object.assign({}, this._data), (!!sku
110
+ ? {
111
+ is_paillis: !!this._data.items.find((item) => data_2.PAILLIS_SKUS.includes(item.item_sku)),
112
+ shipping_price: !!hasDropShipItems
113
+ ? data_2.bookingFees.shippingFee_paillisDropship
114
+ : !!this._data.is_pickup
115
+ ? !!isBeton
116
+ ? data_2.bookingFees.preparationFee_beton
117
+ : data_2.bookingFees.preparationFee_accessoires
118
+ : !!isBeton
119
+ ? data_2.bookingFees.shippingFee_beton
120
+ : data_2.bookingFees.shippingFee_accessoires
121
+ }
122
+ : {}));
123
+ if (!!this._data.type && this._data.type === Booking_1.BookingTypeEnum.BETON) {
124
+ this.recalculatePalletFee();
125
+ }
126
+ return await this.save();
127
+ };
128
+ this.recalculatePalletFee = () => {
129
+ const totalPallets = (0, booking_1.getTotalPalletQty)(this._data.items);
130
+ this._data = Object.assign(Object.assign({}, this._data), { palettes_qty: totalPallets });
131
+ };
132
+ this.setToBeApproved = async (priceList, fees) => {
133
+ this._data = Object.assign(Object.assign({}, this._data), { status: Booking_1.BookingStatusEnum.APPROVING });
134
+ try {
135
+ const space = await Space_1.default.getCurrentSpaceWithRef(this._collection.path, this._user);
136
+ try {
137
+ const cartQuery = await space.carts.get({
138
+ query: [{ field: 'is_booking', operator: '==', value: this._data.id }]
139
+ });
140
+ if (!!cartQuery && cartQuery.length) {
141
+ (0, console_1.errorMessage)(`Cart already exists for booking. Returning.`);
142
+ return 'cart-exists';
143
+ }
144
+ }
145
+ catch (e) {
146
+ console.log('error on checking if cart exists for booking: ', e.toString());
147
+ }
148
+ return await this.createOrder({ priceList, fees, space });
149
+ }
150
+ catch (error) {
151
+ (0, console_1.errorMessage)(`Error while creating order from booking, reverting to booking. ${error} ${JSON.stringify(error)}`);
152
+ this._data = Object.assign(Object.assign({}, this._data), { status: Booking_1.BookingStatusEnum.BOOKING });
153
+ await this.save();
154
+ return 'error-on-creating-order';
155
+ }
156
+ };
157
+ this.approve = async () => {
158
+ var _a;
159
+ if (!!!this._data.order)
160
+ throw new Error(`Can't find relative order.`);
161
+ this._data = Object.assign(Object.assign({}, this._data), { status: Booking_1.BookingStatusEnum.APPROVED });
162
+ try {
163
+ if (DatabaseService_1.default.getPathParent(this._collection.path) == '/')
164
+ throw new Error(`can't access parent space`);
165
+ const space = await Space_1.default.getCurrentSpaceWithRef(this._collection.path, this._user);
166
+ const cartSnap = await DatabaseService_1.default.getDocumentByPath(this._data.order);
167
+ const data = cartSnap.data;
168
+ if (!!!data)
169
+ throw new Error('data is undefined for fetched cart');
170
+ const newCartData = Object.assign(Object.assign({}, data), { billing_info: Object.assign(Object.assign({}, data.billing_info), (!!data.billing_address
171
+ ? { expedition_recipient_phone: (0, data_1.formatPhoneNumberDB)(data.billing_address.expedition_recipient_phone) }
172
+ : {})), shipping_info: Object.assign(Object.assign({}, data.shipping_info), (!!data.shipping_address
173
+ ? { expedition_recipient_phone: (0, data_1.formatPhoneNumberDB)(data.shipping_address.expedition_recipient_phone) }
174
+ : {})), shipping_payload: Object.assign(Object.assign({}, ((_a = data.shipping_payload) !== null && _a !== void 0 ? _a : {})), { delivery_or_pickup_date: !!this._data.is_pickup
175
+ ? this._data.pickup_date
176
+ : this._data.shipping_date, delivery_notes: !!this._data.notes ? this._data.notes : '', totalPallet: this._data.palettes_qty, isOutOfArea: !!this._data.isBookingOutOfZone, orderOrProjectNumber: this._data.project_identifiant, contact_infos: {
177
+ contact_firstname: this._data.contact_firstname,
178
+ contact_name: this._data.contact_name,
179
+ contact_phone: this._data.contact_phone,
180
+ contact_email: this._data.contact_firstname
181
+ } }) });
182
+ if (!!newCartData.ref && !Object.keys((0, object_1.difference)(data, newCartData)).length) {
183
+ console.log('Cart has ref and already contains all updated data, was button clicked twice??');
184
+ }
185
+ const cartObj = new Cart_2.default(newCartData, {
186
+ path: DatabaseService_1.default.addToPath(DatabaseService_1.default.getPathParent(this._collection.path), 'carts')
187
+ }, this._user);
188
+ await cartObj.processPOSPayment({
189
+ cartTotal: cartObj.data().total,
190
+ charge_credit: true
191
+ }, cartObj, space);
192
+ return await this.save();
193
+ }
194
+ catch (error) {
195
+ (0, console_1.errorMessage)(`Error while approving order from booking, reverting to booking. ${error} ${JSON.stringify(error)}`);
196
+ this._data = Object.assign(Object.assign({}, this._data), { status: Booking_1.BookingStatusEnum.APPROVING });
197
+ await this.save();
198
+ }
199
+ };
200
+ this.newRefuse = async () => {
201
+ if (typeof this._data.order == 'string') {
202
+ await DatabaseService_1.default.deleteDocumentByPath(this._data.order);
203
+ }
204
+ else {
205
+ await DatabaseService_1.default.deleteDocumentByPath(this._data.order.path);
206
+ }
207
+ this._data = Object.assign(Object.assign({}, this._data), { status: Booking_1.BookingStatusEnum.REFUSED, order: false });
208
+ return await this.save();
209
+ };
210
+ this.refuse = async () => {
211
+ if (typeof this._data.order == 'string') {
212
+ await DatabaseService_1.default.deleteDocumentByPath(this._data.order);
213
+ }
214
+ else {
215
+ await DatabaseService_1.default.deleteDocumentByPath(this._data.order.path);
216
+ }
217
+ this._data = Object.assign(Object.assign({}, this._data), { status: Booking_1.BookingStatusEnum.BOOKING, order: false });
218
+ return await this.save();
219
+ };
220
+ this.reOpen = async () => {
221
+ if (typeof this._data.order == 'string') {
222
+ await DatabaseService_1.default.deleteDocumentByPath(this._data.order);
223
+ }
224
+ else {
225
+ await DatabaseService_1.default.deleteDocumentByPath(this._data.order.path);
226
+ }
227
+ this._data = Object.assign(Object.assign({}, this._data), { status: Booking_1.BookingStatusEnum.BOOKING, order: false });
228
+ return await this.save();
229
+ };
230
+ this.cancel = async () => {
231
+ const previous = this._data.status;
232
+ this._data = Object.assign(Object.assign({}, this._data), { status: Booking_1.BookingStatusEnum.CANCELLED });
233
+ try {
234
+ if (!!this._data.order) {
235
+ return await this.deleteOrder();
236
+ }
237
+ await this.save();
238
+ }
239
+ catch (error) {
240
+ (0, console_1.errorMessage)(`Error while deleting order from booking, reverting to previous state. ${error} ${JSON.stringify(error)}`);
241
+ this._data = Object.assign(Object.assign({}, this._data), { status: previous });
242
+ await this.save();
243
+ }
244
+ };
245
+ this.setIsDone = async () => {
246
+ this._data = Object.assign(Object.assign({}, this._data), { status: Booking_1.BookingStatusEnum.DONE });
247
+ return await this.save();
248
+ };
249
+ this.calculateRegularPriceForItem = (item) => {
250
+ if (typeof item.item_reg_price == 'number')
251
+ return item.item_reg_price;
252
+ const clientDiscount = (0, toNumber_1.default)(item.item_client_discount || 0);
253
+ const extraDiscount = (0, toNumber_1.default)(item.item_discount || 0);
254
+ const firstSubtotal = !!extraDiscount && extraDiscount !== 100
255
+ ? (0, toNumber_1.default)((item.item_price * 100) / (100 - extraDiscount))
256
+ : item.item_price;
257
+ const secondSubtotal = !!clientDiscount && clientDiscount !== 100
258
+ ? (0, toNumber_1.default)((firstSubtotal * 100) / (100 - clientDiscount))
259
+ : firstSubtotal;
260
+ return (0, round_1.default)(secondSubtotal, 2);
261
+ };
262
+ this.calculateShippingFeeQte = (dataToCheck) => {
263
+ const data = dataToCheck || this.data();
264
+ const bookingType = data.type || Booking_1.BookingTypeEnum.ACCESSOIRES;
265
+ if (bookingType == Booking_1.BookingTypeEnum.ACCESSOIRES)
266
+ return 1;
267
+ const pallets = Math.ceil(data.palettes_qty || 0);
268
+ return Math.ceil(pallets / (expedition_1.expeditionFeePalletTier !== null && expedition_1.expeditionFeePalletTier !== void 0 ? expedition_1.expeditionFeePalletTier : 1));
269
+ };
270
+ this.calculateShippingAmount = (dataToCheck, useDiscountAmount) => {
271
+ const data = dataToCheck || this.data();
272
+ const bookingType = data.type || Booking_1.BookingTypeEnum.ACCESSOIRES;
273
+ let currentShippingAmount = data.shipping_price || 0;
274
+ if (!!useDiscountAmount)
275
+ currentShippingAmount = this.calculateShippingWithDiscount();
276
+ if (bookingType == Booking_1.BookingTypeEnum.ACCESSOIRES)
277
+ return currentShippingAmount;
278
+ const feeQty = this.calculateShippingFeeQte(dataToCheck);
279
+ if (feeQty == 0)
280
+ return currentShippingAmount;
281
+ return feeQty * currentShippingAmount;
282
+ };
283
+ this.createOrder = async ({ space, sendMail, priceList, fees = {} }) => {
284
+ var _a, _b, _c;
285
+ if (process.env.IS_TEST_ENV)
286
+ console.log('sendMail, are you set somewhere?', sendMail);
287
+ if (DatabaseService_1.default.getPathParent(this._collection.path) == '/')
288
+ throw new Error(`Can't access parent space collection`);
289
+ const customer = (await DatabaseService_1.default.getDocumentByPath(this.data().to_client)).data;
290
+ const type = !!this.data().type ? this.data().type : undefined;
291
+ let pallet;
292
+ let extraFeeOutOfZone;
293
+ let shippingProd;
294
+ let preparationFee;
295
+ let extraFeeAfterDate;
296
+ try {
297
+ pallet = !!fees.pallet ? fees.pallet : await (0, booking_1.getPalletFee)(space, priceList);
298
+ if (!!fees.extraFeeOutOfZone && !!fees.extraFeeAfterDate) {
299
+ extraFeeOutOfZone = fees.extraFeeOutOfZone;
300
+ extraFeeAfterDate = fees.extraFeeAfterDate;
301
+ }
302
+ else {
303
+ const { pastDateFee, outOfZoneFee } = await (0, booking_1.getAllBookingExtraFees)(space, priceList);
304
+ extraFeeOutOfZone = outOfZoneFee;
305
+ extraFeeAfterDate = pastDateFee;
306
+ }
307
+ if (this.data().type === Booking_1.BookingTypeEnum.BETON) {
308
+ shippingProd = (_a = fees.shippingProd) !== null && _a !== void 0 ? _a : (await (0, booking_1.getBetonShippingFee)(space, priceList));
309
+ preparationFee = (_b = fees.preparationFee) !== null && _b !== void 0 ? _b : (await (0, booking_1.getBetonPreparationFee)(space, priceList));
310
+ }
311
+ }
312
+ catch (_error) { }
313
+ const order = new Cart_2.default({
314
+ items: [
315
+ ...(await Promise.all(this._data.items.map(async (item) => {
316
+ try {
317
+ const parent = !!item.custom_id
318
+ ? undefined
319
+ : (await space.cartItem.get({
320
+ query: [
321
+ {
322
+ field: 'slug',
323
+ operator: 'in',
324
+ value: [item.parent_slug.toLowerCase(), item.parent_slug]
325
+ }
326
+ ]
327
+ }))[0];
328
+ const declination = !!item.custom_id
329
+ ? undefined
330
+ : parent.declinations.find((declination) => !![item.item_sku.toLowerCase().trim(), item.item_sku.toUpperCase().trim()].includes(declination.sku));
331
+ const getDeclinationPrice = () => {
332
+ let newPrice = {};
333
+ if (typeof item.item_discount == 'number' || typeof item.item_client_discount == 'number') {
334
+ newPrice = {
335
+ regular_price: {
336
+ currency: 'CAD',
337
+ amount: this.calculateRegularPriceForItem(item)
338
+ },
339
+ discount_price: {
340
+ currency: 'CAD',
341
+ amount: item.item_price
342
+ }
343
+ };
344
+ }
345
+ else {
346
+ newPrice = {
347
+ regular_price: {
348
+ amount: item.item_price,
349
+ currency: 'CAD'
350
+ },
351
+ discount_price: null
352
+ };
353
+ }
354
+ return newPrice;
355
+ };
356
+ if (!!!declination) {
357
+ if (!!!item.custom_id)
358
+ return undefined;
359
+ return Object.assign(Object.assign(Object.assign(Object.assign({}, (0, Cart_1.getDefaultCartItem)()), { is_temp_prod: true, sku: item.item_sku, parent_name: (0, locale_1.getLanguageDictFromString)('TEMP', space.preferences.languages()), name: (0, locale_1.getLanguageDictFromString)(item.item_name, space.preferences.languages()), qte: item.qty, parent_slug: item.parent_slug, images_path: [] }), (!!parent ? { categories: parent.categories } : {})), getDeclinationPrice());
360
+ }
361
+ const { tier_pricing } = declination, rest = __rest(declination, ["tier_pricing"]);
362
+ return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, rest), { qte: item.qty, images_path: [
363
+ ...(!!parent.image_files[0]
364
+ ? [parent.image_files[0]]
365
+ : []),
366
+ ...(declination || { images_path: [] }).images_path
367
+ ], parent_slug: item.parent_slug }), (!!parent ? { categories: parent.categories } : {})), getDeclinationPrice()), (!!item.units ? { other_units: item.units } : {}));
368
+ }
369
+ catch (error) {
370
+ if (process.env.NODE_ENV !== 'production')
371
+ return undefined;
372
+ }
373
+ }))).filter((i) => !!i),
374
+ ...(!!this._data.extra_zone_fee && !!extraFeeOutOfZone
375
+ ? [
376
+ Object.assign(Object.assign({}, extraFeeOutOfZone), { is_service: true, qte: 1, parent_slug: 'frais-supplementaires-booking', is_upsell_of_sku: 'summary' })
377
+ ]
378
+ : []),
379
+ ...(!!type &&
380
+ type === Booking_1.BookingTypeEnum.ACCESSOIRES &&
381
+ !!this._data.extra_fee_if_after_date &&
382
+ !!extraFeeAfterDate
383
+ ? [
384
+ Object.assign(Object.assign({}, extraFeeAfterDate), { is_service: true, qte: 1, parent_slug: 'frais-supplementaires-booking', is_upsell_of_sku: 'summary' })
385
+ ]
386
+ : []),
387
+ ...(!!type && type === Booking_1.BookingTypeEnum.BETON && !!preparationFee
388
+ ? [
389
+ Object.assign(Object.assign({}, preparationFee), { is_service: true, qte: 1, parent_slug: 'frais-preparation-general-beton', is_upsell_of_sku: 'summary' })
390
+ ]
391
+ : []),
392
+ ...(!!this.data().shipping_price && !!shippingProd
393
+ ? [
394
+ Object.assign(Object.assign({}, shippingProd), { is_service: true, qte: this.calculateShippingFeeQte(), name: [
395
+ { lang: 'fr', value: 'Frais de livraison' },
396
+ { lang: 'en', value: 'Shipping fees' }
397
+ ], regular_price: Object.assign(Object.assign({}, shippingProd.regular_price), { amount: this.calculateShippingWithDiscount() }), parent_slug: 'livraison-beton-accessoires', is_upsell_of_sku: 'summary' })
398
+ ]
399
+ : []),
400
+ ...(!!this.data().palettes_qty && !!pallet
401
+ ? [
402
+ Object.assign(Object.assign({}, pallet), { is_service: true, parent_slug: 'frais-palette', qte: this.data().palettes_qty, regular_price: Object.assign(Object.assign({}, pallet.regular_price), { amount: !!this.data().type && this.data().type === Booking_1.BookingTypeEnum.ACCESSOIRES
403
+ ? data_2.bookingFees.palletFee_accessoires
404
+ : data_2.bookingFees.palletFee_beton }), is_upsell_of_sku: 'summary' })
405
+ ]
406
+ : [])
407
+ ],
408
+ customer_info: (0, data_1.getProCustomerInfo)(customer.basic_info, customer.company_info),
409
+ customer_id: customer.id,
410
+ billing_address: !!this.data().billing_info
411
+ ? this.data().billing_info
412
+ : customer.expedition_info.find((e) => !!e.is_default && !!e.is_default.includes(Customer_1.defaultExpeditionOptionsEnum.BILLING)) || customer.expedition_info[0],
413
+ shipping_address: Object.assign(Object.assign({}, (!!this.data().shipping_info
414
+ ? this.data().shipping_info
415
+ : customer.expedition_info.find((e) => !!e.is_default && !!e.is_default.includes(Customer_1.defaultExpeditionOptionsEnum.SHIPPING)) || customer.expedition_info[0])), { expedition_recipient_name: !!this.data().contact_firstname && !!this.data().contact_name
416
+ ? `${this.data().contact_firstname} ${this.data().contact_name}`
417
+ : !!this.data().shipping_info
418
+ ? this.data().shipping_info.expedition_recipient_name || ''
419
+ : (customer.expedition_info.find((e) => !!e.is_default && !!e.is_default.includes(Customer_1.defaultExpeditionOptionsEnum.SHIPPING)) || customer.expedition_info[0]).expedition_recipient_name, expedition_recipient_phone: !!this.data().contact_phone
420
+ ? this.data().contact_phone
421
+ : !!this.data().shipping_info
422
+ ? this.data().shipping_info.expedition_recipient_phone || ''
423
+ : (customer.expedition_info.find((e) => !!e.is_default && !!e.is_default.includes(Customer_1.defaultExpeditionOptionsEnum.SHIPPING)) || customer.expedition_info[0]).expedition_recipient_phone }),
424
+ user_email: !!this.data().contact_email
425
+ ? this.data().contact_email
426
+ : customer.basic_info.customer_email,
427
+ status: !!this.data().is_pickup
428
+ ? Cart_1.CartStatusEnum.CHECKOUT_PICKUP
429
+ : Cart_1.CartStatusEnum.CHECKOUT_SHIPPING,
430
+ boxes: [],
431
+ cart_type: 'web',
432
+ discount_rules: [
433
+ Object.assign(Object.assign({}, (0, IDiscountRule_1.getDefaultDiscountRule)('promotion')), { name: [
434
+ { lang: 'fr', value: `Escompte sur booking` },
435
+ { lang: 'en', value: `Promo on booking` }
436
+ ], appliesTo: {
437
+ value: 'cart'
438
+ }, result: {
439
+ action: IDiscountRule_1.ResultActionEnum.PERCENT_AFTER_TAXES,
440
+ action_value: this.data().type === Booking_1.BookingTypeEnum.BETON
441
+ ? data_2.paidOnReceptionPromoPercent.beton
442
+ : data_2.paidOnReceptionPromoPercent.accessoires,
443
+ exclude_services_and_fees: true
444
+ }, rules: [
445
+ {
446
+ field: IDiscountRule_1.RuleFieldEnum.PAYMENT_METHOD,
447
+ ruleDetails: [
448
+ {
449
+ operator: 'contains',
450
+ value: [Cart_1.PaymentTypeEnum.CREDIT, Cart_1.PaymentTypeEnum.ONEXPEDITION, Cart_1.PaymentTypeEnum.INTERACTRANSFER],
451
+ condition: IDiscountRule_1.RuleConditionEnum.OR
452
+ }
453
+ ],
454
+ condition: IDiscountRule_1.RuleConditionEnum.AND
455
+ },
456
+ {
457
+ field: IDiscountRule_1.RuleFieldEnum.CART_TYPE,
458
+ ruleDetails: [{ operator: '==', value: ['booking'], condition: IDiscountRule_1.RuleConditionEnum.AND }],
459
+ condition: IDiscountRule_1.RuleConditionEnum.AND
460
+ },
461
+ {
462
+ field: IDiscountRule_1.RuleFieldEnum.CUSTOMER_TERMS_CODE,
463
+ ruleDetails: [{ operator: '==', value: ['NET30'], condition: IDiscountRule_1.RuleConditionEnum.AND }],
464
+ condition: IDiscountRule_1.RuleConditionEnum.AND
465
+ }
466
+ ] })
467
+ ],
468
+ locale: 'fr',
469
+ shipping: !!shippingProd ? 0 : this.calculateShippingWithDiscount(),
470
+ shipping_message: '',
471
+ subtotal: 0,
472
+ taxes: [],
473
+ total: 0,
474
+ is_pickup: !!this.data().is_pickup,
475
+ is_booking: this.data().id || false,
476
+ is_booking_beton: this.data().type === Booking_1.BookingTypeEnum.BETON,
477
+ shipping_payload: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ delivery_or_pickup_date: !!this._data.is_pickup
478
+ ? this._data.pickup_date
479
+ : this._data.shipping_date }, (!!!this._data.is_pickup ? { delivery_period: 'AM' } : {})), (!!this._data.is_pickup
480
+ ? {
481
+ pickup_store: space.data().stores_warehouses.find((sw) => sw.id === this._data.pickup_id)
482
+ }
483
+ : {})), { delivery_notes: !!this._data.notes ? this._data.notes : '', totalPallet: this._data.palettes_qty, isOutOfArea: !!this._data.isBookingOutOfZone, orderOrProjectNumber: this._data.project_identifiant }), (!!this._data.delivery_on_site ? { onSiteDelivery: true } : {})), { contact_infos: {
484
+ contact_firstname: this._data.contact_firstname,
485
+ contact_name: this._data.contact_name,
486
+ contact_phone: this._data.contact_phone,
487
+ contact_email: this._data.contact_firstname
488
+ } }), (!!this._data.payment_on_reception && !!this._data.payment_on_reception_percent
489
+ ? { chosen_payment: Cart_1.PaymentTypeEnum.ONEXPEDITION }
490
+ : {}))
491
+ }, {
492
+ path: DatabaseService_1.default.addToPath(DatabaseService_1.default.getPathParent(this._collection.path), 'carts')
493
+ }, this._user);
494
+ await order.postConstruct(undefined, true, { skipDiscountRules: true, skipTierPricing: true });
495
+ this._data = Object.assign(Object.assign({}, this._data), { order: DatabaseService_1.default.addToPath(DatabaseService_1.default.addToPath(DatabaseService_1.default.getPathParent(this._collection.path), 'carts'), (_c = order.data().id) !== null && _c !== void 0 ? _c : '') });
496
+ return await this.save();
497
+ };
498
+ this.delete = async () => {
499
+ await this.deleteOrder();
500
+ return await super.delete();
501
+ };
502
+ this.deleteOrder = async () => {
503
+ if (!!!this._data.order)
504
+ return;
505
+ if (typeof this._data.order == 'string') {
506
+ await DatabaseService_1.default.deleteDocumentByPath(this._data.order);
507
+ }
508
+ else {
509
+ await DatabaseService_1.default.deleteDocumentByPath(this._data.order.path);
510
+ }
511
+ this._data = Object.assign(Object.assign({}, this._data), { order: undefined });
512
+ return await this.save();
513
+ };
514
+ this.setIsFromWeb = async (isFromWeb = true, saveToDatabase = true) => {
515
+ this._data = Object.assign(Object.assign({}, this._data), { is_from_web: isFromWeb });
516
+ return await this.save(undefined, undefined, saveToDatabase);
517
+ };
518
+ this.setType = async (type) => {
519
+ this._data = Object.assign(Object.assign({}, this._data), { is_pickup: type === 'pickup' });
520
+ return await this.save();
521
+ };
522
+ this.setNotes = async (notes) => {
523
+ this._data = Object.assign(Object.assign({}, this._data), { notes: notes });
524
+ return await this.save();
525
+ };
526
+ this.setPalettesQty = async (palettes_qty) => {
527
+ this._data = Object.assign(Object.assign({}, this._data), { palettes_qty });
528
+ return this.save();
529
+ };
530
+ this.setShippingPrice = async (shipping_price) => {
531
+ this._data = Object.assign(Object.assign({}, this._data), { shipping_price });
532
+ return this.save();
533
+ };
534
+ this.setShippingAddress = async (address, save = false) => {
535
+ this._data = Object.assign(Object.assign({}, this._data), { shipping_info: address });
536
+ await this.save(undefined, undefined, save);
537
+ };
538
+ this.setBillingAddress = async (address, save = false) => {
539
+ this._data = Object.assign(Object.assign({}, this._data), { billing_info: address });
540
+ await this.save(undefined, undefined, save);
541
+ };
542
+ this.addDiscount = async (discount, isPercent) => {
543
+ this._data = Object.assign(Object.assign({}, this._data), { discount_percent: !!isPercent ? discount : undefined, discount_price: !!!isPercent ? discount : undefined });
544
+ await this.save();
545
+ };
546
+ this.setPaymentOnReception = async (paymentOnReception, percent) => {
547
+ this._data = Object.assign(Object.assign({}, this._data), { payment_on_reception: paymentOnReception, payment_on_reception_percent: percent });
548
+ await this.save();
549
+ };
550
+ this.setContactInfo = async (contactInfo, dataToUse, saveToObj = true) => {
551
+ this._data = Object.assign(Object.assign({}, (!!dataToUse ? dataToUse : this._data)), contactInfo);
552
+ if (!!saveToObj) {
553
+ await this.save();
554
+ }
555
+ return this._data;
556
+ };
557
+ this.setShippingPromo = async (values) => {
558
+ this._data = Object.assign(Object.assign({}, this._data), { shipping_discount: values });
559
+ await this.save();
560
+ };
561
+ this.calculateShippingWithDiscount = () => {
562
+ let shippingPrice = this._data.shipping_price;
563
+ if (!this._data.is_pickup) {
564
+ const currentDiscount = this._data.shipping_discount;
565
+ if (!!currentDiscount) {
566
+ if (!!currentDiscount.amount)
567
+ shippingPrice = currentDiscount.amount;
568
+ if (!!currentDiscount.percent)
569
+ shippingPrice = shippingPrice - shippingPrice * (currentDiscount.percent / 100);
570
+ }
571
+ }
572
+ return shippingPrice;
573
+ };
574
+ }
575
+ }
576
+ exports.default = Booking;
577
577
  //# sourceMappingURL=index.js.map