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,493 +1,493 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const isEqual_1 = __importDefault(require("lodash/isEqual"));
|
|
7
|
-
const toNumber_1 = __importDefault(require("lodash/toNumber"));
|
|
8
|
-
const DatabaseService_1 = __importDefault(require("../../services/database/DatabaseService"));
|
|
9
|
-
const baseService_1 = require("../baseService");
|
|
10
|
-
const TransferRequest_1 = require("../../Interfaces/TransferRequest");
|
|
11
|
-
const IInventoryItem_1 = require("../../Interfaces/Product/IInventoryItem");
|
|
12
|
-
const Cart_1 = require("../../Interfaces/Cart");
|
|
13
|
-
const console_1 = require("../../utils/console");
|
|
14
|
-
const string_1 = require("../../utils/string");
|
|
15
|
-
const inventories_1 = require("../../utils/inventories");
|
|
16
|
-
class Inventory extends baseService_1.BaseServiceClass {
|
|
17
|
-
constructor(data, collection, user) {
|
|
18
|
-
super(data, collection, user);
|
|
19
|
-
this.save = async (newInventoryData, options, saveToDatabase = true, update, merge) => {
|
|
20
|
-
if (!!!this.data().sku)
|
|
21
|
-
return false;
|
|
22
|
-
const exists = await DatabaseService_1.default.getDocuments(this._collection.path, {
|
|
23
|
-
query: [{ field: 'sku', operator: '==', value: this.data().sku }]
|
|
24
|
-
});
|
|
25
|
-
if (!!!exists.length) {
|
|
26
|
-
return await super.save(Object.assign(Object.assign({}, (newInventoryData ? newInventoryData : this.data())), { id: (0, string_1.string_to_slug)(this.data().sku) }), options, saveToDatabase, update, merge);
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
try {
|
|
30
|
-
const doc = exists[0];
|
|
31
|
-
const newData = Object.assign(Object.assign({}, this.data()), (!!newInventoryData ? newInventoryData : {}));
|
|
32
|
-
await super.save(Object.assign(Object.assign(Object.assign({}, newData), { last_update_by: this.user() }), (!!!newData.id && !!doc ? { id: doc.id } : {})), options, saveToDatabase, update, merge);
|
|
33
|
-
}
|
|
34
|
-
catch (err) {
|
|
35
|
-
console.log('err', err);
|
|
36
|
-
return false;
|
|
37
|
-
}
|
|
38
|
-
return true;
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
this.delete = async () => {
|
|
42
|
-
try {
|
|
43
|
-
await DatabaseService_1.default.deleteDocument(this._collection.path, (0, string_1.string_to_slug)(this.data().sku));
|
|
44
|
-
return true;
|
|
45
|
-
}
|
|
46
|
-
catch (err) {
|
|
47
|
-
console.log(err);
|
|
48
|
-
return false;
|
|
49
|
-
}
|
|
50
|
-
};
|
|
51
|
-
this.getHistoryInventory = async () => {
|
|
52
|
-
if (!!!this._collection || DatabaseService_1.default.getPathParent(this._collection.path) == '/') {
|
|
53
|
-
throw new Error('Collection should be defined and have a parent.');
|
|
54
|
-
}
|
|
55
|
-
try {
|
|
56
|
-
const historyQuery = await DatabaseService_1.default.getDocuments(DatabaseService_1.default.addToPath(DatabaseService_1.default.getPathParent(this._collection.path), 'inventory_history'), {
|
|
57
|
-
query: [
|
|
58
|
-
{
|
|
59
|
-
field: 'sku',
|
|
60
|
-
operator: 'in',
|
|
61
|
-
value: [this.data().sku, this.data().sku.toLowerCase(), this.data().sku.toUpperCase()]
|
|
62
|
-
}
|
|
63
|
-
],
|
|
64
|
-
orderBy: 'at',
|
|
65
|
-
order: 'desc',
|
|
66
|
-
limit: 50
|
|
67
|
-
});
|
|
68
|
-
return historyQuery.map((d) => (Object.assign(Object.assign({}, d.data), { id: d.id })));
|
|
69
|
-
}
|
|
70
|
-
catch (err) {
|
|
71
|
-
(0, console_1.errorMessage)(`Could not get inventory history${err.message}`);
|
|
72
|
-
return [];
|
|
73
|
-
}
|
|
74
|
-
};
|
|
75
|
-
this.setQuantitiesWithInventoryItemByStore = async (inventory) => {
|
|
76
|
-
return await this.save({
|
|
77
|
-
inventories: this.data().inventories.map((_inventory) => {
|
|
78
|
-
if (_inventory.store_id.toLowerCase() !== (inventory.store_id || '').toLowerCase())
|
|
79
|
-
return _inventory;
|
|
80
|
-
return Object.assign(Object.assign({}, _inventory), { qty: Object.assign(Object.assign({}, _inventory.qty), inventory.qty) });
|
|
81
|
-
})
|
|
82
|
-
}, undefined, true, true);
|
|
83
|
-
};
|
|
84
|
-
this.setQuantitiesWithWebInventoryItemByStore = async (inventory, webQty) => {
|
|
85
|
-
let isDiff = false;
|
|
86
|
-
if (!!!this._data.web_inventory ||
|
|
87
|
-
!!!this._data.web_inventory.available ||
|
|
88
|
-
this._data.web_inventory.available !== webQty)
|
|
89
|
-
isDiff = true;
|
|
90
|
-
for (const inv of this._data.inventories) {
|
|
91
|
-
if (!!inventory.find((i) => (i.store_id || '').toLowerCase() === inv.store_id.toLowerCase() && !(0, isEqual_1.default)(i.qty, inv.qty)))
|
|
92
|
-
isDiff = true;
|
|
93
|
-
}
|
|
94
|
-
if (!isDiff) {
|
|
95
|
-
console.log('Inventory didnt change, not saving : ', this._data.sku);
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
return await this.save({
|
|
99
|
-
inventories: this.data().inventories.map((_inventory) => {
|
|
100
|
-
const newInv = inventory.find((i) => _inventory.store_id.toLowerCase() === (i.store_id || '').toLowerCase());
|
|
101
|
-
if (!!!newInv)
|
|
102
|
-
return _inventory;
|
|
103
|
-
return Object.assign(Object.assign({}, _inventory), { qty: Object.assign(Object.assign({}, _inventory.qty), newInv.qty) });
|
|
104
|
-
}),
|
|
105
|
-
web_inventory: Object.assign(Object.assign(Object.assign({}, (0, IInventoryItem_1.getDefaultInventoryQuantities)()), (this.data().web_inventory || {})), { available: webQty })
|
|
106
|
-
}, undefined, true, true);
|
|
107
|
-
};
|
|
108
|
-
this._modifyQuantitiesByStore = async (storeId, type, operation, amount = 0, cartType, saveToDatabase = true, updateWeb) => {
|
|
109
|
-
var _a;
|
|
110
|
-
if (!!!operation)
|
|
111
|
-
return 'Must include operation type';
|
|
112
|
-
let isWeb = false;
|
|
113
|
-
let newQuantity = undefined;
|
|
114
|
-
const inventories = this._data.inventories.map((storeInventory) => {
|
|
115
|
-
if (storeInventory.store_id !== storeId)
|
|
116
|
-
return storeInventory;
|
|
117
|
-
const currentQte = (0, toNumber_1.default)(storeInventory.qty[type] || 0);
|
|
118
|
-
if (storeInventory.can_sell_online || (!!cartType && cartType !== Cart_1.CartTypeEnum.POS_TRANSACTIONNAL))
|
|
119
|
-
isWeb = true;
|
|
120
|
-
newQuantity =
|
|
121
|
-
operation === IInventoryItem_1.inventoryOperationEnum.ADD ? currentQte + (0, toNumber_1.default)(amount) : currentQte - (0, toNumber_1.default)(amount);
|
|
122
|
-
return Object.assign(Object.assign({}, storeInventory), { qty: Object.assign(Object.assign({}, storeInventory.qty), { [type]: newQuantity }) });
|
|
123
|
-
});
|
|
124
|
-
const willRemoveQuantities = (operation == IInventoryItem_1.inventoryOperationEnum.ADD && amount < 0) ||
|
|
125
|
-
(operation == IInventoryItem_1.inventoryOperationEnum.REMOVE && amount > 0);
|
|
126
|
-
this._data = Object.assign(Object.assign(Object.assign({}, this._data), { inventories: inventories }), (!!isWeb && typeof newQuantity === 'number' && !!updateWeb
|
|
127
|
-
? {
|
|
128
|
-
web_inventory: Object.assign(Object.assign({}, ((_a = this._data.web_inventory) !== null && _a !== void 0 ? _a : (0, IInventoryItem_1.getDefaultInventoryQuantities)())), {
|
|
129
|
-
// NEW : If web inventory is updated with store, add props to stop inventory
|
|
130
|
-
// from adjusting to high negative values if operation will REMOVE quantities
|
|
131
|
-
[type]: this._getNewWebQuantity(type, operation, amount, willRemoveQuantities) })
|
|
132
|
-
}
|
|
133
|
-
: {}));
|
|
134
|
-
if (!!saveToDatabase) {
|
|
135
|
-
await this.save({}, undefined, saveToDatabase);
|
|
136
|
-
}
|
|
137
|
-
};
|
|
138
|
-
this._modifyQuantitiesOnlyWeb = async (type, operation, amount = 0, saveToDatabase) => {
|
|
139
|
-
var _a;
|
|
140
|
-
if (!!!operation)
|
|
141
|
-
return 'Must include operation type';
|
|
142
|
-
let newQuantity = this._getNewWebQuantity(type, operation, amount);
|
|
143
|
-
await this.save({
|
|
144
|
-
web_inventory: Object.assign(Object.assign({}, ((_a = this._data.web_inventory) !== null && _a !== void 0 ? _a : (0, IInventoryItem_1.getDefaultInventoryQuantities)())), { [type]: newQuantity })
|
|
145
|
-
}, undefined, saveToDatabase);
|
|
146
|
-
};
|
|
147
|
-
/**
|
|
148
|
-
* Returns calculated new value for web inventory
|
|
149
|
-
* @param type - The inventory type to calculate
|
|
150
|
-
* @param operation - If quantities should be added or removed
|
|
151
|
-
* @param amount - The quantity to adjust
|
|
152
|
-
* @param ignoreNewNegativeValues - Optionnal. If true, will replace calculated qte with 0 if current qte was positive, and keep current value if it was already negative and is 'available' inventory (since only available web quantites could be negative).
|
|
153
|
-
*/
|
|
154
|
-
this._getNewWebQuantity = (type, operation, amount, ignoreNewNegativeValues) => {
|
|
155
|
-
var _a, _b;
|
|
156
|
-
const webInventory = (_a = this._data.web_inventory) !== null && _a !== void 0 ? _a : (0, IInventoryItem_1.getDefaultInventoryQuantities)();
|
|
157
|
-
const currentQte = (0, toNumber_1.default)((_b = webInventory[type]) !== null && _b !== void 0 ? _b : 0);
|
|
158
|
-
let newValue = operation === IInventoryItem_1.inventoryOperationEnum.ADD
|
|
159
|
-
? (0, toNumber_1.default)(currentQte) + (0, toNumber_1.default)(amount)
|
|
160
|
-
: (0, toNumber_1.default)(currentQte) - (0, toNumber_1.default)(amount);
|
|
161
|
-
if (ignoreNewNegativeValues && newValue < 0)
|
|
162
|
-
newValue = currentQte < 0 && type == 'available' ? currentQte : 0;
|
|
163
|
-
return newValue;
|
|
164
|
-
};
|
|
165
|
-
this._orderCompleted = async (storeId, qte, cartType) => {
|
|
166
|
-
// If order was completed, we need to ajust :
|
|
167
|
-
// - both PROCESSING and COMPLETED quantities
|
|
168
|
-
// - for WEB and STORE inventories
|
|
169
|
-
await this._modifyQuantitiesByStore(storeId, 'processing', IInventoryItem_1.inventoryOperationEnum.REMOVE, qte, cartType, false, true);
|
|
170
|
-
await this._modifyQuantitiesByStore(storeId, 'completed', IInventoryItem_1.inventoryOperationEnum.ADD, qte, cartType, true, true);
|
|
171
|
-
};
|
|
172
|
-
this.handleOrderDelivered = async (storeId, qte, cartType) => {
|
|
173
|
-
await this._orderCompleted(storeId, qte, cartType);
|
|
174
|
-
return this.data();
|
|
175
|
-
};
|
|
176
|
-
this.handleOrderPickedupInStore = async (storeId, qte, cartType) => {
|
|
177
|
-
await this._orderCompleted(storeId, qte, cartType);
|
|
178
|
-
return this.data();
|
|
179
|
-
};
|
|
180
|
-
this.handleOrderProcessedForShipping = async (storeId, qte, cartType) => {
|
|
181
|
-
await this._orderCompleted(storeId, qte, cartType);
|
|
182
|
-
return this.data();
|
|
183
|
-
};
|
|
184
|
-
this.handleNewQuantities = async (storeId, qte, cartType, saveToDatabase) => {
|
|
185
|
-
const shouldSaveToDB = typeof saveToDatabase != 'undefined' ? saveToDatabase : true;
|
|
186
|
-
// If quantities added, we need to ajust :
|
|
187
|
-
// - AVAILABLE quantities
|
|
188
|
-
// - for WEB and STORE inventories
|
|
189
|
-
await this._modifyQuantitiesByStore(storeId, 'available', IInventoryItem_1.inventoryOperationEnum.ADD, qte, cartType, shouldSaveToDB, true);
|
|
190
|
-
return this._data;
|
|
191
|
-
};
|
|
192
|
-
this.handleUpdateWebInventory = async (qte) => {
|
|
193
|
-
// After inventory is updated through CSV import, we need to adjust :
|
|
194
|
-
// - AVAILABLE quantities
|
|
195
|
-
// - for WEB inventory
|
|
196
|
-
await this._modifyQuantitiesOnlyWeb('available', IInventoryItem_1.inventoryOperationEnum.ADD, qte, true);
|
|
197
|
-
};
|
|
198
|
-
this.handleProductSold = async (storeId, qte, cartType, web = false) => {
|
|
199
|
-
// If product was sold and is a web transaction, we need to ajust :
|
|
200
|
-
// - both AVAILABLE and PROCESSING quantities
|
|
201
|
-
// - for only WEB inventory
|
|
202
|
-
if (!!web) {
|
|
203
|
-
await this._modifyQuantitiesOnlyWeb('available', IInventoryItem_1.inventoryOperationEnum.REMOVE, qte, false);
|
|
204
|
-
await this._modifyQuantitiesOnlyWeb('processing', IInventoryItem_1.inventoryOperationEnum.ADD, qte);
|
|
205
|
-
return this.data();
|
|
206
|
-
}
|
|
207
|
-
// If product was sold and is a POS transaction (!!!web), we need to ajust :
|
|
208
|
-
// - both AVAILABLE and COMPLETED quantities
|
|
209
|
-
// - for WEB and STORE inventory
|
|
210
|
-
// - only if storeId is defined
|
|
211
|
-
if (!!storeId) {
|
|
212
|
-
await this._modifyQuantitiesByStore(storeId, 'available', IInventoryItem_1.inventoryOperationEnum.REMOVE, qte, cartType, false, true);
|
|
213
|
-
await this._modifyQuantitiesByStore(storeId, 'completed', IInventoryItem_1.inventoryOperationEnum.ADD, qte, cartType, true, true);
|
|
214
|
-
}
|
|
215
|
-
else {
|
|
216
|
-
console.log('no storeId provided!');
|
|
217
|
-
}
|
|
218
|
-
return this.data();
|
|
219
|
-
};
|
|
220
|
-
/**
|
|
221
|
-
* Update inventory on cart item modified (POS modify cart process).
|
|
222
|
-
* @param storeId The store associated to the order. If cart still at status 5, might be undefined (unless quantities already reserved for order)
|
|
223
|
-
* @param qte The quantities to ajust
|
|
224
|
-
* @param cartType The associated cart's type
|
|
225
|
-
* @param options.onlyWeb Optionnal. If only web inventory should be ajusted
|
|
226
|
-
* @param options.reservedQteDiff Optionnal. Reserved quantities difference for given cart item. Expressed in sell_unit (must be converted to inventory_unit)
|
|
227
|
-
* @returns {Promise<IInventoryItem>}
|
|
228
|
-
*/
|
|
229
|
-
this.handleProductModified = async (storeId, qte, cartType, options = {}) => {
|
|
230
|
-
var _a;
|
|
231
|
-
// Save store inventory if not only web and storeId is provided
|
|
232
|
-
if (!!!options.onlyWeb && !!storeId) {
|
|
233
|
-
// If quantities were already reserved for order, should only update inventory according to reserved quantity difference
|
|
234
|
-
let qteToUse = (_a = options.reservedQteDiff) !== null && _a !== void 0 ? _a : qte;
|
|
235
|
-
await this._modifyQuantitiesByStore(storeId, 'available', qteToUse < 0 ? IInventoryItem_1.inventoryOperationEnum.ADD : IInventoryItem_1.inventoryOperationEnum.REMOVE, qteToUse < 0 ? qteToUse * -1 : qteToUse, cartType, false, // save to database (will be done later on web update)
|
|
236
|
-
false // save web (will be done later)
|
|
237
|
-
);
|
|
238
|
-
await this._modifyQuantitiesByStore(storeId, 'processing', qteToUse < 0 ? IInventoryItem_1.inventoryOperationEnum.REMOVE : IInventoryItem_1.inventoryOperationEnum.ADD, qteToUse < 0 ? qteToUse * -1 : qteToUse, cartType, false, // save to database (will be done later on web update)
|
|
239
|
-
false // save web (will be done laters
|
|
240
|
-
);
|
|
241
|
-
}
|
|
242
|
-
// Always update web quantities with total modified quantities
|
|
243
|
-
await this._modifyQuantitiesOnlyWeb('available', qte < 0 ? IInventoryItem_1.inventoryOperationEnum.ADD : IInventoryItem_1.inventoryOperationEnum.REMOVE, qte < 0 ? qte * -1 : qte, false);
|
|
244
|
-
await this._modifyQuantitiesOnlyWeb('processing', qte < 0 ? IInventoryItem_1.inventoryOperationEnum.REMOVE : IInventoryItem_1.inventoryOperationEnum.ADD, qte < 0 ? qte * -1 : qte, true // save to database done here for all updates to inventories and web_inventory
|
|
245
|
-
);
|
|
246
|
-
return this.data();
|
|
247
|
-
};
|
|
248
|
-
/**
|
|
249
|
-
* Update inventory for a specific item if order was cancelled or refunded.
|
|
250
|
-
* @param toStoreId The store where quantities will be ADDED
|
|
251
|
-
* @param fromStoreId The store where quantities will vbe REMOVED
|
|
252
|
-
* @param qte The quantity to ajust
|
|
253
|
-
* @param operationType If cart was cancelled or refunded
|
|
254
|
-
* @param cartType If cart is web, POS, or Pickup Now
|
|
255
|
-
* @param options.deleteItem Optionnal. If item should not be returned to the stores inventory (broken, misplaced, old batch, etc...)
|
|
256
|
-
* @param options.onlyWeb Optionnal. If inventory should only be updated for web inventory (and not for stores). Mostly depends on the cart's status when cancelled.
|
|
257
|
-
* @param options.orderAssociatedTransfers Optionnal. Array of TransferRequest objects associated to cart. Used when cart is cancelled
|
|
258
|
-
* @param options.saveToDatabase Optionnal. Mostly used for dev purpuses (and for unit testing). Otherwise, save is done logically at the end of the update process
|
|
259
|
-
* @param options.reservedQte Optionnal. Quantity reserved in processing inventory for cart item as of now. Expressed in sell_unit (must be converted to inventory_unit)
|
|
260
|
-
* @param options.otherUnits Optionnal. Other units for corresponding cart item. If not defined, will use those found in InventoryItem data
|
|
261
|
-
*/
|
|
262
|
-
this.handleOrderCancelled = async (toStoreId, fromStoreId, qte, operationType, cartType, options = {}) => {
|
|
263
|
-
const otherUnitsToUse = options.otherUnits || this._data.other_units;
|
|
264
|
-
// If order was cancelled, we need to ajust :
|
|
265
|
-
// - PROCESSING quantities always, and AVAILABLE quantities only if item should return in stock
|
|
266
|
-
// - for WEB inventory, and STORE inventory if onlyWeb is false, or order has associated transfers
|
|
267
|
-
// If order was refunded, we need to ajust :
|
|
268
|
-
// - Take quantities from COMPLETED and put them back in AVAILABLE
|
|
269
|
-
// - for WEB and STORE inventory, in this case onlyWeb is always false
|
|
270
|
-
// ----------------------------------------------------------
|
|
271
|
-
// #region CHECK FOR QUANTITIES TO AJUST IN STORE
|
|
272
|
-
let qteToUseForStoreUpdate = !!!options.onlyWeb ? qte : 0;
|
|
273
|
-
if (!!options.orderAssociatedTransfers && operationType == 'cancelled' && !!options.onlyWeb) {
|
|
274
|
-
// A. Calculate initial quantites asked for transfer
|
|
275
|
-
let initialQuantitiesInTransfers = 0;
|
|
276
|
-
let receivedQuantitesInTransfers = 0;
|
|
277
|
-
for (let transfer of options.orderAssociatedTransfers) {
|
|
278
|
-
// Skip transfers that were split at creation, to fetch only initial quantities
|
|
279
|
-
if (!!!transfer.data().original_transfer_id) {
|
|
280
|
-
initialQuantitiesInTransfers += transfer.getOriginalRequestedQuantity(this._data.sku);
|
|
281
|
-
}
|
|
282
|
-
// Get quantities received from transfers with status RECEIVED or RECEIVED_PARTIAL
|
|
283
|
-
if ([TransferRequest_1.TransferRequestStatusEnum.RECEIVED, TransferRequest_1.TransferRequestStatusEnum.RECEIVED_PARTIAL].includes(transfer.data().status)) {
|
|
284
|
-
const sameProd = transfer.data().products.find((p) => p.sku == this._data.sku);
|
|
285
|
-
if (!!sameProd)
|
|
286
|
-
receivedQuantitesInTransfers += sameProd.qte_received || 0;
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
// B. Set currently in processing quantities to ...
|
|
290
|
-
// ...reserved quantities (if defined)
|
|
291
|
-
if (typeof options.reservedQte != 'undefined') {
|
|
292
|
-
qteToUseForStoreUpdate = (0, inventories_1.getConvertedUnitQuantity)(otherUnitsToUse, options.reservedQte, 'inventory_unit');
|
|
293
|
-
}
|
|
294
|
-
else {
|
|
295
|
-
// ...the difference between total qte for item in cart and quantities initially set for transfer requests
|
|
296
|
-
qteToUseForStoreUpdate = qte - initialQuantitiesInTransfers;
|
|
297
|
-
if (qteToUseForStoreUpdate < 0)
|
|
298
|
-
qteToUseForStoreUpdate = 0;
|
|
299
|
-
// ... and add quantities received from transfers to processing quantites
|
|
300
|
-
qteToUseForStoreUpdate += receivedQuantitesInTransfers;
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
if (qteToUseForStoreUpdate != 0) {
|
|
304
|
-
await this._modifyQuantitiesByStore(fromStoreId, operationType === 'refunded' ? 'completed' : 'processing', IInventoryItem_1.inventoryOperationEnum.REMOVE, qteToUseForStoreUpdate, cartType, typeof options.saveToDatabase == 'boolean' ? options.saveToDatabase : !!options.deleteItem // save to database
|
|
305
|
-
);
|
|
306
|
-
if (!!!options.deleteItem) {
|
|
307
|
-
await this._modifyQuantitiesByStore(toStoreId, 'available', IInventoryItem_1.inventoryOperationEnum.ADD, qteToUseForStoreUpdate, cartType, typeof options.saveToDatabase == 'boolean' ? options.saveToDatabase : true // save to database
|
|
308
|
-
);
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
// #endregion
|
|
312
|
-
// ----------------------------------------------------------
|
|
313
|
-
// #region AJUST WEB QUANTITIES
|
|
314
|
-
if (!!!options.deleteItem) {
|
|
315
|
-
await this._modifyQuantitiesOnlyWeb('available', IInventoryItem_1.inventoryOperationEnum.ADD, qte, false);
|
|
316
|
-
}
|
|
317
|
-
await this._modifyQuantitiesOnlyWeb(operationType === 'refunded' ? 'completed' : 'processing', IInventoryItem_1.inventoryOperationEnum.REMOVE, qte, typeof options.saveToDatabase == 'boolean' ? options.saveToDatabase : true);
|
|
318
|
-
// #endregion
|
|
319
|
-
return this._data;
|
|
320
|
-
};
|
|
321
|
-
this.handleOrderReadyForProcessing = async (storeId, qte, cartType) => {
|
|
322
|
-
// If order is ready for processing, we need to ajust :
|
|
323
|
-
// - both AVAILABLE and PROCESSING quantities
|
|
324
|
-
// - for only STORE inventory
|
|
325
|
-
await this._modifyQuantitiesByStore(storeId, 'processing', IInventoryItem_1.inventoryOperationEnum.ADD, qte, cartType, false, false);
|
|
326
|
-
await this._modifyQuantitiesByStore(storeId, 'available', IInventoryItem_1.inventoryOperationEnum.REMOVE, qte, cartType, true, false);
|
|
327
|
-
return this.data();
|
|
328
|
-
};
|
|
329
|
-
this.handleOrderInDelivery = async (storeId, qte, cartType) => {
|
|
330
|
-
// If order is in delivery, we need to ajust :
|
|
331
|
-
// - both PROCESSING and IN_TRANSIT quantities
|
|
332
|
-
// - for only STORE inventory
|
|
333
|
-
await this._modifyQuantitiesByStore(storeId, 'processing', IInventoryItem_1.inventoryOperationEnum.REMOVE, qte, cartType, false);
|
|
334
|
-
await this._modifyQuantitiesByStore(storeId, 'in_transit', IInventoryItem_1.inventoryOperationEnum.ADD, qte, cartType);
|
|
335
|
-
return this.data();
|
|
336
|
-
};
|
|
337
|
-
this.handleChangedProcessingStore = async (oldStoreId, newStoreId, qte, cartType) => {
|
|
338
|
-
// If processing store was updated :
|
|
339
|
-
// - for old processing store :
|
|
340
|
-
// - remove qties from processing, add to available
|
|
341
|
-
// - for new processing store :
|
|
342
|
-
// - remove qties from available, add to processing
|
|
343
|
-
// - in both cases, only for store inventory (no changes to web inventory)
|
|
344
|
-
await this._modifyQuantitiesByStore(oldStoreId, 'processing', IInventoryItem_1.inventoryOperationEnum.REMOVE, qte, cartType, false);
|
|
345
|
-
await this._modifyQuantitiesByStore(oldStoreId, 'available', IInventoryItem_1.inventoryOperationEnum.ADD, qte, cartType, false);
|
|
346
|
-
await this._modifyQuantitiesByStore(newStoreId, 'available', IInventoryItem_1.inventoryOperationEnum.REMOVE, qte, cartType, false);
|
|
347
|
-
await this._modifyQuantitiesByStore(newStoreId, 'processing', IInventoryItem_1.inventoryOperationEnum.ADD, qte, cartType, true);
|
|
348
|
-
return this.data();
|
|
349
|
-
};
|
|
350
|
-
this.handleTransferInTransit = async (storeId, qte, cartType, forOrder) => {
|
|
351
|
-
// If transfer is now in transit, we need to ajust :
|
|
352
|
-
// - both AVAILABLE and IN_TRANSIT quantities
|
|
353
|
-
// - for STORE inventory always
|
|
354
|
-
// - for WEB inventory if transfer was not created though an order
|
|
355
|
-
await this._modifyQuantitiesByStore(storeId, 'available', IInventoryItem_1.inventoryOperationEnum.REMOVE, qte, cartType, false, !forOrder);
|
|
356
|
-
await this._modifyQuantitiesByStore(storeId, 'in_transit', IInventoryItem_1.inventoryOperationEnum.ADD, qte, cartType, true, !forOrder);
|
|
357
|
-
return this.data();
|
|
358
|
-
};
|
|
359
|
-
/**
|
|
360
|
-
* Adjust store quantities
|
|
361
|
-
* @param storeFromId Origin store id
|
|
362
|
-
* @param storeToId Target store id
|
|
363
|
-
* @param qte Total quantity received
|
|
364
|
-
* @param cartType Cart type, GR only?
|
|
365
|
-
* @param options.forOrder True if associated to an order
|
|
366
|
-
* @param options.maxProcessingQte Quantity to place in processing, extra will go in available
|
|
367
|
-
* @param options.skipWebUpdateForAvailable If web inventory update should be skipped for available quantities (for when transfer is received for a already processed cart)
|
|
368
|
-
* @returns the new inventory item data
|
|
369
|
-
*/
|
|
370
|
-
this.handleTransferReceived = async (storeFromId, storeToId, qte, cartType, options) => {
|
|
371
|
-
// FROM STORE
|
|
372
|
-
// If order transfer was received, we need to ajust :
|
|
373
|
-
// - only IN_TRANSIT quantities
|
|
374
|
-
// - for only STORE inventory
|
|
375
|
-
// - of the storeFromID
|
|
376
|
-
await this._modifyQuantitiesByStore(storeFromId, 'in_transit', IInventoryItem_1.inventoryOperationEnum.REMOVE, qte, cartType, false, // don't save to database here, will be done on next steps
|
|
377
|
-
!options.forOrder);
|
|
378
|
-
// TO STORE
|
|
379
|
-
// If order transfer was received, we need to ajust :
|
|
380
|
-
// - if transfer is associated to order :
|
|
381
|
-
// - only IN_TRANSIT quantities
|
|
382
|
-
// - only for STORE inventory
|
|
383
|
-
//
|
|
384
|
-
// - else :
|
|
385
|
-
// - only AVAILABLE quantities
|
|
386
|
-
// - for STORE inventory always, and WEB inventory
|
|
387
|
-
if (options.maxProcessingQte && options.forOrder) {
|
|
388
|
-
qte -= options.maxProcessingQte;
|
|
389
|
-
await this._modifyQuantitiesByStore(storeToId, 'processing', IInventoryItem_1.inventoryOperationEnum.ADD, options.maxProcessingQte, cartType, qte <= 0, // save to database only if logic will not enter next check
|
|
390
|
-
!options.forOrder);
|
|
391
|
-
}
|
|
392
|
-
if (qte > 0) {
|
|
393
|
-
await this._modifyQuantitiesByStore(storeToId, 'available', IInventoryItem_1.inventoryOperationEnum.ADD, qte, cartType, true, // always save to database here
|
|
394
|
-
!options.skipWebUpdateForAvailable // only update web inventory if property not set to skip operation
|
|
395
|
-
);
|
|
396
|
-
}
|
|
397
|
-
return this.data();
|
|
398
|
-
};
|
|
399
|
-
/**
|
|
400
|
-
* Cancel value in transit - Adjust the in transit negatively without adjusting any other quantity.
|
|
401
|
-
* @param storeId The store to apply the change
|
|
402
|
-
* @param qte The quantity to remove
|
|
403
|
-
* @param cartType Cart type, GR only?
|
|
404
|
-
* @param forOrder True if associated to an order
|
|
405
|
-
* @returns updated data
|
|
406
|
-
*/
|
|
407
|
-
this.handleCancelInTransit = async (storeId, qte, cartType, forOrder) => {
|
|
408
|
-
await this._modifyQuantitiesByStore(storeId, 'in_transit', IInventoryItem_1.inventoryOperationEnum.REMOVE, qte, cartType, true, !forOrder);
|
|
409
|
-
return this.data();
|
|
410
|
-
};
|
|
411
|
-
this.handlePOSCartFastComplete = async (storeId, qte, cartType, quantitiesAlreadyReserved = 0) => {
|
|
412
|
-
// If order was triggered by POS Fast complete (button in order interface dashboard), we need to ajust :
|
|
413
|
-
// - both PROCESSING and COMPLETE quantities
|
|
414
|
-
// - for only WEB inventory
|
|
415
|
-
// - if store can sell online
|
|
416
|
-
const fromStoreIsWeb = this.data().inventories.find((inventory) => inventory.store_id === storeId).can_sell_online;
|
|
417
|
-
if (!!fromStoreIsWeb) {
|
|
418
|
-
await this._modifyQuantitiesOnlyWeb('processing', IInventoryItem_1.inventoryOperationEnum.REMOVE, qte, false);
|
|
419
|
-
await this._modifyQuantitiesOnlyWeb('completed', IInventoryItem_1.inventoryOperationEnum.ADD, qte, false);
|
|
420
|
-
}
|
|
421
|
-
const quantitiesNotReserved = qte - quantitiesAlreadyReserved;
|
|
422
|
-
// AND, we need to ajust :
|
|
423
|
-
// - potentially AVAILABLE quantities with quantitiesNotReserved (if quantitiesNotReserved != 0)
|
|
424
|
-
// - potentially PROCESSING quantities with quantitiesAlreadyReserved (if quantitiesAlreadyReserved != 0)
|
|
425
|
-
// - always COMPLETE quantities with full qte from item
|
|
426
|
-
// - for only STORE inventory
|
|
427
|
-
if (quantitiesNotReserved != 0) {
|
|
428
|
-
await this._modifyQuantitiesByStore(storeId, 'available', IInventoryItem_1.inventoryOperationEnum.REMOVE, quantitiesNotReserved, cartType, false, false);
|
|
429
|
-
}
|
|
430
|
-
if (quantitiesAlreadyReserved != 0) {
|
|
431
|
-
await this._modifyQuantitiesByStore(storeId, 'processing', IInventoryItem_1.inventoryOperationEnum.REMOVE, quantitiesAlreadyReserved, cartType, false, false);
|
|
432
|
-
}
|
|
433
|
-
await this._modifyQuantitiesByStore(storeId, 'completed', IInventoryItem_1.inventoryOperationEnum.ADD, qte, cartType, true, false);
|
|
434
|
-
return this.data();
|
|
435
|
-
};
|
|
436
|
-
this.handleChangeCanSellOnline = async (storeId, qte, newCanSellOnline, saveToDatabase) => {
|
|
437
|
-
const storeInventoryIndex = this.data().inventories.findIndex((i) => i.store_id === storeId);
|
|
438
|
-
if (storeInventoryIndex === -1)
|
|
439
|
-
return;
|
|
440
|
-
const currentWebInventory = this.data().web_inventory;
|
|
441
|
-
const currentAvailable = !!currentWebInventory && !!currentWebInventory.available ? currentWebInventory.available : 0;
|
|
442
|
-
const partial = {
|
|
443
|
-
web_inventory: Object.assign(Object.assign(Object.assign({}, (0, IInventoryItem_1.getDefaultInventoryQuantities)()), (!!this.data().web_inventory ? this.data().web_inventory : {})), { available: !!newCanSellOnline ? currentAvailable + qte : currentAvailable - qte }),
|
|
444
|
-
inventories: [
|
|
445
|
-
...this.data().inventories.slice(0, storeInventoryIndex),
|
|
446
|
-
Object.assign(Object.assign({}, this.data().inventories[storeInventoryIndex]), { can_sell_online: newCanSellOnline }),
|
|
447
|
-
...this.data().inventories.slice(storeInventoryIndex + 1)
|
|
448
|
-
]
|
|
449
|
-
};
|
|
450
|
-
if (!!saveToDatabase) {
|
|
451
|
-
await this.save(partial);
|
|
452
|
-
}
|
|
453
|
-
else {
|
|
454
|
-
this._data = Object.assign(Object.assign({}, this.data()), partial);
|
|
455
|
-
}
|
|
456
|
-
return this.data();
|
|
457
|
-
};
|
|
458
|
-
/**
|
|
459
|
-
* Reserve a quantity from the available web inventory and store if provided
|
|
460
|
-
* @param qty The quantity to reserve
|
|
461
|
-
* @param storeId The store id to use for reservation, undefined if web only
|
|
462
|
-
* @returns the new inventory data
|
|
463
|
-
*/
|
|
464
|
-
this.handleReserveInventory = async (qty, storeId) => {
|
|
465
|
-
if (!!storeId) {
|
|
466
|
-
await this._modifyQuantitiesByStore(storeId, 'available', IInventoryItem_1.inventoryOperationEnum.REMOVE, qty, Cart_1.CartTypeEnum.POS, false, true);
|
|
467
|
-
await this._modifyQuantitiesByStore(storeId, 'processing', IInventoryItem_1.inventoryOperationEnum.ADD, qty, Cart_1.CartTypeEnum.POS, true, true);
|
|
468
|
-
return this.data();
|
|
469
|
-
}
|
|
470
|
-
await this._modifyQuantitiesOnlyWeb('available', IInventoryItem_1.inventoryOperationEnum.REMOVE, qty, false);
|
|
471
|
-
await this._modifyQuantitiesOnlyWeb('processing', IInventoryItem_1.inventoryOperationEnum.ADD, qty);
|
|
472
|
-
return this.data();
|
|
473
|
-
};
|
|
474
|
-
/**
|
|
475
|
-
* Release a quantity from the processing web inventory and store if provided
|
|
476
|
-
* @param qty The quantity to release
|
|
477
|
-
* @param storeId The store id to use for reservation, undefined if web only
|
|
478
|
-
* @returns the new inventory data
|
|
479
|
-
*/
|
|
480
|
-
this.handleUnreserveInventory = async (qty, storeId) => {
|
|
481
|
-
if (!!storeId) {
|
|
482
|
-
await this._modifyQuantitiesByStore(storeId, 'processing', IInventoryItem_1.inventoryOperationEnum.REMOVE, qty, Cart_1.CartTypeEnum.POS, false, true);
|
|
483
|
-
await this._modifyQuantitiesByStore(storeId, 'available', IInventoryItem_1.inventoryOperationEnum.ADD, qty, Cart_1.CartTypeEnum.POS, true, true);
|
|
484
|
-
return this.data();
|
|
485
|
-
}
|
|
486
|
-
await this._modifyQuantitiesOnlyWeb('processing', IInventoryItem_1.inventoryOperationEnum.REMOVE, qty, false);
|
|
487
|
-
await this._modifyQuantitiesOnlyWeb('available', IInventoryItem_1.inventoryOperationEnum.ADD, qty);
|
|
488
|
-
return this.data();
|
|
489
|
-
};
|
|
490
|
-
}
|
|
491
|
-
}
|
|
492
|
-
exports.default = Inventory;
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const isEqual_1 = __importDefault(require("lodash/isEqual"));
|
|
7
|
+
const toNumber_1 = __importDefault(require("lodash/toNumber"));
|
|
8
|
+
const DatabaseService_1 = __importDefault(require("../../services/database/DatabaseService"));
|
|
9
|
+
const baseService_1 = require("../baseService");
|
|
10
|
+
const TransferRequest_1 = require("../../Interfaces/TransferRequest");
|
|
11
|
+
const IInventoryItem_1 = require("../../Interfaces/Product/IInventoryItem");
|
|
12
|
+
const Cart_1 = require("../../Interfaces/Cart");
|
|
13
|
+
const console_1 = require("../../utils/console");
|
|
14
|
+
const string_1 = require("../../utils/string");
|
|
15
|
+
const inventories_1 = require("../../utils/inventories");
|
|
16
|
+
class Inventory extends baseService_1.BaseServiceClass {
|
|
17
|
+
constructor(data, collection, user) {
|
|
18
|
+
super(data, collection, user);
|
|
19
|
+
this.save = async (newInventoryData, options, saveToDatabase = true, update, merge) => {
|
|
20
|
+
if (!!!this.data().sku)
|
|
21
|
+
return false;
|
|
22
|
+
const exists = await DatabaseService_1.default.getDocuments(this._collection.path, {
|
|
23
|
+
query: [{ field: 'sku', operator: '==', value: this.data().sku }]
|
|
24
|
+
});
|
|
25
|
+
if (!!!exists.length) {
|
|
26
|
+
return await super.save(Object.assign(Object.assign({}, (newInventoryData ? newInventoryData : this.data())), { id: (0, string_1.string_to_slug)(this.data().sku) }), options, saveToDatabase, update, merge);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
try {
|
|
30
|
+
const doc = exists[0];
|
|
31
|
+
const newData = Object.assign(Object.assign({}, this.data()), (!!newInventoryData ? newInventoryData : {}));
|
|
32
|
+
await super.save(Object.assign(Object.assign(Object.assign({}, newData), { last_update_by: this.user() }), (!!!newData.id && !!doc ? { id: doc.id } : {})), options, saveToDatabase, update, merge);
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
console.log('err', err);
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
this.delete = async () => {
|
|
42
|
+
try {
|
|
43
|
+
await DatabaseService_1.default.deleteDocument(this._collection.path, (0, string_1.string_to_slug)(this.data().sku));
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
console.log(err);
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
this.getHistoryInventory = async () => {
|
|
52
|
+
if (!!!this._collection || DatabaseService_1.default.getPathParent(this._collection.path) == '/') {
|
|
53
|
+
throw new Error('Collection should be defined and have a parent.');
|
|
54
|
+
}
|
|
55
|
+
try {
|
|
56
|
+
const historyQuery = await DatabaseService_1.default.getDocuments(DatabaseService_1.default.addToPath(DatabaseService_1.default.getPathParent(this._collection.path), 'inventory_history'), {
|
|
57
|
+
query: [
|
|
58
|
+
{
|
|
59
|
+
field: 'sku',
|
|
60
|
+
operator: 'in',
|
|
61
|
+
value: [this.data().sku, this.data().sku.toLowerCase(), this.data().sku.toUpperCase()]
|
|
62
|
+
}
|
|
63
|
+
],
|
|
64
|
+
orderBy: 'at',
|
|
65
|
+
order: 'desc',
|
|
66
|
+
limit: 50
|
|
67
|
+
});
|
|
68
|
+
return historyQuery.map((d) => (Object.assign(Object.assign({}, d.data), { id: d.id })));
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
(0, console_1.errorMessage)(`Could not get inventory history${err.message}`);
|
|
72
|
+
return [];
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
this.setQuantitiesWithInventoryItemByStore = async (inventory) => {
|
|
76
|
+
return await this.save({
|
|
77
|
+
inventories: this.data().inventories.map((_inventory) => {
|
|
78
|
+
if (_inventory.store_id.toLowerCase() !== (inventory.store_id || '').toLowerCase())
|
|
79
|
+
return _inventory;
|
|
80
|
+
return Object.assign(Object.assign({}, _inventory), { qty: Object.assign(Object.assign({}, _inventory.qty), inventory.qty) });
|
|
81
|
+
})
|
|
82
|
+
}, undefined, true, true);
|
|
83
|
+
};
|
|
84
|
+
this.setQuantitiesWithWebInventoryItemByStore = async (inventory, webQty) => {
|
|
85
|
+
let isDiff = false;
|
|
86
|
+
if (!!!this._data.web_inventory ||
|
|
87
|
+
!!!this._data.web_inventory.available ||
|
|
88
|
+
this._data.web_inventory.available !== webQty)
|
|
89
|
+
isDiff = true;
|
|
90
|
+
for (const inv of this._data.inventories) {
|
|
91
|
+
if (!!inventory.find((i) => (i.store_id || '').toLowerCase() === inv.store_id.toLowerCase() && !(0, isEqual_1.default)(i.qty, inv.qty)))
|
|
92
|
+
isDiff = true;
|
|
93
|
+
}
|
|
94
|
+
if (!isDiff) {
|
|
95
|
+
console.log('Inventory didnt change, not saving : ', this._data.sku);
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
return await this.save({
|
|
99
|
+
inventories: this.data().inventories.map((_inventory) => {
|
|
100
|
+
const newInv = inventory.find((i) => _inventory.store_id.toLowerCase() === (i.store_id || '').toLowerCase());
|
|
101
|
+
if (!!!newInv)
|
|
102
|
+
return _inventory;
|
|
103
|
+
return Object.assign(Object.assign({}, _inventory), { qty: Object.assign(Object.assign({}, _inventory.qty), newInv.qty) });
|
|
104
|
+
}),
|
|
105
|
+
web_inventory: Object.assign(Object.assign(Object.assign({}, (0, IInventoryItem_1.getDefaultInventoryQuantities)()), (this.data().web_inventory || {})), { available: webQty })
|
|
106
|
+
}, undefined, true, true);
|
|
107
|
+
};
|
|
108
|
+
this._modifyQuantitiesByStore = async (storeId, type, operation, amount = 0, cartType, saveToDatabase = true, updateWeb) => {
|
|
109
|
+
var _a;
|
|
110
|
+
if (!!!operation)
|
|
111
|
+
return 'Must include operation type';
|
|
112
|
+
let isWeb = false;
|
|
113
|
+
let newQuantity = undefined;
|
|
114
|
+
const inventories = this._data.inventories.map((storeInventory) => {
|
|
115
|
+
if (storeInventory.store_id !== storeId)
|
|
116
|
+
return storeInventory;
|
|
117
|
+
const currentQte = (0, toNumber_1.default)(storeInventory.qty[type] || 0);
|
|
118
|
+
if (storeInventory.can_sell_online || (!!cartType && cartType !== Cart_1.CartTypeEnum.POS_TRANSACTIONNAL))
|
|
119
|
+
isWeb = true;
|
|
120
|
+
newQuantity =
|
|
121
|
+
operation === IInventoryItem_1.inventoryOperationEnum.ADD ? currentQte + (0, toNumber_1.default)(amount) : currentQte - (0, toNumber_1.default)(amount);
|
|
122
|
+
return Object.assign(Object.assign({}, storeInventory), { qty: Object.assign(Object.assign({}, storeInventory.qty), { [type]: newQuantity }) });
|
|
123
|
+
});
|
|
124
|
+
const willRemoveQuantities = (operation == IInventoryItem_1.inventoryOperationEnum.ADD && amount < 0) ||
|
|
125
|
+
(operation == IInventoryItem_1.inventoryOperationEnum.REMOVE && amount > 0);
|
|
126
|
+
this._data = Object.assign(Object.assign(Object.assign({}, this._data), { inventories: inventories }), (!!isWeb && typeof newQuantity === 'number' && !!updateWeb
|
|
127
|
+
? {
|
|
128
|
+
web_inventory: Object.assign(Object.assign({}, ((_a = this._data.web_inventory) !== null && _a !== void 0 ? _a : (0, IInventoryItem_1.getDefaultInventoryQuantities)())), {
|
|
129
|
+
// NEW : If web inventory is updated with store, add props to stop inventory
|
|
130
|
+
// from adjusting to high negative values if operation will REMOVE quantities
|
|
131
|
+
[type]: this._getNewWebQuantity(type, operation, amount, willRemoveQuantities) })
|
|
132
|
+
}
|
|
133
|
+
: {}));
|
|
134
|
+
if (!!saveToDatabase) {
|
|
135
|
+
await this.save({}, undefined, saveToDatabase);
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
this._modifyQuantitiesOnlyWeb = async (type, operation, amount = 0, saveToDatabase) => {
|
|
139
|
+
var _a;
|
|
140
|
+
if (!!!operation)
|
|
141
|
+
return 'Must include operation type';
|
|
142
|
+
let newQuantity = this._getNewWebQuantity(type, operation, amount);
|
|
143
|
+
await this.save({
|
|
144
|
+
web_inventory: Object.assign(Object.assign({}, ((_a = this._data.web_inventory) !== null && _a !== void 0 ? _a : (0, IInventoryItem_1.getDefaultInventoryQuantities)())), { [type]: newQuantity })
|
|
145
|
+
}, undefined, saveToDatabase);
|
|
146
|
+
};
|
|
147
|
+
/**
|
|
148
|
+
* Returns calculated new value for web inventory
|
|
149
|
+
* @param type - The inventory type to calculate
|
|
150
|
+
* @param operation - If quantities should be added or removed
|
|
151
|
+
* @param amount - The quantity to adjust
|
|
152
|
+
* @param ignoreNewNegativeValues - Optionnal. If true, will replace calculated qte with 0 if current qte was positive, and keep current value if it was already negative and is 'available' inventory (since only available web quantites could be negative).
|
|
153
|
+
*/
|
|
154
|
+
this._getNewWebQuantity = (type, operation, amount, ignoreNewNegativeValues) => {
|
|
155
|
+
var _a, _b;
|
|
156
|
+
const webInventory = (_a = this._data.web_inventory) !== null && _a !== void 0 ? _a : (0, IInventoryItem_1.getDefaultInventoryQuantities)();
|
|
157
|
+
const currentQte = (0, toNumber_1.default)((_b = webInventory[type]) !== null && _b !== void 0 ? _b : 0);
|
|
158
|
+
let newValue = operation === IInventoryItem_1.inventoryOperationEnum.ADD
|
|
159
|
+
? (0, toNumber_1.default)(currentQte) + (0, toNumber_1.default)(amount)
|
|
160
|
+
: (0, toNumber_1.default)(currentQte) - (0, toNumber_1.default)(amount);
|
|
161
|
+
if (ignoreNewNegativeValues && newValue < 0)
|
|
162
|
+
newValue = currentQte < 0 && type == 'available' ? currentQte : 0;
|
|
163
|
+
return newValue;
|
|
164
|
+
};
|
|
165
|
+
this._orderCompleted = async (storeId, qte, cartType) => {
|
|
166
|
+
// If order was completed, we need to ajust :
|
|
167
|
+
// - both PROCESSING and COMPLETED quantities
|
|
168
|
+
// - for WEB and STORE inventories
|
|
169
|
+
await this._modifyQuantitiesByStore(storeId, 'processing', IInventoryItem_1.inventoryOperationEnum.REMOVE, qte, cartType, false, true);
|
|
170
|
+
await this._modifyQuantitiesByStore(storeId, 'completed', IInventoryItem_1.inventoryOperationEnum.ADD, qte, cartType, true, true);
|
|
171
|
+
};
|
|
172
|
+
this.handleOrderDelivered = async (storeId, qte, cartType) => {
|
|
173
|
+
await this._orderCompleted(storeId, qte, cartType);
|
|
174
|
+
return this.data();
|
|
175
|
+
};
|
|
176
|
+
this.handleOrderPickedupInStore = async (storeId, qte, cartType) => {
|
|
177
|
+
await this._orderCompleted(storeId, qte, cartType);
|
|
178
|
+
return this.data();
|
|
179
|
+
};
|
|
180
|
+
this.handleOrderProcessedForShipping = async (storeId, qte, cartType) => {
|
|
181
|
+
await this._orderCompleted(storeId, qte, cartType);
|
|
182
|
+
return this.data();
|
|
183
|
+
};
|
|
184
|
+
this.handleNewQuantities = async (storeId, qte, cartType, saveToDatabase) => {
|
|
185
|
+
const shouldSaveToDB = typeof saveToDatabase != 'undefined' ? saveToDatabase : true;
|
|
186
|
+
// If quantities added, we need to ajust :
|
|
187
|
+
// - AVAILABLE quantities
|
|
188
|
+
// - for WEB and STORE inventories
|
|
189
|
+
await this._modifyQuantitiesByStore(storeId, 'available', IInventoryItem_1.inventoryOperationEnum.ADD, qte, cartType, shouldSaveToDB, true);
|
|
190
|
+
return this._data;
|
|
191
|
+
};
|
|
192
|
+
this.handleUpdateWebInventory = async (qte) => {
|
|
193
|
+
// After inventory is updated through CSV import, we need to adjust :
|
|
194
|
+
// - AVAILABLE quantities
|
|
195
|
+
// - for WEB inventory
|
|
196
|
+
await this._modifyQuantitiesOnlyWeb('available', IInventoryItem_1.inventoryOperationEnum.ADD, qte, true);
|
|
197
|
+
};
|
|
198
|
+
this.handleProductSold = async (storeId, qte, cartType, web = false) => {
|
|
199
|
+
// If product was sold and is a web transaction, we need to ajust :
|
|
200
|
+
// - both AVAILABLE and PROCESSING quantities
|
|
201
|
+
// - for only WEB inventory
|
|
202
|
+
if (!!web) {
|
|
203
|
+
await this._modifyQuantitiesOnlyWeb('available', IInventoryItem_1.inventoryOperationEnum.REMOVE, qte, false);
|
|
204
|
+
await this._modifyQuantitiesOnlyWeb('processing', IInventoryItem_1.inventoryOperationEnum.ADD, qte);
|
|
205
|
+
return this.data();
|
|
206
|
+
}
|
|
207
|
+
// If product was sold and is a POS transaction (!!!web), we need to ajust :
|
|
208
|
+
// - both AVAILABLE and COMPLETED quantities
|
|
209
|
+
// - for WEB and STORE inventory
|
|
210
|
+
// - only if storeId is defined
|
|
211
|
+
if (!!storeId) {
|
|
212
|
+
await this._modifyQuantitiesByStore(storeId, 'available', IInventoryItem_1.inventoryOperationEnum.REMOVE, qte, cartType, false, true);
|
|
213
|
+
await this._modifyQuantitiesByStore(storeId, 'completed', IInventoryItem_1.inventoryOperationEnum.ADD, qte, cartType, true, true);
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
console.log('no storeId provided!');
|
|
217
|
+
}
|
|
218
|
+
return this.data();
|
|
219
|
+
};
|
|
220
|
+
/**
|
|
221
|
+
* Update inventory on cart item modified (POS modify cart process).
|
|
222
|
+
* @param storeId The store associated to the order. If cart still at status 5, might be undefined (unless quantities already reserved for order)
|
|
223
|
+
* @param qte The quantities to ajust
|
|
224
|
+
* @param cartType The associated cart's type
|
|
225
|
+
* @param options.onlyWeb Optionnal. If only web inventory should be ajusted
|
|
226
|
+
* @param options.reservedQteDiff Optionnal. Reserved quantities difference for given cart item. Expressed in sell_unit (must be converted to inventory_unit)
|
|
227
|
+
* @returns {Promise<IInventoryItem>}
|
|
228
|
+
*/
|
|
229
|
+
this.handleProductModified = async (storeId, qte, cartType, options = {}) => {
|
|
230
|
+
var _a;
|
|
231
|
+
// Save store inventory if not only web and storeId is provided
|
|
232
|
+
if (!!!options.onlyWeb && !!storeId) {
|
|
233
|
+
// If quantities were already reserved for order, should only update inventory according to reserved quantity difference
|
|
234
|
+
let qteToUse = (_a = options.reservedQteDiff) !== null && _a !== void 0 ? _a : qte;
|
|
235
|
+
await this._modifyQuantitiesByStore(storeId, 'available', qteToUse < 0 ? IInventoryItem_1.inventoryOperationEnum.ADD : IInventoryItem_1.inventoryOperationEnum.REMOVE, qteToUse < 0 ? qteToUse * -1 : qteToUse, cartType, false, // save to database (will be done later on web update)
|
|
236
|
+
false // save web (will be done later)
|
|
237
|
+
);
|
|
238
|
+
await this._modifyQuantitiesByStore(storeId, 'processing', qteToUse < 0 ? IInventoryItem_1.inventoryOperationEnum.REMOVE : IInventoryItem_1.inventoryOperationEnum.ADD, qteToUse < 0 ? qteToUse * -1 : qteToUse, cartType, false, // save to database (will be done later on web update)
|
|
239
|
+
false // save web (will be done laters
|
|
240
|
+
);
|
|
241
|
+
}
|
|
242
|
+
// Always update web quantities with total modified quantities
|
|
243
|
+
await this._modifyQuantitiesOnlyWeb('available', qte < 0 ? IInventoryItem_1.inventoryOperationEnum.ADD : IInventoryItem_1.inventoryOperationEnum.REMOVE, qte < 0 ? qte * -1 : qte, false);
|
|
244
|
+
await this._modifyQuantitiesOnlyWeb('processing', qte < 0 ? IInventoryItem_1.inventoryOperationEnum.REMOVE : IInventoryItem_1.inventoryOperationEnum.ADD, qte < 0 ? qte * -1 : qte, true // save to database done here for all updates to inventories and web_inventory
|
|
245
|
+
);
|
|
246
|
+
return this.data();
|
|
247
|
+
};
|
|
248
|
+
/**
|
|
249
|
+
* Update inventory for a specific item if order was cancelled or refunded.
|
|
250
|
+
* @param toStoreId The store where quantities will be ADDED
|
|
251
|
+
* @param fromStoreId The store where quantities will vbe REMOVED
|
|
252
|
+
* @param qte The quantity to ajust
|
|
253
|
+
* @param operationType If cart was cancelled or refunded
|
|
254
|
+
* @param cartType If cart is web, POS, or Pickup Now
|
|
255
|
+
* @param options.deleteItem Optionnal. If item should not be returned to the stores inventory (broken, misplaced, old batch, etc...)
|
|
256
|
+
* @param options.onlyWeb Optionnal. If inventory should only be updated for web inventory (and not for stores). Mostly depends on the cart's status when cancelled.
|
|
257
|
+
* @param options.orderAssociatedTransfers Optionnal. Array of TransferRequest objects associated to cart. Used when cart is cancelled
|
|
258
|
+
* @param options.saveToDatabase Optionnal. Mostly used for dev purpuses (and for unit testing). Otherwise, save is done logically at the end of the update process
|
|
259
|
+
* @param options.reservedQte Optionnal. Quantity reserved in processing inventory for cart item as of now. Expressed in sell_unit (must be converted to inventory_unit)
|
|
260
|
+
* @param options.otherUnits Optionnal. Other units for corresponding cart item. If not defined, will use those found in InventoryItem data
|
|
261
|
+
*/
|
|
262
|
+
this.handleOrderCancelled = async (toStoreId, fromStoreId, qte, operationType, cartType, options = {}) => {
|
|
263
|
+
const otherUnitsToUse = options.otherUnits || this._data.other_units;
|
|
264
|
+
// If order was cancelled, we need to ajust :
|
|
265
|
+
// - PROCESSING quantities always, and AVAILABLE quantities only if item should return in stock
|
|
266
|
+
// - for WEB inventory, and STORE inventory if onlyWeb is false, or order has associated transfers
|
|
267
|
+
// If order was refunded, we need to ajust :
|
|
268
|
+
// - Take quantities from COMPLETED and put them back in AVAILABLE
|
|
269
|
+
// - for WEB and STORE inventory, in this case onlyWeb is always false
|
|
270
|
+
// ----------------------------------------------------------
|
|
271
|
+
// #region CHECK FOR QUANTITIES TO AJUST IN STORE
|
|
272
|
+
let qteToUseForStoreUpdate = !!!options.onlyWeb ? qte : 0;
|
|
273
|
+
if (!!options.orderAssociatedTransfers && operationType == 'cancelled' && !!options.onlyWeb) {
|
|
274
|
+
// A. Calculate initial quantites asked for transfer
|
|
275
|
+
let initialQuantitiesInTransfers = 0;
|
|
276
|
+
let receivedQuantitesInTransfers = 0;
|
|
277
|
+
for (let transfer of options.orderAssociatedTransfers) {
|
|
278
|
+
// Skip transfers that were split at creation, to fetch only initial quantities
|
|
279
|
+
if (!!!transfer.data().original_transfer_id) {
|
|
280
|
+
initialQuantitiesInTransfers += transfer.getOriginalRequestedQuantity(this._data.sku);
|
|
281
|
+
}
|
|
282
|
+
// Get quantities received from transfers with status RECEIVED or RECEIVED_PARTIAL
|
|
283
|
+
if ([TransferRequest_1.TransferRequestStatusEnum.RECEIVED, TransferRequest_1.TransferRequestStatusEnum.RECEIVED_PARTIAL].includes(transfer.data().status)) {
|
|
284
|
+
const sameProd = transfer.data().products.find((p) => p.sku == this._data.sku);
|
|
285
|
+
if (!!sameProd)
|
|
286
|
+
receivedQuantitesInTransfers += sameProd.qte_received || 0;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
// B. Set currently in processing quantities to ...
|
|
290
|
+
// ...reserved quantities (if defined)
|
|
291
|
+
if (typeof options.reservedQte != 'undefined') {
|
|
292
|
+
qteToUseForStoreUpdate = (0, inventories_1.getConvertedUnitQuantity)(otherUnitsToUse, options.reservedQte, 'inventory_unit');
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
295
|
+
// ...the difference between total qte for item in cart and quantities initially set for transfer requests
|
|
296
|
+
qteToUseForStoreUpdate = qte - initialQuantitiesInTransfers;
|
|
297
|
+
if (qteToUseForStoreUpdate < 0)
|
|
298
|
+
qteToUseForStoreUpdate = 0;
|
|
299
|
+
// ... and add quantities received from transfers to processing quantites
|
|
300
|
+
qteToUseForStoreUpdate += receivedQuantitesInTransfers;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
if (qteToUseForStoreUpdate != 0) {
|
|
304
|
+
await this._modifyQuantitiesByStore(fromStoreId, operationType === 'refunded' ? 'completed' : 'processing', IInventoryItem_1.inventoryOperationEnum.REMOVE, qteToUseForStoreUpdate, cartType, typeof options.saveToDatabase == 'boolean' ? options.saveToDatabase : !!options.deleteItem // save to database
|
|
305
|
+
);
|
|
306
|
+
if (!!!options.deleteItem) {
|
|
307
|
+
await this._modifyQuantitiesByStore(toStoreId, 'available', IInventoryItem_1.inventoryOperationEnum.ADD, qteToUseForStoreUpdate, cartType, typeof options.saveToDatabase == 'boolean' ? options.saveToDatabase : true // save to database
|
|
308
|
+
);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
// #endregion
|
|
312
|
+
// ----------------------------------------------------------
|
|
313
|
+
// #region AJUST WEB QUANTITIES
|
|
314
|
+
if (!!!options.deleteItem) {
|
|
315
|
+
await this._modifyQuantitiesOnlyWeb('available', IInventoryItem_1.inventoryOperationEnum.ADD, qte, false);
|
|
316
|
+
}
|
|
317
|
+
await this._modifyQuantitiesOnlyWeb(operationType === 'refunded' ? 'completed' : 'processing', IInventoryItem_1.inventoryOperationEnum.REMOVE, qte, typeof options.saveToDatabase == 'boolean' ? options.saveToDatabase : true);
|
|
318
|
+
// #endregion
|
|
319
|
+
return this._data;
|
|
320
|
+
};
|
|
321
|
+
this.handleOrderReadyForProcessing = async (storeId, qte, cartType) => {
|
|
322
|
+
// If order is ready for processing, we need to ajust :
|
|
323
|
+
// - both AVAILABLE and PROCESSING quantities
|
|
324
|
+
// - for only STORE inventory
|
|
325
|
+
await this._modifyQuantitiesByStore(storeId, 'processing', IInventoryItem_1.inventoryOperationEnum.ADD, qte, cartType, false, false);
|
|
326
|
+
await this._modifyQuantitiesByStore(storeId, 'available', IInventoryItem_1.inventoryOperationEnum.REMOVE, qte, cartType, true, false);
|
|
327
|
+
return this.data();
|
|
328
|
+
};
|
|
329
|
+
this.handleOrderInDelivery = async (storeId, qte, cartType) => {
|
|
330
|
+
// If order is in delivery, we need to ajust :
|
|
331
|
+
// - both PROCESSING and IN_TRANSIT quantities
|
|
332
|
+
// - for only STORE inventory
|
|
333
|
+
await this._modifyQuantitiesByStore(storeId, 'processing', IInventoryItem_1.inventoryOperationEnum.REMOVE, qte, cartType, false);
|
|
334
|
+
await this._modifyQuantitiesByStore(storeId, 'in_transit', IInventoryItem_1.inventoryOperationEnum.ADD, qte, cartType);
|
|
335
|
+
return this.data();
|
|
336
|
+
};
|
|
337
|
+
this.handleChangedProcessingStore = async (oldStoreId, newStoreId, qte, cartType) => {
|
|
338
|
+
// If processing store was updated :
|
|
339
|
+
// - for old processing store :
|
|
340
|
+
// - remove qties from processing, add to available
|
|
341
|
+
// - for new processing store :
|
|
342
|
+
// - remove qties from available, add to processing
|
|
343
|
+
// - in both cases, only for store inventory (no changes to web inventory)
|
|
344
|
+
await this._modifyQuantitiesByStore(oldStoreId, 'processing', IInventoryItem_1.inventoryOperationEnum.REMOVE, qte, cartType, false);
|
|
345
|
+
await this._modifyQuantitiesByStore(oldStoreId, 'available', IInventoryItem_1.inventoryOperationEnum.ADD, qte, cartType, false);
|
|
346
|
+
await this._modifyQuantitiesByStore(newStoreId, 'available', IInventoryItem_1.inventoryOperationEnum.REMOVE, qte, cartType, false);
|
|
347
|
+
await this._modifyQuantitiesByStore(newStoreId, 'processing', IInventoryItem_1.inventoryOperationEnum.ADD, qte, cartType, true);
|
|
348
|
+
return this.data();
|
|
349
|
+
};
|
|
350
|
+
this.handleTransferInTransit = async (storeId, qte, cartType, forOrder) => {
|
|
351
|
+
// If transfer is now in transit, we need to ajust :
|
|
352
|
+
// - both AVAILABLE and IN_TRANSIT quantities
|
|
353
|
+
// - for STORE inventory always
|
|
354
|
+
// - for WEB inventory if transfer was not created though an order
|
|
355
|
+
await this._modifyQuantitiesByStore(storeId, 'available', IInventoryItem_1.inventoryOperationEnum.REMOVE, qte, cartType, false, !forOrder);
|
|
356
|
+
await this._modifyQuantitiesByStore(storeId, 'in_transit', IInventoryItem_1.inventoryOperationEnum.ADD, qte, cartType, true, !forOrder);
|
|
357
|
+
return this.data();
|
|
358
|
+
};
|
|
359
|
+
/**
|
|
360
|
+
* Adjust store quantities
|
|
361
|
+
* @param storeFromId Origin store id
|
|
362
|
+
* @param storeToId Target store id
|
|
363
|
+
* @param qte Total quantity received
|
|
364
|
+
* @param cartType Cart type, GR only?
|
|
365
|
+
* @param options.forOrder True if associated to an order
|
|
366
|
+
* @param options.maxProcessingQte Quantity to place in processing, extra will go in available
|
|
367
|
+
* @param options.skipWebUpdateForAvailable If web inventory update should be skipped for available quantities (for when transfer is received for a already processed cart)
|
|
368
|
+
* @returns the new inventory item data
|
|
369
|
+
*/
|
|
370
|
+
this.handleTransferReceived = async (storeFromId, storeToId, qte, cartType, options) => {
|
|
371
|
+
// FROM STORE
|
|
372
|
+
// If order transfer was received, we need to ajust :
|
|
373
|
+
// - only IN_TRANSIT quantities
|
|
374
|
+
// - for only STORE inventory
|
|
375
|
+
// - of the storeFromID
|
|
376
|
+
await this._modifyQuantitiesByStore(storeFromId, 'in_transit', IInventoryItem_1.inventoryOperationEnum.REMOVE, qte, cartType, false, // don't save to database here, will be done on next steps
|
|
377
|
+
!options.forOrder);
|
|
378
|
+
// TO STORE
|
|
379
|
+
// If order transfer was received, we need to ajust :
|
|
380
|
+
// - if transfer is associated to order :
|
|
381
|
+
// - only IN_TRANSIT quantities
|
|
382
|
+
// - only for STORE inventory
|
|
383
|
+
//
|
|
384
|
+
// - else :
|
|
385
|
+
// - only AVAILABLE quantities
|
|
386
|
+
// - for STORE inventory always, and WEB inventory
|
|
387
|
+
if (options.maxProcessingQte && options.forOrder) {
|
|
388
|
+
qte -= options.maxProcessingQte;
|
|
389
|
+
await this._modifyQuantitiesByStore(storeToId, 'processing', IInventoryItem_1.inventoryOperationEnum.ADD, options.maxProcessingQte, cartType, qte <= 0, // save to database only if logic will not enter next check
|
|
390
|
+
!options.forOrder);
|
|
391
|
+
}
|
|
392
|
+
if (qte > 0) {
|
|
393
|
+
await this._modifyQuantitiesByStore(storeToId, 'available', IInventoryItem_1.inventoryOperationEnum.ADD, qte, cartType, true, // always save to database here
|
|
394
|
+
!options.skipWebUpdateForAvailable // only update web inventory if property not set to skip operation
|
|
395
|
+
);
|
|
396
|
+
}
|
|
397
|
+
return this.data();
|
|
398
|
+
};
|
|
399
|
+
/**
|
|
400
|
+
* Cancel value in transit - Adjust the in transit negatively without adjusting any other quantity.
|
|
401
|
+
* @param storeId The store to apply the change
|
|
402
|
+
* @param qte The quantity to remove
|
|
403
|
+
* @param cartType Cart type, GR only?
|
|
404
|
+
* @param forOrder True if associated to an order
|
|
405
|
+
* @returns updated data
|
|
406
|
+
*/
|
|
407
|
+
this.handleCancelInTransit = async (storeId, qte, cartType, forOrder) => {
|
|
408
|
+
await this._modifyQuantitiesByStore(storeId, 'in_transit', IInventoryItem_1.inventoryOperationEnum.REMOVE, qte, cartType, true, !forOrder);
|
|
409
|
+
return this.data();
|
|
410
|
+
};
|
|
411
|
+
this.handlePOSCartFastComplete = async (storeId, qte, cartType, quantitiesAlreadyReserved = 0) => {
|
|
412
|
+
// If order was triggered by POS Fast complete (button in order interface dashboard), we need to ajust :
|
|
413
|
+
// - both PROCESSING and COMPLETE quantities
|
|
414
|
+
// - for only WEB inventory
|
|
415
|
+
// - if store can sell online
|
|
416
|
+
const fromStoreIsWeb = this.data().inventories.find((inventory) => inventory.store_id === storeId).can_sell_online;
|
|
417
|
+
if (!!fromStoreIsWeb) {
|
|
418
|
+
await this._modifyQuantitiesOnlyWeb('processing', IInventoryItem_1.inventoryOperationEnum.REMOVE, qte, false);
|
|
419
|
+
await this._modifyQuantitiesOnlyWeb('completed', IInventoryItem_1.inventoryOperationEnum.ADD, qte, false);
|
|
420
|
+
}
|
|
421
|
+
const quantitiesNotReserved = qte - quantitiesAlreadyReserved;
|
|
422
|
+
// AND, we need to ajust :
|
|
423
|
+
// - potentially AVAILABLE quantities with quantitiesNotReserved (if quantitiesNotReserved != 0)
|
|
424
|
+
// - potentially PROCESSING quantities with quantitiesAlreadyReserved (if quantitiesAlreadyReserved != 0)
|
|
425
|
+
// - always COMPLETE quantities with full qte from item
|
|
426
|
+
// - for only STORE inventory
|
|
427
|
+
if (quantitiesNotReserved != 0) {
|
|
428
|
+
await this._modifyQuantitiesByStore(storeId, 'available', IInventoryItem_1.inventoryOperationEnum.REMOVE, quantitiesNotReserved, cartType, false, false);
|
|
429
|
+
}
|
|
430
|
+
if (quantitiesAlreadyReserved != 0) {
|
|
431
|
+
await this._modifyQuantitiesByStore(storeId, 'processing', IInventoryItem_1.inventoryOperationEnum.REMOVE, quantitiesAlreadyReserved, cartType, false, false);
|
|
432
|
+
}
|
|
433
|
+
await this._modifyQuantitiesByStore(storeId, 'completed', IInventoryItem_1.inventoryOperationEnum.ADD, qte, cartType, true, false);
|
|
434
|
+
return this.data();
|
|
435
|
+
};
|
|
436
|
+
this.handleChangeCanSellOnline = async (storeId, qte, newCanSellOnline, saveToDatabase) => {
|
|
437
|
+
const storeInventoryIndex = this.data().inventories.findIndex((i) => i.store_id === storeId);
|
|
438
|
+
if (storeInventoryIndex === -1)
|
|
439
|
+
return;
|
|
440
|
+
const currentWebInventory = this.data().web_inventory;
|
|
441
|
+
const currentAvailable = !!currentWebInventory && !!currentWebInventory.available ? currentWebInventory.available : 0;
|
|
442
|
+
const partial = {
|
|
443
|
+
web_inventory: Object.assign(Object.assign(Object.assign({}, (0, IInventoryItem_1.getDefaultInventoryQuantities)()), (!!this.data().web_inventory ? this.data().web_inventory : {})), { available: !!newCanSellOnline ? currentAvailable + qte : currentAvailable - qte }),
|
|
444
|
+
inventories: [
|
|
445
|
+
...this.data().inventories.slice(0, storeInventoryIndex),
|
|
446
|
+
Object.assign(Object.assign({}, this.data().inventories[storeInventoryIndex]), { can_sell_online: newCanSellOnline }),
|
|
447
|
+
...this.data().inventories.slice(storeInventoryIndex + 1)
|
|
448
|
+
]
|
|
449
|
+
};
|
|
450
|
+
if (!!saveToDatabase) {
|
|
451
|
+
await this.save(partial);
|
|
452
|
+
}
|
|
453
|
+
else {
|
|
454
|
+
this._data = Object.assign(Object.assign({}, this.data()), partial);
|
|
455
|
+
}
|
|
456
|
+
return this.data();
|
|
457
|
+
};
|
|
458
|
+
/**
|
|
459
|
+
* Reserve a quantity from the available web inventory and store if provided
|
|
460
|
+
* @param qty The quantity to reserve
|
|
461
|
+
* @param storeId The store id to use for reservation, undefined if web only
|
|
462
|
+
* @returns the new inventory data
|
|
463
|
+
*/
|
|
464
|
+
this.handleReserveInventory = async (qty, storeId) => {
|
|
465
|
+
if (!!storeId) {
|
|
466
|
+
await this._modifyQuantitiesByStore(storeId, 'available', IInventoryItem_1.inventoryOperationEnum.REMOVE, qty, Cart_1.CartTypeEnum.POS, false, true);
|
|
467
|
+
await this._modifyQuantitiesByStore(storeId, 'processing', IInventoryItem_1.inventoryOperationEnum.ADD, qty, Cart_1.CartTypeEnum.POS, true, true);
|
|
468
|
+
return this.data();
|
|
469
|
+
}
|
|
470
|
+
await this._modifyQuantitiesOnlyWeb('available', IInventoryItem_1.inventoryOperationEnum.REMOVE, qty, false);
|
|
471
|
+
await this._modifyQuantitiesOnlyWeb('processing', IInventoryItem_1.inventoryOperationEnum.ADD, qty);
|
|
472
|
+
return this.data();
|
|
473
|
+
};
|
|
474
|
+
/**
|
|
475
|
+
* Release a quantity from the processing web inventory and store if provided
|
|
476
|
+
* @param qty The quantity to release
|
|
477
|
+
* @param storeId The store id to use for reservation, undefined if web only
|
|
478
|
+
* @returns the new inventory data
|
|
479
|
+
*/
|
|
480
|
+
this.handleUnreserveInventory = async (qty, storeId) => {
|
|
481
|
+
if (!!storeId) {
|
|
482
|
+
await this._modifyQuantitiesByStore(storeId, 'processing', IInventoryItem_1.inventoryOperationEnum.REMOVE, qty, Cart_1.CartTypeEnum.POS, false, true);
|
|
483
|
+
await this._modifyQuantitiesByStore(storeId, 'available', IInventoryItem_1.inventoryOperationEnum.ADD, qty, Cart_1.CartTypeEnum.POS, true, true);
|
|
484
|
+
return this.data();
|
|
485
|
+
}
|
|
486
|
+
await this._modifyQuantitiesOnlyWeb('processing', IInventoryItem_1.inventoryOperationEnum.REMOVE, qty, false);
|
|
487
|
+
await this._modifyQuantitiesOnlyWeb('available', IInventoryItem_1.inventoryOperationEnum.ADD, qty);
|
|
488
|
+
return this.data();
|
|
489
|
+
};
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
exports.default = Inventory;
|
|
493
493
|
//# sourceMappingURL=index.js.map
|