addio-admin-sdk 1.7.144 → 1.7.145
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.
- package/.babelrc +17 -17
- package/.claude/settings.local.json +7 -0
- package/.env +14 -0
- package/.env.dev +14 -14
- package/.github/workflows/run_unit_test.yaml +48 -48
- package/addio-sdk-doc.md +1473 -1473
- package/changelog.md +564 -564
- package/dist/Interfaces/Address/index.d.ts +21 -21
- package/dist/Interfaces/Address/index.js +16 -16
- package/dist/Interfaces/Algolia/index.d.ts +177 -177
- package/dist/Interfaces/Algolia/index.js +2 -2
- package/dist/Interfaces/Attachement/index.d.ts +5 -5
- package/dist/Interfaces/Attachement/index.js +2 -2
- package/dist/Interfaces/Attribute/index.d.ts +53 -53
- package/dist/Interfaces/Attribute/index.js +10 -10
- package/dist/Interfaces/BGJob/index.d.ts +56 -56
- package/dist/Interfaces/BGJob/index.js +25 -25
- package/dist/Interfaces/BaseClass/index.d.ts +8 -8
- package/dist/Interfaces/BaseClass/index.js +2 -2
- package/dist/Interfaces/Blog/IBlogArticle.d.ts +18 -18
- package/dist/Interfaces/Blog/IBlogArticle.js +2 -2
- package/dist/Interfaces/Blog/IBlogAuthor.d.ts +7 -7
- package/dist/Interfaces/Blog/IBlogAuthor.js +2 -2
- package/dist/Interfaces/Blog/IBlogCategory.d.ts +9 -9
- package/dist/Interfaces/Blog/IBlogCategory.js +2 -2
- package/dist/Interfaces/Blog/IBlogComment.d.ts +13 -13
- package/dist/Interfaces/Blog/IBlogComment.js +2 -2
- package/dist/Interfaces/Blog/IBlogKeywords.d.ts +9 -9
- package/dist/Interfaces/Blog/IBlogKeywords.js +2 -2
- package/dist/Interfaces/Booking/index.d.ts +74 -74
- package/dist/Interfaces/Booking/index.js +17 -17
- package/dist/Interfaces/Brand/index.d.ts +15 -15
- package/dist/Interfaces/Brand/index.js +2 -2
- package/dist/Interfaces/CMS/index.d.ts +28 -28
- package/dist/Interfaces/CMS/index.js +5 -5
- package/dist/Interfaces/Cart/IElavonPayload.d.ts +93 -93
- package/dist/Interfaces/Cart/IElavonPayload.js +17 -17
- package/dist/Interfaces/Cart/IPandaPayload.d.ts +64 -64
- package/dist/Interfaces/Cart/IPandaPayload.js +18 -18
- package/dist/Interfaces/Cart/IPaymentCard.d.ts +22 -22
- package/dist/Interfaces/Cart/IPaymentCard.js +44 -44
- package/dist/Interfaces/Cart/IPaypalPayload.d.ts +9 -9
- package/dist/Interfaces/Cart/IPaypalPayload.js +2 -2
- package/dist/Interfaces/Cart/IPaysafePayload.d.ts +72 -72
- package/dist/Interfaces/Cart/IPaysafePayload.js +2 -2
- package/dist/Interfaces/Cart/IStripePayload.d.ts +66 -66
- package/dist/Interfaces/Cart/IStripePayload.js +2 -2
- package/dist/Interfaces/Cart/index.d.ts +444 -444
- package/dist/Interfaces/Cart/index.js +197 -197
- package/dist/Interfaces/CartReservedQuantities/index.d.ts +10 -10
- package/dist/Interfaces/CartReservedQuantities/index.js +2 -2
- package/dist/Interfaces/CashDrawers/index.d.ts +37 -37
- package/dist/Interfaces/CashDrawers/index.js +19 -19
- package/dist/Interfaces/Catalogue/index.d.ts +68 -68
- package/dist/Interfaces/Catalogue/index.js +37 -37
- package/dist/Interfaces/Category/index.d.ts +33 -33
- package/dist/Interfaces/Category/index.js +2 -2
- package/dist/Interfaces/Chart/index.d.ts +11 -11
- package/dist/Interfaces/Chart/index.js +2 -2
- package/dist/Interfaces/Class/index.d.ts +8 -8
- package/dist/Interfaces/Class/index.js +2 -2
- package/dist/Interfaces/Consent/index.d.ts +6 -6
- package/dist/Interfaces/Consent/index.js +2 -2
- package/dist/Interfaces/Context/IContextProps.d.ts +4 -4
- package/dist/Interfaces/Context/IContextProps.js +2 -2
- package/dist/Interfaces/Context/IContextState.d.ts +15 -15
- package/dist/Interfaces/Context/IContextState.js +2 -2
- package/dist/Interfaces/Customer/ICustomerBadge.d.ts +2 -2
- package/dist/Interfaces/Customer/ICustomerBadge.js +2 -2
- package/dist/Interfaces/Customer/ICustomerRating.d.ts +10 -10
- package/dist/Interfaces/Customer/ICustomerRating.js +2 -2
- package/dist/Interfaces/Customer/IStoreCredit.d.ts +13 -13
- package/dist/Interfaces/Customer/IStoreCredit.js +2 -2
- package/dist/Interfaces/Customer/index.d.ts +104 -104
- package/dist/Interfaces/Customer/index.js +148 -148
- package/dist/Interfaces/Declination/index.d.ts +117 -117
- package/dist/Interfaces/Declination/index.js +66 -66
- package/dist/Interfaces/Document/index.d.ts +8 -8
- package/dist/Interfaces/Document/index.js +2 -2
- package/dist/Interfaces/Elastic/index.d.ts +89 -89
- package/dist/Interfaces/Elastic/index.js +2 -2
- package/dist/Interfaces/Email/CustomGR/I3DPrintEmail.d.ts +11 -11
- package/dist/Interfaces/Email/CustomGR/I3DPrintEmail.js +2 -2
- package/dist/Interfaces/Email/CustomGR/IBorrowToolsEmail.d.ts +15 -15
- package/dist/Interfaces/Email/CustomGR/IBorrowToolsEmail.js +2 -2
- package/dist/Interfaces/Email/CustomGR/IPickupMaterialsEmail.d.ts +12 -12
- package/dist/Interfaces/Email/CustomGR/IPickupMaterialsEmail.js +2 -2
- package/dist/Interfaces/Email/CustomGR/IPreMeetingFormEmail.d.ts +36 -36
- package/dist/Interfaces/Email/CustomGR/IPreMeetingFormEmail.js +2 -2
- package/dist/Interfaces/Email/CustomGR/ISponsorRequestEmail.d.ts +12 -12
- package/dist/Interfaces/Email/CustomGR/ISponsorRequestEmail.js +2 -2
- package/dist/Interfaces/Email/CustomGR/ITransportEmail.d.ts +12 -12
- package/dist/Interfaces/Email/CustomGR/ITransportEmail.js +2 -2
- package/dist/Interfaces/Email/CustomGR/ITransportQuoteEmail.d.ts +12 -12
- package/dist/Interfaces/Email/CustomGR/ITransportQuoteEmail.js +2 -2
- package/dist/Interfaces/Email/CustomGR/IVegetalsEmail.d.ts +16 -16
- package/dist/Interfaces/Email/CustomGR/IVegetalsEmail.js +2 -2
- package/dist/Interfaces/Email/CustomGR/IWishlistEmail.d.ts +15 -15
- package/dist/Interfaces/Email/CustomGR/IWishlistEmail.js +2 -2
- package/dist/Interfaces/Email/IAbandonnedCartEmail.d.ts +29 -29
- package/dist/Interfaces/Email/IAbandonnedCartEmail.js +2 -2
- package/dist/Interfaces/Email/IAccountConfirmationEmail.d.ts +22 -22
- package/dist/Interfaces/Email/IAccountConfirmationEmail.js +2 -2
- package/dist/Interfaces/Email/IApplicationEmail.d.ts +19 -19
- package/dist/Interfaces/Email/IApplicationEmail.js +2 -2
- package/dist/Interfaces/Email/IBackInStockEmail.d.ts +21 -21
- package/dist/Interfaces/Email/IBackInStockEmail.js +2 -2
- package/dist/Interfaces/Email/IContactEmail.d.ts +20 -20
- package/dist/Interfaces/Email/IContactEmail.js +2 -2
- package/dist/Interfaces/Email/ICustomerBookingAdminEmail.d.ts +15 -15
- package/dist/Interfaces/Email/ICustomerBookingAdminEmail.js +2 -2
- package/dist/Interfaces/Email/ICustomerBookingEmail.d.ts +14 -14
- package/dist/Interfaces/Email/ICustomerBookingEmail.js +2 -2
- package/dist/Interfaces/Email/IEmail.d.ts +20 -20
- package/dist/Interfaces/Email/IEmail.js +60 -60
- package/dist/Interfaces/Email/IOrderConfirmationEmail.d.ts +47 -47
- package/dist/Interfaces/Email/IOrderConfirmationEmail.js +2 -2
- package/dist/Interfaces/Email/IPasswordResetEmail.d.ts +17 -17
- package/dist/Interfaces/Email/IPasswordResetEmail.js +2 -2
- package/dist/Interfaces/Email/IPhotoShootEmail.d.ts +14 -14
- package/dist/Interfaces/Email/IPhotoShootEmail.js +2 -2
- package/dist/Interfaces/Email/IPickupConfirmation.d.ts +23 -23
- package/dist/Interfaces/Email/IPickupConfirmation.js +2 -2
- package/dist/Interfaces/Email/IShippingConfirmation.d.ts +23 -23
- package/dist/Interfaces/Email/IShippingConfirmation.js +2 -2
- package/dist/Interfaces/Email/IWelcomeEmail.d.ts +19 -19
- package/dist/Interfaces/Email/IWelcomeEmail.js +2 -2
- package/dist/Interfaces/ExportSchema/index.d.ts +7 -7
- package/dist/Interfaces/ExportSchema/index.js +2 -2
- package/dist/Interfaces/ExternalService/BaseExternalService.d.ts +12 -12
- package/dist/Interfaces/ExternalService/BaseExternalService.js +2 -2
- package/dist/Interfaces/ExternalService/ExternalProductsService.d.ts +4 -4
- package/dist/Interfaces/ExternalService/ExternalProductsService.js +2 -2
- package/dist/Interfaces/ExternalService/index.d.ts +9 -9
- package/dist/Interfaces/ExternalService/index.js +2 -2
- package/dist/Interfaces/FirstOrderTracking/index.d.ts +5 -5
- package/dist/Interfaces/FirstOrderTracking/index.js +2 -2
- package/dist/Interfaces/G2/index.d.ts +556 -556
- package/dist/Interfaces/G2/index.js +38 -38
- package/dist/Interfaces/Indexed/Product/IIndexedLastSavedProduct.d.ts +20 -20
- package/dist/Interfaces/Indexed/Product/IIndexedLastSavedProduct.js +2 -2
- package/dist/Interfaces/Indexed/Product/index.d.ts +105 -105
- package/dist/Interfaces/Indexed/Product/index.js +253 -253
- package/dist/Interfaces/Inventory/index.d.ts +19 -19
- package/dist/Interfaces/Inventory/index.js +8 -8
- package/dist/Interfaces/Invoice/index.d.ts +4 -4
- package/dist/Interfaces/Invoice/index.js +2 -2
- package/dist/Interfaces/MarketplacePublication/MarketplaceOrderData.d.ts +3 -3
- package/dist/Interfaces/MarketplacePublication/MarketplaceOrderData.js +2 -2
- package/dist/Interfaces/MarketplacePublication/index.d.ts +23 -23
- package/dist/Interfaces/MarketplacePublication/index.js +22 -22
- package/dist/Interfaces/Menu/index.d.ts +40 -40
- package/dist/Interfaces/Menu/index.js +16 -16
- package/dist/Interfaces/Note/index.d.ts +10 -10
- package/dist/Interfaces/Note/index.js +7 -7
- package/dist/Interfaces/Operations/ICreatedBy.d.ts +6 -6
- package/dist/Interfaces/Operations/ICreatedBy.js +2 -2
- package/dist/Interfaces/Operations/IUpdate.d.ts +5 -5
- package/dist/Interfaces/Operations/IUpdate.js +2 -2
- package/dist/Interfaces/Order/index.d.ts +4 -4
- package/dist/Interfaces/Order/index.js +2 -2
- package/dist/Interfaces/Org/IRelUser.d.ts +9 -9
- package/dist/Interfaces/Org/IRelUser.js +2 -2
- package/dist/Interfaces/Org/index.d.ts +29 -29
- package/dist/Interfaces/Org/index.js +12 -12
- package/dist/Interfaces/Payment/index.d.ts +26 -26
- package/dist/Interfaces/Payment/index.js +14 -14
- package/dist/Interfaces/Product/IAttributeFamily.d.ts +6 -6
- package/dist/Interfaces/Product/IAttributeFamily.js +2 -2
- package/dist/Interfaces/Product/IImportProduct.d.ts +42 -42
- package/dist/Interfaces/Product/IImportProduct.js +882 -882
- package/dist/Interfaces/Product/IInventoryItem.d.ts +74 -74
- package/dist/Interfaces/Product/IInventoryItem.js +38 -38
- package/dist/Interfaces/Product/IPricing.d.ts +177 -177
- package/dist/Interfaces/Product/IPricing.js +180 -180
- package/dist/Interfaces/Product/index.d.ts +138 -138
- package/dist/Interfaces/Product/index.js +64 -64
- package/dist/Interfaces/ProductAttribute/index.d.ts +11 -11
- package/dist/Interfaces/ProductAttribute/index.js +2 -2
- package/dist/Interfaces/PromiseToPurchase/BankType.d.ts +41 -41
- package/dist/Interfaces/PromiseToPurchase/BankType.js +41 -41
- package/dist/Interfaces/PromiseToPurchase/IIndexedBankUsed.d.ts +33 -33
- package/dist/Interfaces/PromiseToPurchase/IIndexedBankUsed.js +15 -15
- package/dist/Interfaces/PromiseToPurchase/IIndexedCustomerPromiseToPurchase.d.ts +19 -19
- package/dist/Interfaces/PromiseToPurchase/IIndexedCustomerPromiseToPurchase.js +2 -2
- package/dist/Interfaces/PromiseToPurchase/index.d.ts +50 -50
- package/dist/Interfaces/PromiseToPurchase/index.js +13 -13
- package/dist/Interfaces/PurchaseOrder/index.d.ts +17 -17
- package/dist/Interfaces/PurchaseOrder/index.js +2 -2
- package/dist/Interfaces/Query/IBrandQueryOptions.d.ts +11 -11
- package/dist/Interfaces/Query/IBrandQueryOptions.js +2 -2
- package/dist/Interfaces/Query/ICategoryQueryOptions.d.ts +11 -11
- package/dist/Interfaces/Query/ICategoryQueryOptions.js +2 -2
- package/dist/Interfaces/Query/IProductQueryOptions.d.ts +16 -16
- package/dist/Interfaces/Query/IProductQueryOptions.js +2 -2
- package/dist/Interfaces/Quote/index.d.ts +5 -5
- package/dist/Interfaces/Quote/index.js +2 -2
- package/dist/Interfaces/Refunds/index.d.ts +106 -106
- package/dist/Interfaces/Refunds/index.js +2 -2
- package/dist/Interfaces/Rules/IDiscountRule.d.ts +155 -155
- package/dist/Interfaces/Rules/IDiscountRule.js +114 -114
- package/dist/Interfaces/Schedule/index.d.ts +48 -48
- package/dist/Interfaces/Schedule/index.js +2 -2
- package/dist/Interfaces/Services/IAddServiceResponse.d.ts +4 -4
- package/dist/Interfaces/Services/IAddServiceResponse.js +2 -2
- package/dist/Interfaces/Services/IService.d.ts +16 -16
- package/dist/Interfaces/Services/IService.js +2 -2
- package/dist/Interfaces/Services/IServiceSecret.d.ts +8 -8
- package/dist/Interfaces/Services/IServiceSecret.js +2 -2
- package/dist/Interfaces/Shipping/Shipstation/carriers.d.ts +10 -10
- package/dist/Interfaces/Shipping/Shipstation/carriers.js +2 -2
- package/dist/Interfaces/Shipping/Shipstation/order.d.ts +227 -227
- package/dist/Interfaces/Shipping/Shipstation/order.js +2 -2
- package/dist/Interfaces/Shipping/Shipstation/quote.d.ts +31 -31
- package/dist/Interfaces/Shipping/Shipstation/quote.js +2 -2
- package/dist/Interfaces/Shipping/Shiptime/order.d.ts +54 -54
- package/dist/Interfaces/Shipping/Shiptime/order.js +71 -71
- package/dist/Interfaces/Shipping/Shiptime/quote.d.ts +111 -111
- package/dist/Interfaces/Shipping/Shiptime/quote.js +2 -2
- package/dist/Interfaces/Slider/GR.d.ts +114 -114
- package/dist/Interfaces/Slider/GR.js +271 -271
- package/dist/Interfaces/Slider/index.d.ts +30 -30
- package/dist/Interfaces/Slider/index.js +2 -2
- package/dist/Interfaces/Space/IExternalService.d.ts +53 -53
- package/dist/Interfaces/Space/IExternalService.js +44 -44
- package/dist/Interfaces/Space/IMember.d.ts +16 -16
- package/dist/Interfaces/Space/IMember.js +9 -9
- package/dist/Interfaces/Space/index.d.ts +407 -405
- package/dist/Interfaces/Space/index.js +174 -174
- package/dist/Interfaces/Space/index.js.map +1 -1
- package/dist/Interfaces/Specials/gr.d.ts +61 -61
- package/dist/Interfaces/Specials/gr.js +2 -2
- package/dist/Interfaces/StockNotification/index.d.ts +7 -7
- package/dist/Interfaces/StockNotification/index.js +2 -2
- package/dist/Interfaces/Store/index.d.ts +63 -63
- package/dist/Interfaces/Store/index.js +27 -27
- package/dist/Interfaces/Supplier/ICommand.d.ts +11 -11
- package/dist/Interfaces/Supplier/ICommand.js +2 -2
- package/dist/Interfaces/Supplier/index.d.ts +36 -36
- package/dist/Interfaces/Supplier/index.js +24 -24
- package/dist/Interfaces/TCG/index.d.ts +161 -161
- package/dist/Interfaces/TCG/index.js +54 -54
- package/dist/Interfaces/Tag/index.d.ts +18 -18
- package/dist/Interfaces/Tag/index.js +2 -2
- package/dist/Interfaces/Tax/index.d.ts +13 -13
- package/dist/Interfaces/Tax/index.js +2 -2
- package/dist/Interfaces/TransferRequest/index.d.ts +103 -103
- package/dist/Interfaces/TransferRequest/index.js +46 -46
- package/dist/Interfaces/Translation/index.d.ts +8 -8
- package/dist/Interfaces/Translation/index.js +5 -5
- package/dist/Interfaces/Update/index.d.ts +10 -10
- package/dist/Interfaces/Update/index.js +2 -2
- package/dist/Interfaces/User/IUser.d.ts +65 -65
- package/dist/Interfaces/User/IUser.js +8 -8
- package/dist/Interfaces/Version/index.d.ts +11 -11
- package/dist/Interfaces/Version/index.js +2 -2
- package/dist/Interfaces/Wishlist/index.d.ts +7 -7
- package/dist/Interfaces/Wishlist/index.js +2 -2
- package/dist/constants/Interfaces/IBaseApi.d.ts +15 -15
- package/dist/constants/Interfaces/IBaseApi.js +2 -2
- package/dist/constants/Interfaces/IEndpointResult.d.ts +9 -9
- package/dist/constants/Interfaces/IEndpointResult.js +2 -2
- package/dist/constants/enums.d.ts +6 -6
- package/dist/constants/enums.js +10 -10
- package/dist/constants/services.d.ts +2 -2
- package/dist/constants/services.js +117 -117
- package/dist/constants/version.d.ts +2 -2
- package/dist/constants/version.js +5 -5
- package/dist/index.d.ts +50 -50
- package/dist/index.js +266 -266
- package/dist/lib/Attribute/index.d.ts +14 -14
- package/dist/lib/Attribute/index.js +186 -186
- package/dist/lib/BGJob/index.d.ts +9 -9
- package/dist/lib/BGJob/index.js +216 -216
- package/dist/lib/BackgroundWorker/index.d.ts +34 -34
- package/dist/lib/BackgroundWorker/index.js +59 -59
- package/dist/lib/Blog/BlogArticle.d.ts +5 -5
- package/dist/lib/Blog/BlogArticle.js +10 -10
- package/dist/lib/Blog/BlogAuthor.d.ts +5 -5
- package/dist/lib/Blog/BlogAuthor.js +10 -10
- package/dist/lib/Blog/BlogCategory.d.ts +5 -5
- package/dist/lib/Blog/BlogCategory.js +10 -10
- package/dist/lib/Blog/BlogKeyword.d.ts +5 -5
- package/dist/lib/Blog/BlogKeyword.js +10 -10
- package/dist/lib/Booking/index.d.ts +85 -85
- package/dist/lib/Booking/index.js +596 -596
- package/dist/lib/Brand/index.d.ts +26 -26
- package/dist/lib/Brand/index.js +131 -131
- package/dist/lib/Cart/index.d.ts +335 -335
- package/dist/lib/Cart/index.js +3977 -3977
- package/dist/lib/CartReservedQuantities/index.d.ts +49 -49
- package/dist/lib/CartReservedQuantities/index.js +159 -159
- package/dist/lib/CashDrawerShift/index.d.ts +83 -83
- package/dist/lib/CashDrawerShift/index.js +205 -205
- package/dist/lib/Catalogue/index.d.ts +15 -15
- package/dist/lib/Catalogue/index.js +78 -78
- package/dist/lib/Category/index.d.ts +34 -34
- package/dist/lib/Category/index.js +230 -230
- package/dist/lib/Class/index.d.ts +16 -16
- package/dist/lib/Class/index.js +66 -66
- package/dist/lib/Consent/index.d.ts +4 -4
- package/dist/lib/Consent/index.js +29 -29
- package/dist/lib/Customer/index.d.ts +30 -30
- package/dist/lib/Customer/index.js +92 -92
- package/dist/lib/Declination/index.d.ts +9 -9
- package/dist/lib/Declination/index.js +26 -26
- package/dist/lib/Discount/index.d.ts +27 -27
- package/dist/lib/Discount/index.js +493 -493
- package/dist/lib/ElasticSearch/index.d.ts +13 -13
- package/dist/lib/ElasticSearch/index.js +50 -50
- package/dist/lib/Elavon/index.d.ts +18 -18
- package/dist/lib/Elavon/index.js +135 -135
- package/dist/lib/Email/AbandonedCartEmail.d.ts +16 -16
- package/dist/lib/Email/AbandonedCartEmail.js +24 -24
- package/dist/lib/Email/AccountConfirmationEmail.d.ts +19 -19
- package/dist/lib/Email/AccountConfirmationEmail.js +30 -30
- package/dist/lib/Email/AdminOrderConfirmationEmail.d.ts +16 -16
- package/dist/lib/Email/AdminOrderConfirmationEmail.js +24 -24
- package/dist/lib/Email/ApplicationEmail.d.ts +16 -16
- package/dist/lib/Email/ApplicationEmail.js +24 -24
- package/dist/lib/Email/BackInStockEmail.d.ts +16 -16
- package/dist/lib/Email/BackInStockEmail.js +24 -24
- package/dist/lib/Email/ContactEmail.d.ts +16 -16
- package/dist/lib/Email/ContactEmail.js +24 -24
- package/dist/lib/Email/CustomerBookingAdminEmail.d.ts +16 -16
- package/dist/lib/Email/CustomerBookingAdminEmail.js +24 -24
- package/dist/lib/Email/CustomerBookingEmail.d.ts +16 -16
- package/dist/lib/Email/CustomerBookingEmail.js +24 -24
- package/dist/lib/Email/OrderConfirmationEmail.d.ts +16 -16
- package/dist/lib/Email/OrderConfirmationEmail.js +24 -24
- package/dist/lib/Email/OrderDenounciationEmail.d.ts +16 -16
- package/dist/lib/Email/OrderDenounciationEmail.js +24 -24
- package/dist/lib/Email/OrderSampleEmail.d.ts +16 -16
- package/dist/lib/Email/OrderSampleEmail.js +24 -24
- package/dist/lib/Email/OtherTypeEmails.d.ts +16 -16
- package/dist/lib/Email/OtherTypeEmails.js +27 -27
- package/dist/lib/Email/PasswordResetEmail.d.ts +16 -16
- package/dist/lib/Email/PasswordResetEmail.js +24 -24
- package/dist/lib/Email/PhotoShootEmail.d.ts +16 -16
- package/dist/lib/Email/PhotoShootEmail.js +24 -24
- package/dist/lib/Email/PickUpConfirmation.d.ts +16 -16
- package/dist/lib/Email/PickUpConfirmation.js +24 -24
- package/dist/lib/Email/ShippingConfirmation.d.ts +16 -16
- package/dist/lib/Email/ShippingConfirmation.js +24 -24
- package/dist/lib/Email/WelcomeEmail.d.ts +16 -16
- package/dist/lib/Email/WelcomeEmail.js +24 -24
- package/dist/lib/Email/index.d.ts +16 -16
- package/dist/lib/Email/index.js +31 -31
- package/dist/lib/ExternalService/Ebay.d.ts +74 -74
- package/dist/lib/ExternalService/Ebay.js +124 -124
- package/dist/lib/ExternalService/index.d.ts +5 -5
- package/dist/lib/ExternalService/index.js +10 -10
- package/dist/lib/FirstOrderTracking/index.d.ts +5 -5
- package/dist/lib/FirstOrderTracking/index.js +10 -10
- package/dist/lib/Indexed/IndexedCart.d.ts +13 -13
- package/dist/lib/Indexed/IndexedCart.js +91 -91
- package/dist/lib/Indexed/Product.d.ts +17 -17
- package/dist/lib/Indexed/Product.js +98 -98
- package/dist/lib/Inventory/index.d.ts +112 -112
- package/dist/lib/Inventory/index.js +492 -492
- package/dist/lib/Invoice/index.d.ts +16 -16
- package/dist/lib/Invoice/index.js +21 -21
- package/dist/lib/MarketplacePublication/index.d.ts +9 -9
- package/dist/lib/MarketplacePublication/index.js +426 -426
- package/dist/lib/Menu/index.d.ts +11 -11
- package/dist/lib/Menu/index.js +107 -107
- package/dist/lib/MongoDB/BaseAPI.d.ts +18 -18
- package/dist/lib/MongoDB/BaseAPI.js +200 -200
- package/dist/lib/Note/index.d.ts +4 -4
- package/dist/lib/Note/index.js +6 -6
- package/dist/lib/Order/index.d.ts +27 -27
- package/dist/lib/Order/index.js +56 -56
- package/dist/lib/Org/index.d.ts +68 -68
- package/dist/lib/Org/index.js +216 -216
- package/dist/lib/PandaPay/index.d.ts +16 -16
- package/dist/lib/PandaPay/index.js +176 -176
- package/dist/lib/Paysafe/index.d.ts +11 -11
- package/dist/lib/Paysafe/index.js +41 -41
- package/dist/lib/Product/index.d.ts +182 -182
- package/dist/lib/Product/index.js +847 -847
- package/dist/lib/ProductAttribute/index.d.ts +15 -15
- package/dist/lib/ProductAttribute/index.js +45 -45
- package/dist/lib/PromiseToPurchase/index.d.ts +109 -109
- package/dist/lib/PromiseToPurchase/index.js +343 -343
- package/dist/lib/PurchaseOrder/index.d.ts +20 -20
- package/dist/lib/PurchaseOrder/index.js +28 -28
- package/dist/lib/Schedule/index.d.ts +5 -5
- package/dist/lib/Schedule/index.js +12 -12
- package/dist/lib/Service/Enum/ServiceEnum.d.ts +3 -3
- package/dist/lib/Service/Enum/ServiceEnum.js +7 -7
- package/dist/lib/Service/index.d.ts +13 -13
- package/dist/lib/Service/index.js +21 -21
- package/dist/lib/Shipment/index.d.ts +28 -28
- package/dist/lib/Shipment/index.js +370 -370
- package/dist/lib/Slider/index.d.ts +22 -22
- package/dist/lib/Slider/index.js +119 -119
- package/dist/lib/Space/index.d.ts +1150 -1150
- package/dist/lib/Space/index.js +5792 -5792
- package/dist/lib/StockNotification/index.d.ts +4 -4
- package/dist/lib/StockNotification/index.js +6 -6
- package/dist/lib/Store/index.d.ts +5 -5
- package/dist/lib/Store/index.js +12 -12
- package/dist/lib/Supplier/Command.d.ts +5 -5
- package/dist/lib/Supplier/Command.js +10 -10
- package/dist/lib/Supplier/index.d.ts +25 -25
- package/dist/lib/Supplier/index.js +27 -27
- package/dist/lib/Tags/index.d.ts +6 -6
- package/dist/lib/Tags/index.js +26 -26
- package/dist/lib/Tax/index.d.ts +8 -8
- package/dist/lib/Tax/index.js +54 -54
- package/dist/lib/TransferRequest/index.d.ts +290 -290
- package/dist/lib/TransferRequest/index.js +1026 -1026
- package/dist/lib/Update/index.d.ts +10 -10
- package/dist/lib/Update/index.js +22 -22
- package/dist/lib/User/index.d.ts +89 -89
- package/dist/lib/User/index.js +328 -328
- package/dist/lib/Wishlist/index.d.ts +5 -5
- package/dist/lib/Wishlist/index.js +10 -10
- package/dist/lib/base.d.ts +14 -14
- package/dist/lib/base.js +62 -62
- package/dist/lib/baseService.d.ts +17 -17
- package/dist/lib/baseService.js +69 -69
- package/dist/rules/GR/constants/data.d.ts +26 -26
- package/dist/rules/GR/constants/data.js +81 -81
- package/dist/rules/GR/constants/expedition.d.ts +4 -4
- package/dist/rules/GR/constants/expedition.js +9 -9
- package/dist/rules/GR/constants/products.d.ts +22 -22
- package/dist/rules/GR/constants/products.js +263 -263
- package/dist/rules/GR/interfaces/cart.d.ts +84 -84
- package/dist/rules/GR/interfaces/cart.js +41 -41
- package/dist/rules/GR/interfaces/data.d.ts +101 -101
- package/dist/rules/GR/interfaces/data.js +114 -114
- package/dist/rules/GR/interfaces/products.d.ts +61 -61
- package/dist/rules/GR/interfaces/products.js +10 -10
- package/dist/rules/GR/utils/cart.d.ts +95 -95
- package/dist/rules/GR/utils/cart.js +839 -836
- package/dist/rules/GR/utils/cart.js.map +1 -1
- package/dist/rules/GR/utils/data.d.ts +3 -3
- package/dist/rules/GR/utils/data.js +28 -28
- package/dist/rules/GR/utils/expedition.d.ts +140 -140
- package/dist/rules/GR/utils/expedition.js +2016 -2016
- package/dist/rules/GR/utils/g2.d.ts +209 -209
- package/dist/rules/GR/utils/g2.js +999 -999
- package/dist/rules/GR/utils/invoices.d.ts +51 -51
- package/dist/rules/GR/utils/invoices.js +215 -215
- package/dist/rules/GR/utils/products.d.ts +277 -277
- package/dist/rules/GR/utils/products.js +1350 -1350
- package/dist/rules/GR/utils/upsells.d.ts +111 -111
- package/dist/rules/GR/utils/upsells.js +215 -215
- package/dist/services/database/BaseProvider.d.ts +29 -29
- package/dist/services/database/BaseProvider.js +28 -28
- package/dist/services/database/BatchUtils.d.ts +14 -14
- package/dist/services/database/BatchUtils.js +43 -43
- package/dist/services/database/Config.d.ts +2 -2
- package/dist/services/database/Config.js +5 -5
- package/dist/services/database/DatabaseService.d.ts +125 -125
- package/dist/services/database/DatabaseService.js +237 -237
- package/dist/services/database/FirebaseProvider.d.ts +17 -17
- package/dist/services/database/FirebaseProvider.js +235 -235
- package/dist/services/database/NotFirebaseProvider.d.ts +49 -49
- package/dist/services/database/NotFirebaseProvider.js +262 -262
- package/dist/services/g2/G2OrderSlip.d.ts +49 -49
- package/dist/services/g2/G2OrderSlip.js +228 -228
- package/dist/services/g2/utils.d.ts +19 -19
- package/dist/services/g2/utils.js +953 -953
- package/dist/services/logs/index.d.ts +23 -23
- package/dist/services/logs/index.js +66 -66
- package/dist/services/marketplace/BaseMarketServiceClass.d.ts +52 -52
- package/dist/services/marketplace/BaseMarketServiceClass.js +111 -111
- package/dist/services/marketplace/CardtraderServiceClass.d.ts +17 -17
- package/dist/services/marketplace/CardtraderServiceClass.js +139 -139
- package/dist/services/marketplace/utils.d.ts +14 -14
- package/dist/services/marketplace/utils.js +29 -29
- package/dist/services/products/BaseClass.d.ts +50 -50
- package/dist/services/products/BaseClass.js +66 -66
- package/dist/services/products/TCGService.d.ts +32 -32
- package/dist/services/products/TCGService.js +555 -555
- package/dist/services/products/utils.d.ts +31 -31
- package/dist/services/products/utils.js +144 -144
- package/dist/utils/algolia.d.ts +46 -46
- package/dist/utils/algolia.js +21 -21
- package/dist/utils/anonymisation.d.ts +54 -54
- package/dist/utils/anonymisation.js +280 -280
- package/dist/utils/array.d.ts +5 -5
- package/dist/utils/array.js +14 -14
- package/dist/utils/aws.d.ts +36 -36
- package/dist/utils/aws.js +154 -154
- package/dist/utils/booking.d.ts +30 -30
- package/dist/utils/booking.js +127 -127
- package/dist/utils/cart.d.ts +259 -259
- package/dist/utils/cart.js +1145 -1145
- package/dist/utils/categories.d.ts +2 -2
- package/dist/utils/categories.js +54 -54
- package/dist/utils/cmv.d.ts +10 -10
- package/dist/utils/cmv.js +107 -107
- package/dist/utils/console.d.ts +6 -6
- package/dist/utils/console.js +59 -59
- package/dist/utils/context.d.ts +20 -20
- package/dist/utils/context.js +61 -61
- package/dist/utils/currency.d.ts +6 -6
- package/dist/utils/currency.js +91 -91
- package/dist/utils/data.d.ts +31 -31
- package/dist/utils/data.js +296 -296
- package/dist/utils/date.d.ts +1 -1
- package/dist/utils/date.js +16 -16
- package/dist/utils/dimensions.d.ts +3 -3
- package/dist/utils/dimensions.js +16 -16
- package/dist/utils/discount.d.ts +164 -164
- package/dist/utils/discount.js +1111 -1111
- package/dist/utils/errors.d.ts +113 -113
- package/dist/utils/errors.js +113 -113
- package/dist/utils/file-admin.d.ts +8 -8
- package/dist/utils/file-admin.js +39 -39
- package/dist/utils/file.d.ts +39 -39
- package/dist/utils/file.js +208 -208
- package/dist/utils/firebase-admin.d.ts +11 -11
- package/dist/utils/firebase-admin.js +73 -73
- package/dist/utils/firebase.d.ts +58 -58
- package/dist/utils/firebase.js +148 -148
- package/dist/utils/import.d.ts +1 -1
- package/dist/utils/import.js +21 -21
- package/dist/utils/inventories.d.ts +101 -101
- package/dist/utils/inventories.js +467 -467
- package/dist/utils/locale.d.ts +24 -24
- package/dist/utils/locale.js +89 -89
- package/dist/utils/mailchimp.d.ts +58 -58
- package/dist/utils/mailchimp.js +531 -531
- package/dist/utils/mathUtils.d.ts +17 -17
- package/dist/utils/mathUtils.js +324 -324
- package/dist/utils/mongodb.d.ts +1 -1
- package/dist/utils/mongodb.js +22 -22
- package/dist/utils/object.d.ts +32 -32
- package/dist/utils/object.js +133 -133
- package/dist/utils/payment.d.ts +10 -10
- package/dist/utils/payment.js +23 -23
- package/dist/utils/products.d.ts +39 -39
- package/dist/utils/products.js +195 -195
- package/dist/utils/promiseToPurchase.d.ts +88 -88
- package/dist/utils/promiseToPurchase.js +229 -229
- package/dist/utils/prosprsearch.d.ts +42 -42
- package/dist/utils/prosprsearch.js +216 -216
- package/dist/utils/refunds.d.ts +2 -2
- package/dist/utils/refunds.js +21 -21
- package/dist/utils/sdc.d.ts +10 -10
- package/dist/utils/sdc.js +1309 -1309
- package/dist/utils/searchIndexes.d.ts +58 -58
- package/dist/utils/searchIndexes.js +247 -247
- package/dist/utils/services.d.ts +42 -42
- package/dist/utils/services.js +409 -409
- package/dist/utils/shipment.d.ts +110 -110
- package/dist/utils/shipment.js +345 -345
- package/dist/utils/simpletexting.d.ts +2 -2
- package/dist/utils/simpletexting.js +45 -45
- package/dist/utils/sliders.d.ts +4 -4
- package/dist/utils/sliders.js +24 -24
- package/dist/utils/string.d.ts +16 -16
- package/dist/utils/string.js +192 -192
- package/dist/utils/tcgService.d.ts +74 -74
- package/dist/utils/tcgService.js +308 -308
- package/dist/utils/tools.d.ts +5 -5
- package/dist/utils/tools.js +13 -13
- package/dist/utils/transferRequests.d.ts +43 -43
- package/dist/utils/transferRequests.js +67 -67
- package/dist/utils/update.d.ts +7 -7
- package/dist/utils/update.js +137 -137
- package/dist/utils/weight.d.ts +3 -3
- package/dist/utils/weight.js +16 -16
- package/dist/utils/zones.d.ts +11 -11
- package/dist/utils/zones.js +218 -218
- package/package.json +107 -107
- package/publish.sh +143 -143
- package/readme.md +182 -182
- package/dist/lib/Queue/index.d.ts +0 -40
- package/dist/lib/Queue/index.js +0 -255
- package/dist/lib/Queue/index.js.map +0 -1
|
@@ -1,837 +1,840 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __rest = (this && this.__rest) || function (s, e) {
|
|
3
|
-
var t = {};
|
|
4
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
5
|
-
t[p] = s[p];
|
|
6
|
-
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
7
|
-
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
8
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
9
|
-
t[p[i]] = s[p[i]];
|
|
10
|
-
}
|
|
11
|
-
return t;
|
|
12
|
-
};
|
|
13
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.getLabelForCartType = exports.getClientNumberForCart = exports.getPercentFromReducedPrice = exports.checkPriceForEscompte = exports.getLowestAppliedPrice = exports.getAppliedPrice = exports.getRecursiveItemsFromSubItems = exports.getRecursiveItems = exports.getGrassProductForCart = exports.getConcreteCartInfo = exports.orderCartItems = exports.getProTitleFromCart = exports.isPro = exports.getCartType = exports.checkCartTypeBeforeAddingItem = exports.checkIfDecliIsOkForMixedSale = exports.checkIfItemCanBeAddedToCart = exports.checkIfCartContainsType = exports.applyInstallationToutInclusToVerifiedItems = exports.handleAddGrassItemsCart = void 0;
|
|
18
|
-
const orderBy_1 = __importDefault(require("lodash/orderBy"));
|
|
19
|
-
const flatten_1 = __importDefault(require("lodash/flatten"));
|
|
20
|
-
const uniqBy_1 = __importDefault(require("lodash/uniqBy"));
|
|
21
|
-
const toNumber_1 = __importDefault(require("lodash/toNumber"));
|
|
22
|
-
const round_1 = __importDefault(require("lodash/round"));
|
|
23
|
-
const moment_1 = __importDefault(require("moment"));
|
|
24
|
-
// Rule specific interfaces
|
|
25
|
-
const cart_1 = require("../interfaces/cart");
|
|
26
|
-
// Rule specific functions/constants
|
|
27
|
-
const products_1 = require("./products");
|
|
28
|
-
const upsells_1 = require("./upsells");
|
|
29
|
-
const expedition_1 = require("./expedition");
|
|
30
|
-
const products_2 = require("../constants/products");
|
|
31
|
-
const Cart_1 = require("../../../Interfaces/Cart");
|
|
32
|
-
const G2_1 = require("../../../Interfaces/G2");
|
|
33
|
-
const locale_1 = require("../../../utils/locale");
|
|
34
|
-
const inventories_1 = require("../../../utils/inventories");
|
|
35
|
-
const products_3 = require("../../../utils/products");
|
|
36
|
-
const data_1 = require("../../../utils/data");
|
|
37
|
-
const data_2 = require("../interfaces/data");
|
|
38
|
-
const g2_1 = require("./g2");
|
|
39
|
-
const object_1 = require("../../../utils/object");
|
|
40
|
-
const cart_2 = require("../../../utils/cart");
|
|
41
|
-
const handleAddGrassItemsCart = async (cart, chosenDeclination, parentProduct, isUpdating, isRecommendedUpsell, formValues, fetchProduct, kentuckyBaseGrass, locale = 'fr', isPro, customPriceList, recommendedUpsellParentSlug) => {
|
|
42
|
-
var _a, _b;
|
|
43
|
-
if (!!!chosenDeclination || !!!parentProduct)
|
|
44
|
-
return {
|
|
45
|
-
error: ''
|
|
46
|
-
};
|
|
47
|
-
let itemsToAdd = [];
|
|
48
|
-
let itemsToUpdate = [];
|
|
49
|
-
let itemsToDelete = [];
|
|
50
|
-
let newShippingPayload = cart.shipping_payload;
|
|
51
|
-
const prodUpsell = parentProduct.product_upsells;
|
|
52
|
-
const onlySamplesInCart = !!cart.items.length && cart.items.every((item) => !!item.is_sample);
|
|
53
|
-
if (!!onlySamplesInCart) {
|
|
54
|
-
return {
|
|
55
|
-
error: (0, locale_1.translateILang)({
|
|
56
|
-
fr: "Pour ajouter ce produit à votre panier vous devez d'abord compléter la commande en cours ou vider votre panier",
|
|
57
|
-
en: 'To add this product to your cart, you must first complete your current order or empty your cart'
|
|
58
|
-
}, locale)
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
if (!!isPro && !!customPriceList) {
|
|
62
|
-
chosenDeclination = (0, g2_1.checkForCustomPriceEquivalent)(chosenDeclination, customPriceList, {
|
|
63
|
-
removeTierPricing: chosenDeclination.sku == products_2.kentucky || chosenDeclination.parent_slug === 'kentucky'
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
// --------------------------------------------------------------------------------
|
|
67
|
-
// Ajout gazon aux items
|
|
68
|
-
if (isUpdating && !!cart.items.find((i) => i.sku === chosenDeclination.sku)) {
|
|
69
|
-
itemsToUpdate.push({
|
|
70
|
-
sku: chosenDeclination.sku,
|
|
71
|
-
qte: formValues.qte || 0
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
itemsToAdd.push(Object.assign(Object.assign({}, chosenDeclination), { qte: formValues.qte || 0, parent_slug: !!isRecommendedUpsell && recommendedUpsellParentSlug ? recommendedUpsellParentSlug : parentProduct.slug, product_upsells: parentProduct.product_upsells, categories: parentProduct.categories }));
|
|
76
|
-
}
|
|
77
|
-
if (!!!isRecommendedUpsell) {
|
|
78
|
-
let baseGrass = parentProduct;
|
|
79
|
-
// --------------------------------------------------------------------------------
|
|
80
|
-
// If gazon de spécialité, il aura en upsell le gazon de base (Kentucky)...
|
|
81
|
-
// (parent_slug: kentucky, sku (declinaison): 010010000) // NOTE - Sku peut varier!!
|
|
82
|
-
if (!!prodUpsell &&
|
|
83
|
-
!!prodUpsell.find((anUpsell) => anUpsell.recommendation_sku === products_2.kentucky || anUpsell.recommendation_parent_slug == 'kentucky')) {
|
|
84
|
-
const baseGrassProd = kentuckyBaseGrass;
|
|
85
|
-
if (!!baseGrassProd)
|
|
86
|
-
baseGrass = baseGrassProd;
|
|
87
|
-
}
|
|
88
|
-
// --------------------------------------------------------------------------------
|
|
89
|
-
// Check if grass has any other auto_add upsells to add
|
|
90
|
-
if (!!prodUpsell) {
|
|
91
|
-
for (let anUpsell of prodUpsell) {
|
|
92
|
-
if (!!!anUpsell.auto_add)
|
|
93
|
-
continue;
|
|
94
|
-
const sameProduct = await fetchProduct(anUpsell.recommendation_parent_slug, locale, undefined, true);
|
|
95
|
-
if (!!!sameProduct || !!!sameProduct.declinations)
|
|
96
|
-
continue;
|
|
97
|
-
let sameDecli = (sameProduct.declinations || []).find((decli) => decli.sku === anUpsell.recommendation_sku);
|
|
98
|
-
if (!!!sameDecli)
|
|
99
|
-
continue;
|
|
100
|
-
if (!!isPro && !!customPriceList) {
|
|
101
|
-
sameDecli = (0, g2_1.checkForCustomPriceEquivalent)(sameDecli, customPriceList, {
|
|
102
|
-
removeTierPricing: sameDecli.sku == 'kentucky' || sameDecli.parent_slug === 'kentucky'
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
const anUpsellProduct = Object.assign(Object.assign(Object.assign(Object.assign({}, sameDecli), { parent_slug: anUpsell.recommendation_parent_slug, recommended_qte: anUpsell.recommendation_qty, recommended_sku: anUpsell.recommendation_sku, matching_qte: !!anUpsell.matching_qty, auto_add: anUpsell.auto_add, actual_qte: anUpsell.actual_qty }), (!!anUpsell.is_recommendation ? { is_recommendation: true } : {})), (!!anUpsell.show_recommendation_msg ? { show_recommendation_msg: true } : {}));
|
|
106
|
-
const ratio = (0, upsells_1.calculateUpsellQte)(anUpsellProduct, formValues.qte || 0);
|
|
107
|
-
if (!!ratio) {
|
|
108
|
-
if (isUpdating && !!cart.items.find((i) => i.sku === anUpsellProduct.sku)) {
|
|
109
|
-
itemsToUpdate.push({
|
|
110
|
-
sku: anUpsellProduct.sku,
|
|
111
|
-
qte: ratio
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
itemsToAdd.push(Object.assign(Object.assign({}, sameDecli), { qte: ratio, is_upsell_of_sku: chosenDeclination.sku, parent_slug: sameProduct.slug, product_upsells: sameProduct.product_upsells, categories: sameProduct.categories }));
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
// --------------------------------------------------------------------------------
|
|
121
|
-
// If installation...
|
|
122
|
-
const currentInstallItem = cart.items.find((i) => i.parent_slug === 'installation-gazon');
|
|
123
|
-
if (!!formValues.installation) {
|
|
124
|
-
const upsell = baseGrass.product_upsells;
|
|
125
|
-
if (!!upsell) {
|
|
126
|
-
const allInstallFees = await (0, products_1.getInstallationArray)(Number(formValues.qte), upsell, fetchProduct, locale, isPro, chosenDeclination.sku, customPriceList, {
|
|
127
|
-
engrais: !!formValues.engrais,
|
|
128
|
-
roulage: !!formValues.roulage
|
|
129
|
-
});
|
|
130
|
-
const installationDecli = allInstallFees.find((fee) => fee.parent_slug === 'installation-gazon');
|
|
131
|
-
const installIsDifferent = !!currentInstallItem && !!installationDecli && currentInstallItem.sku !== installationDecli.sku;
|
|
132
|
-
for (let fee of allInstallFees) {
|
|
133
|
-
if (isUpdating && !!cart.items.find((i) => i.sku === fee.sku) && !!!installIsDifferent) {
|
|
134
|
-
itemsToUpdate.push({
|
|
135
|
-
sku: fee.sku,
|
|
136
|
-
qte: fee.qte
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
else {
|
|
140
|
-
itemsToAdd.push(fee);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
const minQteInstall = (0, expedition_1.getMinQteInstall)(!!isPro);
|
|
144
|
-
// ================================================================================
|
|
145
|
-
// Check to delete existing items if necessary
|
|
146
|
-
// --------------------------------------------------------------------------------
|
|
147
|
-
// If min qty install...
|
|
148
|
-
if (typeof formValues.qte === 'number' && formValues.qte >= minQteInstall) {
|
|
149
|
-
const minInstall = cart.items.find((item) => item.parent_slug === 'frais-minimum-gazon-pour-installation');
|
|
150
|
-
if (!!minInstall) {
|
|
151
|
-
itemsToDelete.push(minInstall.sku);
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
// --------------------------------------------------------------------------------
|
|
155
|
-
// If engrais...
|
|
156
|
-
const fertilisationItem = cart.items.find((i) => i.parent_slug === 'installation-fertilisation');
|
|
157
|
-
if (isUpdating && !!!formValues.engrais && !!fertilisationItem) {
|
|
158
|
-
itemsToDelete.push(fertilisationItem.sku);
|
|
159
|
-
}
|
|
160
|
-
// --------------------------------------------------------------------------------
|
|
161
|
-
// If roulage...
|
|
162
|
-
const roulageItem = cart.items.find((i) => i.parent_slug === 'installation-roulage');
|
|
163
|
-
if (isUpdating && !!!formValues.roulage && !!roulageItem) {
|
|
164
|
-
itemsToDelete.push(roulageItem.sku);
|
|
165
|
-
}
|
|
166
|
-
// --------------------------------------------------------------------------------
|
|
167
|
-
// If cart already has installation item...
|
|
168
|
-
// --> Utile pour la modification des items du cart, vu que la props is_upsell_of_sku ne peut pas se modifier on update
|
|
169
|
-
const otherInstall = !!installIsDifferent ? currentInstallItem : undefined;
|
|
170
|
-
if (!!otherInstall) {
|
|
171
|
-
itemsToDelete.push(otherInstall.sku);
|
|
172
|
-
itemsToDelete = [
|
|
173
|
-
...itemsToDelete,
|
|
174
|
-
...cart.items.filter((i) => i.is_upsell_of_sku === otherInstall.sku).map((i) => i.sku)
|
|
175
|
-
];
|
|
176
|
-
}
|
|
177
|
-
// ==================================================================================
|
|
178
|
-
// If isPro, check for corresponding pro extra installation fees
|
|
179
|
-
if (!!isPro) {
|
|
180
|
-
newShippingPayload = Object.assign(Object.assign({}, newShippingPayload), { pro_installation_info: formValues.pro });
|
|
181
|
-
const feeProduct = await fetchProduct('frais_extra_pro_installation', locale, undefined, true);
|
|
182
|
-
const handleProSpec = (sku, isSelected) => {
|
|
183
|
-
if (!!!feeProduct || !!!installationDecli)
|
|
184
|
-
return;
|
|
185
|
-
const itemIsInCart = !!cart.items.find((i) => i.sku === sku);
|
|
186
|
-
if (isSelected) {
|
|
187
|
-
let decli = feeProduct.declinations.find((d) => d.sku === sku);
|
|
188
|
-
if (!!decli) {
|
|
189
|
-
if (!!customPriceList) {
|
|
190
|
-
decli = (0, g2_1.checkForCustomPriceEquivalent)(decli, customPriceList);
|
|
191
|
-
}
|
|
192
|
-
if (isUpdating && itemIsInCart && !!!otherInstall) {
|
|
193
|
-
itemsToUpdate.push({
|
|
194
|
-
sku: sku,
|
|
195
|
-
qte: typeof formValues.qte === 'number' && formValues.qte < minQteInstall
|
|
196
|
-
? minQteInstall
|
|
197
|
-
: formValues.qte || 0
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
else {
|
|
201
|
-
if (!!otherInstall) {
|
|
202
|
-
itemsToDelete.push(decli.sku);
|
|
203
|
-
}
|
|
204
|
-
itemsToAdd.push(Object.assign(Object.assign({}, decli), { qte: typeof formValues.qte === 'number' && formValues.qte < minQteInstall
|
|
205
|
-
? minQteInstall
|
|
206
|
-
: formValues.qte || 0, is_upsell_of_sku: installationDecli.sku, parent_slug: 'frais_extra_pro_installation' }));
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
else {
|
|
211
|
-
if (itemIsInCart) {
|
|
212
|
-
itemsToDelete.push(sku);
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
};
|
|
216
|
-
if (!!formValues.pro && !!formValues.pro.specs) {
|
|
217
|
-
Object.entries(formValues.pro.specs).forEach((spec) => {
|
|
218
|
-
handleProSpec(products_2.installationProSpecSkus[spec[0]], spec[1]);
|
|
219
|
-
});
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
else {
|
|
225
|
-
if (!!isUpdating && !formValues.installation) {
|
|
226
|
-
if (!!newShippingPayload && !!newShippingPayload.pro_installation_info) {
|
|
227
|
-
const { pro_installation_info } = newShippingPayload, rest = __rest(newShippingPayload, ["pro_installation_info"]);
|
|
228
|
-
newShippingPayload = Object.assign({}, rest);
|
|
229
|
-
}
|
|
230
|
-
itemsToDelete = [...itemsToDelete, ...(0, products_1.getAllInstallFromItems)(cart.items).map((i) => i.sku)];
|
|
231
|
-
// Restore price of kentucky when overriden by all-inclusive installation
|
|
232
|
-
if (!!isPro && !!(0, products_1.getInstallationAllInclusiveFromPriceList)(customPriceList)) {
|
|
233
|
-
const kentuckyIdx = cart.items.findIndex((i) => !!i.price_override && (i.sku === products_2.kentucky || i.parent_slug == 'kentucky'));
|
|
234
|
-
if (kentuckyIdx !== -1) {
|
|
235
|
-
const kentuckyItem = cart.items[kentuckyIdx];
|
|
236
|
-
itemsToUpdate = itemsToUpdate.filter((u) => u.sku !== kentuckyItem.sku);
|
|
237
|
-
const originalDecli = ((_a = kentuckyBaseGrass === null || kentuckyBaseGrass === void 0 ? void 0 : kentuckyBaseGrass.declinations) === null || _a === void 0 ? void 0 : _a.find((d) => d.sku === kentuckyItem.sku)) ||
|
|
238
|
-
((_b = parentProduct.declinations) === null || _b === void 0 ? void 0 : _b.find((d) => d.sku === kentuckyItem.sku));
|
|
239
|
-
if (!!originalDecli) {
|
|
240
|
-
const restoredDecli = !!customPriceList
|
|
241
|
-
? (0, g2_1.checkForCustomPriceEquivalent)(originalDecli, customPriceList, {
|
|
242
|
-
removeTierPricing: true
|
|
243
|
-
})
|
|
244
|
-
: originalDecli;
|
|
245
|
-
cart.items[kentuckyIdx] = Object.assign(Object.assign(Object.assign({}, kentuckyItem), restoredDecli), { qte: kentuckyItem.qte, price_override: false });
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
itemsToAdd = (0, upsells_1.removeExceptionAutoAddUpsells)(itemsToAdd);
|
|
253
|
-
if (!!isUpdating) {
|
|
254
|
-
if (!!cart.items) {
|
|
255
|
-
const fusion = [
|
|
256
|
-
...cart.items.filter((i) => itemsToUpdate.some((update) => i.sku === update.sku) || i.is_upsell_of_sku === 'summary'),
|
|
257
|
-
...itemsToAdd
|
|
258
|
-
];
|
|
259
|
-
let productsToRemove = fusion.filter((item) => {
|
|
260
|
-
const removedBecauseException = !!!(0, upsells_1.removeExceptionAutoAddUpsells)(fusion).some((i) => i.sku === item.sku);
|
|
261
|
-
return item.is_upsell_of_sku === 'summary' || !!removedBecauseException;
|
|
262
|
-
});
|
|
263
|
-
itemsToAdd = itemsToAdd.filter((i) => !!!productsToRemove.map((r) => r.sku).includes(i.sku));
|
|
264
|
-
if (!!productsToRemove.length) {
|
|
265
|
-
itemsToDelete = [...itemsToDelete, ...productsToRemove.map((item) => item.sku)];
|
|
266
|
-
if (newShippingPayload) {
|
|
267
|
-
const { pro_installation_info } = newShippingPayload;
|
|
268
|
-
newShippingPayload = Object.assign(Object.assign({}, newShippingPayload), (!!pro_installation_info ? { pro_installation_info } : {}));
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
// When installation all-inclusive, force kentucky and frais de livraison to 0$
|
|
274
|
-
if ((0, products_1.isInstallAllInclusiveActive)(!!formValues.installation, isPro, customPriceList)) {
|
|
275
|
-
itemsToAdd = itemsToAdd.map((item) => (0, products_1.applyAllInclusiveOverrides)(item));
|
|
276
|
-
// Also override existing Kentucky items that are in the cart but not yet at $0
|
|
277
|
-
if (!!isUpdating) {
|
|
278
|
-
const kentuckyIdx = cart.items.findIndex((i) => !i.price_override && i.sku === products_2.kentucky);
|
|
279
|
-
if (kentuckyIdx !== -1) {
|
|
280
|
-
const kentuckyItemToOverride = cart.items[kentuckyIdx];
|
|
281
|
-
itemsToUpdate = itemsToUpdate.filter((u) => u.sku !== kentuckyItemToOverride.sku);
|
|
282
|
-
cart.items[kentuckyIdx] = (0, products_1.applyAllInclusiveOverrides)(kentuckyItemToOverride);
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
return {
|
|
287
|
-
itemsToAdd,
|
|
288
|
-
itemsToUpdate,
|
|
289
|
-
itemsToDelete,
|
|
290
|
-
newShippingPayload
|
|
291
|
-
};
|
|
292
|
-
};
|
|
293
|
-
exports.handleAddGrassItemsCart = handleAddGrassItemsCart;
|
|
294
|
-
/**
|
|
295
|
-
* Replaces ventilated installation with installation tout inclus and applies Kentucky overrides.
|
|
296
|
-
* Used during cart verification when a pro customer has installation tout inclus but cart has ventilated installation.
|
|
297
|
-
*/
|
|
298
|
-
const applyInstallationToutInclusToVerifiedItems = (verifiedItems, customPriceList, isPro, installationParent) => {
|
|
299
|
-
var _a;
|
|
300
|
-
const currentInstall = verifiedItems.find((i) => i.parent_slug === 'installation-gazon');
|
|
301
|
-
if (!currentInstall || currentInstall.sku === products_2.installationAllInclusiveSku)
|
|
302
|
-
return verifiedItems;
|
|
303
|
-
const allInclusivePriceItem = (0, products_1.getInstallationAllInclusiveFromPriceList)(customPriceList);
|
|
304
|
-
if (!allInclusivePriceItem || !isPro)
|
|
305
|
-
return verifiedItems;
|
|
306
|
-
if (!installationParent || !installationParent.declinations)
|
|
307
|
-
return verifiedItems;
|
|
308
|
-
const allInclusiveDecli = installationParent.declinations.find((d) => d.sku === products_2.installationAllInclusiveSku);
|
|
309
|
-
if (!!!allInclusiveDecli)
|
|
310
|
-
return verifiedItems;
|
|
311
|
-
const priceAmount = (_a = allInclusivePriceItem.price) !== null && _a !== void 0 ? _a : allInclusivePriceItem.reg;
|
|
312
|
-
const grassItem = verifiedItems.find((i) => !!(0, products_1.checkIfProductIsOfType)(i, 'gazon') && !!!i.is_sample);
|
|
313
|
-
const chosenSku = !!grassItem ? grassItem.sku : currentInstall.is_upsell_of_sku || '';
|
|
314
|
-
const newInstallItem = Object.assign(Object.assign({}, allInclusiveDecli), { regular_price: Object.assign(Object.assign({}, allInclusiveDecli.regular_price), { amount: priceAmount }), parent_slug: 'installation-gazon', qte: currentInstall.qte, is_upsell_of_sku: chosenSku, product_upsells: installationParent.product_upsells, categories: installationParent.categories });
|
|
315
|
-
const installSkusToRemove = (0, products_1.getAllInstallFromItems)(verifiedItems).map((i) => i.sku);
|
|
316
|
-
let result = verifiedItems.filter((i) => !installSkusToRemove.includes(i.sku));
|
|
317
|
-
result = [...result, newInstallItem];
|
|
318
|
-
result = result.map((item) => (0, products_1.applyAllInclusiveOverrides)(item));
|
|
319
|
-
return result;
|
|
320
|
-
};
|
|
321
|
-
exports.applyInstallationToutInclusToVerifiedItems = applyInstallationToutInclusToVerifiedItems;
|
|
322
|
-
// -----------------------------------------------------------------------------------------
|
|
323
|
-
// #region CART SPECIFIC VERIFICATIONS AND DATA
|
|
324
|
-
const checkIfCartContainsType = (type, cartData, excludeUndefinedForAccessories = true, excludeUndefinedForBeton = true) => {
|
|
325
|
-
switch (type) {
|
|
326
|
-
case cart_1.CartGeneralTypeEnum.RETURN_PALLETS:
|
|
327
|
-
return !!cartData.shipping_payload && !!cartData.shipping_payload.pallet_return_memo_ref;
|
|
328
|
-
case cart_1.CartGeneralTypeEnum.GRASS:
|
|
329
|
-
return !!cartData.items.some((i) => !!(0, products_1.checkIfProductIsOfType)(i, 'gazon') && !!!i.is_sample);
|
|
330
|
-
case cart_1.CartGeneralTypeEnum.VRAC:
|
|
331
|
-
return !!cartData.items.some((i) => !!(0, products_1.checkIfProductIsOfType)(i, 'vrac'));
|
|
332
|
-
case cart_1.CartGeneralTypeEnum.INSTALLATION:
|
|
333
|
-
return !!cartData.items.some((i) => i.parent_slug === 'installation-gazon');
|
|
334
|
-
case cart_1.CartGeneralTypeEnum.SAMPLE:
|
|
335
|
-
return !!cartData.items.some((i) => !!i.is_sample);
|
|
336
|
-
case cart_1.CartGeneralTypeEnum.ONLY_ACCESSORIES:
|
|
337
|
-
return (!!cartData.items &&
|
|
338
|
-
!!cartData.items.length &&
|
|
339
|
-
cartData.items
|
|
340
|
-
.filter((i) => !!!i.is_service)
|
|
341
|
-
.every((i) => !!(0, products_1.checkIfProductIsOfType)(i, 'accessoire', excludeUndefinedForAccessories)));
|
|
342
|
-
case cart_1.CartGeneralTypeEnum.BETON:
|
|
343
|
-
return (!!cartData.items &&
|
|
344
|
-
!!cartData.items.length &&
|
|
345
|
-
cartData.items.some((i) => !!(0, products_1.checkIfProductIsOfType)(i, 'beton', excludeUndefinedForBeton) && !!!i.is_sample));
|
|
346
|
-
default:
|
|
347
|
-
return false;
|
|
348
|
-
}
|
|
349
|
-
};
|
|
350
|
-
exports.checkIfCartContainsType = checkIfCartContainsType;
|
|
351
|
-
const checkIfItemCanBeAddedToCart = (prod, parentProdType, cartData, addToCart = false, declination = undefined, useParent = false, autoAdd = false) => {
|
|
352
|
-
// -----------------------------------------------------------------------------------------------
|
|
353
|
-
// If... product can not be added to cart, show error and return false.
|
|
354
|
-
const addItToCart = !!autoAdd ? true : (0, exports.checkCartTypeBeforeAddingItem)(prod, declination, cartData);
|
|
355
|
-
if (!!!addItToCart) {
|
|
356
|
-
return {
|
|
357
|
-
addToCart: false,
|
|
358
|
-
error: {
|
|
359
|
-
fr: "Pour ajouter ce type de produit à votre panier vous devez d'abord compléter la commande en cours ou vider votre panier.",
|
|
360
|
-
en: 'To add this type of product to your cart, you must first complete the current order or empty your cart.'
|
|
361
|
-
}
|
|
362
|
-
};
|
|
363
|
-
}
|
|
364
|
-
// -----------------------------------------------------------------------------------------------
|
|
365
|
-
// Set parentProduct type variable depending on product category
|
|
366
|
-
let prodDeclination = declination; // If prodDeclination is set, means customer chose spécific sku and is trying to add to cart.
|
|
367
|
-
if (!!!useParent) {
|
|
368
|
-
switch (parentProdType) {
|
|
369
|
-
case 'gazon':
|
|
370
|
-
prodDeclination =
|
|
371
|
-
prodDeclination || prod.declinations.find((declination) => !!!declination.is_sample);
|
|
372
|
-
break;
|
|
373
|
-
case 'beton':
|
|
374
|
-
break;
|
|
375
|
-
case 'other':
|
|
376
|
-
case 'vrac':
|
|
377
|
-
if (!!!prod.declinations.find((decli) => !!decli.other_units)) {
|
|
378
|
-
prodDeclination =
|
|
379
|
-
prodDeclination || prod.declinations.find((declination) => !!!declination.is_sample);
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
}
|
|
383
|
-
const decliIsSample = !!prodDeclination && !!prodDeclination.is_sample;
|
|
384
|
-
// --------------------------------------------------------------------------------------------------
|
|
385
|
-
// If... prodDeclination is sample, check if max qte (4) is met or sample already in cart before.
|
|
386
|
-
// If so, show error and return false.
|
|
387
|
-
// Else if... product is of any type other than grass, set addToCart to true.
|
|
388
|
-
if (!!decliIsSample) {
|
|
389
|
-
if (!!cartData && !!cartData.items.length) {
|
|
390
|
-
switch (true) {
|
|
391
|
-
case cartData.items.length === 4:
|
|
392
|
-
return {
|
|
393
|
-
addToCart: false,
|
|
394
|
-
error: {
|
|
395
|
-
fr: 'Un maximum de quatre échantillons est permis à la fois par commande.',
|
|
396
|
-
en: 'A maximum of four samples can be added to your cart.'
|
|
397
|
-
}
|
|
398
|
-
};
|
|
399
|
-
case !!cartData.items.find((item) => !!prodDeclination && item.sku === prodDeclination.sku):
|
|
400
|
-
return {
|
|
401
|
-
addToCart: false,
|
|
402
|
-
error: {
|
|
403
|
-
fr: 'Vous avez déjà cet échantillon au panier.',
|
|
404
|
-
en: 'This sample is already in your cart.'
|
|
405
|
-
}
|
|
406
|
-
};
|
|
407
|
-
default:
|
|
408
|
-
addToCart = true;
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
else {
|
|
412
|
-
addToCart = true;
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
else if (!!prodDeclination && !!!(0, products_1.checkIfProductIsOfType)(prod, 'gazon')) {
|
|
416
|
-
addToCart = true;
|
|
417
|
-
}
|
|
418
|
-
return {
|
|
419
|
-
addToCart: addToCart,
|
|
420
|
-
declinationChecked: prodDeclination,
|
|
421
|
-
showForm: true
|
|
422
|
-
};
|
|
423
|
-
};
|
|
424
|
-
exports.checkIfItemCanBeAddedToCart = checkIfItemCanBeAddedToCart;
|
|
425
|
-
const checkIfDecliIsOkForMixedSale = (decli, typeToCheck) => {
|
|
426
|
-
return (decli.attributes &&
|
|
427
|
-
!!decli.attributes[data_2.AttributesIdEnumGR.VENTE_MIXTE] &&
|
|
428
|
-
!!decli.attributes[data_2.AttributesIdEnumGR.VENTE_MIXTE].includes(typeToCheck));
|
|
429
|
-
};
|
|
430
|
-
exports.checkIfDecliIsOkForMixedSale = checkIfDecliIsOkForMixedSale;
|
|
431
|
-
const checkCartTypeBeforeAddingItem = (prod, declination, cartData, forceCartType) => {
|
|
432
|
-
if (!!!cartData || !!!cartData.items || !!!cartData.items.length) {
|
|
433
|
-
if (!!!forceCartType)
|
|
434
|
-
return true;
|
|
435
|
-
}
|
|
436
|
-
const cartType = !!forceCartType ? forceCartType : !!cartData ? (0, exports.getCartType)(cartData) : '';
|
|
437
|
-
if (!!!cartType)
|
|
438
|
-
return true;
|
|
439
|
-
const items = !!cartData ? cartData.items : [];
|
|
440
|
-
// Can't add items to cart if ...
|
|
441
|
-
// -----------------------------------------
|
|
442
|
-
// ... cart is of type booking
|
|
443
|
-
if (!!cartData && !!cartData.is_booking)
|
|
444
|
-
return false;
|
|
445
|
-
// --------------------------------------------------------------------------------------------------
|
|
446
|
-
// ... if new item is NOT a sample or does NOT contain samples in declinations && cart already contains samples
|
|
447
|
-
if ((!!!prod.declinations.find((decli) => !!decli.is_sample) || (!!declination && !declination.is_sample)) &&
|
|
448
|
-
cartType === cart_1.CartGeneralTypeEnum.SAMPLE) {
|
|
449
|
-
return false;
|
|
450
|
-
}
|
|
451
|
-
// --------------------------------------------------------------------------------------------------
|
|
452
|
-
// ... if new item is a sample && cart has items that are NOT samples
|
|
453
|
-
if (!!declination && !!declination.is_sample && cartType !== cart_1.CartGeneralTypeEnum.SAMPLE) {
|
|
454
|
-
return false;
|
|
455
|
-
}
|
|
456
|
-
// ----------------------------------------------------------
|
|
457
|
-
// ... new item is of type grass and cart already contains grass or items that cannot be sold with grass
|
|
458
|
-
if (!!(0, products_1.checkIfProductIsOfType)(prod, 'gazon') && cartType !== cart_1.CartGeneralTypeEnum.SAMPLE) {
|
|
459
|
-
if (!!items.some((i) => !!(0, products_1.checkIfProductIsOfType)(i, 'gazon')))
|
|
460
|
-
return false;
|
|
461
|
-
if (!!items.some((i) => !!!(0, exports.checkIfDecliIsOkForMixedSale)(i, 'gazon')))
|
|
462
|
-
return false;
|
|
463
|
-
}
|
|
464
|
-
// --------------------------------------------------------------------------------------------------
|
|
465
|
-
// ... if cart already has a grass product
|
|
466
|
-
let currentCartUpsells = [];
|
|
467
|
-
try {
|
|
468
|
-
currentCartUpsells = (0, uniqBy_1.default)((0, flatten_1.default)(items.map((i) => i.product_upsells || [])), (i) => !!i.recommendation_sku ? i.recommendation_sku : i.recommendation_parent_slug);
|
|
469
|
-
}
|
|
470
|
-
catch (e) {
|
|
471
|
-
if (!!process.env.IS_TEST_ENV)
|
|
472
|
-
console.log('error on fetching cart upsells: ', e.toString());
|
|
473
|
-
}
|
|
474
|
-
if (cartType === cart_1.CartGeneralTypeEnum.GRASS) {
|
|
475
|
-
if (!!!prod.declinations.some((decli) => (0, exports.checkIfDecliIsOkForMixedSale)(decli, 'gazon')) ||
|
|
476
|
-
(!!declination && !!!(0, exports.checkIfDecliIsOkForMixedSale)(declination, 'gazon'))) {
|
|
477
|
-
if (!!!currentCartUpsells.length ||
|
|
478
|
-
(!!currentCartUpsells.length &&
|
|
479
|
-
(!!!prod.declinations.find((decli) => !!currentCartUpsells.find((item) => (!!item.use_parent &&
|
|
480
|
-
item.recommendation_parent_slug &&
|
|
481
|
-
item.recommendation_parent_slug === prod.slug) ||
|
|
482
|
-
item.recommendation_sku === decli.sku)) ||
|
|
483
|
-
(!!declination &&
|
|
484
|
-
!!!currentCartUpsells.find((item) => item.recommendation_sku === declination.sku ||
|
|
485
|
-
(!!item.use_parent &&
|
|
486
|
-
item.recommendation_parent_slug &&
|
|
487
|
-
item.recommendation_parent_slug === prod.slug)))))) {
|
|
488
|
-
return false;
|
|
489
|
-
}
|
|
490
|
-
}
|
|
491
|
-
else {
|
|
492
|
-
}
|
|
493
|
-
}
|
|
494
|
-
// --------------------------------------------------------------------------------------------------
|
|
495
|
-
// ... if new item is of type vrac and cart contains anything else
|
|
496
|
-
if (cartType !== cart_1.CartGeneralTypeEnum.VRAC &&
|
|
497
|
-
(prod.declinations.every((decli) => !!(0, products_1.checkIfProductIsOfType)(decli, 'vrac')) ||
|
|
498
|
-
(!!declination && !!(0, products_1.checkIfProductIsOfType)(declination, 'vrac'))) &&
|
|
499
|
-
items.some((i) => !!!(0, exports.checkIfDecliIsOkForMixedSale)(i, 'vrac'))) {
|
|
500
|
-
return false;
|
|
501
|
-
}
|
|
502
|
-
// --------------------------------------------------------------------------------------------------
|
|
503
|
-
// ... if new item is of any other type than vrac and cart contains vrac
|
|
504
|
-
if (cartType === cart_1.CartGeneralTypeEnum.VRAC &&
|
|
505
|
-
(!!!prod.declinations.some((decli) => !!(0, products_1.checkIfProductIsOfType)(decli, 'vrac') || !!(0, exports.checkIfDecliIsOkForMixedSale)(decli, 'vrac')) ||
|
|
506
|
-
(!!declination &&
|
|
507
|
-
!!!(0, products_1.checkIfProductIsOfType)(declination, 'vrac', true) &&
|
|
508
|
-
!!!(0, exports.checkIfDecliIsOkForMixedSale)(declination, 'vrac')))) {
|
|
509
|
-
return false;
|
|
510
|
-
}
|
|
511
|
-
return true;
|
|
512
|
-
};
|
|
513
|
-
exports.checkCartTypeBeforeAddingItem = checkCartTypeBeforeAddingItem;
|
|
514
|
-
const getCartType = (cartData) => {
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
if (item.is_service
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
const
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
const
|
|
583
|
-
if (!!!
|
|
584
|
-
return false;
|
|
585
|
-
const
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
.
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
(
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
const
|
|
625
|
-
if (
|
|
626
|
-
return ordered;
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
const
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
*
|
|
680
|
-
* @param {
|
|
681
|
-
* @param {
|
|
682
|
-
* @
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
if (
|
|
690
|
-
return
|
|
691
|
-
}
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
const
|
|
707
|
-
const
|
|
708
|
-
const
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
if (!!
|
|
713
|
-
return
|
|
714
|
-
}
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
*
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
*
|
|
762
|
-
* @param
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
const
|
|
771
|
-
|
|
772
|
-
if
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
}
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
const
|
|
802
|
-
|
|
803
|
-
const
|
|
804
|
-
|
|
805
|
-
if
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
endOfCode = `${!!isPro ? '3' :
|
|
810
|
-
}
|
|
811
|
-
|
|
812
|
-
}
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
3
|
+
var t = {};
|
|
4
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
5
|
+
t[p] = s[p];
|
|
6
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
7
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
8
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
9
|
+
t[p[i]] = s[p[i]];
|
|
10
|
+
}
|
|
11
|
+
return t;
|
|
12
|
+
};
|
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.getLabelForCartType = exports.getClientNumberForCart = exports.getPercentFromReducedPrice = exports.checkPriceForEscompte = exports.getLowestAppliedPrice = exports.getAppliedPrice = exports.getRecursiveItemsFromSubItems = exports.getRecursiveItems = exports.getGrassProductForCart = exports.getConcreteCartInfo = exports.orderCartItems = exports.getProTitleFromCart = exports.isPro = exports.getCartType = exports.checkCartTypeBeforeAddingItem = exports.checkIfDecliIsOkForMixedSale = exports.checkIfItemCanBeAddedToCart = exports.checkIfCartContainsType = exports.applyInstallationToutInclusToVerifiedItems = exports.handleAddGrassItemsCart = void 0;
|
|
18
|
+
const orderBy_1 = __importDefault(require("lodash/orderBy"));
|
|
19
|
+
const flatten_1 = __importDefault(require("lodash/flatten"));
|
|
20
|
+
const uniqBy_1 = __importDefault(require("lodash/uniqBy"));
|
|
21
|
+
const toNumber_1 = __importDefault(require("lodash/toNumber"));
|
|
22
|
+
const round_1 = __importDefault(require("lodash/round"));
|
|
23
|
+
const moment_1 = __importDefault(require("moment"));
|
|
24
|
+
// Rule specific interfaces
|
|
25
|
+
const cart_1 = require("../interfaces/cart");
|
|
26
|
+
// Rule specific functions/constants
|
|
27
|
+
const products_1 = require("./products");
|
|
28
|
+
const upsells_1 = require("./upsells");
|
|
29
|
+
const expedition_1 = require("./expedition");
|
|
30
|
+
const products_2 = require("../constants/products");
|
|
31
|
+
const Cart_1 = require("../../../Interfaces/Cart");
|
|
32
|
+
const G2_1 = require("../../../Interfaces/G2");
|
|
33
|
+
const locale_1 = require("../../../utils/locale");
|
|
34
|
+
const inventories_1 = require("../../../utils/inventories");
|
|
35
|
+
const products_3 = require("../../../utils/products");
|
|
36
|
+
const data_1 = require("../../../utils/data");
|
|
37
|
+
const data_2 = require("../interfaces/data");
|
|
38
|
+
const g2_1 = require("./g2");
|
|
39
|
+
const object_1 = require("../../../utils/object");
|
|
40
|
+
const cart_2 = require("../../../utils/cart");
|
|
41
|
+
const handleAddGrassItemsCart = async (cart, chosenDeclination, parentProduct, isUpdating, isRecommendedUpsell, formValues, fetchProduct, kentuckyBaseGrass, locale = 'fr', isPro, customPriceList, recommendedUpsellParentSlug) => {
|
|
42
|
+
var _a, _b;
|
|
43
|
+
if (!!!chosenDeclination || !!!parentProduct)
|
|
44
|
+
return {
|
|
45
|
+
error: ''
|
|
46
|
+
};
|
|
47
|
+
let itemsToAdd = [];
|
|
48
|
+
let itemsToUpdate = [];
|
|
49
|
+
let itemsToDelete = [];
|
|
50
|
+
let newShippingPayload = cart.shipping_payload;
|
|
51
|
+
const prodUpsell = parentProduct.product_upsells;
|
|
52
|
+
const onlySamplesInCart = !!cart.items.length && cart.items.every((item) => !!item.is_sample);
|
|
53
|
+
if (!!onlySamplesInCart) {
|
|
54
|
+
return {
|
|
55
|
+
error: (0, locale_1.translateILang)({
|
|
56
|
+
fr: "Pour ajouter ce produit à votre panier vous devez d'abord compléter la commande en cours ou vider votre panier",
|
|
57
|
+
en: 'To add this product to your cart, you must first complete your current order or empty your cart'
|
|
58
|
+
}, locale)
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
if (!!isPro && !!customPriceList) {
|
|
62
|
+
chosenDeclination = (0, g2_1.checkForCustomPriceEquivalent)(chosenDeclination, customPriceList, {
|
|
63
|
+
removeTierPricing: chosenDeclination.sku == products_2.kentucky || chosenDeclination.parent_slug === 'kentucky'
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
// --------------------------------------------------------------------------------
|
|
67
|
+
// Ajout gazon aux items
|
|
68
|
+
if (isUpdating && !!cart.items.find((i) => i.sku === chosenDeclination.sku)) {
|
|
69
|
+
itemsToUpdate.push({
|
|
70
|
+
sku: chosenDeclination.sku,
|
|
71
|
+
qte: formValues.qte || 0
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
itemsToAdd.push(Object.assign(Object.assign({}, chosenDeclination), { qte: formValues.qte || 0, parent_slug: !!isRecommendedUpsell && recommendedUpsellParentSlug ? recommendedUpsellParentSlug : parentProduct.slug, product_upsells: parentProduct.product_upsells, categories: parentProduct.categories }));
|
|
76
|
+
}
|
|
77
|
+
if (!!!isRecommendedUpsell) {
|
|
78
|
+
let baseGrass = parentProduct;
|
|
79
|
+
// --------------------------------------------------------------------------------
|
|
80
|
+
// If gazon de spécialité, il aura en upsell le gazon de base (Kentucky)...
|
|
81
|
+
// (parent_slug: kentucky, sku (declinaison): 010010000) // NOTE - Sku peut varier!!
|
|
82
|
+
if (!!prodUpsell &&
|
|
83
|
+
!!prodUpsell.find((anUpsell) => anUpsell.recommendation_sku === products_2.kentucky || anUpsell.recommendation_parent_slug == 'kentucky')) {
|
|
84
|
+
const baseGrassProd = kentuckyBaseGrass;
|
|
85
|
+
if (!!baseGrassProd)
|
|
86
|
+
baseGrass = baseGrassProd;
|
|
87
|
+
}
|
|
88
|
+
// --------------------------------------------------------------------------------
|
|
89
|
+
// Check if grass has any other auto_add upsells to add
|
|
90
|
+
if (!!prodUpsell) {
|
|
91
|
+
for (let anUpsell of prodUpsell) {
|
|
92
|
+
if (!!!anUpsell.auto_add)
|
|
93
|
+
continue;
|
|
94
|
+
const sameProduct = await fetchProduct(anUpsell.recommendation_parent_slug, locale, undefined, true);
|
|
95
|
+
if (!!!sameProduct || !!!sameProduct.declinations)
|
|
96
|
+
continue;
|
|
97
|
+
let sameDecli = (sameProduct.declinations || []).find((decli) => decli.sku === anUpsell.recommendation_sku);
|
|
98
|
+
if (!!!sameDecli)
|
|
99
|
+
continue;
|
|
100
|
+
if (!!isPro && !!customPriceList) {
|
|
101
|
+
sameDecli = (0, g2_1.checkForCustomPriceEquivalent)(sameDecli, customPriceList, {
|
|
102
|
+
removeTierPricing: sameDecli.sku == 'kentucky' || sameDecli.parent_slug === 'kentucky'
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
const anUpsellProduct = Object.assign(Object.assign(Object.assign(Object.assign({}, sameDecli), { parent_slug: anUpsell.recommendation_parent_slug, recommended_qte: anUpsell.recommendation_qty, recommended_sku: anUpsell.recommendation_sku, matching_qte: !!anUpsell.matching_qty, auto_add: anUpsell.auto_add, actual_qte: anUpsell.actual_qty }), (!!anUpsell.is_recommendation ? { is_recommendation: true } : {})), (!!anUpsell.show_recommendation_msg ? { show_recommendation_msg: true } : {}));
|
|
106
|
+
const ratio = (0, upsells_1.calculateUpsellQte)(anUpsellProduct, formValues.qte || 0);
|
|
107
|
+
if (!!ratio) {
|
|
108
|
+
if (isUpdating && !!cart.items.find((i) => i.sku === anUpsellProduct.sku)) {
|
|
109
|
+
itemsToUpdate.push({
|
|
110
|
+
sku: anUpsellProduct.sku,
|
|
111
|
+
qte: ratio
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
itemsToAdd.push(Object.assign(Object.assign({}, sameDecli), { qte: ratio, is_upsell_of_sku: chosenDeclination.sku, parent_slug: sameProduct.slug, product_upsells: sameProduct.product_upsells, categories: sameProduct.categories }));
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// --------------------------------------------------------------------------------
|
|
121
|
+
// If installation...
|
|
122
|
+
const currentInstallItem = cart.items.find((i) => i.parent_slug === 'installation-gazon');
|
|
123
|
+
if (!!formValues.installation) {
|
|
124
|
+
const upsell = baseGrass.product_upsells;
|
|
125
|
+
if (!!upsell) {
|
|
126
|
+
const allInstallFees = await (0, products_1.getInstallationArray)(Number(formValues.qte), upsell, fetchProduct, locale, isPro, chosenDeclination.sku, customPriceList, {
|
|
127
|
+
engrais: !!formValues.engrais,
|
|
128
|
+
roulage: !!formValues.roulage
|
|
129
|
+
});
|
|
130
|
+
const installationDecli = allInstallFees.find((fee) => fee.parent_slug === 'installation-gazon');
|
|
131
|
+
const installIsDifferent = !!currentInstallItem && !!installationDecli && currentInstallItem.sku !== installationDecli.sku;
|
|
132
|
+
for (let fee of allInstallFees) {
|
|
133
|
+
if (isUpdating && !!cart.items.find((i) => i.sku === fee.sku) && !!!installIsDifferent) {
|
|
134
|
+
itemsToUpdate.push({
|
|
135
|
+
sku: fee.sku,
|
|
136
|
+
qte: fee.qte
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
itemsToAdd.push(fee);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
const minQteInstall = (0, expedition_1.getMinQteInstall)(!!isPro);
|
|
144
|
+
// ================================================================================
|
|
145
|
+
// Check to delete existing items if necessary
|
|
146
|
+
// --------------------------------------------------------------------------------
|
|
147
|
+
// If min qty install...
|
|
148
|
+
if (typeof formValues.qte === 'number' && formValues.qte >= minQteInstall) {
|
|
149
|
+
const minInstall = cart.items.find((item) => item.parent_slug === 'frais-minimum-gazon-pour-installation');
|
|
150
|
+
if (!!minInstall) {
|
|
151
|
+
itemsToDelete.push(minInstall.sku);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// --------------------------------------------------------------------------------
|
|
155
|
+
// If engrais...
|
|
156
|
+
const fertilisationItem = cart.items.find((i) => i.parent_slug === 'installation-fertilisation');
|
|
157
|
+
if (isUpdating && !!!formValues.engrais && !!fertilisationItem) {
|
|
158
|
+
itemsToDelete.push(fertilisationItem.sku);
|
|
159
|
+
}
|
|
160
|
+
// --------------------------------------------------------------------------------
|
|
161
|
+
// If roulage...
|
|
162
|
+
const roulageItem = cart.items.find((i) => i.parent_slug === 'installation-roulage');
|
|
163
|
+
if (isUpdating && !!!formValues.roulage && !!roulageItem) {
|
|
164
|
+
itemsToDelete.push(roulageItem.sku);
|
|
165
|
+
}
|
|
166
|
+
// --------------------------------------------------------------------------------
|
|
167
|
+
// If cart already has installation item...
|
|
168
|
+
// --> Utile pour la modification des items du cart, vu que la props is_upsell_of_sku ne peut pas se modifier on update
|
|
169
|
+
const otherInstall = !!installIsDifferent ? currentInstallItem : undefined;
|
|
170
|
+
if (!!otherInstall) {
|
|
171
|
+
itemsToDelete.push(otherInstall.sku);
|
|
172
|
+
itemsToDelete = [
|
|
173
|
+
...itemsToDelete,
|
|
174
|
+
...cart.items.filter((i) => i.is_upsell_of_sku === otherInstall.sku).map((i) => i.sku)
|
|
175
|
+
];
|
|
176
|
+
}
|
|
177
|
+
// ==================================================================================
|
|
178
|
+
// If isPro, check for corresponding pro extra installation fees
|
|
179
|
+
if (!!isPro) {
|
|
180
|
+
newShippingPayload = Object.assign(Object.assign({}, newShippingPayload), { pro_installation_info: formValues.pro });
|
|
181
|
+
const feeProduct = await fetchProduct('frais_extra_pro_installation', locale, undefined, true);
|
|
182
|
+
const handleProSpec = (sku, isSelected) => {
|
|
183
|
+
if (!!!feeProduct || !!!installationDecli)
|
|
184
|
+
return;
|
|
185
|
+
const itemIsInCart = !!cart.items.find((i) => i.sku === sku);
|
|
186
|
+
if (isSelected) {
|
|
187
|
+
let decli = feeProduct.declinations.find((d) => d.sku === sku);
|
|
188
|
+
if (!!decli) {
|
|
189
|
+
if (!!customPriceList) {
|
|
190
|
+
decli = (0, g2_1.checkForCustomPriceEquivalent)(decli, customPriceList);
|
|
191
|
+
}
|
|
192
|
+
if (isUpdating && itemIsInCart && !!!otherInstall) {
|
|
193
|
+
itemsToUpdate.push({
|
|
194
|
+
sku: sku,
|
|
195
|
+
qte: typeof formValues.qte === 'number' && formValues.qte < minQteInstall
|
|
196
|
+
? minQteInstall
|
|
197
|
+
: formValues.qte || 0
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
if (!!otherInstall) {
|
|
202
|
+
itemsToDelete.push(decli.sku);
|
|
203
|
+
}
|
|
204
|
+
itemsToAdd.push(Object.assign(Object.assign({}, decli), { qte: typeof formValues.qte === 'number' && formValues.qte < minQteInstall
|
|
205
|
+
? minQteInstall
|
|
206
|
+
: formValues.qte || 0, is_upsell_of_sku: installationDecli.sku, parent_slug: 'frais_extra_pro_installation' }));
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
if (itemIsInCart) {
|
|
212
|
+
itemsToDelete.push(sku);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
if (!!formValues.pro && !!formValues.pro.specs) {
|
|
217
|
+
Object.entries(formValues.pro.specs).forEach((spec) => {
|
|
218
|
+
handleProSpec(products_2.installationProSpecSkus[spec[0]], spec[1]);
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
if (!!isUpdating && !formValues.installation) {
|
|
226
|
+
if (!!newShippingPayload && !!newShippingPayload.pro_installation_info) {
|
|
227
|
+
const { pro_installation_info } = newShippingPayload, rest = __rest(newShippingPayload, ["pro_installation_info"]);
|
|
228
|
+
newShippingPayload = Object.assign({}, rest);
|
|
229
|
+
}
|
|
230
|
+
itemsToDelete = [...itemsToDelete, ...(0, products_1.getAllInstallFromItems)(cart.items).map((i) => i.sku)];
|
|
231
|
+
// Restore price of kentucky when overriden by all-inclusive installation
|
|
232
|
+
if (!!isPro && !!(0, products_1.getInstallationAllInclusiveFromPriceList)(customPriceList)) {
|
|
233
|
+
const kentuckyIdx = cart.items.findIndex((i) => !!i.price_override && (i.sku === products_2.kentucky || i.parent_slug == 'kentucky'));
|
|
234
|
+
if (kentuckyIdx !== -1) {
|
|
235
|
+
const kentuckyItem = cart.items[kentuckyIdx];
|
|
236
|
+
itemsToUpdate = itemsToUpdate.filter((u) => u.sku !== kentuckyItem.sku);
|
|
237
|
+
const originalDecli = ((_a = kentuckyBaseGrass === null || kentuckyBaseGrass === void 0 ? void 0 : kentuckyBaseGrass.declinations) === null || _a === void 0 ? void 0 : _a.find((d) => d.sku === kentuckyItem.sku)) ||
|
|
238
|
+
((_b = parentProduct.declinations) === null || _b === void 0 ? void 0 : _b.find((d) => d.sku === kentuckyItem.sku));
|
|
239
|
+
if (!!originalDecli) {
|
|
240
|
+
const restoredDecli = !!customPriceList
|
|
241
|
+
? (0, g2_1.checkForCustomPriceEquivalent)(originalDecli, customPriceList, {
|
|
242
|
+
removeTierPricing: true
|
|
243
|
+
})
|
|
244
|
+
: originalDecli;
|
|
245
|
+
cart.items[kentuckyIdx] = Object.assign(Object.assign(Object.assign({}, kentuckyItem), restoredDecli), { qte: kentuckyItem.qte, price_override: false });
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
itemsToAdd = (0, upsells_1.removeExceptionAutoAddUpsells)(itemsToAdd);
|
|
253
|
+
if (!!isUpdating) {
|
|
254
|
+
if (!!cart.items) {
|
|
255
|
+
const fusion = [
|
|
256
|
+
...cart.items.filter((i) => itemsToUpdate.some((update) => i.sku === update.sku) || i.is_upsell_of_sku === 'summary'),
|
|
257
|
+
...itemsToAdd
|
|
258
|
+
];
|
|
259
|
+
let productsToRemove = fusion.filter((item) => {
|
|
260
|
+
const removedBecauseException = !!!(0, upsells_1.removeExceptionAutoAddUpsells)(fusion).some((i) => i.sku === item.sku);
|
|
261
|
+
return item.is_upsell_of_sku === 'summary' || !!removedBecauseException;
|
|
262
|
+
});
|
|
263
|
+
itemsToAdd = itemsToAdd.filter((i) => !!!productsToRemove.map((r) => r.sku).includes(i.sku));
|
|
264
|
+
if (!!productsToRemove.length) {
|
|
265
|
+
itemsToDelete = [...itemsToDelete, ...productsToRemove.map((item) => item.sku)];
|
|
266
|
+
if (newShippingPayload) {
|
|
267
|
+
const { pro_installation_info } = newShippingPayload;
|
|
268
|
+
newShippingPayload = Object.assign(Object.assign({}, newShippingPayload), (!!pro_installation_info ? { pro_installation_info } : {}));
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
// When installation all-inclusive, force kentucky and frais de livraison to 0$
|
|
274
|
+
if ((0, products_1.isInstallAllInclusiveActive)(!!formValues.installation, isPro, customPriceList)) {
|
|
275
|
+
itemsToAdd = itemsToAdd.map((item) => (0, products_1.applyAllInclusiveOverrides)(item));
|
|
276
|
+
// Also override existing Kentucky items that are in the cart but not yet at $0
|
|
277
|
+
if (!!isUpdating) {
|
|
278
|
+
const kentuckyIdx = cart.items.findIndex((i) => !i.price_override && i.sku === products_2.kentucky);
|
|
279
|
+
if (kentuckyIdx !== -1) {
|
|
280
|
+
const kentuckyItemToOverride = cart.items[kentuckyIdx];
|
|
281
|
+
itemsToUpdate = itemsToUpdate.filter((u) => u.sku !== kentuckyItemToOverride.sku);
|
|
282
|
+
cart.items[kentuckyIdx] = (0, products_1.applyAllInclusiveOverrides)(kentuckyItemToOverride);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
return {
|
|
287
|
+
itemsToAdd,
|
|
288
|
+
itemsToUpdate,
|
|
289
|
+
itemsToDelete,
|
|
290
|
+
newShippingPayload
|
|
291
|
+
};
|
|
292
|
+
};
|
|
293
|
+
exports.handleAddGrassItemsCart = handleAddGrassItemsCart;
|
|
294
|
+
/**
|
|
295
|
+
* Replaces ventilated installation with installation tout inclus and applies Kentucky overrides.
|
|
296
|
+
* Used during cart verification when a pro customer has installation tout inclus but cart has ventilated installation.
|
|
297
|
+
*/
|
|
298
|
+
const applyInstallationToutInclusToVerifiedItems = (verifiedItems, customPriceList, isPro, installationParent) => {
|
|
299
|
+
var _a;
|
|
300
|
+
const currentInstall = verifiedItems.find((i) => i.parent_slug === 'installation-gazon');
|
|
301
|
+
if (!currentInstall || currentInstall.sku === products_2.installationAllInclusiveSku)
|
|
302
|
+
return verifiedItems;
|
|
303
|
+
const allInclusivePriceItem = (0, products_1.getInstallationAllInclusiveFromPriceList)(customPriceList);
|
|
304
|
+
if (!allInclusivePriceItem || !isPro)
|
|
305
|
+
return verifiedItems;
|
|
306
|
+
if (!installationParent || !installationParent.declinations)
|
|
307
|
+
return verifiedItems;
|
|
308
|
+
const allInclusiveDecli = installationParent.declinations.find((d) => d.sku === products_2.installationAllInclusiveSku);
|
|
309
|
+
if (!!!allInclusiveDecli)
|
|
310
|
+
return verifiedItems;
|
|
311
|
+
const priceAmount = (_a = allInclusivePriceItem.price) !== null && _a !== void 0 ? _a : allInclusivePriceItem.reg;
|
|
312
|
+
const grassItem = verifiedItems.find((i) => !!(0, products_1.checkIfProductIsOfType)(i, 'gazon') && !!!i.is_sample);
|
|
313
|
+
const chosenSku = !!grassItem ? grassItem.sku : currentInstall.is_upsell_of_sku || '';
|
|
314
|
+
const newInstallItem = Object.assign(Object.assign({}, allInclusiveDecli), { regular_price: Object.assign(Object.assign({}, allInclusiveDecli.regular_price), { amount: priceAmount }), parent_slug: 'installation-gazon', qte: currentInstall.qte, is_upsell_of_sku: chosenSku, product_upsells: installationParent.product_upsells, categories: installationParent.categories });
|
|
315
|
+
const installSkusToRemove = (0, products_1.getAllInstallFromItems)(verifiedItems).map((i) => i.sku);
|
|
316
|
+
let result = verifiedItems.filter((i) => !installSkusToRemove.includes(i.sku));
|
|
317
|
+
result = [...result, newInstallItem];
|
|
318
|
+
result = result.map((item) => (0, products_1.applyAllInclusiveOverrides)(item));
|
|
319
|
+
return result;
|
|
320
|
+
};
|
|
321
|
+
exports.applyInstallationToutInclusToVerifiedItems = applyInstallationToutInclusToVerifiedItems;
|
|
322
|
+
// -----------------------------------------------------------------------------------------
|
|
323
|
+
// #region CART SPECIFIC VERIFICATIONS AND DATA
|
|
324
|
+
const checkIfCartContainsType = (type, cartData, excludeUndefinedForAccessories = true, excludeUndefinedForBeton = true) => {
|
|
325
|
+
switch (type) {
|
|
326
|
+
case cart_1.CartGeneralTypeEnum.RETURN_PALLETS:
|
|
327
|
+
return !!cartData.shipping_payload && !!cartData.shipping_payload.pallet_return_memo_ref;
|
|
328
|
+
case cart_1.CartGeneralTypeEnum.GRASS:
|
|
329
|
+
return !!cartData.items.some((i) => !!(0, products_1.checkIfProductIsOfType)(i, 'gazon') && !!!i.is_sample);
|
|
330
|
+
case cart_1.CartGeneralTypeEnum.VRAC:
|
|
331
|
+
return !!cartData.items.some((i) => !!(0, products_1.checkIfProductIsOfType)(i, 'vrac'));
|
|
332
|
+
case cart_1.CartGeneralTypeEnum.INSTALLATION:
|
|
333
|
+
return !!cartData.items.some((i) => i.parent_slug === 'installation-gazon');
|
|
334
|
+
case cart_1.CartGeneralTypeEnum.SAMPLE:
|
|
335
|
+
return !!cartData.items.some((i) => !!i.is_sample);
|
|
336
|
+
case cart_1.CartGeneralTypeEnum.ONLY_ACCESSORIES:
|
|
337
|
+
return (!!cartData.items &&
|
|
338
|
+
!!cartData.items.length &&
|
|
339
|
+
cartData.items
|
|
340
|
+
.filter((i) => !!!i.is_service)
|
|
341
|
+
.every((i) => !!(0, products_1.checkIfProductIsOfType)(i, 'accessoire', excludeUndefinedForAccessories)));
|
|
342
|
+
case cart_1.CartGeneralTypeEnum.BETON:
|
|
343
|
+
return (!!cartData.items &&
|
|
344
|
+
!!cartData.items.length &&
|
|
345
|
+
cartData.items.some((i) => !!(0, products_1.checkIfProductIsOfType)(i, 'beton', excludeUndefinedForBeton) && !!!i.is_sample));
|
|
346
|
+
default:
|
|
347
|
+
return false;
|
|
348
|
+
}
|
|
349
|
+
};
|
|
350
|
+
exports.checkIfCartContainsType = checkIfCartContainsType;
|
|
351
|
+
const checkIfItemCanBeAddedToCart = (prod, parentProdType, cartData, addToCart = false, declination = undefined, useParent = false, autoAdd = false) => {
|
|
352
|
+
// -----------------------------------------------------------------------------------------------
|
|
353
|
+
// If... product can not be added to cart, show error and return false.
|
|
354
|
+
const addItToCart = !!autoAdd ? true : (0, exports.checkCartTypeBeforeAddingItem)(prod, declination, cartData);
|
|
355
|
+
if (!!!addItToCart) {
|
|
356
|
+
return {
|
|
357
|
+
addToCart: false,
|
|
358
|
+
error: {
|
|
359
|
+
fr: "Pour ajouter ce type de produit à votre panier vous devez d'abord compléter la commande en cours ou vider votre panier.",
|
|
360
|
+
en: 'To add this type of product to your cart, you must first complete the current order or empty your cart.'
|
|
361
|
+
}
|
|
362
|
+
};
|
|
363
|
+
}
|
|
364
|
+
// -----------------------------------------------------------------------------------------------
|
|
365
|
+
// Set parentProduct type variable depending on product category
|
|
366
|
+
let prodDeclination = declination; // If prodDeclination is set, means customer chose spécific sku and is trying to add to cart.
|
|
367
|
+
if (!!!useParent) {
|
|
368
|
+
switch (parentProdType) {
|
|
369
|
+
case 'gazon':
|
|
370
|
+
prodDeclination =
|
|
371
|
+
prodDeclination || prod.declinations.find((declination) => !!!declination.is_sample);
|
|
372
|
+
break;
|
|
373
|
+
case 'beton':
|
|
374
|
+
break;
|
|
375
|
+
case 'other':
|
|
376
|
+
case 'vrac':
|
|
377
|
+
if (!!!prod.declinations.find((decli) => !!decli.other_units)) {
|
|
378
|
+
prodDeclination =
|
|
379
|
+
prodDeclination || prod.declinations.find((declination) => !!!declination.is_sample);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
const decliIsSample = !!prodDeclination && !!prodDeclination.is_sample;
|
|
384
|
+
// --------------------------------------------------------------------------------------------------
|
|
385
|
+
// If... prodDeclination is sample, check if max qte (4) is met or sample already in cart before.
|
|
386
|
+
// If so, show error and return false.
|
|
387
|
+
// Else if... product is of any type other than grass, set addToCart to true.
|
|
388
|
+
if (!!decliIsSample) {
|
|
389
|
+
if (!!cartData && !!cartData.items.length) {
|
|
390
|
+
switch (true) {
|
|
391
|
+
case cartData.items.length === 4:
|
|
392
|
+
return {
|
|
393
|
+
addToCart: false,
|
|
394
|
+
error: {
|
|
395
|
+
fr: 'Un maximum de quatre échantillons est permis à la fois par commande.',
|
|
396
|
+
en: 'A maximum of four samples can be added to your cart.'
|
|
397
|
+
}
|
|
398
|
+
};
|
|
399
|
+
case !!cartData.items.find((item) => !!prodDeclination && item.sku === prodDeclination.sku):
|
|
400
|
+
return {
|
|
401
|
+
addToCart: false,
|
|
402
|
+
error: {
|
|
403
|
+
fr: 'Vous avez déjà cet échantillon au panier.',
|
|
404
|
+
en: 'This sample is already in your cart.'
|
|
405
|
+
}
|
|
406
|
+
};
|
|
407
|
+
default:
|
|
408
|
+
addToCart = true;
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
else {
|
|
412
|
+
addToCart = true;
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
else if (!!prodDeclination && !!!(0, products_1.checkIfProductIsOfType)(prod, 'gazon')) {
|
|
416
|
+
addToCart = true;
|
|
417
|
+
}
|
|
418
|
+
return {
|
|
419
|
+
addToCart: addToCart,
|
|
420
|
+
declinationChecked: prodDeclination,
|
|
421
|
+
showForm: true
|
|
422
|
+
};
|
|
423
|
+
};
|
|
424
|
+
exports.checkIfItemCanBeAddedToCart = checkIfItemCanBeAddedToCart;
|
|
425
|
+
const checkIfDecliIsOkForMixedSale = (decli, typeToCheck) => {
|
|
426
|
+
return (decli.attributes &&
|
|
427
|
+
!!decli.attributes[data_2.AttributesIdEnumGR.VENTE_MIXTE] &&
|
|
428
|
+
!!decli.attributes[data_2.AttributesIdEnumGR.VENTE_MIXTE].includes(typeToCheck));
|
|
429
|
+
};
|
|
430
|
+
exports.checkIfDecliIsOkForMixedSale = checkIfDecliIsOkForMixedSale;
|
|
431
|
+
const checkCartTypeBeforeAddingItem = (prod, declination, cartData, forceCartType) => {
|
|
432
|
+
if (!!!cartData || !!!cartData.items || !!!cartData.items.length) {
|
|
433
|
+
if (!!!forceCartType)
|
|
434
|
+
return true;
|
|
435
|
+
}
|
|
436
|
+
const cartType = !!forceCartType ? forceCartType : !!cartData ? (0, exports.getCartType)(cartData) : '';
|
|
437
|
+
if (!!!cartType)
|
|
438
|
+
return true;
|
|
439
|
+
const items = !!cartData ? cartData.items : [];
|
|
440
|
+
// Can't add items to cart if ...
|
|
441
|
+
// -----------------------------------------
|
|
442
|
+
// ... cart is of type booking
|
|
443
|
+
if (!!cartData && !!cartData.is_booking)
|
|
444
|
+
return false;
|
|
445
|
+
// --------------------------------------------------------------------------------------------------
|
|
446
|
+
// ... if new item is NOT a sample or does NOT contain samples in declinations && cart already contains samples
|
|
447
|
+
if ((!!!prod.declinations.find((decli) => !!decli.is_sample) || (!!declination && !declination.is_sample)) &&
|
|
448
|
+
cartType === cart_1.CartGeneralTypeEnum.SAMPLE) {
|
|
449
|
+
return false;
|
|
450
|
+
}
|
|
451
|
+
// --------------------------------------------------------------------------------------------------
|
|
452
|
+
// ... if new item is a sample && cart has items that are NOT samples
|
|
453
|
+
if (!!declination && !!declination.is_sample && cartType !== cart_1.CartGeneralTypeEnum.SAMPLE) {
|
|
454
|
+
return false;
|
|
455
|
+
}
|
|
456
|
+
// ----------------------------------------------------------
|
|
457
|
+
// ... new item is of type grass and cart already contains grass or items that cannot be sold with grass
|
|
458
|
+
if (!!(0, products_1.checkIfProductIsOfType)(prod, 'gazon') && cartType !== cart_1.CartGeneralTypeEnum.SAMPLE) {
|
|
459
|
+
if (!!items.some((i) => !!(0, products_1.checkIfProductIsOfType)(i, 'gazon')))
|
|
460
|
+
return false;
|
|
461
|
+
if (!!items.some((i) => !!!(0, exports.checkIfDecliIsOkForMixedSale)(i, 'gazon')))
|
|
462
|
+
return false;
|
|
463
|
+
}
|
|
464
|
+
// --------------------------------------------------------------------------------------------------
|
|
465
|
+
// ... if cart already has a grass product
|
|
466
|
+
let currentCartUpsells = [];
|
|
467
|
+
try {
|
|
468
|
+
currentCartUpsells = (0, uniqBy_1.default)((0, flatten_1.default)(items.map((i) => i.product_upsells || [])), (i) => !!i.recommendation_sku ? i.recommendation_sku : i.recommendation_parent_slug);
|
|
469
|
+
}
|
|
470
|
+
catch (e) {
|
|
471
|
+
if (!!process.env.IS_TEST_ENV)
|
|
472
|
+
console.log('error on fetching cart upsells: ', e.toString());
|
|
473
|
+
}
|
|
474
|
+
if (cartType === cart_1.CartGeneralTypeEnum.GRASS) {
|
|
475
|
+
if (!!!prod.declinations.some((decli) => (0, exports.checkIfDecliIsOkForMixedSale)(decli, 'gazon')) ||
|
|
476
|
+
(!!declination && !!!(0, exports.checkIfDecliIsOkForMixedSale)(declination, 'gazon'))) {
|
|
477
|
+
if (!!!currentCartUpsells.length ||
|
|
478
|
+
(!!currentCartUpsells.length &&
|
|
479
|
+
(!!!prod.declinations.find((decli) => !!currentCartUpsells.find((item) => (!!item.use_parent &&
|
|
480
|
+
item.recommendation_parent_slug &&
|
|
481
|
+
item.recommendation_parent_slug === prod.slug) ||
|
|
482
|
+
item.recommendation_sku === decli.sku)) ||
|
|
483
|
+
(!!declination &&
|
|
484
|
+
!!!currentCartUpsells.find((item) => item.recommendation_sku === declination.sku ||
|
|
485
|
+
(!!item.use_parent &&
|
|
486
|
+
item.recommendation_parent_slug &&
|
|
487
|
+
item.recommendation_parent_slug === prod.slug)))))) {
|
|
488
|
+
return false;
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
else {
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
// --------------------------------------------------------------------------------------------------
|
|
495
|
+
// ... if new item is of type vrac and cart contains anything else
|
|
496
|
+
if (cartType !== cart_1.CartGeneralTypeEnum.VRAC &&
|
|
497
|
+
(prod.declinations.every((decli) => !!(0, products_1.checkIfProductIsOfType)(decli, 'vrac')) ||
|
|
498
|
+
(!!declination && !!(0, products_1.checkIfProductIsOfType)(declination, 'vrac'))) &&
|
|
499
|
+
items.some((i) => !!!(0, exports.checkIfDecliIsOkForMixedSale)(i, 'vrac'))) {
|
|
500
|
+
return false;
|
|
501
|
+
}
|
|
502
|
+
// --------------------------------------------------------------------------------------------------
|
|
503
|
+
// ... if new item is of any other type than vrac and cart contains vrac
|
|
504
|
+
if (cartType === cart_1.CartGeneralTypeEnum.VRAC &&
|
|
505
|
+
(!!!prod.declinations.some((decli) => !!(0, products_1.checkIfProductIsOfType)(decli, 'vrac') || !!(0, exports.checkIfDecliIsOkForMixedSale)(decli, 'vrac')) ||
|
|
506
|
+
(!!declination &&
|
|
507
|
+
!!!(0, products_1.checkIfProductIsOfType)(declination, 'vrac', true) &&
|
|
508
|
+
!!!(0, exports.checkIfDecliIsOkForMixedSale)(declination, 'vrac')))) {
|
|
509
|
+
return false;
|
|
510
|
+
}
|
|
511
|
+
return true;
|
|
512
|
+
};
|
|
513
|
+
exports.checkCartTypeBeforeAddingItem = checkCartTypeBeforeAddingItem;
|
|
514
|
+
const getCartType = (cartData, prioritizeInstallation) => {
|
|
515
|
+
if (!!prioritizeInstallation && (0, exports.checkIfCartContainsType)(cart_1.CartGeneralTypeEnum.INSTALLATION, cartData)) {
|
|
516
|
+
return cart_1.CartGeneralTypeEnum.INSTALLATION;
|
|
517
|
+
}
|
|
518
|
+
switch (true) {
|
|
519
|
+
case (0, exports.checkIfCartContainsType)(cart_1.CartGeneralTypeEnum.RETURN_PALLETS, cartData):
|
|
520
|
+
return cart_1.CartGeneralTypeEnum.RETURN_PALLETS;
|
|
521
|
+
case !!cartData.is_booking:
|
|
522
|
+
return !!cartData.is_booking_beton ? cart_1.CartGeneralTypeEnum.BOOKING_BETON : cart_1.CartGeneralTypeEnum.BOOKING;
|
|
523
|
+
case (0, exports.checkIfCartContainsType)(cart_1.CartGeneralTypeEnum.SAMPLE, cartData):
|
|
524
|
+
return cart_1.CartGeneralTypeEnum.SAMPLE;
|
|
525
|
+
case (0, exports.checkIfCartContainsType)(cart_1.CartGeneralTypeEnum.VRAC, cartData):
|
|
526
|
+
return cart_1.CartGeneralTypeEnum.VRAC;
|
|
527
|
+
case (0, exports.checkIfCartContainsType)(cart_1.CartGeneralTypeEnum.GRASS, cartData):
|
|
528
|
+
return cart_1.CartGeneralTypeEnum.GRASS;
|
|
529
|
+
case (0, exports.checkIfCartContainsType)(cart_1.CartGeneralTypeEnum.ONLY_ACCESSORIES, cartData):
|
|
530
|
+
return cart_1.CartGeneralTypeEnum.ONLY_ACCESSORIES;
|
|
531
|
+
default:
|
|
532
|
+
return cart_1.CartGeneralTypeEnum.BETON;
|
|
533
|
+
}
|
|
534
|
+
};
|
|
535
|
+
exports.getCartType = getCartType;
|
|
536
|
+
/**
|
|
537
|
+
* Finds out if a cart is for a pro customer or not
|
|
538
|
+
* @param {ICart} invoice The cart to test
|
|
539
|
+
* @return Returns true if the cart is pro, false if not
|
|
540
|
+
*/
|
|
541
|
+
const isPro = (invoice) => {
|
|
542
|
+
return !!(0, exports.getProTitleFromCart)(invoice);
|
|
543
|
+
};
|
|
544
|
+
exports.isPro = isPro;
|
|
545
|
+
const getProTitleFromCart = (invoice) => {
|
|
546
|
+
return (0, object_1.recursiveCheckObject)(invoice, 'customer_info.pro_title');
|
|
547
|
+
};
|
|
548
|
+
exports.getProTitleFromCart = getProTitleFromCart;
|
|
549
|
+
const orderCartItems = (cart) => {
|
|
550
|
+
return (0, orderBy_1.default)(!!cart.promise_to_purchase && !!cart.promise_to_purchase.ids
|
|
551
|
+
? (0, g2_1.groupArrayOfItemsByItemAndCorrespondingEscompteItem)(cart.items)
|
|
552
|
+
: cart.items, (item) => {
|
|
553
|
+
const upsellRelativeItem = !!item.is_upsell_of_sku
|
|
554
|
+
? cart.items.find((i) => i.sku === item.is_upsell_of_sku)
|
|
555
|
+
: undefined;
|
|
556
|
+
if (!!!item.is_service ||
|
|
557
|
+
((0, g2_1.isEscompteSuppItem)(item.sku) && !!upsellRelativeItem && !!!upsellRelativeItem.is_service))
|
|
558
|
+
return 0;
|
|
559
|
+
if (item.is_service && item.sku === 'FRSBETON')
|
|
560
|
+
return 1;
|
|
561
|
+
return 2;
|
|
562
|
+
});
|
|
563
|
+
};
|
|
564
|
+
exports.orderCartItems = orderCartItems;
|
|
565
|
+
// #endregion
|
|
566
|
+
// -----------------------------------------------------------------------------------------
|
|
567
|
+
// #region FORMAT CART VALUES
|
|
568
|
+
const getConcreteCartInfo = async (cartData, fetchInventoryItem, pickupStoreId, inventoryItemsArray) => {
|
|
569
|
+
const containsYellowProduct = (0, products_1.getConcreteItemsByAvailability)(cartData, 'delais-a-prevoir');
|
|
570
|
+
const containsGreenProduct = (0, products_1.getConcreteItemsByAvailability)(cartData, 'en-stock', true);
|
|
571
|
+
const containsRedProduct = (0, products_1.getConcreteItemsByAvailability)(cartData, 'aucune-production-prevue');
|
|
572
|
+
let isInStock = true;
|
|
573
|
+
const storeId = !!pickupStoreId ? pickupStoreId : (0, object_1.recursiveCheckObject)(cartData, 'shipping_payload.pickup_store.id');
|
|
574
|
+
if (!!storeId && !!containsGreenProduct.length) {
|
|
575
|
+
const inventoryItems = !!inventoryItemsArray && !!inventoryItemsArray.length
|
|
576
|
+
? inventoryItemsArray
|
|
577
|
+
: (await Promise.all(containsGreenProduct.map(async (item) => !!item.is_service ? undefined : await fetchInventoryItem(item.sku)))).filter((i) => !!i);
|
|
578
|
+
isInStock =
|
|
579
|
+
!!inventoryItems &&
|
|
580
|
+
!!inventoryItems.length &&
|
|
581
|
+
inventoryItems.every((inventoryItem) => {
|
|
582
|
+
const cartItem = containsGreenProduct.find((i) => i.sku === inventoryItem.sku);
|
|
583
|
+
if (!!!cartItem)
|
|
584
|
+
return false;
|
|
585
|
+
const inventoryStock = inventoryItem.inventories.find((i) => i.store_id === storeId);
|
|
586
|
+
if (!!!inventoryStock || !!!inventoryStock.qty)
|
|
587
|
+
return false;
|
|
588
|
+
const convertedQuantity = (0, inventories_1.getConvertedUnitQuantity)(inventoryItem.other_units || [], inventoryStock.qty.available || 0, 'sale_unit');
|
|
589
|
+
return convertedQuantity >= cartItem.qte;
|
|
590
|
+
});
|
|
591
|
+
}
|
|
592
|
+
return {
|
|
593
|
+
type: !!containsRedProduct.length ? 'red' : !!containsYellowProduct.length ? 'yellow' : 'green',
|
|
594
|
+
inStock: isInStock
|
|
595
|
+
};
|
|
596
|
+
};
|
|
597
|
+
exports.getConcreteCartInfo = getConcreteCartInfo;
|
|
598
|
+
/**
|
|
599
|
+
* Function getGrassProduct
|
|
600
|
+
* @description - Create the essential info needed when checking a grass type product for cart
|
|
601
|
+
* @param item
|
|
602
|
+
*/
|
|
603
|
+
const getGrassProductForCart = (item) => {
|
|
604
|
+
if (!!!item)
|
|
605
|
+
return;
|
|
606
|
+
return {
|
|
607
|
+
slug: item.parent_slug || '',
|
|
608
|
+
sku: item.sku,
|
|
609
|
+
qte: item.qte,
|
|
610
|
+
price: (0, products_3.getLowestPrice)(item).price.amount
|
|
611
|
+
};
|
|
612
|
+
};
|
|
613
|
+
exports.getGrassProductForCart = getGrassProductForCart;
|
|
614
|
+
const getRecursiveItems = (cartItems, cartContainsGrass, keepFees, groupSurcharges) => {
|
|
615
|
+
const getRecusiveItem = (item) => {
|
|
616
|
+
const subItems = cartItems.filter((i) => i.is_upsell_of_sku === item.sku).map((subI) => getRecusiveItem(subI));
|
|
617
|
+
return Object.assign(Object.assign({}, item), { sub_items: !!subItems && !!subItems.length ? subItems : undefined });
|
|
618
|
+
};
|
|
619
|
+
const newItemList = cartItems
|
|
620
|
+
.map((i) => getRecusiveItem(i))
|
|
621
|
+
.filter((i) => (!!keepFees && !!i.is_upsell_of_sku && i.is_upsell_of_sku === 'summary') ||
|
|
622
|
+
(!!i.sub_items && !!!i.is_upsell_of_sku) ||
|
|
623
|
+
(!!!i.is_upsell_of_sku && !!!i.sub_items));
|
|
624
|
+
const ordered = !!!cartContainsGrass ? newItemList : (0, orderBy_1.default)(newItemList, (i) => !!i.sub_items, 'desc');
|
|
625
|
+
if (!!!groupSurcharges)
|
|
626
|
+
return ordered;
|
|
627
|
+
const surcharges = cartItems.filter((i) => products_2.fuelSurchargeSkus.includes(i.sku));
|
|
628
|
+
if (surcharges.length === 0)
|
|
629
|
+
return ordered;
|
|
630
|
+
// Retirer les surcharges pour les ré-attacher comme sub_items
|
|
631
|
+
const filteredOrdered = ordered.filter((i) => !products_2.fuelSurchargeSkus.includes(i.sku));
|
|
632
|
+
// Pour chaque surcharge, retenir le dernier item parent qui matche dans l'arbre
|
|
633
|
+
const surchargeParent = new Map();
|
|
634
|
+
const findLastParent = (item) => {
|
|
635
|
+
if (!(0, products_1.shouldHideItemInCheckout)(item, cartItems)) {
|
|
636
|
+
surcharges.forEach((s) => {
|
|
637
|
+
if ((0, products_1.matchesFuelSurchargeParent)(s.sku, item))
|
|
638
|
+
surchargeParent.set(s.sku, item);
|
|
639
|
+
});
|
|
640
|
+
}
|
|
641
|
+
if (!!item.sub_items && !!item.sub_items.length)
|
|
642
|
+
item.sub_items.forEach(findLastParent);
|
|
643
|
+
};
|
|
644
|
+
filteredOrdered.forEach(findLastParent);
|
|
645
|
+
const placed = new Set();
|
|
646
|
+
const attachSurcharges = (item) => {
|
|
647
|
+
const updatedSubItems = !!item.sub_items && !!item.sub_items.length ? item.sub_items.map(attachSurcharges) : item.sub_items;
|
|
648
|
+
if ((0, products_1.shouldHideItemInCheckout)(item, cartItems)) {
|
|
649
|
+
return updatedSubItems !== item.sub_items ? Object.assign(Object.assign({}, item), { sub_items: updatedSubItems }) : item;
|
|
650
|
+
}
|
|
651
|
+
const matching = surcharges.filter((s) => !placed.has(s.sku) && surchargeParent.get(s.sku) === item);
|
|
652
|
+
if (matching.length > 0) {
|
|
653
|
+
matching.forEach((m) => placed.add(m.sku));
|
|
654
|
+
const surchargeNodes = matching.map((s) => (Object.assign(Object.assign({}, s), { sub_items: undefined })));
|
|
655
|
+
return Object.assign(Object.assign({}, item), { sub_items: [...(updatedSubItems || []), ...surchargeNodes] });
|
|
656
|
+
}
|
|
657
|
+
return updatedSubItems !== item.sub_items ? Object.assign(Object.assign({}, item), { sub_items: updatedSubItems }) : item;
|
|
658
|
+
};
|
|
659
|
+
const placedItems = filteredOrdered.map(attachSurcharges);
|
|
660
|
+
const unplaced = surcharges.filter((s) => !!!placed.has(s.sku));
|
|
661
|
+
return unplaced.length === 0
|
|
662
|
+
? placedItems
|
|
663
|
+
: [...placedItems, ...unplaced.map((s) => (Object.assign(Object.assign({}, s), { sub_items: undefined })))];
|
|
664
|
+
};
|
|
665
|
+
exports.getRecursiveItems = getRecursiveItems;
|
|
666
|
+
const getRecursiveItemsFromSubItems = (item) => {
|
|
667
|
+
const getRecusiveItem = (item) => {
|
|
668
|
+
const subItems = item.sub_items;
|
|
669
|
+
if (!!subItems) {
|
|
670
|
+
const items = [item, ...(0, flatten_1.default)(subItems.map((i) => getRecusiveItem(i)))];
|
|
671
|
+
return items;
|
|
672
|
+
}
|
|
673
|
+
return [item];
|
|
674
|
+
};
|
|
675
|
+
return !!item.sub_items ? [item, ...(0, flatten_1.default)(item.sub_items.map((i) => getRecusiveItem(i)))] : [item];
|
|
676
|
+
};
|
|
677
|
+
exports.getRecursiveItemsFromSubItems = getRecursiveItemsFromSubItems;
|
|
678
|
+
/**
|
|
679
|
+
* Get price applied for item in cart. Corresponds to the unit price that the customer paid.
|
|
680
|
+
* @param {Space} space
|
|
681
|
+
* @param {ICartItem} item
|
|
682
|
+
* @param {ICart} cartData
|
|
683
|
+
* @param {boolean} options.isBookingBeton Optionnal. Always returns regular price if true (additionnal check)
|
|
684
|
+
* @param {boolean} options.getLowest Optionnal. If true, always returns the lowest amount found between all cart item prices, with no other checks.
|
|
685
|
+
* @returns
|
|
686
|
+
*/
|
|
687
|
+
const getAppliedPrice = (item, options = {}) => {
|
|
688
|
+
const applied = (0, exports.getLowestAppliedPrice)(item);
|
|
689
|
+
if (!!options.getLowest) {
|
|
690
|
+
return applied.amount;
|
|
691
|
+
}
|
|
692
|
+
if ((!!!item.promo_price && !!!item.discount_price) || !!options.isBookingBeton) {
|
|
693
|
+
return item.regular_price.amount;
|
|
694
|
+
}
|
|
695
|
+
const itemPriceIsEscompte = (!!item.promo_price && (0, exports.checkPriceForEscompte)(item.promo_price)) ||
|
|
696
|
+
(!!item.discount_price && (0, exports.checkPriceForEscompte)(item.discount_price));
|
|
697
|
+
if (!!itemPriceIsEscompte) {
|
|
698
|
+
if (!!item.discount_price)
|
|
699
|
+
return item.discount_price.amount;
|
|
700
|
+
return item.regular_price.amount;
|
|
701
|
+
}
|
|
702
|
+
return applied.amount;
|
|
703
|
+
};
|
|
704
|
+
exports.getAppliedPrice = getAppliedPrice;
|
|
705
|
+
const getLowestAppliedPrice = (item) => {
|
|
706
|
+
const regular = item.regular_price;
|
|
707
|
+
const promo = item.promo_price;
|
|
708
|
+
const discount = item.discount_price;
|
|
709
|
+
const regularPrice = regular.amount || 0;
|
|
710
|
+
const promoPrice = !!promo ? promo.amount : regularPrice;
|
|
711
|
+
const discountPrice = !!discount ? discount.amount : regularPrice;
|
|
712
|
+
if (!!promo && promoPrice <= discountPrice && promoPrice <= regularPrice) {
|
|
713
|
+
return promo;
|
|
714
|
+
}
|
|
715
|
+
if (!!discount && discountPrice <= promoPrice && discountPrice <= regularPrice) {
|
|
716
|
+
return discount;
|
|
717
|
+
}
|
|
718
|
+
return regular;
|
|
719
|
+
};
|
|
720
|
+
exports.getLowestAppliedPrice = getLowestAppliedPrice;
|
|
721
|
+
/**
|
|
722
|
+
* Checks if the specific item price contains an "escompte"
|
|
723
|
+
* @param {ICartItemCustomPrices} price The price to check, Either the discount_price of promo_price of a cart item.
|
|
724
|
+
* @returns
|
|
725
|
+
*/
|
|
726
|
+
const checkPriceForEscompte = (price) => {
|
|
727
|
+
const priceType = price.price_type;
|
|
728
|
+
const posUnitPrice = `pos_custom_${Cart_1.CustomPromoType.UNIT_PRICE}`;
|
|
729
|
+
const isEscompteType = !!priceType &&
|
|
730
|
+
!!![
|
|
731
|
+
G2_1.CustomPriceItemTypeEnum.ENTENTE,
|
|
732
|
+
G2_1.CustomPriceItemTypeEnum.REG,
|
|
733
|
+
posUnitPrice,
|
|
734
|
+
products_3.priceTypeEnum.TIER_PRICING
|
|
735
|
+
].includes(priceType);
|
|
736
|
+
return !!isEscompteType;
|
|
737
|
+
};
|
|
738
|
+
exports.checkPriceForEscompte = checkPriceForEscompte;
|
|
739
|
+
/**
|
|
740
|
+
* Calculates the percent applied from a discount on a cart item. If promo_price set, checks promo_price, else checks discount_price.
|
|
741
|
+
* @param {ICartItem} item
|
|
742
|
+
* @param {boolean} isPro
|
|
743
|
+
* @returns
|
|
744
|
+
*/
|
|
745
|
+
const getPercentFromReducedPrice = (item, isPro) => {
|
|
746
|
+
const typeToCheck = !!item.promo_price && !!item.promo_price.price_type ? 'promo' : 'discount';
|
|
747
|
+
const priceToCheck = typeToCheck === 'promo' ? item.promo_price : item.discount_price;
|
|
748
|
+
if (!!!priceToCheck || (!!!isPro && !!!priceToCheck.overridden))
|
|
749
|
+
return;
|
|
750
|
+
if (!!!(0, exports.checkPriceForEscompte)(priceToCheck))
|
|
751
|
+
return;
|
|
752
|
+
if (typeToCheck === 'promo')
|
|
753
|
+
return (0, round_1.default)((0, cart_2.getActualPromoPrice)(item, products_3.unitTypeEnum.PERCENT), 2);
|
|
754
|
+
return (0, round_1.default)((0, cart_2.getActualDiscountPrice)(item, products_3.unitTypeEnum.PERCENT), 2);
|
|
755
|
+
};
|
|
756
|
+
exports.getPercentFromReducedPrice = getPercentFromReducedPrice;
|
|
757
|
+
// #endregion
|
|
758
|
+
// -----------------------------------------------------------------------------------------
|
|
759
|
+
// #region PDF AND LAYOUT FUNCTIONS
|
|
760
|
+
/**
|
|
761
|
+
* Returns the customer's Client Number to show in order slip and invoice.
|
|
762
|
+
* @param cartData
|
|
763
|
+
* @param space - Must be defined to check if grass promise to purchase bank was applied to cart
|
|
764
|
+
* @param options.isQuote - Optionnal. If current cart is a quote cart
|
|
765
|
+
* @param options.checkIfEscPaApplied - Optionnal. If true, will only add PA suffix if some reduce PA price or item is found in cart
|
|
766
|
+
*/
|
|
767
|
+
const getClientNumberForCart = (cartData, space, options = {}) => {
|
|
768
|
+
if (!!!cartData)
|
|
769
|
+
return '';
|
|
770
|
+
const proTitle = (0, object_1.recursiveCheckObject)(cartData, 'customer_info.pro_title');
|
|
771
|
+
const isWebCart = cartData.cart_type === Cart_1.CartTypeEnum.WEB || !!cartData.is_from_web;
|
|
772
|
+
// If checkIfEscPaApplied option is passed to function, will only set cart as isPA if at least one esc. supp item is found
|
|
773
|
+
const paFoundInCart = (0, object_1.recursiveCheckObject)(cartData, 'promise_to_purchase');
|
|
774
|
+
let isPA = !!((0, object_1.recursiveCheckObject)(paFoundInCart, 'ids') || []).length;
|
|
775
|
+
if (!!paFoundInCart && !!options.checkIfEscPaApplied) {
|
|
776
|
+
const bankTypes = !!space ? space.bankTypes.get() : [];
|
|
777
|
+
const grassBank = bankTypes.find((b) => (0, locale_1.getLocaleOfDictionnary)(b.name, 'fr').toLowerCase() == 'gazon');
|
|
778
|
+
const atLeastOneEscPaApplied = cartData.items.some((i) => (0, g2_1.isEscompteSuppItem)(i.sku)) ||
|
|
779
|
+
(!!grassBank &&
|
|
780
|
+
(paFoundInCart.banks_used || []).some((b) => b.bank_type_id == grassBank.id) &&
|
|
781
|
+
cartData.items.some((i) => i.sku == products_2.kentucky || i.parent_slug == 'kentucky'));
|
|
782
|
+
isPA = atLeastOneEscPaApplied;
|
|
783
|
+
}
|
|
784
|
+
// a. If pro customer, return pro ID + PA if promise banks applied
|
|
785
|
+
if (!!proTitle && !!cartData.customer_id) {
|
|
786
|
+
return `${cartData.customer_id}${!!isPA ? 'PA' : ''}`;
|
|
787
|
+
}
|
|
788
|
+
// b. If cart from Web, construct code from expedition type, current date and WEB string
|
|
789
|
+
if (!!isWebCart) {
|
|
790
|
+
return `${!!cartData.is_pickup ? 'COM' : 'LIV'}${!!cartData.paid_at ? (0, moment_1.default)((0, data_1.formatDate)(cartData.paid_at)).format('YY') : '00'}WEB`;
|
|
791
|
+
}
|
|
792
|
+
// c. If PDF made for an order quote (soumission), simply show customer type if no customer id set
|
|
793
|
+
if (!!options.isQuote) {
|
|
794
|
+
return proTitle === 'anonymous-pos-pro' ? 'Paysagiste' : 'Détail';
|
|
795
|
+
}
|
|
796
|
+
// d. Construct POS specific code from expedition type, assigned store, current date and customer type
|
|
797
|
+
return _getPOSCustomerTypeForCart(cartData);
|
|
798
|
+
};
|
|
799
|
+
exports.getClientNumberForCart = getClientNumberForCart;
|
|
800
|
+
const _getPOSCustomerTypeForCart = (cartData) => {
|
|
801
|
+
const isPickup = !!cartData && !!cartData.is_pickup;
|
|
802
|
+
const isPro = !!cartData.customer_info && !!cartData.customer_info.pro_title;
|
|
803
|
+
const currentYear = !!cartData.paid_at ? (0, moment_1.default)((0, data_1.formatDate)(cartData.paid_at)).format('YY') : '00';
|
|
804
|
+
const storeNb = !!cartData.created_by && !!cartData.created_by.at_store_number ? cartData.created_by.at_store_number : 0;
|
|
805
|
+
// Check if store number is a number
|
|
806
|
+
const aNumber = (0, toNumber_1.default)(storeNb);
|
|
807
|
+
let endOfCode = '';
|
|
808
|
+
if (!!!aNumber) {
|
|
809
|
+
endOfCode = `${!!isPro ? '3' : ''}${storeNb}`;
|
|
810
|
+
}
|
|
811
|
+
else {
|
|
812
|
+
endOfCode = `${!!isPro ? '3' : aNumber < 10 ? '0' : ''}${aNumber}`;
|
|
813
|
+
}
|
|
814
|
+
return `${!!isPickup ? 'COM' : 'LIV'}${currentYear}${endOfCode}`;
|
|
815
|
+
};
|
|
816
|
+
const getLabelForCartType = (value) => {
|
|
817
|
+
switch (value) {
|
|
818
|
+
case cart_1.CartGeneralTypeEnum.RETURN_PALLETS:
|
|
819
|
+
return 'Retour palettes';
|
|
820
|
+
case cart_1.CartGeneralTypeEnum.ONLY_ACCESSORIES:
|
|
821
|
+
return 'Accessoires seulement';
|
|
822
|
+
case cart_1.CartGeneralTypeEnum.BETON:
|
|
823
|
+
return 'Béton';
|
|
824
|
+
case cart_1.CartGeneralTypeEnum.SAMPLE:
|
|
825
|
+
return 'Échantillons';
|
|
826
|
+
case cart_1.CartGeneralTypeEnum.GRASS:
|
|
827
|
+
return 'Gazon';
|
|
828
|
+
case cart_1.CartGeneralTypeEnum.INSTALLATION:
|
|
829
|
+
return 'Installation';
|
|
830
|
+
case cart_1.CartGeneralTypeEnum.VRAC:
|
|
831
|
+
return 'Vrac';
|
|
832
|
+
case Cart_1.CartContentTypeEnum.MIXED:
|
|
833
|
+
return 'Mixte';
|
|
834
|
+
default:
|
|
835
|
+
return value;
|
|
836
|
+
}
|
|
837
|
+
};
|
|
838
|
+
exports.getLabelForCartType = getLabelForCartType;
|
|
839
|
+
// #endregion
|
|
837
840
|
//# sourceMappingURL=cart.js.map
|