@things-factory/worksheet-base 8.0.0-beta.9 → 8.0.1
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-server/controllers/inbound/unloading-worksheet-controller.js +2 -0
- package/dist-server/controllers/inbound/unloading-worksheet-controller.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/vas-candidates.d.ts +2 -0
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/dist-server/utils/inventory-util.d.ts +2 -0
- package/package.json +17 -17
- package/server/constants/index.ts +5 -0
- package/server/constants/rule-type.ts +4 -0
- package/server/constants/target-type.ts +6 -0
- package/server/constants/template.ts +12 -0
- package/server/constants/transaction-type.ts +9 -0
- package/server/constants/worksheet.ts +38 -0
- package/server/controllers/ecommerce/ecommerce-controller.ts +209 -0
- package/server/controllers/ecommerce/index.ts +2 -0
- package/server/controllers/ecommerce/sellercraft-controller.ts +358 -0
- package/server/controllers/inbound/index.ts +4 -0
- package/server/controllers/inbound/putaway-returning-worksheet-controller.ts +450 -0
- package/server/controllers/inbound/putaway-worksheet-controller.ts +454 -0
- package/server/controllers/inbound/unloading-returning-worksheet-controller.ts +291 -0
- package/server/controllers/inbound/unloading-worksheet-controller.ts +1400 -0
- package/server/controllers/index.ts +21 -0
- package/server/controllers/inspect/cycle-count-worksheet-controller.ts +537 -0
- package/server/controllers/inspect/index.ts +1 -0
- package/server/controllers/outbound/index.ts +5 -0
- package/server/controllers/outbound/loading-worksheet-controller.ts +377 -0
- package/server/controllers/outbound/packing-worksheet-controller.ts +449 -0
- package/server/controllers/outbound/picking-worksheet-controller.ts +1769 -0
- package/server/controllers/outbound/returning-worksheet-controller.ts +254 -0
- package/server/controllers/outbound/sorting-worksheet-controller.ts +554 -0
- package/server/controllers/render-elccl-grn.ts +228 -0
- package/server/controllers/render-fm-grn.ts +287 -0
- package/server/controllers/render-grn.ts +285 -0
- package/server/controllers/render-invoices.ts +201 -0
- package/server/controllers/render-job-sheet.ts +208 -0
- package/server/controllers/render-kimeda-grn.ts +185 -0
- package/server/controllers/render-manifest.ts +76 -0
- package/server/controllers/render-manual-do.ts +227 -0
- package/server/controllers/render-orientage-do.ts +376 -0
- package/server/controllers/render-orientage-grn.ts +191 -0
- package/server/controllers/render-po.ts +182 -0
- package/server/controllers/render-ro-do.ts +404 -0
- package/server/controllers/render-seebuu-grn.ts +208 -0
- package/server/controllers/vas/index.ts +1 -0
- package/server/controllers/vas/vas-worksheet-controller.ts +848 -0
- package/server/controllers/worksheet-controller.ts +1267 -0
- package/server/entities/index.ts +8 -0
- package/server/entities/warehouse-bizplace-onhand-inventory.ts +148 -0
- package/server/entities/worksheet-detail.ts +106 -0
- package/server/entities/worksheet-movement.ts +34 -0
- package/server/entities/worksheet.ts +100 -0
- package/server/graphql/index.ts +7 -0
- package/server/graphql/resolvers/index.ts +8 -0
- package/server/graphql/resolvers/pallet/index.ts +7 -0
- package/server/graphql/resolvers/pallet/pallet-outbound.ts +92 -0
- package/server/graphql/resolvers/worksheet/batch-picking-worksheet.ts +137 -0
- package/server/graphql/resolvers/worksheet/cancel-draft-release-order.ts +20 -0
- package/server/graphql/resolvers/worksheet/check-inventory-release.ts +37 -0
- package/server/graphql/resolvers/worksheet/check-stock-take-current-location.ts +63 -0
- package/server/graphql/resolvers/worksheet/confirm-cancellation-release-order.ts +213 -0
- package/server/graphql/resolvers/worksheet/create-worksheet.ts +21 -0
- package/server/graphql/resolvers/worksheet/cross-dock-picking.ts +173 -0
- package/server/graphql/resolvers/worksheet/cycle-count-adjustment.ts +211 -0
- package/server/graphql/resolvers/worksheet/cycle-count-worksheet.ts +79 -0
- package/server/graphql/resolvers/worksheet/delete-worksheet.ts +21 -0
- package/server/graphql/resolvers/worksheet/delivery-order-by-worksheet.ts +104 -0
- package/server/graphql/resolvers/worksheet/fetch-delivery-order-ro.ts +191 -0
- package/server/graphql/resolvers/worksheet/fetch-sellercraft-document.ts +69 -0
- package/server/graphql/resolvers/worksheet/find-release-orders-by-task-no.ts +36 -0
- package/server/graphql/resolvers/worksheet/find-release-orders-by-worksheet-no.ts +29 -0
- package/server/graphql/resolvers/worksheet/find-sorting-release-orders-by-task-no.ts +80 -0
- package/server/graphql/resolvers/worksheet/generate-worksheet/generate-arrival-notice-worksheet.ts +100 -0
- package/server/graphql/resolvers/worksheet/generate-worksheet/generate-batch-picking-worksheet.ts +26 -0
- package/server/graphql/resolvers/worksheet/generate-worksheet/generate-cycle-count-worksheet.ts +51 -0
- package/server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.ts +17 -0
- package/server/graphql/resolvers/worksheet/generate-worksheet/generate-partial-putaway-return-worksheet.ts +69 -0
- package/server/graphql/resolvers/worksheet/generate-worksheet/generate-partial-putaway-worksheet.ts +65 -0
- package/server/graphql/resolvers/worksheet/generate-worksheet/generate-putaway-worksheet.ts +54 -0
- package/server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.ts +114 -0
- package/server/graphql/resolvers/worksheet/generate-worksheet/generate-return-order-worksheet.ts +45 -0
- package/server/graphql/resolvers/worksheet/generate-worksheet/generate-vas-order-worksheet.ts +35 -0
- package/server/graphql/resolvers/worksheet/generate-worksheet/index.ts +23 -0
- package/server/graphql/resolvers/worksheet/having-vas.ts +45 -0
- package/server/graphql/resolvers/worksheet/index.ts +142 -0
- package/server/graphql/resolvers/worksheet/inspecting/activate-cycle-count.ts +24 -0
- package/server/graphql/resolvers/worksheet/inspecting/add-extra-pallet.ts +49 -0
- package/server/graphql/resolvers/worksheet/inspecting/check-missing-pallet.ts +18 -0
- package/server/graphql/resolvers/worksheet/inspecting/complete-inspection.ts +41 -0
- package/server/graphql/resolvers/worksheet/inspecting/index.ts +17 -0
- package/server/graphql/resolvers/worksheet/inspecting/inspecting.ts +30 -0
- package/server/graphql/resolvers/worksheet/inspecting/relocate-pallet.ts +46 -0
- package/server/graphql/resolvers/worksheet/inspecting/undo-inspection.ts +23 -0
- package/server/graphql/resolvers/worksheet/inventories-by-pallet.ts +150 -0
- package/server/graphql/resolvers/worksheet/loaded-inventories.ts +40 -0
- package/server/graphql/resolvers/worksheet/loading/activate-loading.ts +73 -0
- package/server/graphql/resolvers/worksheet/loading/complete-loading.ts +165 -0
- package/server/graphql/resolvers/worksheet/loading/index.ts +11 -0
- package/server/graphql/resolvers/worksheet/loading/loading.ts +46 -0
- package/server/graphql/resolvers/worksheet/loading/undo-loading.ts +25 -0
- package/server/graphql/resolvers/worksheet/loading-worksheet.ts +150 -0
- package/server/graphql/resolvers/worksheet/not-tally-target-inventories.ts +34 -0
- package/server/graphql/resolvers/worksheet/packing/activate-packing.ts +69 -0
- package/server/graphql/resolvers/worksheet/packing/complete-packing.ts +102 -0
- package/server/graphql/resolvers/worksheet/packing/index.ts +13 -0
- package/server/graphql/resolvers/worksheet/packing/packing.ts +59 -0
- package/server/graphql/resolvers/worksheet/packing/scan-product-packing.ts +70 -0
- package/server/graphql/resolvers/worksheet/packing/undo-serial-number-packing.ts +24 -0
- package/server/graphql/resolvers/worksheet/packing-worksheet.ts +378 -0
- package/server/graphql/resolvers/worksheet/palletizing-pallets.ts +142 -0
- package/server/graphql/resolvers/worksheet/pending-cancellation-release-order.ts +234 -0
- package/server/graphql/resolvers/worksheet/picking/activate-batch-picking.ts +40 -0
- package/server/graphql/resolvers/worksheet/picking/activate-picking.ts +98 -0
- package/server/graphql/resolvers/worksheet/picking/assign-picking-inventories.ts +50 -0
- package/server/graphql/resolvers/worksheet/picking/assign-picking-worker.ts +44 -0
- package/server/graphql/resolvers/worksheet/picking/batch-picking.ts +32 -0
- package/server/graphql/resolvers/worksheet/picking/complete-batch-picking.ts +137 -0
- package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +282 -0
- package/server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.ts +121 -0
- package/server/graphql/resolvers/worksheet/picking/index.ts +31 -0
- package/server/graphql/resolvers/worksheet/picking/my-picking-assignment-status.ts +35 -0
- package/server/graphql/resolvers/worksheet/picking/picking-assignment-status-by-user.ts +96 -0
- package/server/graphql/resolvers/worksheet/picking/picking.ts +55 -0
- package/server/graphql/resolvers/worksheet/picking/scan-product-batch-picking.ts +52 -0
- package/server/graphql/resolvers/worksheet/picking/scan-product-picking.ts +25 -0
- package/server/graphql/resolvers/worksheet/picking/seal-tote.ts +25 -0
- package/server/graphql/resolvers/worksheet/picking/undo-picking-assignment.ts +31 -0
- package/server/graphql/resolvers/worksheet/picking/undo-serial-number-picking.ts +24 -0
- package/server/graphql/resolvers/worksheet/picking-worksheet.ts +147 -0
- package/server/graphql/resolvers/worksheet/proceed-extra-products.ts +242 -0
- package/server/graphql/resolvers/worksheet/putaway/activate-putaway.ts +51 -0
- package/server/graphql/resolvers/worksheet/putaway/complete-putaway.ts +105 -0
- package/server/graphql/resolvers/worksheet/putaway/index.ts +11 -0
- package/server/graphql/resolvers/worksheet/putaway/putaway.ts +26 -0
- package/server/graphql/resolvers/worksheet/putaway/undo-putaway.ts +25 -0
- package/server/graphql/resolvers/worksheet/putaway-return/activate-putaway-return.ts +55 -0
- package/server/graphql/resolvers/worksheet/putaway-return/complete-putaway-return.ts +38 -0
- package/server/graphql/resolvers/worksheet/putaway-return/index.ts +11 -0
- package/server/graphql/resolvers/worksheet/putaway-return/putaway-return.ts +30 -0
- package/server/graphql/resolvers/worksheet/putaway-return/undo-putaway-return.ts +29 -0
- package/server/graphql/resolvers/worksheet/putaway-returning-worksheet.ts +83 -0
- package/server/graphql/resolvers/worksheet/putaway-worksheet.ts +82 -0
- package/server/graphql/resolvers/worksheet/recommend-putway-location.ts +133 -0
- package/server/graphql/resolvers/worksheet/reject-cancellation-release-order.ts +186 -0
- package/server/graphql/resolvers/worksheet/relocate-pallet.ts +67 -0
- package/server/graphql/resolvers/worksheet/replace-picking-pallets.ts +127 -0
- package/server/graphql/resolvers/worksheet/return-worksheet.ts +70 -0
- package/server/graphql/resolvers/worksheet/returning/activate-return.ts +24 -0
- package/server/graphql/resolvers/worksheet/returning/complete-return.ts +39 -0
- package/server/graphql/resolvers/worksheet/returning/index.ts +9 -0
- package/server/graphql/resolvers/worksheet/returning/returning.ts +26 -0
- package/server/graphql/resolvers/worksheet/sorting/activate-sorting.ts +25 -0
- package/server/graphql/resolvers/worksheet/sorting/complete-order-sorting.ts +40 -0
- package/server/graphql/resolvers/worksheet/sorting/complete-worksheet-sorting.ts +23 -0
- package/server/graphql/resolvers/worksheet/sorting/index.ts +13 -0
- package/server/graphql/resolvers/worksheet/sorting/scan-product-sorting.ts +31 -0
- package/server/graphql/resolvers/worksheet/sorting/sorting-product.ts +32 -0
- package/server/graphql/resolvers/worksheet/sorting-worksheet.ts +87 -0
- package/server/graphql/resolvers/worksheet/transfer.ts +176 -0
- package/server/graphql/resolvers/worksheet/unloaded-inventories-by-reusable-pallet.ts +54 -0
- package/server/graphql/resolvers/worksheet/unloaded-inventories.ts +78 -0
- package/server/graphql/resolvers/worksheet/unloading/activate-unloading.ts +56 -0
- package/server/graphql/resolvers/worksheet/unloading/complete-product-scan-unload.ts +25 -0
- package/server/graphql/resolvers/worksheet/unloading/complete-unloading-partially.ts +25 -0
- package/server/graphql/resolvers/worksheet/unloading/complete-unloading.ts +76 -0
- package/server/graphql/resolvers/worksheet/unloading/index.ts +21 -0
- package/server/graphql/resolvers/worksheet/unloading/scan-product-unload.ts +26 -0
- package/server/graphql/resolvers/worksheet/unloading/scan-serial-number-unload.ts +26 -0
- package/server/graphql/resolvers/worksheet/unloading/undo-serial-number-unload.ts +24 -0
- package/server/graphql/resolvers/worksheet/unloading/undo-unloading.ts +25 -0
- package/server/graphql/resolvers/worksheet/unloading/unload.ts +26 -0
- package/server/graphql/resolvers/worksheet/unloading-return/activate-unloading-return.ts +28 -0
- package/server/graphql/resolvers/worksheet/unloading-return/complete-unload-return-partially.ts +29 -0
- package/server/graphql/resolvers/worksheet/unloading-return/complete-unload-returning.ts +91 -0
- package/server/graphql/resolvers/worksheet/unloading-return/index.ts +9 -0
- package/server/graphql/resolvers/worksheet/unloading-return-worksheet.ts +75 -0
- package/server/graphql/resolvers/worksheet/unloading-worksheet.ts +98 -0
- package/server/graphql/resolvers/worksheet/update-worksheet.ts +25 -0
- package/server/graphql/resolvers/worksheet/vas/activate-vas.ts +25 -0
- package/server/graphql/resolvers/worksheet/vas/assign-vas-inventories.ts +25 -0
- package/server/graphql/resolvers/worksheet/vas/complete-vas.ts +72 -0
- package/server/graphql/resolvers/worksheet/vas/execute-vas.ts +31 -0
- package/server/graphql/resolvers/worksheet/vas/index.ts +15 -0
- package/server/graphql/resolvers/worksheet/vas/undo-vas-inventory.ts +24 -0
- package/server/graphql/resolvers/worksheet/vas/undo-vas.ts +24 -0
- package/server/graphql/resolvers/worksheet/vas-candidates.ts +177 -0
- package/server/graphql/resolvers/worksheet/vas-inventories.ts +41 -0
- package/server/graphql/resolvers/worksheet/vas-transactions/common-utils.ts +1182 -0
- package/server/graphql/resolvers/worksheet/vas-transactions/index.ts +5 -0
- package/server/graphql/resolvers/worksheet/vas-transactions/interfaces/index.ts +56 -0
- package/server/graphql/resolvers/worksheet/vas-transactions/interfaces/relabeling.ts +20 -0
- package/server/graphql/resolvers/worksheet/vas-transactions/interfaces/repackaging.ts +27 -0
- package/server/graphql/resolvers/worksheet/vas-transactions/interfaces/repalletizing.ts +14 -0
- package/server/graphql/resolvers/worksheet/vas-transactions/interfaces/unpacking.ts +14 -0
- package/server/graphql/resolvers/worksheet/vas-transactions/relabeling/check-relabelable.ts +96 -0
- package/server/graphql/resolvers/worksheet/vas-transactions/relabeling/complete-relabeling.ts +93 -0
- package/server/graphql/resolvers/worksheet/vas-transactions/relabeling/index.ts +4 -0
- package/server/graphql/resolvers/worksheet/vas-transactions/relabeling/relabeling.ts +105 -0
- package/server/graphql/resolvers/worksheet/vas-transactions/relabeling/undo-relabeling.ts +40 -0
- package/server/graphql/resolvers/worksheet/vas-transactions/repackaging/complete-repackaging.ts +236 -0
- package/server/graphql/resolvers/worksheet/vas-transactions/repackaging/index.ts +3 -0
- package/server/graphql/resolvers/worksheet/vas-transactions/repackaging/repackaging.ts +402 -0
- package/server/graphql/resolvers/worksheet/vas-transactions/repackaging/undo-repackaging.ts +166 -0
- package/server/graphql/resolvers/worksheet/vas-transactions/repalletizing/complete-repalletizing.ts +116 -0
- package/server/graphql/resolvers/worksheet/vas-transactions/repalletizing/index.ts +3 -0
- package/server/graphql/resolvers/worksheet/vas-transactions/repalletizing/repalletizing.ts +167 -0
- package/server/graphql/resolvers/worksheet/vas-transactions/repalletizing/undo-repalletizing.ts +74 -0
- package/server/graphql/resolvers/worksheet/vas-transactions/unpacking/complete-unpacking.ts +20 -0
- package/server/graphql/resolvers/worksheet/vas-transactions/unpacking/index.ts +2 -0
- package/server/graphql/resolvers/worksheet/vas-transactions/unpacking/unpacking.ts +164 -0
- package/server/graphql/resolvers/worksheet/vas-worksheet.ts +110 -0
- package/server/graphql/resolvers/worksheet/worksheet-by-order-no.ts +43 -0
- package/server/graphql/resolvers/worksheet/worksheet-with-pagination.ts +46 -0
- package/server/graphql/resolvers/worksheet/worksheet.ts +330 -0
- package/server/graphql/resolvers/worksheet/worksheets.ts +493 -0
- package/server/graphql/resolvers/worksheet-detail/check-progressing-pallet.ts +22 -0
- package/server/graphql/resolvers/worksheet-detail/create-worksheet-detail.ts +38 -0
- package/server/graphql/resolvers/worksheet-detail/delete-worksheet-detail.ts +18 -0
- package/server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.ts +206 -0
- package/server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.ts +165 -0
- package/server/graphql/resolvers/worksheet-detail/generate-carton-id.ts +26 -0
- package/server/graphql/resolvers/worksheet-detail/generate-pallet-id.ts +94 -0
- package/server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.ts +259 -0
- package/server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.ts +142 -0
- package/server/graphql/resolvers/worksheet-detail/index.ts +34 -0
- package/server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.ts +165 -0
- package/server/graphql/resolvers/worksheet-detail/update-worksheet-detail.ts +39 -0
- package/server/graphql/resolvers/worksheet-detail/worksheet-detail.ts +19 -0
- package/server/graphql/resolvers/worksheet-detail/worksheet-details-by-product-group.ts +56 -0
- package/server/graphql/resolvers/worksheet-detail/worksheet-details.ts +21 -0
- package/server/graphql/resolvers/worksheet-movement/create-worksheet-movement.ts +17 -0
- package/server/graphql/resolvers/worksheet-movement/delete-worksheet-movement.ts +12 -0
- package/server/graphql/resolvers/worksheet-movement/index.ts +17 -0
- package/server/graphql/resolvers/worksheet-movement/update-worksheet-movement.ts +15 -0
- package/server/graphql/resolvers/worksheet-movement/worksheet-movement.ts +10 -0
- package/server/graphql/resolvers/worksheet-movement/worksheet-movements.ts +14 -0
- package/server/graphql/types/index.ts +15 -0
- package/server/graphql/types/pallet/index.ts +12 -0
- package/server/graphql/types/pallet/pallet.ts +7 -0
- package/server/graphql/types/worksheet/arrival-notice-worksheet.ts +8 -0
- package/server/graphql/types/worksheet/batch-pick-worksheet-info.ts +9 -0
- package/server/graphql/types/worksheet/contact-point-info.ts +12 -0
- package/server/graphql/types/worksheet/cycle-count-worksheet.ts +16 -0
- package/server/graphql/types/worksheet/delivery-info.ts +11 -0
- package/server/graphql/types/worksheet/delivery-order-info.ts +25 -0
- package/server/graphql/types/worksheet/delivery-order-ro.ts +15 -0
- package/server/graphql/types/worksheet/delivery-worksheet.ts +7 -0
- package/server/graphql/types/worksheet/executing-worksheet.ts +8 -0
- package/server/graphql/types/worksheet/find-release-orders-by-task-no.ts +8 -0
- package/server/graphql/types/worksheet/goods-delivery-note.ts +8 -0
- package/server/graphql/types/worksheet/index.ts +750 -0
- package/server/graphql/types/worksheet/inventory-check-worksheet.ts +7 -0
- package/server/graphql/types/worksheet/loaded-worksheet-detail.ts +9 -0
- package/server/graphql/types/worksheet/multiple-release-good-worksheet.ts +8 -0
- package/server/graphql/types/worksheet/my-picking-assignment-status.ts +9 -0
- package/server/graphql/types/worksheet/new-worksheet.ts +10 -0
- package/server/graphql/types/worksheet/picking-assignment-status.ts +9 -0
- package/server/graphql/types/worksheet/product-approval.ts +11 -0
- package/server/graphql/types/worksheet/release-good-worksheet.ts +8 -0
- package/server/graphql/types/worksheet/return-order-worksheet.ts +8 -0
- package/server/graphql/types/worksheet/sellercraft-document.ts +8 -0
- package/server/graphql/types/worksheet/vas-order-worksheet.ts +7 -0
- package/server/graphql/types/worksheet/vas-worksheet.ts +8 -0
- package/server/graphql/types/worksheet/worksheet-detail-info.ts +68 -0
- package/server/graphql/types/worksheet/worksheet-info.ts +33 -0
- package/server/graphql/types/worksheet/worksheet-list.ts +8 -0
- package/server/graphql/types/worksheet/worksheet-patch.ts +19 -0
- package/server/graphql/types/worksheet/worksheet-with-pagination.ts +9 -0
- package/server/graphql/types/worksheet/worksheet.ts +34 -0
- package/server/graphql/types/worksheet-detail/index.ts +81 -0
- package/server/graphql/types/worksheet-detail/inventory-detail.ts +39 -0
- package/server/graphql/types/worksheet-detail/new-worksheet-detail.ts +20 -0
- package/server/graphql/types/worksheet-detail/pallet-info.ts +8 -0
- package/server/graphql/types/worksheet-detail/worksheet-detail-list.ts +8 -0
- package/server/graphql/types/worksheet-detail/worksheet-detail-patch.ts +28 -0
- package/server/graphql/types/worksheet-detail/worksheet-detail.ts +29 -0
- package/server/graphql/types/worksheet-movement/index.ts +30 -0
- package/server/graphql/types/worksheet-movement/new-worksheet-movement.ts +8 -0
- package/server/graphql/types/worksheet-movement/worksheet-movement-list.ts +8 -0
- package/server/graphql/types/worksheet-movement/worksheet-movement-patch.ts +8 -0
- package/server/graphql/types/worksheet-movement/worksheet-movement.ts +10 -0
- package/server/index.ts +14 -0
- package/server/middlewares/index.ts +3 -0
- package/server/migrations/index.ts +9 -0
- package/server/routes.ts +80 -0
- package/server/utils/datetime-util.ts +54 -0
- package/server/utils/index.ts +4 -0
- package/server/utils/inventory-util.ts +390 -0
- package/server/utils/worksheet-no-generator.ts +206 -0
- package/server/utils/worksheet-util.ts +85 -0
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { EntityManager } from 'typeorm'
|
|
2
|
+
|
|
3
|
+
import { Bizplace } from '@things-factory/biz-base'
|
|
4
|
+
import { OrderVas, VasOrder } from '@things-factory/sales-base'
|
|
5
|
+
import { Domain } from '@things-factory/shell'
|
|
6
|
+
import { Inventory } from '@things-factory/warehouse-base'
|
|
7
|
+
|
|
8
|
+
import { Worksheet, WorksheetDetail } from '../../../../../entities'
|
|
9
|
+
import { getWorksheetDetailByName, updateRelatedOrderVas } from '../common-utils'
|
|
10
|
+
import {
|
|
11
|
+
FeaturedInventoryInterface,
|
|
12
|
+
OperationGuideInterface,
|
|
13
|
+
PackingUnits,
|
|
14
|
+
RefOrderType,
|
|
15
|
+
RepackagingGuide,
|
|
16
|
+
RepackedInvInfo,
|
|
17
|
+
TemporaryPalletChangesInterface
|
|
18
|
+
} from '../interfaces'
|
|
19
|
+
|
|
20
|
+
/** STEPS TO UNDO REPACKAGING
|
|
21
|
+
* 1. get the pallet id to undo (pallet id must be the LV one and not the parent)
|
|
22
|
+
* 2. revert the qty of repackedFrom into the original inventory and featuredInv (if applicable)
|
|
23
|
+
* 3. remove the repackedInv for undo item
|
|
24
|
+
* 4. update the requiredPkgQty
|
|
25
|
+
*
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
export const undoRepackagingResolver = {
|
|
29
|
+
async undoRepackaging(_: any, { worksheetDetailName, fromPalletId, toPalletId }, context: ResolverContext) {
|
|
30
|
+
/**
|
|
31
|
+
* Initialize required variables
|
|
32
|
+
*/
|
|
33
|
+
const { tx, domain, user } = context.state
|
|
34
|
+
const wsd: WorksheetDetail = await getWorksheetDetailByName(tx, domain, worksheetDetailName)
|
|
35
|
+
const bizplace: Bizplace = wsd.bizplace
|
|
36
|
+
const targetVas: OrderVas = wsd.targetVas
|
|
37
|
+
const { arrivalNotice, releaseGood, vasOrder } = targetVas
|
|
38
|
+
const refOrder: RefOrderType = arrivalNotice || releaseGood || vasOrder
|
|
39
|
+
|
|
40
|
+
let operationGuide: OperationGuideInterface<RepackagingGuide> = JSON.parse(targetVas.operationGuide)
|
|
41
|
+
let operationGuideData: RepackagingGuide = operationGuide.data
|
|
42
|
+
let repackedInvs: RepackedInvInfo[] = operationGuideData.repackedInvs
|
|
43
|
+
//@ts-ignore
|
|
44
|
+
let featuredInvs: FeaturedInventoryInterface[] = operationGuideData.featuredInvs
|
|
45
|
+
let undoInventory: RepackedInvInfo = repackedInvs.find((ri: RepackedInvInfo) => ri.palletId === toPalletId)
|
|
46
|
+
if (!undoInventory) throw new Error(`Couldn't find pallet, using pallet id (${toPalletId})`)
|
|
47
|
+
|
|
48
|
+
const packingUnit: string = operationGuideData.packingUnit
|
|
49
|
+
const stdAmount: number = operationGuideData.stdAmount
|
|
50
|
+
|
|
51
|
+
// undoInventory.repackedFrom = undoInventory.repackedFrom.filter(
|
|
52
|
+
// (rf: TemporaryPalletChangesInterface) => rf.fromPalletId !== fromPalletId
|
|
53
|
+
// )
|
|
54
|
+
|
|
55
|
+
// 완전히 Repacked 상태인 pallet count
|
|
56
|
+
// const repackedPkgQty: number =
|
|
57
|
+
// undoInventory.repackedFrom.reduce((totalAmount: number, rf: TemporaryPalletChangesInterface) => {
|
|
58
|
+
// const amount: number = packingUnit === PackingUnits.QTY ? rf.reducedUnitQty : rf.reducedUomValue
|
|
59
|
+
// totalAmount += amount
|
|
60
|
+
// return totalAmount
|
|
61
|
+
// }, 0) / stdAmount
|
|
62
|
+
|
|
63
|
+
// Undo를 발생한 수량 차이를 계산
|
|
64
|
+
// undoInventory.repackedPkgQty = repackedPkgQty
|
|
65
|
+
|
|
66
|
+
const updatedRepackedInvs: RepackedInvInfo[] = repackedInvs.filter(
|
|
67
|
+
(ri: RepackedInvInfo) => ri.palletId !== toPalletId
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
const updatedFeaturedInvs: FeaturedInventoryInterface[] = featuredInvs.reduce(
|
|
71
|
+
(inventories: FeaturedInventoryInterface[], currInv: FeaturedInventoryInterface) => {
|
|
72
|
+
undoInventory.repackedFrom.forEach(undoInv => {
|
|
73
|
+
if (undoInv.fromPalletId == currInv.palletId) {
|
|
74
|
+
if (packingUnit == PackingUnits.QTY) {
|
|
75
|
+
currInv.currentUnitQty += undoInv.reducedUnitQty
|
|
76
|
+
} else if (packingUnit == PackingUnits.UOM) {
|
|
77
|
+
currInv.currentUomValue += undoInv.reducedUomValue
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
})
|
|
81
|
+
|
|
82
|
+
inventories.push(currInv)
|
|
83
|
+
return inventories
|
|
84
|
+
},
|
|
85
|
+
[]
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
const requiredPackageQty: number = await getRequiredPackageQty(
|
|
89
|
+
tx,
|
|
90
|
+
domain,
|
|
91
|
+
bizplace,
|
|
92
|
+
wsd.worksheet,
|
|
93
|
+
targetVas,
|
|
94
|
+
packingUnit,
|
|
95
|
+
stdAmount
|
|
96
|
+
)
|
|
97
|
+
const repackedPackageQty: number = getRepackedPackageQty(updatedRepackedInvs)
|
|
98
|
+
|
|
99
|
+
operationGuide.data.requiredPackageQty = requiredPackageQty - repackedPackageQty
|
|
100
|
+
//@ts-ignore
|
|
101
|
+
operationGuide.data.featuredInvs = updatedFeaturedInvs
|
|
102
|
+
operationGuide.data.repackedInvs = updatedRepackedInvs
|
|
103
|
+
|
|
104
|
+
if (!(refOrder instanceof VasOrder)) {
|
|
105
|
+
// const palletChanges: TemporaryPalletChangesInterface[] = operationGuide.data.repackedInvs
|
|
106
|
+
// .map((ri: RepackedInvInfo) => ri.repackedFrom)
|
|
107
|
+
// .flat()
|
|
108
|
+
|
|
109
|
+
const palletChanges: TemporaryPalletChangesInterface[] = []
|
|
110
|
+
// await dismissInventory(tx, wsd, targetVas, palletChanges, fromPalletId)
|
|
111
|
+
}
|
|
112
|
+
// Update every order vas to share same operation guide
|
|
113
|
+
await updateRelatedOrderVas(tx, domain, bizplace, wsd, targetVas, operationGuide, user)
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function getRepackedPackageQty(repackedInvs: RepackedInvInfo[]): number {
|
|
118
|
+
return repackedInvs.reduce((repackedPkgQty: number, ri: RepackedInvInfo) => (repackedPkgQty += ri.repackedPkgQty), 0)
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* @description Get total required package qty to complete this Repackagine VAS Task.
|
|
123
|
+
*
|
|
124
|
+
* @param {EntityManager} tx
|
|
125
|
+
* @param {Domain} domain
|
|
126
|
+
* @param {Bizplace} bizplace
|
|
127
|
+
* @param {Worksheet} worksheet
|
|
128
|
+
* @param {String} packingUnit
|
|
129
|
+
* @param {Number} stdAmount
|
|
130
|
+
*/
|
|
131
|
+
async function getRequiredPackageQty(
|
|
132
|
+
tx: EntityManager,
|
|
133
|
+
domain: Domain,
|
|
134
|
+
bizplace: Bizplace,
|
|
135
|
+
worksheet: Worksheet,
|
|
136
|
+
currentOV: OrderVas,
|
|
137
|
+
packingUnit: string,
|
|
138
|
+
stdAmount: number
|
|
139
|
+
): Promise<number> {
|
|
140
|
+
const relatedWSDs: WorksheetDetail[] = await tx.getRepository(WorksheetDetail).find({
|
|
141
|
+
where: { domain: { id: domain.id }, bizplace: { id: bizplace.id }, worksheet: { id: worksheet.id } },
|
|
142
|
+
relations: ['targetVas', 'targetVas.vas', 'targetVas.inventory']
|
|
143
|
+
})
|
|
144
|
+
|
|
145
|
+
const orderVASs: OrderVas[] = relatedWSDs.map((wsd: WorksheetDetail) => wsd.targetVas)
|
|
146
|
+
const { qty, uomValue } = orderVASs
|
|
147
|
+
.filter((ov: OrderVas) => ov.set === currentOV.set && ov.vas.id === currentOV.vas.id)
|
|
148
|
+
.reduce(
|
|
149
|
+
(total: { qty: number; uomValue: number }, ov: OrderVas) => {
|
|
150
|
+
const inventory: Inventory = ov.inventory
|
|
151
|
+
const packingSize: number = inventory.packingSize
|
|
152
|
+
|
|
153
|
+
total.qty += ov.qty * packingSize
|
|
154
|
+
total.uomValue += ov.uomValue
|
|
155
|
+
|
|
156
|
+
return total
|
|
157
|
+
},
|
|
158
|
+
{ qty: 0, uomValue: 0 }
|
|
159
|
+
)
|
|
160
|
+
|
|
161
|
+
if (packingUnit === PackingUnits.QTY) {
|
|
162
|
+
return qty / stdAmount
|
|
163
|
+
} else if (packingUnit === PackingUnits.UOM) {
|
|
164
|
+
return uomValue / stdAmount
|
|
165
|
+
}
|
|
166
|
+
}
|
package/server/graphql/resolvers/worksheet/vas-transactions/repalletizing/complete-repalletizing.ts
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { EntityManager } from 'typeorm'
|
|
2
|
+
|
|
3
|
+
import { User } from '@things-factory/auth-base'
|
|
4
|
+
import { Bizplace } from '@things-factory/biz-base'
|
|
5
|
+
import { ArrivalNotice, OrderVas, ReleaseGood } from '@things-factory/sales-base'
|
|
6
|
+
import { Domain } from '@things-factory/shell'
|
|
7
|
+
import { Inventory, INVENTORY_TRANSACTION_TYPE } from '@things-factory/warehouse-base'
|
|
8
|
+
|
|
9
|
+
import {
|
|
10
|
+
createLoadingWorksheet,
|
|
11
|
+
createPutawayWorksheet,
|
|
12
|
+
deductProductAmount,
|
|
13
|
+
getCurrentAmount,
|
|
14
|
+
upsertInventory
|
|
15
|
+
} from '../common-utils'
|
|
16
|
+
import {
|
|
17
|
+
OperationGuideInterface,
|
|
18
|
+
PalletChangesInterface,
|
|
19
|
+
RefOrderType,
|
|
20
|
+
RepalletizedInvInfo,
|
|
21
|
+
RepalletizingGuide
|
|
22
|
+
} from '../interfaces'
|
|
23
|
+
|
|
24
|
+
export async function completeRepalletizing(trxMgr: EntityManager, orderVas: OrderVas, user: User): Promise<void> {
|
|
25
|
+
orderVas = await trxMgr.getRepository(OrderVas).findOne({
|
|
26
|
+
where: { id: orderVas.id },
|
|
27
|
+
relations: ['domain', 'bizplace', 'inventory', 'inventory.product', 'arrivalNotice', 'releaseGood', 'vasOrder']
|
|
28
|
+
})
|
|
29
|
+
const domain: Domain = orderVas.domain
|
|
30
|
+
const bizplace: Bizplace = orderVas.bizplace
|
|
31
|
+
let originInv: Inventory = orderVas.inventory
|
|
32
|
+
const operationGuide: OperationGuideInterface<RepalletizingGuide> = JSON.parse(orderVas.operationGuide)
|
|
33
|
+
const operationGuideData: RepalletizingGuide = operationGuide.data
|
|
34
|
+
const { arrivalNotice, releaseGood, vasOrder } = orderVas
|
|
35
|
+
const refOrder: RefOrderType = arrivalNotice || releaseGood || vasOrder
|
|
36
|
+
|
|
37
|
+
// Check completion of new pallets
|
|
38
|
+
if (!checkCompletion(operationGuideData)) {
|
|
39
|
+
throw new Error(`There's repalletized pallet which doesn't have as many as standard qty`)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// create repalletized inventories based on repalletizedInvs
|
|
43
|
+
const repalletizedInvs: RepalletizedInvInfo[] = extractRepackedInvs(operationGuideData, originInv)
|
|
44
|
+
for (const ri of repalletizedInvs) {
|
|
45
|
+
const repalletizedFromList: PalletChangesInterface[] = ri.repalletizedFrom.filter(
|
|
46
|
+
(rf: PalletChangesInterface) => rf.toPalletId === ri.palletId
|
|
47
|
+
)
|
|
48
|
+
const { qty, uomValue } = getCurrentAmount(repalletizedFromList, ri.palletId)
|
|
49
|
+
const changedInv: Inventory = await upsertInventory(
|
|
50
|
+
trxMgr,
|
|
51
|
+
domain,
|
|
52
|
+
bizplace,
|
|
53
|
+
user,
|
|
54
|
+
originInv,
|
|
55
|
+
refOrder,
|
|
56
|
+
ri.palletId,
|
|
57
|
+
ri.locationName,
|
|
58
|
+
originInv.packingType,
|
|
59
|
+
qty,
|
|
60
|
+
uomValue,
|
|
61
|
+
INVENTORY_TRANSACTION_TYPE.REPALLETIZING
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
// Deduct amount of product on original pallet or order inventory (Case for release order)
|
|
65
|
+
originInv = await deductProductAmount(
|
|
66
|
+
trxMgr,
|
|
67
|
+
domain,
|
|
68
|
+
bizplace,
|
|
69
|
+
user,
|
|
70
|
+
refOrder,
|
|
71
|
+
originInv,
|
|
72
|
+
qty,
|
|
73
|
+
uomValue,
|
|
74
|
+
INVENTORY_TRANSACTION_TYPE.REPALLETIZING
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
// Create worksheet if it's related with Arrival Notice or Release Order
|
|
78
|
+
if (refOrder instanceof ArrivalNotice) {
|
|
79
|
+
await createPutawayWorksheet(trxMgr, domain, bizplace, user, refOrder, originInv, changedInv)
|
|
80
|
+
} else if (refOrder instanceof ReleaseGood) {
|
|
81
|
+
//@ts-ignore
|
|
82
|
+
await createLoadingWorksheet(trxMgr, domain, bizplace, user, refOrder, originInv, changedInv)
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* @description Check whether every repalletized pallet has products as many as standard qty.
|
|
89
|
+
* @param operationGuideData
|
|
90
|
+
*/
|
|
91
|
+
function checkCompletion(operationGuideData: RepalletizingGuide): boolean {
|
|
92
|
+
const stdQty: number = operationGuideData.stdQty
|
|
93
|
+
return operationGuideData.repalletizedInvs.every((ri: RepalletizedInvInfo) => {
|
|
94
|
+
const totalQty: number = ri.repalletizedFrom.reduce(
|
|
95
|
+
(totalQty: number, rf: PalletChangesInterface) => (totalQty += rf.reducedQty),
|
|
96
|
+
0
|
|
97
|
+
)
|
|
98
|
+
return totalQty === stdQty
|
|
99
|
+
})
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function extractRepackedInvs(operationGuideData: RepalletizingGuide, originInv: Inventory): RepalletizedInvInfo[] {
|
|
103
|
+
return operationGuideData.repalletizedInvs
|
|
104
|
+
.filter((ri: RepalletizedInvInfo) => {
|
|
105
|
+
const isPalletIncluded: boolean = Boolean(
|
|
106
|
+
ri.repalletizedFrom.find((rf: PalletChangesInterface) => rf.fromPalletId === originInv.palletId)
|
|
107
|
+
)
|
|
108
|
+
if (isPalletIncluded) return ri
|
|
109
|
+
})
|
|
110
|
+
.map((ri: RepalletizedInvInfo) => {
|
|
111
|
+
ri.repalletizedFrom = ri.repalletizedFrom.filter(
|
|
112
|
+
(rf: PalletChangesInterface) => rf.fromPalletId === originInv.palletId
|
|
113
|
+
)
|
|
114
|
+
return ri
|
|
115
|
+
})
|
|
116
|
+
}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { Bizplace } from '@things-factory/biz-base'
|
|
2
|
+
import { OrderVas } from '@things-factory/sales-base'
|
|
3
|
+
import { Inventory, Location, Pallet, PALLET_TYPES, Warehouse } from '@things-factory/warehouse-base'
|
|
4
|
+
|
|
5
|
+
import { WorksheetDetail } from '../../../../../entities'
|
|
6
|
+
import { checkPalletDuplication, checkPalletIdenticallity } from '../../../../../utils'
|
|
7
|
+
import { executeVas } from '../../vas/execute-vas'
|
|
8
|
+
import {
|
|
9
|
+
assignInventory,
|
|
10
|
+
getCurrentAmount,
|
|
11
|
+
getRemainInventoryAmount,
|
|
12
|
+
getWorksheetDetailByName,
|
|
13
|
+
updateRelatedOrderVas
|
|
14
|
+
} from '../common-utils'
|
|
15
|
+
import {
|
|
16
|
+
OperationGuideInterface,
|
|
17
|
+
PalletChangesInterface,
|
|
18
|
+
RefOrderType,
|
|
19
|
+
RepalletizedInvInfo,
|
|
20
|
+
RepalletizingGuide
|
|
21
|
+
} from '../interfaces'
|
|
22
|
+
|
|
23
|
+
export const repalletizingResolver = {
|
|
24
|
+
async repalletizing(
|
|
25
|
+
_: any,
|
|
26
|
+
{ worksheetDetailName, fromPalletId, toPalletId, locationName },
|
|
27
|
+
context: ResolverContext
|
|
28
|
+
) {
|
|
29
|
+
const { tx, domain, user } = context.state
|
|
30
|
+
const location: Location = await tx.getRepository(Location).findOne({
|
|
31
|
+
where: { domain: { id: domain.id }, name: locationName },
|
|
32
|
+
relations: ['warehouse']
|
|
33
|
+
})
|
|
34
|
+
if (!location) throw new Error(`Couldn't find location by its name (${locationName})`)
|
|
35
|
+
const warehouse: Warehouse = location.warehouse
|
|
36
|
+
if (!warehouse) throw new Error(`Location (name: ${locationName}) doesn't have any relation with warehouse`)
|
|
37
|
+
|
|
38
|
+
const wsd: WorksheetDetail = await getWorksheetDetailByName(tx, domain, worksheetDetailName)
|
|
39
|
+
let { bizplace, targetVas }: { bizplace: Bizplace; targetVas: OrderVas } = wsd
|
|
40
|
+
|
|
41
|
+
// Check whether from pallet has valid condition compared with customer's request
|
|
42
|
+
// Batch ID, product and packing type
|
|
43
|
+
const { identicallity, errorMessage } = await checkPalletIdenticallity(
|
|
44
|
+
domain,
|
|
45
|
+
bizplace,
|
|
46
|
+
fromPalletId,
|
|
47
|
+
targetVas.targetBatchId,
|
|
48
|
+
targetVas.targetProduct,
|
|
49
|
+
targetVas.packingType,
|
|
50
|
+
tx
|
|
51
|
+
)
|
|
52
|
+
if (!identicallity) throw new Error(errorMessage)
|
|
53
|
+
|
|
54
|
+
// Check whether there's duplicated inventory in warehouse.
|
|
55
|
+
if (await checkPalletDuplication(domain, bizplace, toPalletId, tx))
|
|
56
|
+
throw new Error(`The Pallet ID (${toPalletId}) is duplicated.`)
|
|
57
|
+
|
|
58
|
+
// Init refOrder
|
|
59
|
+
//@ts-ignore
|
|
60
|
+
const { arrivalNotice, releaseGood, vasOrder }: { [key: string]: RefOrderType } = targetVas
|
|
61
|
+
const refOrder: RefOrderType = arrivalNotice || releaseGood || vasOrder || null
|
|
62
|
+
if (!refOrder) throw new Error(`Couldn't find reference order with current order vas`)
|
|
63
|
+
|
|
64
|
+
// Assign inventory if specific inventory isn't assigned yet.
|
|
65
|
+
// This case is occured when the VAS order comes with Arrival Notice or Release Good
|
|
66
|
+
if (!targetVas.inventory) {
|
|
67
|
+
//@ts-ignore
|
|
68
|
+
targetVas = await assignInventory(tx, domain, bizplace, user, wsd, refOrder, targetVas, fromPalletId)
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
let originInv: Inventory = targetVas.inventory
|
|
72
|
+
let operationGuide: OperationGuideInterface<RepalletizingGuide> = JSON.parse(targetVas.operationGuide)
|
|
73
|
+
let operationGuideData: RepalletizingGuide = operationGuide.data
|
|
74
|
+
|
|
75
|
+
const palletType: string = operationGuideData.palletType
|
|
76
|
+
if (palletType === PALLET_TYPES.REUSABLE_PALLET) {
|
|
77
|
+
// Check whether the pallet is available
|
|
78
|
+
const pallet: Pallet = await tx.getRepository(Pallet).findOne({
|
|
79
|
+
where: { domain: { id: domain.id }, name: toPalletId },
|
|
80
|
+
relations: ['inventory']
|
|
81
|
+
})
|
|
82
|
+
if (!pallet) throw new Error(`Couldn't find reusable pallet by its ID (${toPalletId})`)
|
|
83
|
+
if (pallet.inventory) throw new Error(`The pallet (${toPalletId}) is located already.`)
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
if (!operationGuideData.repalletizedInvs) operationGuideData.repalletizedInvs = []
|
|
87
|
+
const repalletizedInvs: RepalletizedInvInfo[] = operationGuideData.repalletizedInvs
|
|
88
|
+
// const palletChanges: PalletChangesInterface[] = repalletizedInvs
|
|
89
|
+
// .map((ri: RepalletizedInvInfo) => ri.repalletizedFrom)
|
|
90
|
+
// .flat()
|
|
91
|
+
|
|
92
|
+
const palletChanges: PalletChangesInterface[] = []
|
|
93
|
+
const { remainQty, remainUomValue } = await getRemainInventoryAmount(
|
|
94
|
+
tx,
|
|
95
|
+
refOrder,
|
|
96
|
+
domain,
|
|
97
|
+
bizplace,
|
|
98
|
+
originInv,
|
|
99
|
+
palletChanges,
|
|
100
|
+
fromPalletId
|
|
101
|
+
)
|
|
102
|
+
const unitUomValue: number = remainUomValue / remainQty
|
|
103
|
+
const stdQty: number = operationGuideData.stdQty
|
|
104
|
+
const { qty } = getCurrentAmount(palletChanges, toPalletId)
|
|
105
|
+
const requiredQty: number = stdQty - qty
|
|
106
|
+
if (requiredQty === 0) throw new Error(`The pallet (${toPalletId}) is repalletized already.`)
|
|
107
|
+
const reducedQty: number = remainQty >= requiredQty ? requiredQty : remainQty
|
|
108
|
+
|
|
109
|
+
const repalletizedInv: RepalletizedInvInfo = getRepalletizedInv(operationGuideData, toPalletId, locationName)
|
|
110
|
+
const repalletizedFrom: PalletChangesInterface = {
|
|
111
|
+
fromPalletId,
|
|
112
|
+
toPalletId,
|
|
113
|
+
reducedQty,
|
|
114
|
+
reducedUomValue: reducedQty * unitUomValue
|
|
115
|
+
}
|
|
116
|
+
repalletizedInv.repalletizedFrom.push(repalletizedFrom)
|
|
117
|
+
|
|
118
|
+
const isCompleted: boolean = qty + reducedQty === stdQty
|
|
119
|
+
let requiredPalletQty: number = isCompleted
|
|
120
|
+
? operationGuideData.requiredPalletQty - 1
|
|
121
|
+
: operationGuideData.requiredPalletQty
|
|
122
|
+
|
|
123
|
+
operationGuide.data = {
|
|
124
|
+
palletType: operationGuideData.palletType,
|
|
125
|
+
stdQty: operationGuideData.stdQty,
|
|
126
|
+
requiredPalletQty,
|
|
127
|
+
repalletizedInvs
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// Update every order vas to share same operation guide
|
|
131
|
+
await updateRelatedOrderVas<RepalletizingGuide>(tx, domain, bizplace, wsd, targetVas, operationGuide, user)
|
|
132
|
+
|
|
133
|
+
// If pallet is created completely
|
|
134
|
+
// If there's no more products on from pallet
|
|
135
|
+
if (remainQty - reducedQty === 0 || requiredPalletQty === 0) {
|
|
136
|
+
await executeVas(tx, domain, user, wsd)
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* @description Find repalletized pallet which has same pallet id with passed pallet id as param
|
|
143
|
+
* If there's no repalletized pallet init new RepalletizedInvInfo object and return it
|
|
144
|
+
*
|
|
145
|
+
* @param {RepalletizedInvInfo} operationGuideData
|
|
146
|
+
* @param {String} palletId
|
|
147
|
+
* @param {String} locationName
|
|
148
|
+
*/
|
|
149
|
+
function getRepalletizedInv(
|
|
150
|
+
operationGuideData: RepalletizingGuide,
|
|
151
|
+
palletId: string,
|
|
152
|
+
locationName: string
|
|
153
|
+
): RepalletizedInvInfo {
|
|
154
|
+
let repalletizedInv: RepalletizedInvInfo = operationGuideData.repalletizedInvs.find(
|
|
155
|
+
(ri: RepalletizedInvInfo) => ri.palletId === palletId
|
|
156
|
+
)
|
|
157
|
+
|
|
158
|
+
if (!repalletizedInv) {
|
|
159
|
+
repalletizedInv = {
|
|
160
|
+
palletId,
|
|
161
|
+
locationName,
|
|
162
|
+
repalletizedFrom: []
|
|
163
|
+
}
|
|
164
|
+
operationGuideData.repalletizedInvs.push(repalletizedInv)
|
|
165
|
+
}
|
|
166
|
+
return repalletizedInv
|
|
167
|
+
}
|
package/server/graphql/resolvers/worksheet/vas-transactions/repalletizing/undo-repalletizing.ts
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { Bizplace } from '@things-factory/biz-base'
|
|
2
|
+
import { OrderVas, VasOrder } from '@things-factory/sales-base'
|
|
3
|
+
|
|
4
|
+
import { WorksheetDetail } from '../../../../../entities'
|
|
5
|
+
import { dismissInventory, getWorksheetDetailByName, updateRelatedOrderVas } from '../common-utils'
|
|
6
|
+
import {
|
|
7
|
+
OperationGuideInterface,
|
|
8
|
+
PalletChangesInterface,
|
|
9
|
+
RefOrderType,
|
|
10
|
+
RepalletizedInvInfo,
|
|
11
|
+
RepalletizingGuide
|
|
12
|
+
} from '../interfaces'
|
|
13
|
+
|
|
14
|
+
export const undoRepalletizingResolver = {
|
|
15
|
+
async undoRepalletizing(_: any, { worksheetDetailName, fromPalletId, toPalletId }, context: ResolverContext) {
|
|
16
|
+
/**
|
|
17
|
+
* Initialize required variables
|
|
18
|
+
*/
|
|
19
|
+
const { tx, domain, user } = context.state
|
|
20
|
+
const wsd: WorksheetDetail = await getWorksheetDetailByName(tx, domain, worksheetDetailName)
|
|
21
|
+
const bizplace: Bizplace = wsd.bizplace
|
|
22
|
+
const targetVas: OrderVas = wsd.targetVas
|
|
23
|
+
const { arrivalNotice, releaseGood, vasOrder } = targetVas
|
|
24
|
+
const refOrder: RefOrderType = arrivalNotice || releaseGood || vasOrder
|
|
25
|
+
|
|
26
|
+
let operationGuide: OperationGuideInterface<RepalletizingGuide> = JSON.parse(targetVas.operationGuide)
|
|
27
|
+
let operationGuideData: RepalletizingGuide = operationGuide.data
|
|
28
|
+
let repalletizedInvs: RepalletizedInvInfo[] = operationGuideData.repalletizedInvs
|
|
29
|
+
let undoInventory: RepalletizedInvInfo = repalletizedInvs.find(
|
|
30
|
+
(ri: RepalletizedInvInfo) => ri.palletId === toPalletId
|
|
31
|
+
)
|
|
32
|
+
if (!undoInventory) throw new Error(`Couldn't find pallet, using pallet id (${toPalletId})`)
|
|
33
|
+
|
|
34
|
+
const stdQty: number = operationGuideData.stdQty
|
|
35
|
+
|
|
36
|
+
// If current undo pallet is completed pallet, plus 1 required pallet qty
|
|
37
|
+
const totalQty: number = undoInventory.repalletizedFrom.reduce(
|
|
38
|
+
(totalQty: number, rf: PalletChangesInterface) => (totalQty += rf.reducedQty),
|
|
39
|
+
0
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
if (totalQty === stdQty) {
|
|
43
|
+
operationGuideData.requiredPalletQty++
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
undoInventory.repalletizedFrom = undoInventory.repalletizedFrom.filter(
|
|
47
|
+
(rf: PalletChangesInterface) => rf.fromPalletId !== fromPalletId
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
let updatedRepalletizedInvs: RepalletizedInvInfo[]
|
|
51
|
+
if (!undoInventory.repalletizedFrom?.length) {
|
|
52
|
+
updatedRepalletizedInvs = repalletizedInvs.filter((ri: RepalletizedInvInfo) => ri.palletId !== toPalletId)
|
|
53
|
+
} else {
|
|
54
|
+
updatedRepalletizedInvs = repalletizedInvs.map((ri: RepalletizedInvInfo) => {
|
|
55
|
+
if (ri.palletId === toPalletId) {
|
|
56
|
+
ri = undoInventory
|
|
57
|
+
}
|
|
58
|
+
return ri
|
|
59
|
+
})
|
|
60
|
+
}
|
|
61
|
+
operationGuide.data.repalletizedInvs = updatedRepalletizedInvs
|
|
62
|
+
|
|
63
|
+
if (!(refOrder instanceof VasOrder)) {
|
|
64
|
+
// const palletChanges: PalletChangesInterface[] = operationGuide.data.repalletizedInvs
|
|
65
|
+
// .map((ri: RepalletizedInvInfo) => ri.repalletizedFrom)
|
|
66
|
+
// .flat()
|
|
67
|
+
const palletChanges: PalletChangesInterface[] = []
|
|
68
|
+
await dismissInventory(tx, wsd, targetVas, palletChanges, toPalletId)
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Update every order vas to share same operation guide
|
|
72
|
+
await updateRelatedOrderVas<RepalletizingGuide>(tx, domain, bizplace, wsd, targetVas, operationGuide, user)
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { EntityManager } from 'typeorm'
|
|
2
|
+
|
|
3
|
+
import { User } from '@things-factory/auth-base'
|
|
4
|
+
import { Bizplace } from '@things-factory/biz-base'
|
|
5
|
+
import { OrderVas } from '@things-factory/sales-base'
|
|
6
|
+
import { Domain } from '@things-factory/shell'
|
|
7
|
+
|
|
8
|
+
import { RefOrderType } from '../interfaces'
|
|
9
|
+
|
|
10
|
+
export async function completeUnpacking(trxMgr: EntityManager, orderVas: OrderVas, user: User): Promise<void> {
|
|
11
|
+
orderVas = await trxMgr.getRepository(OrderVas).findOne({
|
|
12
|
+
where: { id: orderVas.id },
|
|
13
|
+
relations: ['domain', 'bizplace', 'inventory', 'inventory.product', 'arrivalNotice', 'releaseGood', 'vasOrder']
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
const domain: Domain = orderVas.domain
|
|
17
|
+
const bizplace: Bizplace = orderVas.bizplace
|
|
18
|
+
const { arrivalNotice, releaseGood, vasOrder } = orderVas
|
|
19
|
+
const refOrder: RefOrderType = arrivalNotice || releaseGood || vasOrder
|
|
20
|
+
}
|