@ozdao/martyrs 0.2.518 → 0.2.520
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/dist/_virtual/index.cjs +4 -4
- package/dist/_virtual/index.js +4 -4
- package/dist/_virtual/index2.cjs +4 -4
- package/dist/_virtual/index2.js +4 -4
- package/dist/{abac-Cf_9lCSh.js → abac-CnJsrv8S.js} +3 -3
- package/dist/{abac-6LjoG9u-.cjs → abac-DOyUjhee.cjs} +3 -3
- package/dist/builder.cjs +27 -25
- package/dist/builder.js +27 -25
- package/dist/chats.server.cjs +198 -1
- package/dist/chats.server.js +198 -1
- package/dist/{crud-sE7GLPbj.js → crud-BIFl1W1i.js} +6 -6
- package/dist/{crud-JN_LFj01.cjs → crud-CC6k6yY5.cjs} +6 -6
- package/dist/{globals.logger-CZMgIMlM.cjs → globals.logger-BuW7JHMY.cjs} +63 -53
- package/dist/{globals.logger-Bf6rRU7j.js → globals.logger-VRHh-WUW.js} +63 -53
- package/dist/{globals.observer-CV2wCzzh.cjs → globals.observer-C_FYclgV.cjs} +36 -1
- package/dist/{globals.observer-CDqUjVU5.js → globals.observer-MZsqaE6F.js} +36 -1
- package/dist/globals.server.cjs +1 -1
- package/dist/globals.server.js +1 -1
- package/dist/inventory.server.cjs +276 -376
- package/dist/inventory.server.js +276 -376
- package/dist/main-BM3GslOO.cjs +11 -0
- package/dist/{main-wmEhGVvD.js → main-Qcn7YlTx.js} +1834 -1830
- package/dist/martyrs/src/components/Address/{Address.vue2.cjs → Address.vue.cjs} +2 -2
- package/dist/martyrs/src/components/Address/{Address.vue2.js.map → Address.vue.cjs.map} +1 -1
- package/dist/martyrs/src/components/Address/{Address.vue2.js → Address.vue.js} +2 -2
- package/dist/martyrs/src/components/Address/Address.vue.js.map +1 -0
- package/dist/martyrs/src/components/Button/Button.vue.cjs +1 -1
- package/dist/martyrs/src/components/Button/Button.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/Button/Button.vue.js +1 -1
- package/dist/martyrs/src/components/Button/Button.vue.js.map +1 -1
- package/dist/martyrs/src/components/Chips/{Chips.vue.cjs → Chips.vue2.cjs} +2 -2
- package/dist/martyrs/src/components/Chips/Chips.vue2.cjs.map +1 -0
- package/dist/martyrs/src/components/Chips/{Chips.vue.js → Chips.vue2.js} +2 -2
- package/dist/martyrs/src/components/Chips/Chips.vue2.js.map +1 -0
- package/dist/martyrs/src/components/Dropdown/{Dropdown.vue.cjs → Dropdown.vue2.cjs} +2 -2
- package/dist/martyrs/src/components/Dropdown/Dropdown.vue2.cjs.map +1 -0
- package/dist/martyrs/src/components/Dropdown/{Dropdown.vue.js → Dropdown.vue2.js} +2 -2
- package/dist/martyrs/src/components/Dropdown/{Dropdown.vue.cjs.map → Dropdown.vue2.js.map} +1 -1
- package/dist/martyrs/src/components/EditImages/EditImages.vue.cjs +0 -93
- package/dist/martyrs/src/components/EditImages/EditImages.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/EditImages/EditImages.vue.js +1 -94
- package/dist/martyrs/src/components/EditImages/EditImages.vue.js.map +1 -1
- package/dist/martyrs/src/components/EditImages/EditImages.vue2.cjs +93 -0
- package/dist/martyrs/src/components/EditImages/EditImages.vue2.cjs.map +1 -1
- package/dist/martyrs/src/components/EditImages/EditImages.vue2.js +94 -1
- package/dist/martyrs/src/components/EditImages/EditImages.vue2.js.map +1 -1
- package/dist/martyrs/src/components/Feed/Feed.vue.cjs +2 -3
- package/dist/martyrs/src/components/Feed/Feed.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/Feed/Feed.vue.js +2 -3
- package/dist/martyrs/src/components/Feed/Feed.vue.js.map +1 -1
- package/dist/martyrs/src/components/FieldTags/FieldTags.vue.cjs +1 -1
- package/dist/martyrs/src/components/FieldTags/FieldTags.vue.js +1 -1
- package/dist/martyrs/src/components/Loader/Loader.vue2.cjs +1 -1
- package/dist/martyrs/src/components/Loader/Loader.vue2.cjs.map +1 -1
- package/dist/martyrs/src/components/Loader/Loader.vue2.js +1 -1
- package/dist/martyrs/src/components/Loader/Loader.vue2.js.map +1 -1
- package/dist/martyrs/src/components/LocationMarker/{LocationMarker.vue2.cjs → LocationMarker.vue.cjs} +2 -2
- package/dist/martyrs/src/components/LocationMarker/{LocationMarker.vue2.js.map → LocationMarker.vue.cjs.map} +1 -1
- package/dist/martyrs/src/components/LocationMarker/{LocationMarker.vue2.js → LocationMarker.vue.js} +2 -2
- package/dist/martyrs/src/components/LocationMarker/LocationMarker.vue.js.map +1 -0
- package/dist/martyrs/src/components/Select/{Select.vue2.cjs → Select.vue.cjs} +2 -2
- package/dist/martyrs/src/components/Select/{Select.vue2.js.map → Select.vue.cjs.map} +1 -1
- package/dist/martyrs/src/components/Select/{Select.vue2.js → Select.vue.js} +2 -2
- package/dist/martyrs/src/components/Select/Select.vue.js.map +1 -0
- package/dist/martyrs/src/modules/auth/views/components/blocks/CardUser.vue.cjs +2 -2
- package/dist/martyrs/src/modules/auth/views/components/blocks/CardUser.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.cjs +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +4 -4
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs +41 -51
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +59 -69
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/sections/SliderFeatures.vue.cjs +11 -13
- package/dist/martyrs/src/modules/auth/views/components/sections/SliderFeatures.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/sections/SliderFeatures.vue.js +11 -13
- package/dist/martyrs/src/modules/auth/views/components/sections/SliderFeatures.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/store/auth.cjs +10 -1
- package/dist/martyrs/src/modules/auth/views/store/auth.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/store/auth.js +10 -1
- package/dist/martyrs/src/modules/auth/views/store/auth.js.map +1 -1
- package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.cjs +6 -0
- package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js +6 -0
- package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js.map +1 -1
- package/dist/martyrs/src/modules/chats/components/blocks/ChatMessage.vue.cjs +27 -11
- package/dist/martyrs/src/modules/chats/components/blocks/ChatMessage.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/chats/components/blocks/ChatMessage.vue.js +28 -12
- package/dist/martyrs/src/modules/chats/components/blocks/ChatMessage.vue.js.map +1 -1
- package/dist/martyrs/src/modules/chats/components/sections/ChatWindow.vue.cjs +62 -0
- package/dist/martyrs/src/modules/chats/components/sections/ChatWindow.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/chats/components/sections/ChatWindow.vue.js +63 -1
- package/dist/martyrs/src/modules/chats/components/sections/ChatWindow.vue.js.map +1 -1
- package/dist/martyrs/src/modules/chats/store/chat.store.cjs +60 -1
- package/dist/martyrs/src/modules/chats/store/chat.store.cjs.map +1 -1
- package/dist/martyrs/src/modules/chats/store/chat.store.js +60 -1
- package/dist/martyrs/src/modules/chats/store/chat.store.js.map +1 -1
- package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.cjs +1 -1
- package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.js +1 -1
- package/dist/martyrs/src/modules/community/components/layouts/Community.vue.cjs +3 -3
- package/dist/martyrs/src/modules/community/components/layouts/Community.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/community/components/layouts/Community.vue.js +3 -3
- package/dist/martyrs/src/modules/community/components/layouts/Community.vue.js.map +1 -1
- package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.cjs +2 -2
- package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +2 -2
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.cjs +1 -1
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +1 -1
- package/dist/martyrs/src/modules/community/components/pages/Posts.vue.cjs +50 -368
- package/dist/martyrs/src/modules/community/components/pages/Posts.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/community/components/pages/Posts.vue.js +53 -371
- package/dist/martyrs/src/modules/community/components/pages/Posts.vue.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs +2 -3
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +2 -3
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Events.vue.cjs +2 -2
- package/dist/martyrs/src/modules/events/components/pages/Events.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Events.vue.js +2 -2
- package/dist/martyrs/src/modules/events/components/pages/Events.vue.js.map +1 -1
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +3 -3
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +3 -3
- package/dist/martyrs/src/modules/globals/views/classes/globals.i18n.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/classes/globals.i18n.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.cjs +2 -2
- package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.js +2 -2
- package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.cjs +2 -2
- package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.js +2 -2
- package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/LocationSelection.vue.cjs +2 -2
- package/dist/martyrs/src/modules/globals/views/components/partials/LocationSelection.vue.js +2 -2
- package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Sidebar.vue.cjs +16 -3
- package/dist/martyrs/src/modules/globals/views/components/partials/Sidebar.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Sidebar.vue.js +17 -4
- package/dist/martyrs/src/modules/globals/views/components/partials/Sidebar.vue.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/Walkthrough.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/mixins/mixins.cjs +7 -0
- package/dist/martyrs/src/modules/globals/views/mixins/mixins.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/mixins/mixins.js +7 -0
- package/dist/martyrs/src/modules/globals/views/mixins/mixins.js.map +1 -1
- package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.cjs +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.cjs +67 -43
- package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js +68 -44
- package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.cjs +22 -7
- package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.js +23 -8
- package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.js.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.cjs +47 -32
- package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.js +48 -33
- package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.js.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.cjs +47 -26
- package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js +48 -27
- package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.cjs +42 -52
- package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.js +43 -53
- package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.js.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.cjs +18 -18
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js +3 -3
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/inventory/store/{ inventory.store.cjs → inventory.store.cjs} +46 -2
- package/dist/martyrs/src/modules/inventory/store/inventory.store.cjs.map +1 -0
- package/dist/martyrs/src/modules/inventory/store/{ inventory.store.js → inventory.store.js} +46 -2
- package/dist/martyrs/src/modules/inventory/store/inventory.store.js.map +1 -0
- package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.cjs +180 -19
- package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.js +181 -20
- package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +1 -1
- package/dist/martyrs/src/modules/music/router/music.cjs +1 -2
- package/dist/martyrs/src/modules/music/router/music.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/router/music.js +1 -2
- package/dist/martyrs/src/modules/music/router/music.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderBackoffice.vue.cjs +2 -2
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderBackoffice.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderBackoffice.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderBackoffice.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs +3 -4
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +3 -4
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormPayment.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormPayment.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/orders.client.cjs +2 -2
- package/dist/martyrs/src/modules/orders/orders.client.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/orders.client.js +2 -2
- package/dist/martyrs/src/modules/orders/orders.client.js.map +1 -1
- package/dist/martyrs/src/modules/orders/router/customers.router.cjs +1 -1
- package/dist/martyrs/src/modules/orders/router/customers.router.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/router/customers.router.js +1 -1
- package/dist/martyrs/src/modules/orders/router/customers.router.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.cjs +2 -24
- package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.js +5 -27
- package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/Socials.vue.cjs +4 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/Socials.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/Socials.vue.js +4 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/Socials.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.cjs +3 -3
- package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js +3 -3
- package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.cjs +195 -0
- package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.js +195 -0
- package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.js.map +1 -0
- package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.cjs +402 -0
- package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js +402 -0
- package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js.map +1 -0
- package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.cjs +86 -0
- package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.js +86 -0
- package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.js.map +1 -0
- package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.cjs +10 -10
- package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js +11 -11
- package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs +279 -191
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js +285 -197
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs +7 -7
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +7 -7
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs +3 -3
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +3 -3
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Publics.vue.cjs +4 -4
- package/dist/martyrs/src/modules/organizations/components/sections/Publics.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Publics.vue.js +4 -4
- package/dist/martyrs/src/modules/organizations/components/sections/Publics.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.cjs +42 -41
- package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.js +53 -52
- package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/organizations.client.cjs +23 -16
- package/dist/martyrs/src/modules/organizations/organizations.client.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/organizations.client.js +35 -28
- package/dist/martyrs/src/modules/organizations/organizations.client.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/router/departments.router.cjs +0 -18
- package/dist/martyrs/src/modules/organizations/router/departments.router.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/router/departments.router.js +0 -18
- package/dist/martyrs/src/modules/organizations/router/departments.router.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/store/departments.store.cjs +6 -0
- package/dist/martyrs/src/modules/organizations/store/departments.store.cjs.map +1 -0
- package/dist/martyrs/src/modules/organizations/store/departments.store.js +6 -0
- package/dist/martyrs/src/modules/organizations/store/departments.store.js.map +1 -0
- package/dist/martyrs/src/modules/organizations/store/invites.store.cjs +6 -0
- package/dist/martyrs/src/modules/organizations/store/invites.store.cjs.map +1 -0
- package/dist/martyrs/src/modules/organizations/store/invites.store.js +6 -0
- package/dist/martyrs/src/modules/organizations/store/invites.store.js.map +1 -0
- package/dist/martyrs/src/modules/organizations/store/memberships.store.cjs +20 -0
- package/dist/martyrs/src/modules/organizations/store/memberships.store.cjs.map +1 -0
- package/dist/martyrs/src/modules/organizations/store/memberships.store.js +20 -0
- package/dist/martyrs/src/modules/organizations/store/memberships.store.js.map +1 -0
- package/dist/martyrs/src/modules/products/components/blocks/ProductDiscounts.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/ProductDiscounts.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +3 -4
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +3 -4
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs +2 -2
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.cjs +2 -2
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +2 -2
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.cjs +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +1 -1
- package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.cjs +1 -1
- package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.cjs +3 -3
- package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.js +3 -3
- package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.js.map +1 -1
- package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs +3 -3
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +3 -3
- package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.cjs +60 -272
- package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.js +62 -274
- package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.js.map +1 -1
- package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.js +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.cjs +4 -4
- package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js +4 -4
- package/dist/martyrs.cjs.js +1 -1
- package/dist/martyrs.css +1 -1
- package/dist/martyrs.es.js +1 -1
- package/dist/music.server.cjs +9 -9
- package/dist/music.server.js +9 -9
- package/dist/notifications.server.cjs +0 -24
- package/dist/notifications.server.js +0 -24
- package/dist/orders.server.cjs +3 -6
- package/dist/orders.server.js +3 -6
- package/dist/organizations.server.cjs +119 -43
- package/dist/organizations.server.js +119 -43
- package/dist/products.server.cjs +5 -5
- package/dist/products.server.js +5 -5
- package/dist/rents.server.cjs +3 -3
- package/dist/rents.server.js +3 -3
- package/dist/style.css +16 -17
- package/dist/wallet.server.cjs +2 -2
- package/dist/wallet.server.js +2 -2
- package/dist/{web-B5wZTKbK.cjs → web-B0cfxzgu.cjs} +1 -1
- package/dist/{web-520xCgXy.js → web-DVR8m2fm.js} +1 -1
- package/package.json +1 -1
- package/src/builder/modes/ssr.rspack.dev.js +20 -12
- package/src/builder/rspack/rspack.config.base.js +16 -15
- package/src/components/Button/Button.vue +1 -1
- package/src/components/Feed/Feed.old.vue +0 -1
- package/src/components/Feed/Feed.vue +1 -31
- package/src/components/Loader/Loader.vue +1 -1
- package/src/modules/auth/FIXES.md +61 -0
- package/src/modules/auth/PROMT.md +33 -0
- package/src/modules/auth/auth.server.js +1 -0
- package/src/modules/auth/views/components/blocks/CardUser.vue +2 -2
- package/src/modules/auth/views/components/layouts/Auth.vue +1 -1
- package/src/modules/auth/views/components/pages/Invite.vue +2 -2
- package/src/modules/auth/views/components/pages/Profile.vue +33 -48
- package/src/modules/auth/views/components/sections/SliderFeatures.vue +5 -7
- package/src/modules/auth/views/store/auth.js +16 -1
- package/src/modules/auth//320/220/320/240/320/245/320/230/320/242/320/225/320/232/320/242/320/243/320/240/320/220.md +445 -0
- package/src/modules/backoffice/components/partials/Sidebar.vue +6 -0
- package/src/modules/chats/CLAUDE.md +137 -0
- package/src/modules/chats/components/blocks/ChatMessage.vue +12 -0
- package/src/modules/chats/components/sections/ChatWindow.vue +84 -2
- package/src/modules/chats/controllers/chats.controller.js +187 -0
- package/src/modules/chats/models/chat.model.js +21 -0
- package/src/modules/chats/routes/chats.routes.js +46 -0
- package/src/modules/chats/store/chat.store.js +67 -0
- package/src/modules/community/components/layouts/Community.vue +2 -2
- package/src/modules/community/components/pages/Posts.vue +3 -328
- package/src/modules/events/components/pages/EditEventTickets.vue +1 -1
- package/src/modules/events/components/pages/Events.vue +2 -2
- package/src/modules/globals/controllers/classes/globals.cache.js +64 -55
- package/src/modules/globals/controllers/classes/globals.logger.js +40 -4
- package/src/modules/globals/controllers/classes/globals.observer.js +54 -4
- package/src/modules/globals/views/components/partials/Header.vue +1 -1
- package/src/modules/globals/views/components/partials/Sidebar.vue +17 -13
- package/src/modules/globals/views/mixins/mixins.js +7 -0
- package/src/modules/inventory/CLAUDE.md +330 -0
- package/src/modules/inventory/PROMT.md +25 -0
- package/src/modules/inventory/components/forms/AdjustmentForm.vue +53 -36
- package/src/modules/inventory/components/forms/ColumnSettingsMenu.vue +11 -6
- package/src/modules/inventory/components/forms/HistoryView.vue +21 -9
- package/src/modules/inventory/components/forms/StockAlertsForm.vue +33 -22
- package/src/modules/inventory/components/pages/Inventory.vue +40 -40
- package/src/modules/inventory/components/pages/InventoryEdit.vue +1 -1
- package/src/modules/inventory/docs/01-intro.md +126 -0
- package/src/modules/inventory/docs/02-architecture.md +266 -0
- package/src/modules/inventory/docs/03-components-and-relationships.md +338 -0
- package/src/modules/inventory/docs/04-business-logic-and-algorithms.md +376 -0
- package/src/modules/inventory/docs/05-api-specification.md +356 -0
- package/src/modules/inventory/docs/06-access-control.md +320 -0
- package/src/modules/inventory/inventory.server.js +6 -2
- package/src/modules/inventory/{services → middlewares}/inventory.verifier.js +5 -16
- package/src/modules/inventory/models/stock.availability.model.js +20 -7
- package/src/modules/inventory/routes/inventory.routes.js +14 -17
- package/src/modules/inventory/services/adjustment.service.js +137 -0
- package/src/modules/inventory/services/audit.service.js +160 -0
- package/src/modules/inventory/services/availability.service.js +323 -0
- package/src/modules/inventory/services/inventory.helpers.old.js +217 -0
- package/src/modules/inventory/store/{ inventory.store.js → inventory.store.js} +0 -14
- package/src/modules/inventory/workers/inventory.availability.worker.js +29 -30
- package/src/modules/marketplace/views/components/layouts/Marketplace.vue +160 -8
- package/src/modules/notifications/controllers/notifications.controller.js +0 -6
- package/src/modules/notifications/services/notification.service.js +1 -17
- package/src/modules/notifications/services/web-push.service.js +0 -2
- package/src/modules/orders/components/blocks/CardOrderBackoffice.vue +2 -2
- package/src/modules/orders/components/blocks/CardOrderVar1.vue +1 -1
- package/src/modules/orders/controllers/orders.controller.js +2 -4
- package/src/modules/orders/orders.client.js +2 -2
- package/src/modules/orders/router/customers.router.js +1 -1
- package/src/modules/organizations/CLAUDE.md +259 -0
- package/src/modules/organizations/components/blocks/CardDepartment.vue +1 -22
- package/src/modules/organizations/components/blocks/Socials.vue +1 -1
- package/src/modules/organizations/components/elements/ButtonToggleMembership.vue +3 -3
- package/src/modules/organizations/components/forms/AddExistingMembersForm.vue +191 -0
- package/src/modules/organizations/components/forms/DepartmentForm.vue +390 -0
- package/src/modules/organizations/components/forms/InviteForm.vue +81 -0
- package/src/modules/organizations/components/pages/Department.vue +10 -10
- package/src/modules/organizations/components/pages/DepartmentEdit.vue +8 -8
- package/src/modules/organizations/components/pages/Members.vue +265 -171
- package/src/modules/organizations/components/pages/Organization.new.vue +172 -183
- package/src/modules/organizations/components/pages/Organization.vue +6 -6
- package/src/modules/organizations/components/pages/OrganizationEdit.vue +1 -1
- package/src/modules/organizations/components/pages/Organizations.vue +1 -1
- package/src/modules/organizations/components/sections/Organizations.vue +2 -2
- package/src/modules/organizations/components/sections/Publics.vue +4 -4
- package/src/modules/organizations/configs/navigation.organization.config.js +40 -39
- package/src/modules/organizations/controllers/departments.controller.js +53 -34
- package/src/modules/organizations/controllers/invites.controller.js +44 -5
- package/src/modules/organizations/controllers/memberships.controller.js +43 -4
- package/src/modules/organizations/organizations.client.js +24 -15
- package/src/modules/organizations/router/departments.router.js +0 -18
- package/src/modules/organizations/routes/departments.routes.js +6 -8
- package/src/modules/organizations/routes/invites.routes.js +6 -4
- package/src/modules/organizations/routes/memberships.routes.js +6 -5
- package/src/modules/organizations/routes/organizations.routes.js +1 -1
- package/src/modules/organizations/store/departments.store.js +5 -0
- package/src/modules/organizations/store/invites.store.js +5 -0
- package/src/modules/organizations/store/memberships.store.js +23 -0
- package/src/modules/products/components/pages/Products.vue +0 -1
- package/src/modules/spots/components/blocks/CardSpot.vue +1 -1
- package/src/modules/spots/components/pages/Spots.vue +3 -203
- package/src/styles/base/all.scss +0 -15
- package/src/styles/responsive.scss +1 -31
- package/src/styles/typography.scss +20 -5
- package/dist/main-CSzPfQYR.cjs +0 -11
- package/dist/martyrs/src/components/Address/Address.vue2.cjs.map +0 -1
- package/dist/martyrs/src/components/Chips/Chips.vue.cjs.map +0 -1
- package/dist/martyrs/src/components/Chips/Chips.vue.js.map +0 -1
- package/dist/martyrs/src/components/Dropdown/Dropdown.vue.js.map +0 -1
- package/dist/martyrs/src/components/LocationMarker/LocationMarker.vue2.cjs.map +0 -1
- package/dist/martyrs/src/components/Select/Select.vue2.cjs.map +0 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/BlockFilter.vue.cjs +0 -76
- package/dist/martyrs/src/modules/globals/views/components/blocks/BlockFilter.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/BlockFilter.vue.js +0 -76
- package/dist/martyrs/src/modules/globals/views/components/blocks/BlockFilter.vue.js.map +0 -1
- package/dist/martyrs/src/modules/inventory/store/ inventory.store.cjs.map +0 -1
- package/dist/martyrs/src/modules/inventory/store/ inventory.store.js.map +0 -1
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs +0 -280
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.js +0 -280
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.js.map +0 -1
- package/dist/martyrs/src/modules/organizations/store/departments.cjs +0 -121
- package/dist/martyrs/src/modules/organizations/store/departments.cjs.map +0 -1
- package/dist/martyrs/src/modules/organizations/store/departments.js +0 -121
- package/dist/martyrs/src/modules/organizations/store/departments.js.map +0 -1
- package/dist/martyrs/src/modules/organizations/store/invites.cjs +0 -64
- package/dist/martyrs/src/modules/organizations/store/invites.cjs.map +0 -1
- package/dist/martyrs/src/modules/organizations/store/invites.js +0 -64
- package/dist/martyrs/src/modules/organizations/store/invites.js.map +0 -1
- package/dist/martyrs/src/modules/organizations/store/memberships.cjs +0 -87
- package/dist/martyrs/src/modules/organizations/store/memberships.cjs.map +0 -1
- package/dist/martyrs/src/modules/organizations/store/memberships.js +0 -87
- package/dist/martyrs/src/modules/organizations/store/memberships.js.map +0 -1
- package/src/modules/globals/controllers/classes/globals.websocket.ws.js +0 -102
- package/src/modules/globals/views/components/blocks/BlockFilter.vue +0 -60
- package/src/modules/inventory/docs/README.md +0 -291
- package/src/modules/inventory/models/stock.balance.model.js +0 -43
- package/src/modules/inventory/services/inventory.crud.js +0 -710
- package/src/modules/inventory/tests/inventory.test.js +0 -281
- package/src/modules/organizations/store/departments.js +0 -137
- package/src/modules/organizations/store/invites.js +0 -76
- package/src/modules/organizations/store/memberships.js +0 -110
|
@@ -67,13 +67,6 @@
|
|
|
67
67
|
<span>{{ reason.label }}</span>
|
|
68
68
|
</div>
|
|
69
69
|
</div>
|
|
70
|
-
|
|
71
|
-
<Field
|
|
72
|
-
v-if="selectedReason === 'custom'"
|
|
73
|
-
v-model:field="customReasonText"
|
|
74
|
-
placeholder="Enter custom reason"
|
|
75
|
-
class="w-100 bg-light radius-small pd-medium"
|
|
76
|
-
/>
|
|
77
70
|
</div>
|
|
78
71
|
|
|
79
72
|
<Field
|
|
@@ -85,19 +78,23 @@
|
|
|
85
78
|
/>
|
|
86
79
|
|
|
87
80
|
<div class="flex-nowrap flex gap-small">
|
|
88
|
-
<
|
|
89
|
-
|
|
81
|
+
<Button
|
|
82
|
+
:submit="() => $emit('close')"
|
|
83
|
+
:showLoader="false"
|
|
84
|
+
:showSucces="false"
|
|
90
85
|
class="pd-small radius-small flex-center flex w-max cursor-pointer t-transp"
|
|
91
86
|
>
|
|
92
87
|
Cancel
|
|
93
|
-
</
|
|
88
|
+
</Button>
|
|
94
89
|
|
|
95
|
-
<
|
|
96
|
-
|
|
90
|
+
<Button
|
|
91
|
+
:submit="saveAdjustment"
|
|
92
|
+
:showLoader="true"
|
|
93
|
+
:showSucces="true"
|
|
97
94
|
class="pd-small radius-small flex-center flex w-100 cursor-pointer bg-main t-black"
|
|
98
95
|
>
|
|
99
96
|
Save Adjustment
|
|
100
|
-
</
|
|
97
|
+
</Button>
|
|
101
98
|
</div>
|
|
102
99
|
</div>
|
|
103
100
|
</template>
|
|
@@ -107,9 +104,11 @@ import { ref, computed, onMounted } from 'vue'
|
|
|
107
104
|
import { useRoute } from 'vue-router'
|
|
108
105
|
import Field from '@martyrs/src/components/Field/Field.vue'
|
|
109
106
|
import Select from '@martyrs/src/components/Select/Select.vue'
|
|
107
|
+
import Button from '@martyrs/src/components/Button/Button.vue'
|
|
110
108
|
import * as auth from '@martyrs/src/modules/auth/views/store/auth.js'
|
|
111
109
|
import * as spots from '@martyrs/src/modules/spots/store/spots.js'
|
|
112
110
|
import variants from '@martyrs/src/modules/products/store/variants.store.js'
|
|
111
|
+
import * as inventory from '@martyrs/src/modules/inventory/store/inventory.store.js'
|
|
113
112
|
|
|
114
113
|
const route = useRoute()
|
|
115
114
|
|
|
@@ -128,12 +127,11 @@ const props = defineProps({
|
|
|
128
127
|
}
|
|
129
128
|
})
|
|
130
129
|
|
|
131
|
-
const emit = defineEmits(['
|
|
130
|
+
const emit = defineEmits(['close', 'adjustment-created'])
|
|
132
131
|
|
|
133
132
|
// Form state
|
|
134
133
|
const quantity = ref(0)
|
|
135
|
-
const selectedReason = ref('
|
|
136
|
-
const customReasonText = ref('')
|
|
134
|
+
const selectedReason = ref('restock')
|
|
137
135
|
const note = ref('')
|
|
138
136
|
const selectedStorage = ref(null)
|
|
139
137
|
const selectedVariant = ref(null)
|
|
@@ -147,7 +145,7 @@ const adjustmentReasons = [
|
|
|
147
145
|
{ label: 'Return', value: 'return', icon: IconMisplacement },
|
|
148
146
|
{ label: 'Damage', value: 'damage', icon: IconThief },
|
|
149
147
|
{ label: 'Transfer', value: 'transfer', icon: IconStocktake },
|
|
150
|
-
{ label: '
|
|
148
|
+
{ label: 'Other', value: 'custom', icon: IconCustom },
|
|
151
149
|
]
|
|
152
150
|
|
|
153
151
|
function formatPrice(price) {
|
|
@@ -193,33 +191,52 @@ onMounted(async () => {
|
|
|
193
191
|
}
|
|
194
192
|
})
|
|
195
193
|
|
|
196
|
-
function saveAdjustment() {
|
|
194
|
+
async function saveAdjustment() {
|
|
197
195
|
if (!selectedVariant.value) {
|
|
198
196
|
alert('Please select a variant')
|
|
199
|
-
|
|
197
|
+
throw new Error('Please select a variant')
|
|
200
198
|
}
|
|
201
199
|
if (!selectedStorage.value) {
|
|
202
200
|
alert('Please select a storage')
|
|
203
|
-
|
|
201
|
+
throw new Error('Please select a storage')
|
|
204
202
|
}
|
|
205
203
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
204
|
+
try {
|
|
205
|
+
const adjustmentData = {
|
|
206
|
+
product: props.product._id,
|
|
207
|
+
variant: selectedVariant.value,
|
|
208
|
+
storage: selectedStorage.value,
|
|
209
|
+
source: {
|
|
210
|
+
type: 'User',
|
|
211
|
+
target: auth.state.user._id
|
|
212
|
+
},
|
|
213
|
+
quantity: parseInt(quantity.value || 0),
|
|
214
|
+
reason: selectedReason.value,
|
|
215
|
+
comment: note.value || '',
|
|
216
|
+
owner: {
|
|
217
|
+
type: 'organization',
|
|
218
|
+
target: route.params._id
|
|
219
|
+
},
|
|
220
|
+
creator: {
|
|
221
|
+
type: 'user',
|
|
222
|
+
target: auth.state.user._id
|
|
223
|
+
}
|
|
220
224
|
}
|
|
225
|
+
|
|
226
|
+
const createdAdjustment = await inventory.actions.createAdjustment(adjustmentData)
|
|
227
|
+
|
|
228
|
+
// Emit the adjustment data for parent component to update the product
|
|
229
|
+
emit('adjustment-created', {
|
|
230
|
+
product: props.product._id,
|
|
231
|
+
storage: selectedStorage.value,
|
|
232
|
+
quantity: parseInt(quantity.value || 0),
|
|
233
|
+
storageName: storageOptions.value.find(s => s._id === selectedStorage.value)?.name
|
|
234
|
+
})
|
|
235
|
+
|
|
236
|
+
emit('close')
|
|
237
|
+
} catch (err) {
|
|
238
|
+
console.error(err)
|
|
239
|
+
throw err
|
|
221
240
|
}
|
|
222
|
-
|
|
223
|
-
emit('save', adjustmentData)
|
|
224
241
|
}
|
|
225
242
|
</script>
|
|
@@ -22,19 +22,23 @@
|
|
|
22
22
|
</div>
|
|
23
23
|
|
|
24
24
|
<div class="flex-nowrap flex gap-small">
|
|
25
|
-
<
|
|
26
|
-
|
|
25
|
+
<Button
|
|
26
|
+
:submit="() => $emit('close')"
|
|
27
|
+
:showLoader="false"
|
|
28
|
+
:showSucces="false"
|
|
27
29
|
class="pd-small radius-small flex-center flex w-max cursor-pointer t-transp"
|
|
28
30
|
>
|
|
29
31
|
Cancel
|
|
30
|
-
</
|
|
32
|
+
</Button>
|
|
31
33
|
|
|
32
|
-
<
|
|
33
|
-
|
|
34
|
+
<Button
|
|
35
|
+
:submit="saveSettings"
|
|
36
|
+
:showLoader="false"
|
|
37
|
+
:showSucces="false"
|
|
34
38
|
class="pd-small radius-small flex-center flex w-100 cursor-pointer bg-main t-black"
|
|
35
39
|
>
|
|
36
40
|
Save Settings
|
|
37
|
-
</
|
|
41
|
+
</Button>
|
|
38
42
|
</div>
|
|
39
43
|
</div>
|
|
40
44
|
</template>
|
|
@@ -42,6 +46,7 @@
|
|
|
42
46
|
<script setup>
|
|
43
47
|
import { ref, watch } from 'vue'
|
|
44
48
|
import Checkbox from '@martyrs/src/components/Checkbox/Checkbox.vue'
|
|
49
|
+
import Button from '@martyrs/src/components/Button/Button.vue'
|
|
45
50
|
|
|
46
51
|
const props = defineProps({
|
|
47
52
|
columns: {
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
<div>
|
|
17
17
|
<h3 class="mn-b-nano">{{ product.name }}</h3>
|
|
18
|
-
<p class="t-small t-transp">SKU: {{ product.sku }}</p>
|
|
18
|
+
<!-- <p class="t-small t-transp">SKU: {{ product.sku }}</p> -->
|
|
19
19
|
</div>
|
|
20
20
|
</div>
|
|
21
21
|
</div>
|
|
@@ -71,20 +71,23 @@
|
|
|
71
71
|
</table>
|
|
72
72
|
</div>
|
|
73
73
|
|
|
74
|
-
<
|
|
75
|
-
|
|
74
|
+
<Button
|
|
75
|
+
:submit="() => $emit('close')"
|
|
76
|
+
:showLoader="false"
|
|
77
|
+
:showSucces="false"
|
|
76
78
|
class="pd-small radius-small flex-center flex w-max cursor-pointer bg-main t-black"
|
|
77
79
|
>
|
|
78
80
|
Close
|
|
79
|
-
</
|
|
81
|
+
</Button>
|
|
80
82
|
</div>
|
|
81
83
|
</template>
|
|
82
84
|
|
|
83
85
|
<script setup>
|
|
84
86
|
import { ref, onMounted } from 'vue'
|
|
85
87
|
import PlaceholderImage from '@martyrs/src/modules/icons/placeholders/PlaceholderImage.vue'
|
|
86
|
-
|
|
87
|
-
|
|
88
|
+
import Button from '@martyrs/src/components/Button/Button.vue'
|
|
89
|
+
|
|
90
|
+
import * as inventory from '@martyrs/src/modules/inventory/store/inventory.store.js'
|
|
88
91
|
|
|
89
92
|
const props = defineProps({
|
|
90
93
|
product: {
|
|
@@ -104,14 +107,21 @@ onMounted(async () => {
|
|
|
104
107
|
})
|
|
105
108
|
|
|
106
109
|
async function loadHistory() {
|
|
110
|
+
loading.value = true
|
|
107
111
|
try {
|
|
108
112
|
// Fetch adjustments for this product
|
|
109
|
-
const
|
|
110
|
-
|
|
113
|
+
const data = await inventory.actions.fetchAdjustments({
|
|
114
|
+
product: props.product._id,
|
|
115
|
+
limit: 50,
|
|
116
|
+
sortParam: 'createdAt',
|
|
117
|
+
sortOrder: 'desc',
|
|
118
|
+
lookup: ['creator', 'source', 'storage']
|
|
119
|
+
})
|
|
111
120
|
|
|
112
121
|
history.value = data || []
|
|
113
122
|
} catch (error) {
|
|
114
123
|
console.error('Error loading history:', error)
|
|
124
|
+
history.value = []
|
|
115
125
|
} finally {
|
|
116
126
|
loading.value = false
|
|
117
127
|
}
|
|
@@ -122,7 +132,9 @@ function formatDate(dateString) {
|
|
|
122
132
|
return date.toLocaleDateString('en-US', {
|
|
123
133
|
day: 'numeric',
|
|
124
134
|
month: 'short',
|
|
125
|
-
year: 'numeric'
|
|
135
|
+
year: 'numeric',
|
|
136
|
+
hour: '2-digit',
|
|
137
|
+
minute: '2-digit'
|
|
126
138
|
})
|
|
127
139
|
}
|
|
128
140
|
</script>
|
|
@@ -43,19 +43,23 @@
|
|
|
43
43
|
|
|
44
44
|
<!-- Actions -->
|
|
45
45
|
<div class="flex-nowrap flex gap-small">
|
|
46
|
-
<
|
|
47
|
-
|
|
46
|
+
<Button
|
|
47
|
+
:submit="() => $emit('close')"
|
|
48
|
+
:showLoader="false"
|
|
49
|
+
:showSucces="false"
|
|
48
50
|
class="pd-small radius-small flex-center flex w-max cursor-pointer t-transp"
|
|
49
51
|
>
|
|
50
52
|
Cancel
|
|
51
|
-
</
|
|
53
|
+
</Button>
|
|
52
54
|
|
|
53
|
-
<
|
|
54
|
-
|
|
55
|
+
<Button
|
|
56
|
+
:submit="saveAlert"
|
|
57
|
+
:showLoader="true"
|
|
58
|
+
:showSucces="true"
|
|
55
59
|
class="pd-small radius-small flex-center flex w-100 cursor-pointer bg-main t-black"
|
|
56
60
|
>
|
|
57
61
|
Save Alert
|
|
58
|
-
</
|
|
62
|
+
</Button>
|
|
59
63
|
</div>
|
|
60
64
|
</div>
|
|
61
65
|
</template>
|
|
@@ -65,6 +69,7 @@ import { ref, computed, onMounted } from 'vue'
|
|
|
65
69
|
import { useRoute } from 'vue-router'
|
|
66
70
|
import Field from '@martyrs/src/components/Field/Field.vue'
|
|
67
71
|
import Select from '@martyrs/src/components/Select/Select.vue'
|
|
72
|
+
import Button from '@martyrs/src/components/Button/Button.vue'
|
|
68
73
|
import * as auth from '@martyrs/src/modules/auth/views/store/auth.js'
|
|
69
74
|
import * as spots from '@martyrs/src/modules/spots/store/spots.js'
|
|
70
75
|
import variants from '@martyrs/src/modules/products/store/variants.store.js'
|
|
@@ -79,7 +84,7 @@ const props = defineProps({
|
|
|
79
84
|
}
|
|
80
85
|
})
|
|
81
86
|
|
|
82
|
-
const emit = defineEmits(['
|
|
87
|
+
const emit = defineEmits(['close'])
|
|
83
88
|
|
|
84
89
|
// Form state
|
|
85
90
|
const selectedVariant = ref(null)
|
|
@@ -160,22 +165,28 @@ onMounted(async () => {
|
|
|
160
165
|
})
|
|
161
166
|
|
|
162
167
|
async function saveAlert() {
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
168
|
+
try {
|
|
169
|
+
const alertData = {
|
|
170
|
+
product: props.product._id,
|
|
171
|
+
variant: selectedVariant.value,
|
|
172
|
+
storage: selectedStorage.value,
|
|
173
|
+
threshold: parseInt(threshold.value || 0),
|
|
174
|
+
enabled: true,
|
|
175
|
+
owner: {
|
|
176
|
+
type: 'organization',
|
|
177
|
+
target: route.params._id
|
|
178
|
+
},
|
|
179
|
+
creator: {
|
|
180
|
+
type: 'user',
|
|
181
|
+
target: auth.state.user._id
|
|
182
|
+
}
|
|
176
183
|
}
|
|
184
|
+
|
|
185
|
+
await stockAlerts.create(alertData)
|
|
186
|
+
emit('close')
|
|
187
|
+
} catch (err) {
|
|
188
|
+
console.error(err)
|
|
189
|
+
throw err
|
|
177
190
|
}
|
|
178
|
-
|
|
179
|
-
emit('save', alertData)
|
|
180
191
|
}
|
|
181
192
|
</script>
|
|
@@ -4,16 +4,9 @@
|
|
|
4
4
|
<header class="mn-b-medium flex-v-center flex-nowrap flex">
|
|
5
5
|
<h2>Inventory</h2>
|
|
6
6
|
<button
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
v-html="'+'"
|
|
11
|
-
/>
|
|
12
|
-
<button
|
|
13
|
-
v-if="route.meta.context === 'organization'"
|
|
14
|
-
@click="router.push({ name: 'OrganizationInventoryAudit', params: { _id: route.params._id } })"
|
|
15
|
-
class="mn-l-small radius-100 i-big hover-scale-1 cursor-pointer t-white bg-second"
|
|
16
|
-
v-html="'+'"
|
|
7
|
+
@click="route.meta.context === 'backoffice' ? router.push({ name: 'BackofficeInventoryAudit' }) : router.push({ name: 'OrganizationInventoryAudit', params: { _id: route.params._id } })"
|
|
8
|
+
class="mn-l-auto radius-small button t-white bg-second"
|
|
9
|
+
v-html="'+ New Audit'"
|
|
17
10
|
/>
|
|
18
11
|
</header>
|
|
19
12
|
|
|
@@ -22,6 +15,7 @@
|
|
|
22
15
|
<Feed
|
|
23
16
|
:search="true"
|
|
24
17
|
v-model:sort="sort"
|
|
18
|
+
v-model:items="items"
|
|
25
19
|
:store="{
|
|
26
20
|
read: (options) => products.actions.read(options),
|
|
27
21
|
state: products.state
|
|
@@ -41,7 +35,6 @@
|
|
|
41
35
|
sortParam: sort.param,
|
|
42
36
|
sortOrder: sort.order
|
|
43
37
|
}"
|
|
44
|
-
v-slot="{ items }"
|
|
45
38
|
>
|
|
46
39
|
<Table
|
|
47
40
|
:columns="columns.filter(col => col.visible)"
|
|
@@ -159,7 +152,7 @@
|
|
|
159
152
|
<AdjustmentForm
|
|
160
153
|
:product="selectedProduct"
|
|
161
154
|
@close="showAuditModal = false"
|
|
162
|
-
@
|
|
155
|
+
@adjustment-created="handleAdjustmentCreated"
|
|
163
156
|
/>
|
|
164
157
|
</Popup>
|
|
165
158
|
|
|
@@ -172,7 +165,6 @@
|
|
|
172
165
|
<StockAlertsForm
|
|
173
166
|
:product="selectedProduct"
|
|
174
167
|
@close="showReorderModal = false"
|
|
175
|
-
@save="handleAlertSave"
|
|
176
168
|
/>
|
|
177
169
|
</Popup>
|
|
178
170
|
|
|
@@ -228,7 +220,7 @@ import HistoryView from '../forms/HistoryView.vue'
|
|
|
228
220
|
import ColumnSettingsMenu from '../forms/ColumnSettingsMenu.vue'
|
|
229
221
|
|
|
230
222
|
// Stores
|
|
231
|
-
import * as inventory from '@martyrs/src/modules/inventory/store/
|
|
223
|
+
import * as inventory from '@martyrs/src/modules/inventory/store/inventory.store.js'
|
|
232
224
|
import * as products from '@martyrs/src/modules/products/store/products.js'
|
|
233
225
|
import * as auth from '@martyrs/src/modules/auth/views/store/auth.js'
|
|
234
226
|
import stockAlerts from '@martyrs/src/modules/inventory/store/stock.alerts.store.js'
|
|
@@ -238,6 +230,9 @@ const route = useRoute()
|
|
|
238
230
|
const router = useRouter()
|
|
239
231
|
const { formatPrice } = useGlobalMixins()
|
|
240
232
|
|
|
233
|
+
// Products items state
|
|
234
|
+
const items = ref([])
|
|
235
|
+
|
|
241
236
|
// Feed controls
|
|
242
237
|
const sort = ref({
|
|
243
238
|
param: 'available',
|
|
@@ -290,6 +285,37 @@ function openStockAudit(row) {
|
|
|
290
285
|
selectedProduct.value = row
|
|
291
286
|
showAuditModal.value = true
|
|
292
287
|
}
|
|
288
|
+
|
|
289
|
+
// Update product after adjustment
|
|
290
|
+
function handleAdjustmentCreated(adjustment) {
|
|
291
|
+
// Find the product in items array
|
|
292
|
+
const productIndex = items.value.findIndex(item => item._id === adjustment.product)
|
|
293
|
+
|
|
294
|
+
if (productIndex !== -1) {
|
|
295
|
+
// Update the available quantity
|
|
296
|
+
items.value[productIndex].available += adjustment.quantity
|
|
297
|
+
|
|
298
|
+
// Update availabilityDetails if present
|
|
299
|
+
if (items.value[productIndex].availabilityDetails) {
|
|
300
|
+
const storageDetail = items.value[productIndex].availabilityDetails.find(
|
|
301
|
+
detail => detail.storage === adjustment.storage
|
|
302
|
+
)
|
|
303
|
+
|
|
304
|
+
if (storageDetail) {
|
|
305
|
+
storageDetail.available += adjustment.quantity
|
|
306
|
+
} else {
|
|
307
|
+
// Add new storage detail if not found
|
|
308
|
+
items.value[productIndex].availabilityDetails.push({
|
|
309
|
+
storage: adjustment.storage,
|
|
310
|
+
available: adjustment.quantity,
|
|
311
|
+
storageName: adjustment.storageName || adjustment.storage
|
|
312
|
+
})
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
showAuditModal.value = false
|
|
318
|
+
}
|
|
293
319
|
function openReorderSettings(row = null) {
|
|
294
320
|
selectedProduct.value = row
|
|
295
321
|
showReorderModal.value = true
|
|
@@ -301,32 +327,6 @@ function openStockHistory(row) {
|
|
|
301
327
|
function openViewSettings() {
|
|
302
328
|
showSettingsModal.value = true
|
|
303
329
|
}
|
|
304
|
-
async function handleAuditSave(adjustmentData) {
|
|
305
|
-
try {
|
|
306
|
-
await inventory.actions.createAdjustment({
|
|
307
|
-
...adjustmentData,
|
|
308
|
-
owner: {
|
|
309
|
-
type: 'organization',
|
|
310
|
-
target: route.params._id
|
|
311
|
-
},
|
|
312
|
-
creator: {
|
|
313
|
-
type: 'user',
|
|
314
|
-
target: auth.state.user._id
|
|
315
|
-
}
|
|
316
|
-
})
|
|
317
|
-
showAuditModal.value = false
|
|
318
|
-
} catch (err) {
|
|
319
|
-
console.error(err)
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
async function handleAlertSave(alertData) {
|
|
323
|
-
try {
|
|
324
|
-
await stockAlerts.create(alertData)
|
|
325
|
-
showReorderModal.value = false
|
|
326
|
-
} catch (err) {
|
|
327
|
-
console.error('Error saving alert:', err)
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
330
|
function handleColumnsUpdate(updated) {
|
|
331
331
|
// Update column visibility
|
|
332
332
|
columns.forEach(col => {
|
|
@@ -254,7 +254,7 @@
|
|
|
254
254
|
|
|
255
255
|
import * as globals from '@martyrs/src/modules/globals/views/store/globals.js';
|
|
256
256
|
import * as auth from '@martyrs/src/modules/auth/views/store/auth.js';
|
|
257
|
-
import * as inventory from '@martyrs/src/modules/inventory/store/
|
|
257
|
+
import * as inventory from '@martyrs/src/modules/inventory/store/inventory.store.js';
|
|
258
258
|
import * as products from '@martyrs/src/modules/products/store/products.js';
|
|
259
259
|
import * as spots from '@martyrs/src/modules/spots/store/spots.js';
|
|
260
260
|
import variants from '@martyrs/src/modules/products/store/variants.store.js';
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
## 1. Общее описание модуля
|
|
2
|
+
|
|
3
|
+
### Назначение и область применения
|
|
4
|
+
|
|
5
|
+
Модуль **Inventory** представляет собой комплексную систему управления складскими запасами, предназначенную для решения задач многоскладской логистики в условиях сложной продуктовой структуры. Система обеспечивает точный учет товарных остатков, автоматический расчет доступности для продажи и проактивное управление пополнением запасов.
|
|
6
|
+
|
|
7
|
+
Модуль разработан для работы в мультитенантной среде, где различные организации ведут независимый учет своих товарных запасов на множественных складских площадках.
|
|
8
|
+
|
|
9
|
+
### Ключевые сущности и их роль в системе
|
|
10
|
+
|
|
11
|
+
#### StockAvailability - Остатки и доступность для продажи
|
|
12
|
+
|
|
13
|
+
**Назначение**: Хранит фактические количества товаров на складах и вычисляемую доступность для продажи с учетом резервирований и ограничений по ингредиентам.
|
|
14
|
+
|
|
15
|
+
```javascript
|
|
16
|
+
{
|
|
17
|
+
product: ObjectId,
|
|
18
|
+
variant: ObjectId,
|
|
19
|
+
storage: ObjectId,
|
|
20
|
+
quantity: Number, // Физический остаток
|
|
21
|
+
available: Number, // Доступно для продажи
|
|
22
|
+
reservations: Number, // Зарезервировано (пока не используется)
|
|
23
|
+
constraints: [{ // Ограничения по ингредиентам
|
|
24
|
+
ingredient: ObjectId, // ID ингредиента
|
|
25
|
+
stock: Number, // Остаток ингредиента на складе
|
|
26
|
+
required: Number, // Требуется на единицу товара
|
|
27
|
+
available: Number // Сколько единиц товара можно собрать
|
|
28
|
+
}]
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**Почему это критично**: Система поддерживает концепцию "on-demand" сборки товаров из ингредиентов. Например, пицца может быть собрана из теста, соуса и начинки. Даже если готовой пиццы нет на складе (`quantity: 0`), она может быть доступна для заказа, если есть все необходимые ингредиенты.
|
|
33
|
+
|
|
34
|
+
**Алгоритм расчета доступности**:
|
|
35
|
+
1. Если есть прямой остаток товара → `available = quantity`
|
|
36
|
+
2. Если прямого остатка нет, но есть ингредиенты → рассчитывается минимальное количество, которое можно собрать
|
|
37
|
+
3. Финальная доступность = min(прямой остаток, количество сборок из ингредиентов)
|
|
38
|
+
|
|
39
|
+
#### StockAdjustment - Журнал движений товаров
|
|
40
|
+
|
|
41
|
+
**Назначение**: Immutable лог всех изменений остатков товаров с полной атрибуцией и аудитом.
|
|
42
|
+
|
|
43
|
+
```javascript
|
|
44
|
+
{
|
|
45
|
+
product: ObjectId,
|
|
46
|
+
variant: ObjectId,
|
|
47
|
+
storage: ObjectId,
|
|
48
|
+
source: { // Источник изменения
|
|
49
|
+
type: ['User', 'Order', 'Inventory'],
|
|
50
|
+
target: ObjectId // ID пользователя, заказа или инвентаризации
|
|
51
|
+
},
|
|
52
|
+
reason: ['restock', 'sale', 'return', 'damage', 'transfer', 'custom'],
|
|
53
|
+
quantity: Number, // Изменение (+/-)
|
|
54
|
+
cost: Number, // Стоимость (для учета затрат)
|
|
55
|
+
comment: String
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**Почему необходим отдельный журнал**: StockAvailability показывает только текущее состояние, но не объясняет, как оно возникло. StockAdjustment обеспечивает:
|
|
60
|
+
- **Полный аудит**: каждое изменение записывается с временной меткой и автором
|
|
61
|
+
- **Различение источников**: продажа vs возврат vs порча имеют разную бизнес-логику
|
|
62
|
+
- **Финансовый учет**: поле `cost` позволяет вести учет себестоимости товарных операций
|
|
63
|
+
- **Compliance**: соответствие требованиям аудита и налогового законодательства
|
|
64
|
+
|
|
65
|
+
#### StockAudit - Инвентаризация
|
|
66
|
+
|
|
67
|
+
**Назначение**: Batch-операция для проведения инвентаризации и массовой корректировки остатков.
|
|
68
|
+
|
|
69
|
+
```javascript
|
|
70
|
+
{
|
|
71
|
+
storage: ObjectId, // Склад, на котором проводится инвентаризация
|
|
72
|
+
status: ['draft', 'published', 'cancelled'],
|
|
73
|
+
positions: [{ // Массив товарных позиций
|
|
74
|
+
product: ObjectId,
|
|
75
|
+
variant: ObjectId,
|
|
76
|
+
quantity: Number, // Фактически насчитанное количество
|
|
77
|
+
reason: String, // Причина расхождения
|
|
78
|
+
comment: String,
|
|
79
|
+
cost: Number
|
|
80
|
+
}],
|
|
81
|
+
comment: String // Общий комментарий к инвентаризации
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**Зачем нужна batch-обработка**: Инвентаризация может затрагивать сотни товарных позиций. Создание отдельного StockAdjustment для каждой позиции привело бы к:
|
|
86
|
+
- Избыточности в UI (сотни форм)
|
|
87
|
+
- Проблемам с атомарностью (часть корректировок может не пройти)
|
|
88
|
+
- Сложности отката операции
|
|
89
|
+
|
|
90
|
+
StockAudit решает это через двухфазный commit:
|
|
91
|
+
1. **Draft фаза**: данные сохраняются, но не влияют на остатки
|
|
92
|
+
2. **Published фаза**: автоматически создаются соответствующие StockAdjustment и обновляются остатки в StockAvailability
|
|
93
|
+
|
|
94
|
+
#### StockAlert - Уведомления о низких остатках
|
|
95
|
+
|
|
96
|
+
**Назначение**: Конфигурация пороговых значений для автоматических уведомлений о необходимости пополнения товаров.
|
|
97
|
+
|
|
98
|
+
```javascript
|
|
99
|
+
{
|
|
100
|
+
product: ObjectId,
|
|
101
|
+
variant: ObjectId, // null = для всех вариантов товара
|
|
102
|
+
storage: ObjectId, // null = для всех складов
|
|
103
|
+
threshold: Number, // Пороговое значение
|
|
104
|
+
enabled: Boolean
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
**Гибкость настройки**: Система поддерживает различные уровни детализации алертов:
|
|
109
|
+
- **Глобальные** (`variant: null, storage: null`): для товара на всех складах
|
|
110
|
+
- **По складам** (`variant: null, storage: specific`): для товара на конкретном складе
|
|
111
|
+
- **По вариантам** (`variant: specific, storage: null`): для конкретного варианта на всех складах
|
|
112
|
+
- **Точечные** (`variant: specific, storage: specific`): максимальная детализация
|
|
113
|
+
|
|
114
|
+
**Проактивность**: Алерты срабатывают автоматически в момент изменения остатков, а не по расписанию, что обеспечивает оперативное реагирование на критические ситуации.
|
|
115
|
+
|
|
116
|
+
### Бизнес-проблемы, решаемые модулем
|
|
117
|
+
|
|
118
|
+
1. **Предотвращение овесселлинга**: Точный расчет доступности не позволяет продать больше товара, чем физически возможно произвести или отгрузить.
|
|
119
|
+
|
|
120
|
+
2. **Оптимизация складских запасов**: Автоматические алерты предотвращают затоваривание и дефицит.
|
|
121
|
+
|
|
122
|
+
3. **Сложная продуктовая логика**: Поддержка товаров, собираемых из ингредиентов, расширяет возможности для ресторанов, производств, кастомизации.
|
|
123
|
+
|
|
124
|
+
4. **Мультилокационность**: Управление запасами на множественных складах с централизованным контролем.
|
|
125
|
+
|
|
126
|
+
5. **Аудитируемость**: Полная история движений обеспечивает соответствие нормативным требованиям и внутреннему контролю.
|