@things-factory/worksheet-base 5.0.12 → 6.0.0-alpha.0
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/ecommerce/sellercraft-controller.js +225 -191
- package/dist-server/controllers/ecommerce/sellercraft-controller.js.map +1 -1
- package/dist-server/controllers/inbound/unloading-returning-worksheet-controller.js +2 -2
- package/dist-server/controllers/inbound/unloading-returning-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/inbound/unloading-worksheet-controller.js +28 -17
- package/dist-server/controllers/inbound/unloading-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/inspect/cycle-count-worksheet-controller.js +1 -1
- package/dist-server/controllers/inspect/cycle-count-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/packing-worksheet-controller.js +17 -3
- package/dist-server/controllers/outbound/packing-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/picking-worksheet-controller.js +221 -144
- package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/returning-worksheet-controller.js +16 -0
- package/dist-server/controllers/outbound/returning-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/sorting-worksheet-controller.js +8 -8
- package/dist-server/controllers/outbound/sorting-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/render-elccl-grn.js +21 -16
- package/dist-server/controllers/render-elccl-grn.js.map +1 -1
- package/dist-server/controllers/render-fm-grn.js +43 -26
- package/dist-server/controllers/render-fm-grn.js.map +1 -1
- package/dist-server/controllers/render-grn.js +42 -28
- package/dist-server/controllers/render-grn.js.map +1 -1
- package/dist-server/controllers/render-invoices.js +4 -5
- package/dist-server/controllers/render-invoices.js.map +1 -1
- package/dist-server/controllers/render-job-sheet.js +19 -19
- package/dist-server/controllers/render-job-sheet.js.map +1 -1
- package/dist-server/controllers/render-kimeda-grn.js +38 -23
- package/dist-server/controllers/render-kimeda-grn.js.map +1 -1
- package/dist-server/controllers/render-manifest.js +8 -9
- package/dist-server/controllers/render-manifest.js.map +1 -1
- package/dist-server/controllers/render-manual-do.js +15 -15
- package/dist-server/controllers/render-manual-do.js.map +1 -1
- package/dist-server/controllers/render-orientage-do.js +74 -28
- package/dist-server/controllers/render-orientage-do.js.map +1 -1
- package/dist-server/controllers/render-orientage-grn.js +25 -15
- package/dist-server/controllers/render-orientage-grn.js.map +1 -1
- package/dist-server/controllers/render-po.js +28 -19
- package/dist-server/controllers/render-po.js.map +1 -1
- package/dist-server/controllers/render-ro-do.js +139 -105
- package/dist-server/controllers/render-ro-do.js.map +1 -1
- package/dist-server/controllers/render-seebuu-grn.js +29 -19
- package/dist-server/controllers/render-seebuu-grn.js.map +1 -1
- package/dist-server/controllers/vas/vas-worksheet-controller.js +5 -5
- package/dist-server/controllers/vas/vas-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/worksheet-controller.js +75 -25
- package/dist-server/controllers/worksheet-controller.js.map +1 -1
- package/dist-server/entities/warehouse-bizplace-onhand-inventory.js +2 -1
- package/dist-server/entities/warehouse-bizplace-onhand-inventory.js.map +1 -1
- package/dist-server/entities/worksheet-detail.js +14 -12
- package/dist-server/entities/worksheet-detail.js.map +1 -1
- package/dist-server/entities/worksheet-movement.js +1 -2
- package/dist-server/entities/worksheet-movement.js.map +1 -1
- package/dist-server/entities/worksheet.js +13 -13
- package/dist-server/entities/worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/pallet/pallet-outbound.js +1 -1
- package/dist-server/graphql/resolvers/pallet/pallet-outbound.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/batch-picking-worksheet.js +6 -6
- package/dist-server/graphql/resolvers/worksheet/batch-picking-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/cancel-draft-release-order.js +1 -1
- package/dist-server/graphql/resolvers/worksheet/cancel-draft-release-order.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/check-inventory-release.js +6 -5
- package/dist-server/graphql/resolvers/worksheet/check-inventory-release.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/check-stock-take-current-location.js +8 -8
- package/dist-server/graphql/resolvers/worksheet/check-stock-take-current-location.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/confirm-cancellation-release-order.js +82 -80
- package/dist-server/graphql/resolvers/worksheet/confirm-cancellation-release-order.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/create-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/cross-dock-picking.js +5 -4
- package/dist-server/graphql/resolvers/worksheet/cross-dock-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/cycle-count-adjustment.js +5 -5
- package/dist-server/graphql/resolvers/worksheet/cycle-count-adjustment.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/cycle-count-worksheet.js +5 -4
- package/dist-server/graphql/resolvers/worksheet/cycle-count-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/delete-worksheet.js +1 -1
- package/dist-server/graphql/resolvers/worksheet/delete-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/delivery-order-by-worksheet.js +83 -52
- package/dist-server/graphql/resolvers/worksheet/delivery-order-by-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/fetch-delivery-order-ro.js +169 -0
- package/dist-server/graphql/resolvers/worksheet/fetch-delivery-order-ro.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/fetch-sellercraft-document.js +67 -0
- package/dist-server/graphql/resolvers/worksheet/fetch-sellercraft-document.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/find-release-orders-by-task-no.js +1 -34
- package/dist-server/graphql/resolvers/worksheet/find-release-orders-by-task-no.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/find-release-orders-by-worksheet-no.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/find-sorting-release-orders-by-task-no.js +70 -0
- package/dist-server/graphql/resolvers/worksheet/find-sorting-release-orders-by-task-no.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-arrival-notice-worksheet.js +34 -3
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-arrival-notice-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-batch-picking-worksheet.js +4 -4
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-batch-picking-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-cycle-count-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.js +3 -3
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-partial-putaway-return-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-partial-putaway-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-putaway-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js +14 -10
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-return-order-worksheet.js +1 -1
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-return-order-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-vas-order-worksheet.js +1 -1
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-vas-order-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/having-vas.js +7 -7
- package/dist-server/graphql/resolvers/worksheet/having-vas.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/index.js +5 -3
- package/dist-server/graphql/resolvers/worksheet/index.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/inspecting/activate-cycle-count.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/inspecting/add-extra-pallet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/inspecting/check-missing-pallet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/inspecting/complete-inspection.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/inspecting/inspecting.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/inspecting/relocate-pallet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/inspecting/undo-inspection.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js +18 -9
- package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/loaded-inventories.js +6 -5
- package/dist-server/graphql/resolvers/worksheet/loaded-inventories.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/loading/activate-loading.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/loading/complete-loading.js +14 -14
- package/dist-server/graphql/resolvers/worksheet/loading/complete-loading.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/loading/loading.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/loading/undo-loading.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/loading-worksheet.js +11 -10
- package/dist-server/graphql/resolvers/worksheet/loading-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/not-tally-target-inventories.js +5 -4
- package/dist-server/graphql/resolvers/worksheet/not-tally-target-inventories.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/packing/activate-packing.js +3 -4
- package/dist-server/graphql/resolvers/worksheet/packing/activate-packing.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/packing/complete-packing.js +2 -2
- package/dist-server/graphql/resolvers/worksheet/packing/complete-packing.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/packing/packing.js +1 -1
- package/dist-server/graphql/resolvers/worksheet/packing/packing.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/packing/scan-product-packing.js +16 -11
- package/dist-server/graphql/resolvers/worksheet/packing/scan-product-packing.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/packing/undo-serial-number-packing.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js +96 -22
- package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/palletizing-pallets.js +5 -5
- package/dist-server/graphql/resolvers/worksheet/palletizing-pallets.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/pending-cancellation-release-order.js +93 -81
- package/dist-server/graphql/resolvers/worksheet/pending-cancellation-release-order.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/activate-batch-picking.js +0 -19
- package/dist-server/graphql/resolvers/worksheet/picking/activate-batch-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/activate-picking.js +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/activate-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/assign-picking-inventories.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/assign-picking-worker.js +11 -5
- package/dist-server/graphql/resolvers/worksheet/picking/assign-picking-worker.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/batch-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js +10 -4
- package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +34 -38
- package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.js +46 -35
- package/dist-server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/my-picking-assignment-status.js +7 -2
- package/dist-server/graphql/resolvers/worksheet/picking/my-picking-assignment-status.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/picking-assignment-status-by-user.js +33 -16
- package/dist-server/graphql/resolvers/worksheet/picking/picking-assignment-status-by-user.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/scan-product-batch-picking.js +4 -4
- package/dist-server/graphql/resolvers/worksheet/picking/scan-product-batch-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/scan-product-picking.js +5 -8
- package/dist-server/graphql/resolvers/worksheet/picking/scan-product-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/seal-tote.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/undo-picking-assignment.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/undo-serial-number-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js +6 -5
- package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/proceed-extra-products.js +10 -8
- package/dist-server/graphql/resolvers/worksheet/proceed-extra-products.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/putaway/activate-putaway.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/putaway/complete-putaway.js +4 -3
- package/dist-server/graphql/resolvers/worksheet/putaway/complete-putaway.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/putaway/putaway.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/putaway/undo-putaway.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/putaway-return/activate-putaway-return.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/putaway-return/complete-putaway-return.js +2 -1
- package/dist-server/graphql/resolvers/worksheet/putaway-return/complete-putaway-return.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/putaway-return/putaway-return.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/putaway-return/undo-putaway-return.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/putaway-returning-worksheet.js +3 -3
- package/dist-server/graphql/resolvers/worksheet/putaway-returning-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/putaway-worksheet.js +3 -3
- package/dist-server/graphql/resolvers/worksheet/putaway-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/recommend-putway-location.js +16 -11
- package/dist-server/graphql/resolvers/worksheet/recommend-putway-location.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/reject-cancellation-release-order.js +139 -149
- package/dist-server/graphql/resolvers/worksheet/reject-cancellation-release-order.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/relocate-pallet.js +1 -1
- package/dist-server/graphql/resolvers/worksheet/relocate-pallet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/replace-picking-pallets.js +2 -2
- package/dist-server/graphql/resolvers/worksheet/replace-picking-pallets.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/return-worksheet.js +3 -3
- package/dist-server/graphql/resolvers/worksheet/return-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/returning/activate-return.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/returning/complete-return.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/returning/returning.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/sorting/activate-sorting.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/sorting/complete-order-sorting.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/sorting/complete-worksheet-sorting.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/sorting/scan-product-sorting.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/sorting/sorting-product.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/sorting-worksheet.js +4 -4
- package/dist-server/graphql/resolvers/worksheet/sorting-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/transfer.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/unloaded-inventories-by-reusable-pallet.js +8 -7
- package/dist-server/graphql/resolvers/worksheet/unloaded-inventories-by-reusable-pallet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/unloaded-inventories.js +9 -8
- package/dist-server/graphql/resolvers/worksheet/unloaded-inventories.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/unloading/activate-unloading.js +4 -2
- package/dist-server/graphql/resolvers/worksheet/unloading/activate-unloading.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/unloading/complete-product-scan-unload.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/unloading/complete-unloading-partially.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/unloading/complete-unloading.js +6 -2
- package/dist-server/graphql/resolvers/worksheet/unloading/complete-unloading.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/unloading/scan-product-unload.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/unloading/scan-serial-number-unload.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/unloading/undo-serial-number-unload.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/unloading/undo-unloading.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/unloading/unload.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/unloading-return/activate-unloading-return.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/unloading-return/complete-unload-return-partially.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/unloading-return/complete-unload-returning.js +7 -3
- package/dist-server/graphql/resolvers/worksheet/unloading-return/complete-unload-returning.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/unloading-return-worksheet.js +3 -3
- package/dist-server/graphql/resolvers/worksheet/unloading-return-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/unloading-worksheet.js +5 -5
- package/dist-server/graphql/resolvers/worksheet/unloading-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/update-worksheet.js +1 -1
- package/dist-server/graphql/resolvers/worksheet/update-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/vas/activate-vas.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/vas/assign-vas-inventories.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/vas/complete-vas.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/vas/execute-vas.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/vas/undo-vas-inventory.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/vas/undo-vas.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/vas-candidates.js +13 -12
- package/dist-server/graphql/resolvers/worksheet/vas-candidates.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/vas-inventories.js +7 -6
- package/dist-server/graphql/resolvers/worksheet/vas-inventories.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/common-utils.js +36 -18
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/common-utils.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/relabeling/check-relabelable.js +10 -3
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/relabeling/check-relabelable.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/relabeling/complete-relabeling.js +3 -2
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/relabeling/complete-relabeling.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/relabeling/relabeling.js +11 -3
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/relabeling/relabeling.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/relabeling/undo-relabeling.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/complete-repackaging.js +3 -2
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/complete-repackaging.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/repackaging.js +2 -2
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/repackaging.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/undo-repackaging.js +1 -1
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/repackaging/undo-repackaging.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/repalletizing/complete-repalletizing.js +2 -1
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/repalletizing/complete-repalletizing.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/repalletizing/repalletizing.js +3 -3
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/repalletizing/repalletizing.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/repalletizing/undo-repalletizing.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/unpacking/complete-unpacking.js +2 -1
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/unpacking/complete-unpacking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/unpacking/unpacking.js +7 -7
- package/dist-server/graphql/resolvers/worksheet/vas-transactions/unpacking/unpacking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/vas-worksheet.js +11 -10
- package/dist-server/graphql/resolvers/worksheet/vas-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/worksheet-by-order-no.js +7 -4
- package/dist-server/graphql/resolvers/worksheet/worksheet-by-order-no.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/worksheet-with-pagination.js +5 -5
- package/dist-server/graphql/resolvers/worksheet/worksheet-with-pagination.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/worksheet.js +72 -42
- package/dist-server/graphql/resolvers/worksheet/worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/worksheets.js +42 -17
- package/dist-server/graphql/resolvers/worksheet/worksheets.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/check-progressing-pallet.js +3 -3
- package/dist-server/graphql/resolvers/worksheet-detail/check-progressing-pallet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/create-worksheet-detail.js +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/create-worksheet-detail.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/delete-worksheet-detail.js +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/delete-worksheet-detail.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.js +13 -10
- package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.js +7 -5
- package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/generate-carton-id.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/generate-pallet-id.js +3 -3
- package/dist-server/graphql/resolvers/worksheet-detail/generate-pallet-id.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.js +5 -2
- package/dist-server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.js +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/index.js +2 -1
- package/dist-server/graphql/resolvers/worksheet-detail/index.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.js +81 -0
- package/dist-server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet-detail/update-worksheet-detail.js +2 -2
- package/dist-server/graphql/resolvers/worksheet-detail/update-worksheet-detail.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/worksheet-detail.js +2 -2
- package/dist-server/graphql/resolvers/worksheet-detail/worksheet-detail.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/worksheet-details-by-product-group.js +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/worksheet-details-by-product-group.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/worksheet-details.js +2 -2
- package/dist-server/graphql/resolvers/worksheet-detail/worksheet-details.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-movement/create-worksheet-movement.js +1 -1
- package/dist-server/graphql/resolvers/worksheet-movement/create-worksheet-movement.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-movement/delete-worksheet-movement.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-movement/update-worksheet-movement.js +1 -1
- package/dist-server/graphql/resolvers/worksheet-movement/update-worksheet-movement.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-movement/worksheet-movement.js +1 -1
- package/dist-server/graphql/resolvers/worksheet-movement/worksheet-movement.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-movement/worksheet-movements.js +1 -1
- package/dist-server/graphql/resolvers/worksheet-movement/worksheet-movements.js.map +1 -1
- package/dist-server/graphql/types/worksheet/batch-pick-worksheet-info.js +12 -0
- package/dist-server/graphql/types/worksheet/batch-pick-worksheet-info.js.map +1 -0
- package/dist-server/graphql/types/worksheet/delivery-order-info.js +3 -0
- package/dist-server/graphql/types/worksheet/delivery-order-info.js.map +1 -1
- package/dist-server/graphql/types/worksheet/delivery-order-ro.js +18 -0
- package/dist-server/graphql/types/worksheet/delivery-order-ro.js.map +1 -0
- package/dist-server/graphql/types/worksheet/index.js +26 -15
- package/dist-server/graphql/types/worksheet/index.js.map +1 -1
- package/dist-server/graphql/types/worksheet/multiple-release-good-worksheet.js +11 -0
- package/dist-server/graphql/types/worksheet/multiple-release-good-worksheet.js.map +1 -0
- package/dist-server/graphql/types/worksheet/sellercraft-document.js +11 -0
- package/dist-server/graphql/types/worksheet/sellercraft-document.js.map +1 -0
- package/dist-server/graphql/types/worksheet-detail/index.js +10 -0
- package/dist-server/graphql/types/worksheet-detail/index.js.map +1 -1
- package/dist-server/graphql/types/worksheet-detail/inventory-detail.js +1 -0
- package/dist-server/graphql/types/worksheet-detail/inventory-detail.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/dist-server/utils/inventory-util.js +26 -20
- package/dist-server/utils/inventory-util.js.map +1 -1
- package/dist-server/utils/worksheet-util.js +8 -6
- package/dist-server/utils/worksheet-util.js.map +1 -1
- package/package.json +17 -17
- package/server/controllers/ecommerce/sellercraft-controller.ts +282 -223
- package/server/controllers/inbound/unloading-returning-worksheet-controller.ts +9 -17
- package/server/controllers/inbound/unloading-worksheet-controller.ts +55 -66
- package/server/controllers/inspect/cycle-count-worksheet-controller.ts +1 -1
- package/server/controllers/outbound/packing-worksheet-controller.ts +25 -4
- package/server/controllers/outbound/picking-worksheet-controller.ts +292 -172
- package/server/controllers/outbound/returning-worksheet-controller.ts +23 -0
- package/server/controllers/outbound/sorting-worksheet-controller.ts +20 -20
- package/server/controllers/render-elccl-grn.ts +16 -11
- package/server/controllers/render-fm-grn.ts +32 -14
- package/server/controllers/render-grn.ts +31 -16
- package/server/controllers/render-invoices.ts +3 -3
- package/server/controllers/render-job-sheet.ts +13 -11
- package/server/controllers/render-kimeda-grn.ts +28 -13
- package/server/controllers/render-manifest.ts +25 -24
- package/server/controllers/render-manual-do.ts +9 -10
- package/server/controllers/render-orientage-do.ts +79 -30
- package/server/controllers/render-orientage-grn.ts +30 -20
- package/server/controllers/render-po.ts +31 -20
- package/server/controllers/render-ro-do.ts +151 -124
- package/server/controllers/render-seebuu-grn.ts +21 -11
- package/server/controllers/vas/vas-worksheet-controller.ts +19 -20
- package/server/controllers/worksheet-controller.ts +97 -27
- package/server/entities/warehouse-bizplace-onhand-inventory.ts +2 -1
- package/server/entities/worksheet-detail.ts +9 -0
- package/server/graphql/resolvers/pallet/pallet-outbound.ts +5 -8
- package/server/graphql/resolvers/worksheet/batch-picking-worksheet.ts +8 -6
- package/server/graphql/resolvers/worksheet/cancel-draft-release-order.ts +4 -11
- package/server/graphql/resolvers/worksheet/check-inventory-release.ts +8 -7
- package/server/graphql/resolvers/worksheet/check-stock-take-current-location.ts +10 -8
- package/server/graphql/resolvers/worksheet/confirm-cancellation-release-order.ts +112 -138
- package/server/graphql/resolvers/worksheet/create-worksheet.ts +6 -8
- package/server/graphql/resolvers/worksheet/cross-dock-picking.ts +8 -7
- package/server/graphql/resolvers/worksheet/cycle-count-adjustment.ts +7 -7
- package/server/graphql/resolvers/worksheet/cycle-count-worksheet.ts +6 -6
- package/server/graphql/resolvers/worksheet/delete-worksheet.ts +5 -3
- package/server/graphql/resolvers/worksheet/delivery-order-by-worksheet.ts +87 -53
- package/server/graphql/resolvers/worksheet/fetch-delivery-order-ro.ts +190 -0
- package/server/graphql/resolvers/worksheet/fetch-sellercraft-document.ts +69 -0
- package/server/graphql/resolvers/worksheet/find-release-orders-by-task-no.ts +5 -45
- package/server/graphql/resolvers/worksheet/find-release-orders-by-worksheet-no.ts +5 -5
- 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 +45 -5
- package/server/graphql/resolvers/worksheet/generate-worksheet/generate-batch-picking-worksheet.ts +11 -10
- package/server/graphql/resolvers/worksheet/generate-worksheet/generate-cycle-count-worksheet.ts +1 -1
- package/server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.ts +7 -14
- package/server/graphql/resolvers/worksheet/generate-worksheet/generate-partial-putaway-return-worksheet.ts +10 -4
- package/server/graphql/resolvers/worksheet/generate-worksheet/generate-partial-putaway-worksheet.ts +10 -4
- package/server/graphql/resolvers/worksheet/generate-worksheet/generate-putaway-worksheet.ts +5 -3
- package/server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.ts +25 -29
- package/server/graphql/resolvers/worksheet/generate-worksheet/generate-return-order-worksheet.ts +6 -4
- package/server/graphql/resolvers/worksheet/generate-worksheet/generate-vas-order-worksheet.ts +6 -4
- package/server/graphql/resolvers/worksheet/having-vas.ts +10 -8
- package/server/graphql/resolvers/worksheet/index.ts +7 -3
- package/server/graphql/resolvers/worksheet/inspecting/activate-cycle-count.ts +5 -3
- package/server/graphql/resolvers/worksheet/inspecting/add-extra-pallet.ts +4 -2
- package/server/graphql/resolvers/worksheet/inspecting/check-missing-pallet.ts +5 -3
- package/server/graphql/resolvers/worksheet/inspecting/complete-inspection.ts +5 -3
- package/server/graphql/resolvers/worksheet/inspecting/inspecting.ts +9 -3
- package/server/graphql/resolvers/worksheet/inspecting/relocate-pallet.ts +16 -4
- package/server/graphql/resolvers/worksheet/inspecting/undo-inspection.ts +5 -3
- package/server/graphql/resolvers/worksheet/inventories-by-pallet.ts +34 -17
- package/server/graphql/resolvers/worksheet/loaded-inventories.ts +7 -6
- package/server/graphql/resolvers/worksheet/loading/activate-loading.ts +5 -3
- package/server/graphql/resolvers/worksheet/loading/complete-loading.ts +16 -16
- package/server/graphql/resolvers/worksheet/loading/loading.ts +5 -3
- package/server/graphql/resolvers/worksheet/loading/undo-loading.ts +5 -3
- package/server/graphql/resolvers/worksheet/loading-worksheet.ts +11 -11
- package/server/graphql/resolvers/worksheet/not-tally-target-inventories.ts +6 -6
- package/server/graphql/resolvers/worksheet/packing/activate-packing.ts +14 -13
- package/server/graphql/resolvers/worksheet/packing/complete-packing.ts +4 -4
- package/server/graphql/resolvers/worksheet/packing/packing.ts +3 -3
- package/server/graphql/resolvers/worksheet/packing/scan-product-packing.ts +21 -17
- package/server/graphql/resolvers/worksheet/packing/undo-serial-number-packing.ts +2 -2
- package/server/graphql/resolvers/worksheet/packing-worksheet.ts +102 -24
- package/server/graphql/resolvers/worksheet/palletizing-pallets.ts +10 -8
- package/server/graphql/resolvers/worksheet/pending-cancellation-release-order.ts +107 -97
- package/server/graphql/resolvers/worksheet/picking/activate-batch-picking.ts +3 -30
- package/server/graphql/resolvers/worksheet/picking/activate-picking.ts +3 -3
- package/server/graphql/resolvers/worksheet/picking/assign-picking-inventories.ts +23 -4
- package/server/graphql/resolvers/worksheet/picking/assign-picking-worker.ts +25 -17
- package/server/graphql/resolvers/worksheet/picking/batch-picking.ts +4 -2
- package/server/graphql/resolvers/worksheet/picking/complete-batch-picking.ts +15 -6
- package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +37 -42
- package/server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.ts +52 -42
- package/server/graphql/resolvers/worksheet/picking/my-picking-assignment-status.ts +15 -6
- package/server/graphql/resolvers/worksheet/picking/picking-assignment-status-by-user.ts +49 -35
- package/server/graphql/resolvers/worksheet/picking/picking.ts +4 -2
- package/server/graphql/resolvers/worksheet/picking/scan-product-batch-picking.ts +11 -6
- package/server/graphql/resolvers/worksheet/picking/scan-product-picking.ts +10 -35
- package/server/graphql/resolvers/worksheet/picking/seal-tote.ts +2 -2
- package/server/graphql/resolvers/worksheet/picking/undo-picking-assignment.ts +9 -3
- package/server/graphql/resolvers/worksheet/picking/undo-serial-number-picking.ts +2 -2
- package/server/graphql/resolvers/worksheet/picking-worksheet.ts +11 -11
- package/server/graphql/resolvers/worksheet/proceed-extra-products.ts +13 -13
- package/server/graphql/resolvers/worksheet/putaway/activate-putaway.ts +5 -3
- package/server/graphql/resolvers/worksheet/putaway/complete-putaway.ts +6 -5
- package/server/graphql/resolvers/worksheet/putaway/putaway.ts +5 -3
- package/server/graphql/resolvers/worksheet/putaway/undo-putaway.ts +5 -3
- package/server/graphql/resolvers/worksheet/putaway-return/activate-putaway-return.ts +5 -3
- package/server/graphql/resolvers/worksheet/putaway-return/complete-putaway-return.ts +13 -6
- package/server/graphql/resolvers/worksheet/putaway-return/putaway-return.ts +5 -3
- package/server/graphql/resolvers/worksheet/putaway-return/undo-putaway-return.ts +5 -3
- package/server/graphql/resolvers/worksheet/putaway-returning-worksheet.ts +4 -6
- package/server/graphql/resolvers/worksheet/putaway-worksheet.ts +4 -6
- package/server/graphql/resolvers/worksheet/recommend-putway-location.ts +20 -19
- package/server/graphql/resolvers/worksheet/reject-cancellation-release-order.ts +154 -220
- package/server/graphql/resolvers/worksheet/relocate-pallet.ts +6 -4
- package/server/graphql/resolvers/worksheet/replace-picking-pallets.ts +3 -7
- package/server/graphql/resolvers/worksheet/return-worksheet.ts +4 -6
- package/server/graphql/resolvers/worksheet/returning/activate-return.ts +5 -3
- package/server/graphql/resolvers/worksheet/returning/complete-return.ts +5 -3
- package/server/graphql/resolvers/worksheet/returning/returning.ts +5 -3
- package/server/graphql/resolvers/worksheet/sorting/activate-sorting.ts +5 -3
- package/server/graphql/resolvers/worksheet/sorting/complete-order-sorting.ts +7 -5
- package/server/graphql/resolvers/worksheet/sorting/complete-worksheet-sorting.ts +5 -3
- package/server/graphql/resolvers/worksheet/sorting/scan-product-sorting.ts +9 -3
- package/server/graphql/resolvers/worksheet/sorting/sorting-product.ts +9 -3
- package/server/graphql/resolvers/worksheet/sorting-worksheet.ts +5 -5
- package/server/graphql/resolvers/worksheet/transfer.ts +10 -12
- package/server/graphql/resolvers/worksheet/unloaded-inventories-by-reusable-pallet.ts +13 -7
- package/server/graphql/resolvers/worksheet/unloaded-inventories.ts +9 -9
- package/server/graphql/resolvers/worksheet/unloading/activate-unloading.ts +9 -5
- package/server/graphql/resolvers/worksheet/unloading/complete-product-scan-unload.ts +5 -3
- package/server/graphql/resolvers/worksheet/unloading/complete-unloading-partially.ts +5 -3
- package/server/graphql/resolvers/worksheet/unloading/complete-unloading.ts +8 -4
- package/server/graphql/resolvers/worksheet/unloading/scan-product-unload.ts +5 -3
- package/server/graphql/resolvers/worksheet/unloading/scan-serial-number-unload.ts +2 -2
- package/server/graphql/resolvers/worksheet/unloading/undo-serial-number-unload.ts +2 -2
- package/server/graphql/resolvers/worksheet/unloading/undo-unloading.ts +2 -2
- package/server/graphql/resolvers/worksheet/unloading/unload.ts +7 -7
- package/server/graphql/resolvers/worksheet/unloading-return/activate-unloading-return.ts +5 -3
- package/server/graphql/resolvers/worksheet/unloading-return/complete-unload-return-partially.ts +5 -3
- package/server/graphql/resolvers/worksheet/unloading-return/complete-unload-returning.ts +9 -5
- package/server/graphql/resolvers/worksheet/unloading-return-worksheet.ts +4 -6
- package/server/graphql/resolvers/worksheet/unloading-worksheet.ts +5 -7
- package/server/graphql/resolvers/worksheet/update-worksheet.ts +5 -5
- package/server/graphql/resolvers/worksheet/vas/activate-vas.ts +5 -3
- package/server/graphql/resolvers/worksheet/vas/assign-vas-inventories.ts +5 -3
- package/server/graphql/resolvers/worksheet/vas/complete-vas.ts +5 -3
- package/server/graphql/resolvers/worksheet/vas/execute-vas.ts +5 -3
- package/server/graphql/resolvers/worksheet/vas/undo-vas-inventory.ts +5 -3
- package/server/graphql/resolvers/worksheet/vas/undo-vas.ts +5 -3
- package/server/graphql/resolvers/worksheet/vas-candidates.ts +20 -17
- package/server/graphql/resolvers/worksheet/vas-inventories.ts +9 -7
- package/server/graphql/resolvers/worksheet/vas-transactions/common-utils.ts +36 -18
- package/server/graphql/resolvers/worksheet/vas-transactions/relabeling/check-relabelable.ts +12 -5
- package/server/graphql/resolvers/worksheet/vas-transactions/relabeling/complete-relabeling.ts +6 -3
- package/server/graphql/resolvers/worksheet/vas-transactions/relabeling/relabeling.ts +14 -6
- package/server/graphql/resolvers/worksheet/vas-transactions/relabeling/undo-relabeling.ts +5 -7
- package/server/graphql/resolvers/worksheet/vas-transactions/repackaging/complete-repackaging.ts +3 -2
- package/server/graphql/resolvers/worksheet/vas-transactions/repackaging/repackaging.ts +8 -5
- package/server/graphql/resolvers/worksheet/vas-transactions/repackaging/undo-repackaging.ts +6 -16
- package/server/graphql/resolvers/worksheet/vas-transactions/repalletizing/complete-repalletizing.ts +5 -2
- package/server/graphql/resolvers/worksheet/vas-transactions/repalletizing/repalletizing.ts +10 -8
- package/server/graphql/resolvers/worksheet/vas-transactions/repalletizing/undo-repalletizing.ts +3 -5
- package/server/graphql/resolvers/worksheet/vas-transactions/unpacking/complete-unpacking.ts +6 -6
- package/server/graphql/resolvers/worksheet/vas-transactions/unpacking/unpacking.ts +10 -13
- package/server/graphql/resolvers/worksheet/vas-worksheet.ts +13 -11
- package/server/graphql/resolvers/worksheet/worksheet-by-order-no.ts +13 -8
- package/server/graphql/resolvers/worksheet/worksheet-with-pagination.ts +7 -5
- package/server/graphql/resolvers/worksheet/worksheet.ts +86 -32
- package/server/graphql/resolvers/worksheet/worksheets.ts +60 -19
- package/server/graphql/resolvers/worksheet-detail/check-progressing-pallet.ts +7 -8
- package/server/graphql/resolvers/worksheet-detail/create-worksheet-detail.ts +4 -6
- package/server/graphql/resolvers/worksheet-detail/delete-worksheet-detail.ts +5 -6
- package/server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.ts +13 -19
- package/server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.ts +19 -27
- package/server/graphql/resolvers/worksheet-detail/generate-carton-id.ts +2 -4
- package/server/graphql/resolvers/worksheet-detail/generate-pallet-id.ts +6 -6
- package/server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.ts +7 -4
- package/server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.ts +3 -3
- package/server/graphql/resolvers/worksheet-detail/index.ts +3 -1
- package/server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.ts +164 -0
- package/server/graphql/resolvers/worksheet-detail/update-worksheet-detail.ts +8 -7
- package/server/graphql/resolvers/worksheet-detail/worksheet-detail.ts +6 -7
- package/server/graphql/resolvers/worksheet-detail/worksheet-details-by-product-group.ts +5 -5
- package/server/graphql/resolvers/worksheet-detail/worksheet-details.ts +6 -7
- package/server/graphql/resolvers/worksheet-movement/create-worksheet-movement.ts +4 -3
- package/server/graphql/resolvers/worksheet-movement/delete-worksheet-movement.ts +3 -2
- package/server/graphql/resolvers/worksheet-movement/update-worksheet-movement.ts +2 -4
- package/server/graphql/resolvers/worksheet-movement/worksheet-movement.ts +3 -6
- package/server/graphql/resolvers/worksheet-movement/worksheet-movements.ts +4 -4
- package/server/graphql/types/worksheet/batch-pick-worksheet-info.ts +9 -0
- package/server/graphql/types/worksheet/delivery-order-info.ts +3 -0
- package/server/graphql/types/worksheet/delivery-order-ro.ts +15 -0
- package/server/graphql/types/worksheet/index.ts +49 -38
- package/server/graphql/types/worksheet/multiple-release-good-worksheet.ts +8 -0
- package/server/graphql/types/worksheet/sellercraft-document.ts +8 -0
- package/server/graphql/types/worksheet-detail/index.ts +10 -0
- package/server/graphql/types/worksheet-detail/inventory-detail.ts +1 -0
- package/server/utils/inventory-util.ts +20 -14
- package/server/utils/worksheet-util.ts +10 -6
- package/dist-server/graphql/resolvers/worksheet/fetch-sellercraft-airway-bill.js +0 -25
- package/dist-server/graphql/resolvers/worksheet/fetch-sellercraft-airway-bill.js.map +0 -1
- package/dist-server/graphql/types/worksheet/airwaybill.js +0 -11
- package/dist-server/graphql/types/worksheet/airwaybill.js.map +0 -1
- package/server/graphql/resolvers/worksheet/fetch-sellercraft-airway-bill.ts +0 -30
- package/server/graphql/types/worksheet/airwaybill.ts +0 -7
|
@@ -4,7 +4,6 @@ exports.WorksheetController = exports.OrderTargetFields = exports.ReferenceOrder
|
|
|
4
4
|
const typeorm_1 = require("typeorm");
|
|
5
5
|
const auth_base_1 = require("@things-factory/auth-base");
|
|
6
6
|
const biz_base_1 = require("@things-factory/biz-base");
|
|
7
|
-
const notification_1 = require("@things-factory/notification");
|
|
8
7
|
const sales_base_1 = require("@things-factory/sales-base");
|
|
9
8
|
const warehouse_base_1 = require("@things-factory/warehouse-base");
|
|
10
9
|
const constants_1 = require("../constants");
|
|
@@ -121,7 +120,7 @@ class WorksheetController {
|
|
|
121
120
|
async findWorksheet(condition, relations = ['worksheetDetails']) {
|
|
122
121
|
condition = this.tidyConditions(condition);
|
|
123
122
|
const worksheet = await this.trxMgr.getRepository(entities_1.Worksheet).findOne({
|
|
124
|
-
where: Object.assign({ domain: this.domain }, condition),
|
|
123
|
+
where: Object.assign({ domain: { id: this.domain.id } }, condition),
|
|
125
124
|
relations
|
|
126
125
|
});
|
|
127
126
|
if (!worksheet)
|
|
@@ -136,7 +135,7 @@ class WorksheetController {
|
|
|
136
135
|
* ex) findWorksheetById(id, ['arrivalNotice', 'releaseGood'])
|
|
137
136
|
*/
|
|
138
137
|
async findWorksheetById(id, relations = ['worksheetDetails']) {
|
|
139
|
-
const worksheet = await this.trxMgr.getRepository(entities_1.Worksheet).findOne(id,
|
|
138
|
+
const worksheet = await this.trxMgr.getRepository(entities_1.Worksheet).findOne({ where: { id }, relations });
|
|
140
139
|
if (!worksheet)
|
|
141
140
|
throw new Error(this.ERROR_MSG.FIND.NO_RESULT(id));
|
|
142
141
|
return worksheet;
|
|
@@ -150,7 +149,7 @@ class WorksheetController {
|
|
|
150
149
|
*/
|
|
151
150
|
async findWorksheetByNo(worksheetNo, relations = ['worksheetDetails']) {
|
|
152
151
|
const worksheet = await this.trxMgr.getRepository(entities_1.Worksheet).findOne({
|
|
153
|
-
where: { domain: this.domain, name: worksheetNo },
|
|
152
|
+
where: { domain: { id: this.domain.id }, name: worksheetNo },
|
|
154
153
|
relations
|
|
155
154
|
});
|
|
156
155
|
if (!worksheet)
|
|
@@ -189,10 +188,10 @@ class WorksheetController {
|
|
|
189
188
|
const bizplace = refOrder.bizplace;
|
|
190
189
|
const condition = {
|
|
191
190
|
where: {
|
|
192
|
-
bizplace,
|
|
193
|
-
domain: this.domain,
|
|
191
|
+
bizplace: { id: bizplace.id },
|
|
192
|
+
domain: { id: this.domain.id },
|
|
194
193
|
type,
|
|
195
|
-
[refOrderField]: refOrder
|
|
194
|
+
[refOrderField]: { id: refOrder.id }
|
|
196
195
|
},
|
|
197
196
|
relations
|
|
198
197
|
};
|
|
@@ -235,7 +234,7 @@ class WorksheetController {
|
|
|
235
234
|
async findWorksheetDetail(condition, relations) {
|
|
236
235
|
condition = this.tidyConditions(condition);
|
|
237
236
|
const worksheetDetail = await this.trxMgr.getRepository(entities_1.WorksheetDetail).findOne({
|
|
238
|
-
where: Object.assign({ domain: this.domain }, condition),
|
|
237
|
+
where: Object.assign({ domain: { id: this.domain.id } }, condition),
|
|
239
238
|
relations
|
|
240
239
|
});
|
|
241
240
|
if (!worksheetDetail)
|
|
@@ -250,7 +249,7 @@ class WorksheetController {
|
|
|
250
249
|
*/
|
|
251
250
|
async findWorksheetDetailByName(worksheetDetailName, relations) {
|
|
252
251
|
const worksheetDetail = await this.trxMgr.getRepository(entities_1.WorksheetDetail).findOne({
|
|
253
|
-
where: { domain: this.domain, name: worksheetDetailName },
|
|
252
|
+
where: { domain: { id: this.domain.id }, name: worksheetDetailName },
|
|
254
253
|
relations
|
|
255
254
|
});
|
|
256
255
|
if (!worksheetDetail)
|
|
@@ -259,7 +258,7 @@ class WorksheetController {
|
|
|
259
258
|
}
|
|
260
259
|
async findWorksheetDetailByNames(worksheetDetailNames, relations) {
|
|
261
260
|
const worksheetDetails = await this.trxMgr.getRepository(entities_1.WorksheetDetail).find({
|
|
262
|
-
where: { domain: this.domain, name: (0, typeorm_1.In)(worksheetDetailNames) },
|
|
261
|
+
where: { domain: { id: this.domain.id }, name: (0, typeorm_1.In)(worksheetDetailNames) },
|
|
263
262
|
relations
|
|
264
263
|
});
|
|
265
264
|
if (!(worksheetDetails === null || worksheetDetails === void 0 ? void 0 : worksheetDetails.length))
|
|
@@ -342,7 +341,7 @@ class WorksheetController {
|
|
|
342
341
|
* @description
|
|
343
342
|
* Update reference order like (ArrivalNotice, ReleaseGood, VasOrder, InventoryCheck)
|
|
344
343
|
*/
|
|
345
|
-
async updateRefOrder(refOrder, entitySchema) {
|
|
344
|
+
async updateRefOrder(refOrder, entitySchema, currentStatus) {
|
|
346
345
|
var _a;
|
|
347
346
|
if (!entitySchema) {
|
|
348
347
|
if (refOrder instanceof sales_base_1.ArrivalNotice) {
|
|
@@ -365,6 +364,19 @@ class WorksheetController {
|
|
|
365
364
|
throw new Error(this.ERROR_MSG.UPDATE.ID_NOT_EXISTS);
|
|
366
365
|
if (!((_a = refOrder.updater) === null || _a === void 0 ? void 0 : _a.id))
|
|
367
366
|
refOrder = this.setStamp(refOrder);
|
|
367
|
+
if (currentStatus && entitySchema == sales_base_1.ReleaseGood) {
|
|
368
|
+
let res = await (0, typeorm_1.getRepository)(entitySchema).query(`
|
|
369
|
+
update release_goods
|
|
370
|
+
set status = $1
|
|
371
|
+
where id = $2
|
|
372
|
+
and status = $3
|
|
373
|
+
returning id
|
|
374
|
+
`, [refOrder.status, refOrder.id, currentStatus]);
|
|
375
|
+
if (res[1] == 0) {
|
|
376
|
+
this.trxMgr.queryRunner.rollbackTransaction();
|
|
377
|
+
throw new Error('Worksheet has already been created');
|
|
378
|
+
}
|
|
379
|
+
}
|
|
368
380
|
return await this.trxMgr.getRepository(entitySchema).save(refOrder);
|
|
369
381
|
}
|
|
370
382
|
/**
|
|
@@ -599,10 +611,13 @@ class WorksheetController {
|
|
|
599
611
|
*/
|
|
600
612
|
async notifyToUsers(users, message) {
|
|
601
613
|
const receivers = users.map(user => user.id);
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
614
|
+
/**
|
|
615
|
+
* @notes Temporary off sendNotification due to suspect of causing wms down
|
|
616
|
+
*/
|
|
617
|
+
// await sendNotification({
|
|
618
|
+
// receivers,
|
|
619
|
+
// message
|
|
620
|
+
// })
|
|
606
621
|
}
|
|
607
622
|
/**
|
|
608
623
|
* @summary Notify to office admin
|
|
@@ -650,7 +665,8 @@ class WorksheetController {
|
|
|
650
665
|
worksheet.returnOrder ||
|
|
651
666
|
null;
|
|
652
667
|
if (!refOrder) {
|
|
653
|
-
const wsWithRefOrd = await this.trxMgr.getRepository(entities_1.Worksheet).findOne(
|
|
668
|
+
const wsWithRefOrd = await this.trxMgr.getRepository(entities_1.Worksheet).findOne({
|
|
669
|
+
where: { id: worksheet.id },
|
|
654
670
|
relations: ['arrivalNotice', 'releaseGood', 'vasOrder', 'inventoryCheck', 'returnOrder']
|
|
655
671
|
});
|
|
656
672
|
refOrder =
|
|
@@ -673,7 +689,7 @@ class WorksheetController {
|
|
|
673
689
|
*/
|
|
674
690
|
async extractMultipleRefOrderFromWorksheet(worksheet) {
|
|
675
691
|
const wsdWithRefOrd = await this.trxMgr.getRepository(entities_1.WorksheetDetail).find({
|
|
676
|
-
where: { domain: this.domain, worksheet },
|
|
692
|
+
where: { domain: { id: this.domain.id }, worksheet: { id: worksheet.id } },
|
|
677
693
|
relations: ['targetInventory', 'targetInventory.releaseGood']
|
|
678
694
|
});
|
|
679
695
|
let refOrder = wsdWithRefOrd.map((ord) => ord.targetInventory.releaseGood);
|
|
@@ -687,8 +703,8 @@ class WorksheetController {
|
|
|
687
703
|
* If there's positive result it will throw an error cause pallet is duplicated
|
|
688
704
|
*/
|
|
689
705
|
async checkPalletDuplication(palletId) {
|
|
690
|
-
const duplicatedPalletCnt = await this.trxMgr.getRepository(warehouse_base_1.Inventory).
|
|
691
|
-
domain: this.domain,
|
|
706
|
+
const duplicatedPalletCnt = await this.trxMgr.getRepository(warehouse_base_1.Inventory).countBy({
|
|
707
|
+
domain: { id: this.domain.id },
|
|
692
708
|
palletId,
|
|
693
709
|
status: (0, typeorm_1.Not)((0, typeorm_1.Equal)(warehouse_base_1.INVENTORY_STATUS.TERMINATED))
|
|
694
710
|
});
|
|
@@ -696,7 +712,7 @@ class WorksheetController {
|
|
|
696
712
|
throw new Error(this.ERROR_MSG.VALIDITY.DUPLICATED('Pallet ID', palletId));
|
|
697
713
|
const duplicatedReusablePalletCnt = await this.trxMgr.getRepository(warehouse_base_1.Pallet).count({
|
|
698
714
|
where: {
|
|
699
|
-
domain: this.domain,
|
|
715
|
+
domain: { id: this.domain.id },
|
|
700
716
|
name: palletId
|
|
701
717
|
}
|
|
702
718
|
});
|
|
@@ -709,8 +725,8 @@ class WorksheetController {
|
|
|
709
725
|
* If there's positive result it will throw an error cause carton is duplicated
|
|
710
726
|
*/
|
|
711
727
|
async checkCartonDuplication(cartonId, orderId) {
|
|
712
|
-
const duplicatedCartonCnt = await this.trxMgr.getRepository(warehouse_base_1.Inventory).
|
|
713
|
-
domain: this.domain,
|
|
728
|
+
const duplicatedCartonCnt = await this.trxMgr.getRepository(warehouse_base_1.Inventory).countBy({
|
|
729
|
+
domain: { id: this.domain.id },
|
|
714
730
|
cartonId,
|
|
715
731
|
refOrderId: (0, typeorm_1.Not)((0, typeorm_1.Equal)(orderId)),
|
|
716
732
|
status: (0, typeorm_1.Not)((0, typeorm_1.Equal)(warehouse_base_1.INVENTORY_STATUS.TERMINATED))
|
|
@@ -724,9 +740,9 @@ class WorksheetController {
|
|
|
724
740
|
* If there's positive result it will throw an error cause serial number is duplicated
|
|
725
741
|
*/
|
|
726
742
|
async checkSerialNumberDuplication(serialNumber, product) {
|
|
727
|
-
const duplicatedSerialNumberCnt = await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).
|
|
728
|
-
domain: this.domain,
|
|
729
|
-
product,
|
|
743
|
+
const duplicatedSerialNumberCnt = await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).countBy({
|
|
744
|
+
domain: { id: this.domain.id },
|
|
745
|
+
product: { id: product.id },
|
|
730
746
|
serialNumber,
|
|
731
747
|
status: (0, typeorm_1.Not)((0, typeorm_1.Equal)(warehouse_base_1.INVENTORY_STATUS.DELETED))
|
|
732
748
|
});
|
|
@@ -777,6 +793,40 @@ class WorksheetController {
|
|
|
777
793
|
}
|
|
778
794
|
return childQty;
|
|
779
795
|
}
|
|
796
|
+
async getDirectQty(productDetail, productBarcode, qty) {
|
|
797
|
+
try {
|
|
798
|
+
console.time('getDirectQty');
|
|
799
|
+
let results = await this.trxMgr.query(`
|
|
800
|
+
WITH RECURSIVE cte as (
|
|
801
|
+
select * from (
|
|
802
|
+
select pd.product_id as "productId", id, pd.packing_size as "packingSize",
|
|
803
|
+
pd.packing_type as "packingType", pd.uom as "uom", (pd.uom_value * $2::float) as "uomValue", $2::float as "qty", pd.gtin
|
|
804
|
+
from product_details pd
|
|
805
|
+
where pd.id = $1
|
|
806
|
+
) as dt
|
|
807
|
+
union all
|
|
808
|
+
select pd.product_id as "productId", pd.id, pd.packing_size as "packingSize",
|
|
809
|
+
pd.packing_type as "packingType", pd.uom,
|
|
810
|
+
dt1.qty * pd.packing_size * pd.uom_value as "uomValue", dt1.qty * pd.packing_size as "qty", pd.gtin
|
|
811
|
+
from product_details pd
|
|
812
|
+
inner join cte dt1 on dt1.id = pd.child_product_detail_id
|
|
813
|
+
where pd.deleted_at is null
|
|
814
|
+
)
|
|
815
|
+
select * from cte where gtin = $3
|
|
816
|
+
`, [
|
|
817
|
+
productDetail.id,
|
|
818
|
+
qty,
|
|
819
|
+
productBarcode
|
|
820
|
+
]);
|
|
821
|
+
if (results.length <= 0)
|
|
822
|
+
throw new Error(this.ERROR_MSG.FIND.NO_RESULT(productBarcode));
|
|
823
|
+
console.timeEnd('getDirectQty');
|
|
824
|
+
return results[0];
|
|
825
|
+
}
|
|
826
|
+
catch (error) {
|
|
827
|
+
throw error;
|
|
828
|
+
}
|
|
829
|
+
}
|
|
780
830
|
/**
|
|
781
831
|
* @summary Check for product child qty at any scanned level
|
|
782
832
|
* @description It will check every level of product detail by comparing scanned level and GAN registered level.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worksheet-controller.js","sourceRoot":"","sources":["../../server/controllers/worksheet-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { EntityManager, EntitySchema, Equal, FindOneOptions, In, Not } from 'typeorm'\n\nimport { Role, User } from '@things-factory/auth-base'\nimport { Bizplace, getDomainUsers } from '@things-factory/biz-base'\nimport { sendNotification } from '@things-factory/notification'\nimport { Product, ProductDetail } from '@things-factory/product-base'\nimport {\n ArrivalNotice,\n DeliveryOrder,\n InventoryCheck,\n ORDER_INVENTORY_STATUS,\n ORDER_PRODUCT_STATUS,\n ORDER_VAS_STATUS,\n OrderInventory,\n OrderProduct,\n OrderVas,\n ReleaseGood,\n ReturnOrder,\n VasOrder\n} from '@things-factory/sales-base'\nimport { Domain } from '@things-factory/shell'\nimport { Inventory, INVENTORY_STATUS, InventoryItem, Pallet } from '@things-factory/warehouse-base'\n\nimport { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../constants'\nimport { Worksheet, WorksheetDetail } from '../entities'\nimport { generateInventoryHistory, WorksheetNoGenerator } from '../utils'\n\nexport type ReferenceOrderType = ArrivalNotice | ReleaseGood | VasOrder | InventoryCheck | DeliveryOrder | ReturnOrder\nexport type OrderTargetTypes = OrderProduct | OrderInventory | OrderVas\n\nexport enum ReferenceOrderFields {\n ArrivalNotice = 'arrivalNotice',\n ReleaseGood = 'releaseGood',\n VasOrder = 'vasOrder',\n InventoryCheck = 'inventoryCheck',\n ReturnOrder = 'returnOrder'\n}\n\nexport enum OrderTargetFields {\n OrderProduct = 'targetProduct',\n OrderInventory = 'targetInventory',\n OrderVas = 'targetVas'\n}\n\nexport interface BasicInterface {\n domain: Domain\n user: User\n}\n\nexport type NotificationMsgInterface = {\n title: string\n body: string\n url: string\n data: any\n}\n\nexport class WorksheetController {\n public readonly ERROR_MSG = {\n FIND: {\n NO_RESULT: (condition: any) => `There's no results matched with condition ${condition}`,\n NO_CHILD_RESULT: (condition: any) => `There's no child result matched with condition ${condition}`,\n NOT_MATCH: (source: any, target: any) => `Unable to find matching ${target} using ${source}`\n },\n ORDER_ITEM: {\n NO_MATCHING_RESULT: (condition: any, condition2: any) =>\n `Current item with ${condition} (${condition2}) not belong to this order`,\n EXCESS_QTY: (condition: any, condition2: any, condition3: any) =>\n `Excess qty is scanned for item ${condition}, ${condition2} (${condition3})`\n },\n PRODUCT: {\n NO_MATCHING_RESULT: (condition: any, condition2: any) =>\n `Order packing type and packing size not match with product master, ${condition} (${condition2})`,\n BARCODE_NOT_EXIST: (condition: any, condition2: any, condition3: any) =>\n `Product barcode - ${condition} with ${condition2} ${condition3}, not exist in master data.`\n },\n CREATE: {\n ID_EXISTS: 'Target has ID already',\n EMPTY_CREATOR: 'Cannot create without creator',\n EMPTY_UPDATER: 'Cannot create without updater'\n },\n UPDATE: {\n ID_NOT_EXISTS: `Target doesn't have ID`,\n EMPTY_UPDATER: 'Cannot update without updater'\n },\n VALIDITY: {\n UNEXPECTED_FIELD_VALUE: (field: string, expectedValue: any, actualValue: any) =>\n `Expected ${field} value is ${expectedValue} but got ${actualValue}`,\n DUPLICATED: (field: string, value: any) => `There is duplicated ${field} value (${value})`,\n CANT_PROCEED_STEP_BY: (step: string, reason: string) => `Can't proceed to ${step} because ${reason}`\n }\n }\n\n private readonly ROLE_NAMES: Record<string, string> = {\n OFFICE_ADMIN: 'Office Admin'\n }\n\n protected trxMgr: EntityManager\n protected domain: Domain\n protected user: User\n\n constructor(trxMgr: EntityManager, domain: Domain, user: User) {\n this.trxMgr = trxMgr\n this.domain = domain\n this.user = user\n }\n\n private getRefOrderField(refOrder: ReferenceOrderType): string {\n if (refOrder instanceof ArrivalNotice) {\n return ReferenceOrderFields.ArrivalNotice\n } else if (refOrder instanceof ReleaseGood) {\n return ReferenceOrderFields.ReleaseGood\n } else if (refOrder instanceof VasOrder) {\n return ReferenceOrderFields.VasOrder\n } else if (refOrder instanceof InventoryCheck) {\n return ReferenceOrderFields.InventoryCheck\n } else if (refOrder instanceof ReturnOrder) {\n return ReferenceOrderFields.ReturnOrder\n } else {\n throw new Error(\n this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE('refOrder', 'One of reference order type', refOrder)\n )\n }\n }\n\n private getOrderTargetField(orderTarget: OrderTargetTypes): string {\n if (orderTarget instanceof OrderProduct) {\n return OrderTargetFields.OrderProduct\n } else if (orderTarget instanceof OrderInventory) {\n return OrderTargetFields.OrderInventory\n } else if (orderTarget instanceof OrderVas) {\n return OrderTargetFields.OrderVas\n } else {\n this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE('orderTarget', 'One of order target type', orderTarget)\n }\n }\n\n /**\n * @summary Find reference order (ArrivalNotice, ReleaseGood, VasOrder, etc...)\n * @description\n * Find and return reference order with its relations based on passed condition & reltaions\n */\n async findRefOrder(\n entitySchema: EntitySchema,\n condition: Partial<ReferenceOrderType>,\n relations?: string[]\n ): Promise<ReferenceOrderType> {\n condition = this.tidyConditions(condition)\n let findOption: FindOneOptions = { where: condition }\n if (relations?.length > 0) findOption.relations = relations\n\n const refOrder: ReferenceOrderType = await this.trxMgr.getRepository(entitySchema).findOne(findOption)\n if (!refOrder) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(findOption))\n\n return refOrder\n }\n\n /**\n * @summary find worksheet by passed condition\n * @description find worksheey based on passed condition\n * It will return worksheetDetail as its relation by default\n * If you want to get additional relations you need to define reltaions\n * ex) findWorksheet(condition, ['arrivalNotice', 'releaseGood'])\n */\n async findWorksheet(condition: Record<string, any>, relations: string[] = ['worksheetDetails']): Promise<Worksheet> {\n condition = this.tidyConditions(condition)\n const worksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({\n where: {\n domain: this.domain,\n ...condition\n },\n relations\n })\n\n if (!worksheet) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(condition))\n return worksheet\n }\n\n /**\n * @summary Find worksheet by passed params\n * @description Find and return worksheet based on passed ID\n * It will return worksheetDetail as its relation by default\n * If you want to get additional relations you need to define reltaions\n * ex) findWorksheetById(id, ['arrivalNotice', 'releaseGood'])\n */\n async findWorksheetById(id: string, relations: string[] = ['worksheetDetails']): Promise<Worksheet> {\n const worksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne(id, { relations })\n if (!worksheet) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(id))\n\n return worksheet\n }\n\n /**\n * @summary Find worksheet by passed params\n * @description Find and return worksheet based on worksheet no\n * It will return worksheetDetail as its relation by default\n * If you want to get additional relations you need to define reltaions\n * ex) findWorksheetByNo(worksheetNo, ['arrivalNotice', 'releaseGood'])\n */\n async findWorksheetByNo(worksheetNo: string, relations: string[] = ['worksheetDetails']): Promise<Worksheet> {\n const worksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({\n where: { domain: this.domain, name: worksheetNo },\n relations\n })\n\n if (!worksheet) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(worksheetNo))\n\n return worksheet\n }\n\n /**\n * @summary Find worksheet by passed params.\n * @description Find and return worksheet based on worksheet no\n * It will return worksheetDetail as its relation by default\n * If you want to get additional relations you need to define reltaions\n * ex) findWorksheetByNo(worksheetNo, ['arrivalNotice', 'releaseGood'])\n */\n async findWorksheetByRefOrder(\n refOrder: ReferenceOrderType,\n type: string,\n relations: string[] = ['worksheetDetails']\n ): Promise<Worksheet> {\n const refOrderField: string = this.getRefOrderField(refOrder)\n if (!refOrder.bizplace?.id) {\n switch (refOrderField) {\n case ReferenceOrderFields.ArrivalNotice:\n refOrder = await this.findRefOrder(ArrivalNotice, refOrder, ['bizplace'])\n break\n\n case ReferenceOrderFields.ReleaseGood:\n refOrder = await this.findRefOrder(ReleaseGood, refOrder, ['bizplace'])\n break\n\n case ReferenceOrderFields.VasOrder:\n refOrder = await this.findRefOrder(VasOrder, refOrder, ['bizplace'])\n break\n\n case ReferenceOrderFields.InventoryCheck:\n refOrder = await this.findRefOrder(InventoryCheck, refOrder, ['bizplace'])\n break\n\n case ReferenceOrderFields.ReturnOrder:\n refOrder = await this.findRefOrder(ReturnOrder, refOrder, ['bizplace'])\n break\n }\n }\n\n const bizplace: Bizplace = refOrder.bizplace\n const condition: FindOneOptions = {\n where: {\n bizplace,\n domain: this.domain,\n type,\n [refOrderField]: refOrder\n },\n relations\n }\n\n const worksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne(condition)\n if (!worksheet) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(type))\n\n return worksheet\n }\n\n /**\n * @summary Find activatable worksheet by worksheet no and type\n * @description Find worksheet by passed worksheet no\n * and check validity by passed type and status (DEACTIVATED)\n * It will return worksheetDetail as its relation by default\n * If you want to get additional relations you need to define reltaions\n * ex) findActivatableWorksheet(worksheetNo, type, ['arrivalNotice])\n */\n async findActivatableWorksheet(\n worksheetNo: string,\n type: string,\n relations: string[] = ['worksheetDetails']\n ): Promise<Worksheet> {\n const worksheet: Worksheet = await this.findWorksheetByNo(worksheetNo, relations)\n this.checkRecordValidity(worksheet, { type, status: WORKSHEET_STATUS.DEACTIVATED })\n\n return worksheet\n }\n\n /**\n * @summary Find executable worksheet detail by its name\n * @description Find worksheet detail by passwd worksheet detail name\n * and check validity by passed type and status (EXECUTING)\n * If you want to get additional relations you need to define relations\n * ex) findExecutableWorksheetDetailByName(worksheetDetailName, type, ['arrivalNotice'])\n */\n async findActivatableWorksheetDetailByName(\n worksheetDetailName: string,\n type: string,\n relations: string[] = []\n ): Promise<WorksheetDetail> {\n const worksheetDetail: WorksheetDetail = await this.findWorksheetDetailByName(worksheetDetailName, relations)\n this.checkRecordValidity(worksheetDetail, { type, status: WORKSHEET_STATUS.DEACTIVATED })\n\n return worksheetDetail\n }\n\n /**\n * @summary find worksheet detail by passed condition\n * @description find worksheet detail based on passed condition\n * If you want to get additional relations you need to define reltaions\n * ex) findWorksheetDetail(condition, ['worksheet'])\n */\n async findWorksheetDetail(condition: Record<string, any>, relations?: string[]): Promise<WorksheetDetail> {\n condition = this.tidyConditions(condition)\n const worksheetDetail: WorksheetDetail = await this.trxMgr.getRepository(WorksheetDetail).findOne({\n where: {\n domain: this.domain,\n ...condition\n },\n relations\n })\n\n if (!worksheetDetail) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(condition))\n return worksheetDetail\n }\n\n /**\n * @summary find worksheet detail by passed worksheet detail name\n * @description find worksheey based on passed name of worksheet detail\n * If you want to get additional relations you need to define reltaions\n * ex) findWorksheetDetail(condition, ['worksheet'])\n */\n async findWorksheetDetailByName(worksheetDetailName: string, relations?: string[]): Promise<WorksheetDetail> {\n const worksheetDetail: WorksheetDetail = await this.trxMgr.getRepository(WorksheetDetail).findOne({\n where: { domain: this.domain, name: worksheetDetailName },\n relations\n })\n\n if (!worksheetDetail) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(worksheetDetailName))\n return worksheetDetail\n }\n\n async findWorksheetDetailByNames(worksheetDetailNames: [string], relations?: string[]): Promise<WorksheetDetail[]> {\n const worksheetDetails: WorksheetDetail[] = await this.trxMgr.getRepository(WorksheetDetail).find({\n where: { domain: this.domain, name: In(worksheetDetailNames) },\n relations\n })\n\n if (!worksheetDetails?.length) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(worksheetDetailNames.toString()))\n return worksheetDetails\n }\n\n /**\n * @summary Find executable worksheet detail by its name\n * @description Find worksheet detail by passwd worksheet detail name\n * and check validity by passed type and status (EXECUTING)\n * If you want to get additional relations you need to define relations\n * ex) findExecutableWorksheetDetailByName(worksheetDetailName, type, ['arrivalNotice'])\n */\n async findExecutableWorksheetDetailByName(\n worksheetDetailName: string,\n type: string,\n relations: string[] = []\n ): Promise<WorksheetDetail> {\n const worksheetDetail: WorksheetDetail = await this.findWorksheetDetailByName(worksheetDetailName, relations)\n this.checkRecordValidity(worksheetDetail, { type, status: WORKSHEET_STATUS.EXECUTING })\n\n return worksheetDetail\n }\n\n async findExecutableWorksheetDetailByNames(\n worksheetDetailNames: [string],\n type: string,\n relations: string[] = []\n ): Promise<WorksheetDetail[]> {\n const worksheetDetails: WorksheetDetail[] = await this.findWorksheetDetailByNames(worksheetDetailNames, relations)\n worksheetDetails.map(worksheetDetail => {\n this.checkRecordValidity(worksheetDetail, { type, status: WORKSHEET_STATUS.EXECUTING })\n })\n\n return worksheetDetails\n }\n\n /**\n * @summary Creating worksheet\n * @description creating worksheet by passed params\n * It will set status as DEACTIVATED by default\n * If you want to define status by yourself, need to pass status in additionalProps\n * ex) createWorksheet(refOrder, type, { status: WORKSHEET_STATUS.ACTIVATED })\n */\n async createWorksheet(\n refOrder: ReferenceOrderType,\n type: string,\n additionalProps: Partial<Worksheet> = {}\n ): Promise<Worksheet> {\n let refOrderType: string = await this.getRefOrderField(refOrder)\n const bizplace: Bizplace = await this.extractBizplaceFromRefOrder(refOrder)\n\n let existingWorksheet: Worksheet\n try {\n existingWorksheet = await this.findWorksheetByRefOrder(refOrder, type)\n } catch (e) {}\n\n if (existingWorksheet)\n throw new Error(\n this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY(\n `create ${type.toLocaleLowerCase()} worksheet`,\n 'existing worksheet is found'\n )\n )\n\n const worksheet: Partial<Worksheet> = {\n domain: this.domain,\n bizplace,\n name: WorksheetNoGenerator.generate(type),\n type,\n status: WORKSHEET_STATUS.DEACTIVATED,\n creator: this.user,\n updater: this.user,\n [refOrderType]: refOrder,\n ...additionalProps\n }\n\n if (worksheet.id) throw new Error(this.ERROR_MSG.CREATE.ID_EXISTS)\n\n return await this.trxMgr.getRepository(Worksheet).save(worksheet)\n }\n\n async createBatchWorksheet(\n taskNo: string,\n bizplace: Bizplace,\n type: string,\n additionalProps: Partial<Worksheet> = {}\n ): Promise<Worksheet> {\n const worksheet: Partial<Worksheet> = {\n domain: this.domain,\n bizplace,\n name: WorksheetNoGenerator.generate(type),\n type,\n taskNo,\n status: WORKSHEET_STATUS.DEACTIVATED,\n creator: this.user,\n updater: this.user,\n ...additionalProps\n }\n\n if (worksheet.id) throw new Error(this.ERROR_MSG.CREATE.ID_EXISTS)\n\n return await this.trxMgr.getRepository(Worksheet).save(worksheet)\n }\n\n /**\n * @summary Creating worksheet details\n * @description creating worksheet details by passed params\n * It will set status as DEACTIVATED by default\n * If you want to define status by yourself, need to pass status in additionalProps\n * ex) createWorksheetDetails(refOrder, type, { status: WORKSHEET_STATUS.ACTIVATED })\n *\n */\n async createWorksheetDetails(\n worksheet: Worksheet,\n type: string,\n orderTargets: OrderTargetTypes[],\n additionalProps: Partial<WorksheetDetail> = {}\n ): Promise<WorksheetDetail[]> {\n if (!worksheet.bizplace?.id) {\n worksheet = await this.findWorksheetById(worksheet.id, ['bizplace'])\n }\n const bizplace: Bizplace = worksheet.bizplace\n\n const worksheetDetails: Partial<WorksheetDetail>[] = orderTargets.map((orderTarget: OrderTargetTypes) => {\n const orderTargetField: string = this.getOrderTargetField(orderTarget)\n return {\n domain: this.domain,\n bizplace,\n worksheet,\n name: WorksheetNoGenerator.generate(type, true),\n type,\n status: WORKSHEET_STATUS.DEACTIVATED,\n [orderTargetField]: orderTarget,\n creator: this.user,\n updater: this.user,\n ...additionalProps\n }\n })\n\n if (worksheetDetails.some((wsd: Partial<WorksheetDetail>) => wsd.id))\n throw new Error(this.ERROR_MSG.CREATE.ID_EXISTS)\n\n return await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetails)\n }\n\n /**\n * @summary Update reference order (ArrivalNotice, ReleaseGood, VasOrder, InventoryCheck)\n * @description\n * Update reference order like (ArrivalNotice, ReleaseGood, VasOrder, InventoryCheck)\n */\n async updateRefOrder(refOrder: ReferenceOrderType, entitySchema?: EntitySchema): Promise<any> {\n if (!entitySchema) {\n if (refOrder instanceof ArrivalNotice) {\n entitySchema = ArrivalNotice\n } else if (refOrder instanceof ReleaseGood) {\n entitySchema = ReleaseGood\n } else if (refOrder instanceof VasOrder) {\n entitySchema = VasOrder\n } else if (refOrder instanceof InventoryCheck) {\n entitySchema = InventoryCheck\n } else if (refOrder instanceof ReturnOrder) {\n entitySchema = ReturnOrder\n }\n }\n\n if (!refOrder.id) throw new Error(this.ERROR_MSG.UPDATE.ID_NOT_EXISTS)\n if (!refOrder.updater?.id) refOrder = this.setStamp(refOrder)\n\n return await this.trxMgr.getRepository(entitySchema).save(refOrder)\n }\n\n /**\n * @summary Update order targets (OrderProduct, OrderInventory, OrderVas)\n * @description\n * Update order targets like (OrderProduct, OrderInventory, OrderVas)\n */\n async updateOrderTargets(orderTargets: OrderTargetTypes[], entitySchema?: EntitySchema): Promise<any> {\n if (!entitySchema) {\n if (orderTargets[0] instanceof OrderProduct) {\n entitySchema = OrderProduct\n } else if (orderTargets[0] instanceof OrderInventory) {\n entitySchema = OrderInventory\n } else if (orderTargets[0] instanceof OrderVas) {\n entitySchema = OrderVas\n }\n }\n\n if (orderTargets.some((orderTarget: any) => !orderTarget.id)) throw new Error(this.ERROR_MSG.UPDATE.ID_NOT_EXISTS)\n orderTargets.forEach((orderTarget: OrderTargetTypes) => {\n if (!orderTarget.updater?.id) orderTarget = this.setStamp(orderTarget)\n })\n\n return await this.trxMgr.getRepository(entitySchema).save(orderTargets)\n }\n\n /**\n * @summary generate worksheet and worksheet details\n * @description It will generate worksheet and worksheet details in onetime\n * Step 1. Call createWorksheet to create worksheet\n * The status of worksheet will be DEACTIVATED by default\n * You can change it through passing additionalProps\n * Step 2. Update status of order targets\n * Beacuse its status can be different based on type of worksheet\n * Step 3. Call createWorksheetDetails to create worksheet details\n * Step 4. Call updateRefOrder to change status of reference order\n */\n async generateWorksheet(\n worksheetType: string,\n refOrder: ReferenceOrderType,\n orderTargets: OrderTargetTypes[],\n refOrderStatus: string,\n orderTargetStatus: string,\n additionalProps: Partial<Worksheet> = {}\n ): Promise<Worksheet> {\n const worksheet: Worksheet = await this.createWorksheet(refOrder, worksheetType, additionalProps)\n\n orderTargets.forEach((orderTarget: OrderTargetTypes) => {\n orderTarget.status = orderTargetStatus\n })\n orderTargets = await this.updateOrderTargets(orderTargets)\n\n worksheet.worksheetDetails = await this.createWorksheetDetails(worksheet, worksheetType, orderTargets)\n\n refOrder.status = refOrderStatus\n await this.updateRefOrder(refOrder)\n\n return worksheet\n }\n\n // @chernhaoee I think the naming of this function is not proper. Seems like it should be something like \"updateLoadingWorksheet\" since the logic targets only Loading Order Target\n async updateWorksheet(\n worksheetType: string,\n refOrder: ReferenceOrderType,\n worksheet: Worksheet,\n orderTargets: OrderTargetTypes[],\n refOrderStatus: string,\n orderTargetStatus: string\n ): Promise<Worksheet> {\n let newOrderTarget = []\n\n orderTargets.forEach((orderTarget: OrderTargetTypes) => {\n orderTarget.status = orderTargetStatus\n })\n orderTargets = await this.updateOrderTargets(orderTargets)\n\n for (let orderTarget of orderTargets) {\n try {\n await this.findWorksheetDetail({\n targetInventory: orderTarget.id,\n type: WORKSHEET_TYPE.LOADING\n })\n } catch (e) {\n newOrderTarget.push(orderTarget)\n }\n }\n\n worksheet.worksheetDetails = await this.createWorksheetDetails(worksheet, worksheetType, newOrderTarget)\n\n // find worksheet details that doesnt exist based on order inventory\n //worksheet.worksheetDetails = await this.findWorksheetDetail(worksheet.id)\n\n refOrder.status = refOrderStatus\n await this.updateRefOrder(refOrder)\n\n return worksheet\n }\n\n async generateBatchWorksheet(\n worksheetType: string,\n batchPickingWorksheet: Worksheet,\n orderTargets: OrderTargetTypes[],\n orderTargetStatus: string,\n additionalProps: Partial<Worksheet> = {}\n ): Promise<Worksheet> {\n const worksheet: Worksheet = await this.createBatchWorksheet(\n batchPickingWorksheet.taskNo,\n batchPickingWorksheet.bizplace,\n worksheetType,\n additionalProps\n )\n\n orderTargets.forEach((orderTarget: OrderTargetTypes) => {\n orderTarget.status = orderTargetStatus\n })\n orderTargets = await this.updateOrderTargets(orderTargets)\n\n worksheet.worksheetDetails = await this.createWorksheetDetails(worksheet, worksheetType, orderTargets)\n\n return worksheet\n }\n\n /**\n * @summary Activate worksheet\n * @description It will activate passed worksheet\n * Every passed worksheet and worksheet details should have value on its id field\n * Because this function has logic to update worksheet and worksheet details\n * Step 1. Check whether every passed worksheet and worksheet details has id\n * Step 2. Change worksheet properly and update it\n * Step 3. Change worksheet details properly and update it\n */\n async activateWorksheet(\n worksheet: Worksheet,\n worksheetDetails: WorksheetDetail[],\n changedWorksheetDetails: Partial<WorksheetDetail>[]\n ): Promise<Worksheet> {\n if (!worksheet.id || worksheetDetails.some((wsd: WorksheetDetail) => !wsd.id)) {\n throw new Error(this.ERROR_MSG.UPDATE.ID_NOT_EXISTS)\n }\n\n worksheet.status = WORKSHEET_STATUS.EXECUTING\n worksheet.startedAt = new Date()\n worksheet.updater = this.user\n worksheet = await this.trxMgr.getRepository(Worksheet).save(worksheet)\n\n worksheetDetails = this.renewWorksheetDetails(worksheetDetails, changedWorksheetDetails, 'name', {\n status: WORKSHEET_STATUS.EXECUTING,\n updater: this.user\n })\n worksheet.worksheetDetails = await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetails)\n\n return worksheet\n }\n\n /**\n * @summary Complete worksheet\n * @description It will activate passed worksheet\n * Passed worksheet should have value on its id field\n * Because this function has logic to update worksheet\n * Step 1. Check whether passed worksheet has id\n * Step 2. Change worksheet properly and update it\n * Step 3. Renew worksheet with relations which is needed to complete worksheet\n * Step 4. Change order targets properly and update it based on type of worksheet\n * Step 5. If passed updatedRefOrderStatus has value it update reference order status\n */\n async completeWorksheet(worksheet: Worksheet, updatedRefOrderStatus?: string): Promise<Worksheet> {\n if (!worksheet.id) throw new Error(this.ERROR_MSG.UPDATE.ID_NOT_EXISTS)\n\n worksheet.status = WORKSHEET_STATUS.DONE\n worksheet.endedAt = new Date()\n worksheet.updater = this.user\n worksheet = await this.trxMgr.getRepository(Worksheet).save(worksheet)\n\n const worksheetType: string = worksheet.type\n worksheet = await this.findWorksheet(worksheet, [\n 'worksheetDetails',\n 'worksheetDetails.targetProduct',\n 'worksheetDetails.targetInventory',\n 'worksheetDetails.targetVas'\n ])\n\n let worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails\n\n worksheetDetails\n .filter((wsd: WorksheetDetail) => wsd.status !== ORDER_INVENTORY_STATUS.REPLACED)\n .forEach((wsd: WorksheetDetail) => {\n wsd.status = WORKSHEET_STATUS.DONE\n wsd.updater = this.user\n })\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetails)\n\n if (worksheetType === WORKSHEET_TYPE.UNLOADING) {\n let targetProducts: OrderProduct[] = worksheet.worksheetDetails.map((wsd: WorksheetDetail) => {\n let targetProduct: OrderProduct = wsd.targetProduct\n targetProduct.status = ORDER_PRODUCT_STATUS.TERMINATED\n targetProduct.updater = this.user\n return targetProduct\n })\n\n await this.updateOrderTargets(targetProducts)\n } else if (worksheetType === WORKSHEET_TYPE.VAS) {\n let targetVASs: OrderVas[] = worksheet.worksheetDetails.map((wsd: WorksheetDetail) => {\n let targetVAS: OrderVas = wsd.targetVas\n targetVAS.status = ORDER_VAS_STATUS.TERMINATED\n targetVAS.updater = this.user\n return targetVAS\n })\n\n await this.updateOrderTargets(targetVASs)\n } else if (\n worksheetType === WORKSHEET_TYPE.PUTAWAY ||\n worksheetType === WORKSHEET_TYPE.PICKING ||\n worksheetType === WORKSHEET_TYPE.PACKING ||\n worksheetType === WORKSHEET_TYPE.LOADING ||\n worksheetType === WORKSHEET_TYPE.WAREHOUSE_RETURN ||\n worksheetType === WORKSHEET_TYPE.UNLOADING_RETURN\n ) {\n let targetInventories: OrderInventory[] = worksheet.worksheetDetails\n .filter((wsd: WorksheetDetail) => wsd.status !== ORDER_INVENTORY_STATUS.REPLACED)\n .map((wsd: WorksheetDetail) => {\n let targetInventory: OrderInventory = wsd.targetInventory\n targetInventory.status = ORDER_INVENTORY_STATUS.TERMINATED\n targetInventory.updater = this.user\n return targetInventory\n })\n\n await this.updateOrderTargets(targetInventories)\n }\n\n if (updatedRefOrderStatus) {\n const refOrder: ReferenceOrderType = await this.extractRefOrderFromWorksheet(worksheet)\n refOrder.status = updatedRefOrderStatus\n refOrder.updater = this.user\n await this.updateRefOrder(refOrder)\n }\n\n return worksheet\n }\n\n /**\n * @summary Renew worksheet details by changed worksheet details\n * @description When you want to merge changed worksheet detail list into original worksheet detail list\n * you can use this function\n * it will loop through whole passed original worksheet details and find out matched changed one by value of 'ID' or its 'name'\n * Because of this, every passed origin worksheet details and changed worksheet details should have one of those values\n */\n renewWorksheetDetails(\n originWSDs: WorksheetDetail[],\n changedWSDs: Partial<WorksheetDetail>[],\n identifier: string,\n additionalProps: Partial<WorksheetDetail> = {}\n ): WorksheetDetail[] {\n if (\n originWSDs.some((wsd: WorksheetDetail) => !wsd[identifier]) ||\n changedWSDs.some((wsd: Partial<WorksheetDetail>) => !wsd[identifier])\n ) {\n throw new Error(\n this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY(\n 'renew worksheet details',\n `some passed parameter doesn't have identifier (${identifier})`\n )\n )\n }\n\n return originWSDs.map((originWSD: WorksheetDetail) => {\n const changedWSD: Partial<WorksheetDetail> = this.findMatchedWSD(originWSD[identifier], changedWSDs)\n\n return {\n ...originWSD,\n ...changedWSD,\n ...additionalProps\n }\n })\n }\n\n /**\n * @summary Find out matched worksheet detail by identifier\n * @description Find out matched worksheet detail by identifier\n * identifier can be 'ID' or 'name' of worksheet detail\n */\n findMatchedWSD(identifier: string, candidates: any[]): any {\n return candidates.find(\n (candidate: Partial<WorksheetDetail>) => candidate.id === identifier || candidate.name === identifier\n )\n }\n\n /**\n * @summary Valitiy checker\n * @description It will try to check whether passed record has same properties with passed conditions\n * Basically it will check equality of value\n * If you want to check advanced validation you can pass function to customize the logic of validation\n * Passed function will be call with actual value of record as parameter\n */\n checkRecordValidity(record: Record<string, any>, conditions: Record<string, any>): void {\n for (let field in conditions) {\n let isValid: boolean = false\n if (typeof conditions[field] === 'function') {\n isValid = conditions[field](record[field])\n } else {\n isValid = conditions[field] === record[field]\n }\n\n if (!isValid)\n throw new Error(this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE(field, conditions[field], record[field]))\n }\n }\n\n /**\n * @summary Notify to passed users\n * @description Passed notification message will be sent to passed users\n */\n async notifyToUsers(users: User[], message: NotificationMsgInterface): Promise<void> {\n const receivers: any[] = users.map(user => user.id)\n await sendNotification({\n receivers,\n message\n })\n }\n\n /**\n * @summary Notify to office admin\n * @description Passed notification message will be sent to office admin of current domain\n * default role name is defiend as ROLE_NAME.OFFICE_ADMIn by default\n * You can change role name by passing roleName as parameter\n */\n async notifyToOfficeAdmin(message: NotificationMsgInterface, roleName?: string): Promise<void> {\n const users: User[] = await this.trxMgr\n .getRepository('users_roles')\n .createQueryBuilder('ur')\n .select('ur.users_id', 'id')\n .where(qb => {\n const subQuery = qb\n .subQuery()\n .select('role.id')\n .from(Role, 'role')\n .where('role.name = :roleName', { roleName: roleName || this.ROLE_NAMES.OFFICE_ADMIN })\n .andWhere('role.domain_id = :domainId', { domainId: this.domain.id })\n .getQuery()\n return 'ur.roles_id IN ' + subQuery\n })\n .getRawMany()\n\n this.notifyToUsers(users, message)\n }\n\n /**\n * @summary Notify to customer of passed bizplace\n * @description Passed notification message will be sent to customer of passed bizplace\n */\n async notifyToCustomer(bizplace: Bizplace, message: NotificationMsgInterface): Promise<void> {\n const users: any[] = await getDomainUsers(bizplace, this.trxMgr)\n\n this.notifyToUsers(users, message)\n }\n\n /**\n * @summary extract out referenc order from given worksheet\n * @description If it doesn't have any reference order\n * find worksheet with every possible reference order once again\n * and extract out reference order from found worksheet\n */\n async extractRefOrderFromWorksheet(worksheet: Worksheet): Promise<ReferenceOrderType> {\n let refOrder: ReferenceOrderType =\n worksheet.arrivalNotice ||\n worksheet.releaseGood ||\n worksheet.vasOrder ||\n worksheet.inventoryCheck ||\n worksheet.returnOrder ||\n null\n if (!refOrder) {\n const wsWithRefOrd: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne(worksheet.id, {\n relations: ['arrivalNotice', 'releaseGood', 'vasOrder', 'inventoryCheck', 'returnOrder']\n })\n\n refOrder =\n wsWithRefOrd.arrivalNotice ||\n wsWithRefOrd.releaseGood ||\n wsWithRefOrd.vasOrder ||\n wsWithRefOrd.inventoryCheck ||\n wsWithRefOrd.returnOrder ||\n null\n if (!refOrder) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(worksheet.id))\n }\n\n return refOrder\n }\n\n /**\n * @summary extract out reference orders from given merged order worksheet\n * @description If it doesn't have any reference order\n * find worksheet with every possible reference order once again\n * and extract out reference order from found worksheet\n */\n async extractMultipleRefOrderFromWorksheet(worksheet: Worksheet): Promise<ReferenceOrderType> {\n const wsdWithRefOrd: WorksheetDetail[] = await this.trxMgr.getRepository(WorksheetDetail).find({\n where: { domain: this.domain, worksheet },\n relations: ['targetInventory', 'targetInventory.releaseGood']\n })\n\n let refOrder: ReferenceOrderType[] = wsdWithRefOrd.map((ord: WorksheetDetail) => ord.targetInventory.releaseGood)\n\n if (!refOrder) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(worksheet.id))\n\n return refOrder\n }\n\n /**\n * @summary Check whether passed pallet is existing alreay\n * @description It will try to count inventories which has same domain and same pallet Id and not terminated one\n * If there's positive result it will throw an error cause pallet is duplicated\n */\n async checkPalletDuplication(palletId: string): Promise<void> {\n const duplicatedPalletCnt: number = await this.trxMgr.getRepository(Inventory).count({\n domain: this.domain,\n palletId,\n status: Not(Equal(INVENTORY_STATUS.TERMINATED))\n })\n\n if (duplicatedPalletCnt) throw new Error(this.ERROR_MSG.VALIDITY.DUPLICATED('Pallet ID', palletId))\n\n const duplicatedReusablePalletCnt: number = await this.trxMgr.getRepository(Pallet).count({\n where: {\n domain: this.domain,\n name: palletId\n }\n })\n\n if (duplicatedReusablePalletCnt) throw new Error(this.ERROR_MSG.VALIDITY.DUPLICATED('Pallet ID', palletId))\n }\n\n /**\n * @summary Check whether passed carton is existing alreay\n * @description It will try to count inventories which has same domain and same carton Id and not terminated one\n * If there's positive result it will throw an error cause carton is duplicated\n */\n async checkCartonDuplication(cartonId: string, orderId: string): Promise<void> {\n const duplicatedCartonCnt: number = await this.trxMgr.getRepository(Inventory).count({\n domain: this.domain,\n cartonId,\n refOrderId: Not(Equal(orderId)),\n status: Not(Equal(INVENTORY_STATUS.TERMINATED))\n })\n\n if (duplicatedCartonCnt) throw new Error(this.ERROR_MSG.VALIDITY.DUPLICATED('Carton ID', cartonId))\n }\n\n /**\n * @summary Check whether passed serial number is existing already\n * @description It will try to count inventories which has same domain and same serial number and and not terminated one\n * If there's positive result it will throw an error cause serial number is duplicated\n */\n async checkSerialNumberDuplication(serialNumber: string, product: Product): Promise<void> {\n const duplicatedSerialNumberCnt: number = await this.trxMgr.getRepository(InventoryItem).count({\n domain: this.domain,\n product,\n serialNumber,\n status: Not(Equal(INVENTORY_STATUS.DELETED))\n })\n\n if (duplicatedSerialNumberCnt) throw new Error(this.ERROR_MSG.VALIDITY.DUPLICATED('Serial Number', serialNumber))\n }\n\n /**\n * @summary Check for product child qty at any scanned level\n * @description It will check every level of product detail by comparing scanned level and GAN registered level.\n * By getting the level that has relation, child qty will be retrieved\n * 1st level: PALLET -> 2 CARTONS (scan), 2nd level: CARTON -> 6 BAGS, 3rd level: BAG -> 10 UNITS, lowest: UNIT (order registered packing type)\n */\n async getChildQty(\n productDetails: ProductDetail[],\n productBarcode: string,\n orderProductDetail: ProductDetail\n ): Promise<number> {\n const scannedProductDetail: ProductDetail = productDetails.find(\n (productDetail: ProductDetail) => productDetail.gtin === productBarcode\n )\n let hasChildRelation: boolean = Boolean(scannedProductDetail?.childProductDetail)\n let hasMatchingChild: boolean\n let childQty: number\n let currentProductDetail: ProductDetail\n\n if (hasChildRelation) {\n hasMatchingChild = Boolean(orderProductDetail.id === scannedProductDetail.childProductDetail.id)\n currentProductDetail = productDetails.find(\n (productDetail: ProductDetail) => productDetail.id === scannedProductDetail.childProductDetail.id\n )\n if (!currentProductDetail)\n throw new Error(this.ERROR_MSG.FIND.NOT_MATCH('inner pack', `GTIN (${productBarcode})`))\n childQty = scannedProductDetail.packingSize\n } else {\n throw new Error(this.ERROR_MSG.FIND.NO_RESULT(productBarcode))\n }\n\n if (hasMatchingChild) {\n childQty = scannedProductDetail.packingSize\n } else {\n while (hasChildRelation && !hasMatchingChild) {\n hasChildRelation = Boolean(currentProductDetail?.childProductDetail)\n\n if (hasChildRelation)\n hasMatchingChild = Boolean(orderProductDetail.id === currentProductDetail.childProductDetail.id)\n\n if (hasMatchingChild) {\n childQty = currentProductDetail.packingSize * childQty\n } else if (!hasMatchingChild && hasChildRelation) {\n childQty = currentProductDetail.packingSize * childQty\n currentProductDetail = productDetails.find(\n (productDetail: ProductDetail) => productDetail.id === currentProductDetail.childProductDetail.id\n )\n } else if (!hasChildRelation && !hasMatchingChild) {\n throw new Error(this.ERROR_MSG.FIND.NO_RESULT(productBarcode))\n }\n }\n }\n\n return childQty\n }\n\n /**\n * @summary Check for product child qty at any scanned level\n * @description It will check every level of product detail by comparing scanned level and GAN registered level.\n * By getting the level that has relation, child qty will be retrieved\n * 1st level: PALLET -> 2 CARTONS (scan), 2nd level: CARTON -> 6 BAGS, 3rd level: BAG -> 10 UNITS, lowest: UNIT (order registered packing type)\n */\n async getChildPackingSize(\n productDetails: ProductDetail[],\n defaultProductDetail: ProductDetail,\n unmatchingProductDetail: ProductDetail\n ): Promise<number> {\n let hasChildRelation: boolean = Boolean(unmatchingProductDetail?.childProductDetail)\n let hasMatchingChild: boolean\n let packingSize: number = 1\n let currentChildProductDetail: ProductDetail\n\n if (hasChildRelation) {\n currentChildProductDetail = productDetails.find(\n (productDetail: ProductDetail) => productDetail.id === unmatchingProductDetail.childProductDetail.id\n )\n\n if (!currentChildProductDetail) {\n throw new Error(this.ERROR_MSG.FIND.NOT_MATCH('packing type', `GTIN (${unmatchingProductDetail.gtin})`))\n }\n\n hasMatchingChild = Boolean(defaultProductDetail.id === currentChildProductDetail.id)\n if (hasMatchingChild) {\n packingSize = unmatchingProductDetail.packingSize\n } else {\n packingSize = unmatchingProductDetail.packingSize * packingSize\n }\n } else {\n throw new Error(this.ERROR_MSG.FIND.NO_CHILD_RESULT(`${unmatchingProductDetail.gtin}`))\n }\n\n while (hasChildRelation && !hasMatchingChild) {\n if (hasMatchingChild) {\n packingSize = currentChildProductDetail.packingSize * packingSize // 12 x 10\n } else if (!hasMatchingChild && hasChildRelation) {\n packingSize = currentChildProductDetail.packingSize * packingSize // 12 x 10\n currentChildProductDetail = productDetails.find(\n (productDetail: ProductDetail) => productDetail.id === currentChildProductDetail.childProductDetail.id\n )\n\n hasChildRelation = Boolean(currentChildProductDetail?.childProductDetail)\n hasMatchingChild = Boolean(defaultProductDetail.id === currentChildProductDetail.id)\n } else if (!hasChildRelation && !hasMatchingChild) {\n throw new Error(this.ERROR_MSG.FIND.NO_RESULT(unmatchingProductDetail.gtin))\n }\n }\n\n return packingSize\n }\n\n async createInventory(inventory: Partial<Inventory> | Partial<Inventory>[]): Promise<Inventory | Inventory[]> {\n inventory = this.setStamp(inventory)\n return await this.trxMgr.getRepository(Inventory).save(inventory)\n }\n\n /**\n * @summary Update inventory record\n * @description It will update inventory after set a stamp (domain, updater)\n * The special point of this function is that this changes won't generate inventory history\n * If you want to generate inventory history automatically you would better to use transactionInventory function\n */\n async updateInventory(inventory: Partial<Inventory> | Partial<Inventory>[]): Promise<Inventory | Inventory[]> {\n if (!inventory.id) throw new Error(this.ERROR_MSG.UPDATE.ID_NOT_EXISTS)\n inventory = this.setStamp(inventory)\n return await this.trxMgr.getRepository(Inventory).save(inventory)\n }\n\n /**\n * @summary Do transaction on inventory record\n * @description It will update inventory after set a temp (domain, updater)\n * and then generate inventory history based on current changes\n */\n async transactionInventory(\n inventory: Partial<Inventory>,\n referencOrder: ReferenceOrderType,\n changedQty: number,\n changedWeight: number,\n transactionType: string\n ): Promise<Inventory> {\n if (inventory.id) {\n inventory = await this.updateInventory(inventory)\n } else {\n inventory = await this.createInventory(inventory)\n }\n\n await generateInventoryHistory(\n inventory,\n referencOrder,\n transactionType,\n changedQty,\n changedWeight,\n this.user,\n this.trxMgr\n )\n\n return inventory\n }\n\n /**\n * @summary set common stamp like domain, creator, updater\n * @description Set common stamp to passed record\n * If it doesn't have id it will handle it as creating one\n * If it has id it will handle it as updating one\n */\n setStamp(record: Record<string, any>): Record<string, any> {\n if (!record.domain) record.domain = this.domain\n if (!record.id && !record.creator) record.creator = this.user\n if (!record.updater) record.updater = this.user\n\n return record\n }\n\n /**\n * @summary Extract bizplace from reference order\n * @description It will find reference order with bizplace and return only bizplace to extract it out\n */\n async extractBizplaceFromRefOrder(refOrder: ReferenceOrderType, entitySchema?: EntitySchema): Promise<Bizplace> {\n if (!entitySchema) {\n if (refOrder instanceof ArrivalNotice) {\n entitySchema = ArrivalNotice\n } else if (refOrder instanceof ReleaseGood) {\n entitySchema = ReleaseGood\n } else if (refOrder instanceof VasOrder) {\n entitySchema = VasOrder\n } else if (refOrder instanceof InventoryCheck) {\n entitySchema = InventoryCheck\n } else if (refOrder instanceof ReturnOrder) {\n entitySchema = ReturnOrder\n }\n }\n\n const { bizplace }: { bizplace: Bizplace } = await this.findRefOrder(entitySchema, refOrder, ['bizplace'])\n return bizplace\n }\n\n tidyConditions(record: Record<string, any>): Record<string, any> {\n if ('id' in record) {\n return { id: record.id }\n } else {\n Object.keys(record).forEach((key: string) => {\n if (record[key] === null || record[key] instanceof Date || Array.isArray(record[key])) delete record[key]\n })\n }\n\n return record\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"worksheet-controller.js","sourceRoot":"","sources":["../../server/controllers/worksheet-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { EntityManager, EntitySchema, Equal, FindOneOptions, In, Not, getRepository } from 'typeorm'\n\nimport { Role, User } from '@things-factory/auth-base'\nimport { Bizplace, getDomainUsers } from '@things-factory/biz-base'\nimport { Product, ProductDetail } from '@things-factory/product-base'\nimport {\n ArrivalNotice,\n DeliveryOrder,\n InventoryCheck,\n ORDER_INVENTORY_STATUS,\n ORDER_PRODUCT_STATUS,\n ORDER_VAS_STATUS,\n OrderInventory,\n OrderProduct,\n OrderVas,\n ReleaseGood,\n ReturnOrder,\n VasOrder\n} from '@things-factory/sales-base'\nimport { Domain } from '@things-factory/shell'\nimport { Inventory, INVENTORY_STATUS, InventoryItem, Pallet } from '@things-factory/warehouse-base'\n\nimport { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../constants'\nimport { Worksheet, WorksheetDetail } from '../entities'\nimport { generateInventoryHistory, WorksheetNoGenerator } from '../utils'\n\nexport type ReferenceOrderType = ArrivalNotice | ReleaseGood | VasOrder | InventoryCheck | DeliveryOrder | ReturnOrder\nexport type OrderTargetTypes = OrderProduct | OrderInventory | OrderVas\n\nexport enum ReferenceOrderFields {\n ArrivalNotice = 'arrivalNotice',\n ReleaseGood = 'releaseGood',\n VasOrder = 'vasOrder',\n InventoryCheck = 'inventoryCheck',\n ReturnOrder = 'returnOrder'\n}\n\nexport enum OrderTargetFields {\n OrderProduct = 'targetProduct',\n OrderInventory = 'targetInventory',\n OrderVas = 'targetVas'\n}\n\nexport interface BasicInterface {\n domain: Domain\n user: User\n}\n\nexport type NotificationMsgInterface = {\n title: string\n body: string\n url: string\n data: any\n}\n\nexport class WorksheetController {\n public readonly ERROR_MSG = {\n FIND: {\n NO_RESULT: (condition: any) => `There's no results matched with condition ${condition}`,\n NO_CHILD_RESULT: (condition: any) => `There's no child result matched with condition ${condition}`,\n NOT_MATCH: (source: any, target: any) => `Unable to find matching ${target} using ${source}`\n },\n ORDER_ITEM: {\n NO_MATCHING_RESULT: (condition: any, condition2: any) =>\n `Current item with ${condition} (${condition2}) not belong to this order`,\n EXCESS_QTY: (condition: any, condition2: any, condition3: any) =>\n `Excess qty is scanned for item ${condition}, ${condition2} (${condition3})`\n },\n PRODUCT: {\n NO_MATCHING_RESULT: (condition: any, condition2: any) =>\n `Order packing type and packing size not match with product master, ${condition} (${condition2})`,\n BARCODE_NOT_EXIST: (condition: any, condition2: any, condition3: any) =>\n `Product barcode - ${condition} with ${condition2} ${condition3}, not exist in master data.`\n },\n CREATE: {\n ID_EXISTS: 'Target has ID already',\n EMPTY_CREATOR: 'Cannot create without creator',\n EMPTY_UPDATER: 'Cannot create without updater'\n },\n UPDATE: {\n ID_NOT_EXISTS: `Target doesn't have ID`,\n EMPTY_UPDATER: 'Cannot update without updater'\n },\n VALIDITY: {\n UNEXPECTED_FIELD_VALUE: (field: string, expectedValue: any, actualValue: any) =>\n `Expected ${field} value is ${expectedValue} but got ${actualValue}`,\n DUPLICATED: (field: string, value: any) => `There is duplicated ${field} value (${value})`,\n CANT_PROCEED_STEP_BY: (step: string, reason: string) => `Can't proceed to ${step} because ${reason}`\n }\n }\n\n private readonly ROLE_NAMES: Record<string, string> = {\n OFFICE_ADMIN: 'Office Admin'\n }\n\n protected trxMgr: EntityManager\n protected domain: Domain\n protected user: User\n\n constructor(trxMgr: EntityManager, domain: Domain, user: User) {\n this.trxMgr = trxMgr\n this.domain = domain\n this.user = user\n }\n\n private getRefOrderField(refOrder: ReferenceOrderType): string {\n if (refOrder instanceof ArrivalNotice) {\n return ReferenceOrderFields.ArrivalNotice\n } else if (refOrder instanceof ReleaseGood) {\n return ReferenceOrderFields.ReleaseGood\n } else if (refOrder instanceof VasOrder) {\n return ReferenceOrderFields.VasOrder\n } else if (refOrder instanceof InventoryCheck) {\n return ReferenceOrderFields.InventoryCheck\n } else if (refOrder instanceof ReturnOrder) {\n return ReferenceOrderFields.ReturnOrder\n } else {\n throw new Error(\n this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE('refOrder', 'One of reference order type', refOrder)\n )\n }\n }\n\n private getOrderTargetField(orderTarget: OrderTargetTypes): string {\n if (orderTarget instanceof OrderProduct) {\n return OrderTargetFields.OrderProduct\n } else if (orderTarget instanceof OrderInventory) {\n return OrderTargetFields.OrderInventory\n } else if (orderTarget instanceof OrderVas) {\n return OrderTargetFields.OrderVas\n } else {\n this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE('orderTarget', 'One of order target type', orderTarget)\n }\n }\n\n /**\n * @summary Find reference order (ArrivalNotice, ReleaseGood, VasOrder, etc...)\n * @description\n * Find and return reference order with its relations based on passed condition & reltaions\n */\n async findRefOrder(\n entitySchema: EntitySchema,\n condition: Partial<ReferenceOrderType>,\n relations?: string[]\n ): Promise<ReferenceOrderType> {\n condition = this.tidyConditions(condition)\n let findOption: FindOneOptions = { where: condition }\n if (relations?.length > 0) findOption.relations = relations\n\n const refOrder: ReferenceOrderType = await this.trxMgr.getRepository(entitySchema).findOne(findOption)\n if (!refOrder) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(findOption))\n\n return refOrder\n }\n\n /**\n * @summary find worksheet by passed condition\n * @description find worksheey based on passed condition\n * It will return worksheetDetail as its relation by default\n * If you want to get additional relations you need to define reltaions\n * ex) findWorksheet(condition, ['arrivalNotice', 'releaseGood'])\n */\n async findWorksheet(condition: Record<string, any>, relations: string[] = ['worksheetDetails']): Promise<Worksheet> {\n condition = this.tidyConditions(condition)\n const worksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({\n where: {\n domain: { id: this.domain.id },\n ...condition\n },\n relations\n })\n\n if (!worksheet) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(condition))\n return worksheet\n }\n\n /**\n * @summary Find worksheet by passed params\n * @description Find and return worksheet based on passed ID\n * It will return worksheetDetail as its relation by default\n * If you want to get additional relations you need to define reltaions\n * ex) findWorksheetById(id, ['arrivalNotice', 'releaseGood'])\n */\n async findWorksheetById(id: string, relations: string[] = ['worksheetDetails']): Promise<Worksheet> {\n const worksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({ where: { id }, relations })\n if (!worksheet) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(id))\n\n return worksheet\n }\n\n /**\n * @summary Find worksheet by passed params\n * @description Find and return worksheet based on worksheet no\n * It will return worksheetDetail as its relation by default\n * If you want to get additional relations you need to define reltaions\n * ex) findWorksheetByNo(worksheetNo, ['arrivalNotice', 'releaseGood'])\n */\n async findWorksheetByNo(worksheetNo: string, relations: string[] = ['worksheetDetails']): Promise<Worksheet> {\n const worksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({\n where: { domain: { id: this.domain.id }, name: worksheetNo },\n relations\n })\n\n if (!worksheet) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(worksheetNo))\n\n return worksheet\n }\n\n /**\n * @summary Find worksheet by passed params.\n * @description Find and return worksheet based on worksheet no\n * It will return worksheetDetail as its relation by default\n * If you want to get additional relations you need to define reltaions\n * ex) findWorksheetByNo(worksheetNo, ['arrivalNotice', 'releaseGood'])\n */\n async findWorksheetByRefOrder(\n refOrder: ReferenceOrderType,\n type: string,\n relations: string[] = ['worksheetDetails']\n ): Promise<Worksheet> {\n const refOrderField: string = this.getRefOrderField(refOrder)\n if (!refOrder.bizplace?.id) {\n switch (refOrderField) {\n case ReferenceOrderFields.ArrivalNotice:\n refOrder = await this.findRefOrder(ArrivalNotice, refOrder, ['bizplace'])\n break\n\n case ReferenceOrderFields.ReleaseGood:\n refOrder = await this.findRefOrder(ReleaseGood, refOrder, ['bizplace'])\n break\n\n case ReferenceOrderFields.VasOrder:\n refOrder = await this.findRefOrder(VasOrder, refOrder, ['bizplace'])\n break\n\n case ReferenceOrderFields.InventoryCheck:\n refOrder = await this.findRefOrder(InventoryCheck, refOrder, ['bizplace'])\n break\n\n case ReferenceOrderFields.ReturnOrder:\n refOrder = await this.findRefOrder(ReturnOrder, refOrder, ['bizplace'])\n break\n }\n }\n\n const bizplace: Bizplace = refOrder.bizplace\n const condition: FindOneOptions = {\n where: {\n bizplace: { id: bizplace.id },\n domain: { id: this.domain.id },\n type,\n [refOrderField]: { id: refOrder.id }\n },\n relations\n }\n\n const worksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne(condition)\n if (!worksheet) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(type))\n\n return worksheet\n }\n\n /**\n * @summary Find activatable worksheet by worksheet no and type\n * @description Find worksheet by passed worksheet no\n * and check validity by passed type and status (DEACTIVATED)\n * It will return worksheetDetail as its relation by default\n * If you want to get additional relations you need to define reltaions\n * ex) findActivatableWorksheet(worksheetNo, type, ['arrivalNotice])\n */\n async findActivatableWorksheet(\n worksheetNo: string,\n type: string,\n relations: string[] = ['worksheetDetails']\n ): Promise<Worksheet> {\n const worksheet: Worksheet = await this.findWorksheetByNo(worksheetNo, relations)\n this.checkRecordValidity(worksheet, { type, status: WORKSHEET_STATUS.DEACTIVATED })\n\n return worksheet\n }\n\n /**\n * @summary Find executable worksheet detail by its name\n * @description Find worksheet detail by passwd worksheet detail name\n * and check validity by passed type and status (EXECUTING)\n * If you want to get additional relations you need to define relations\n * ex) findExecutableWorksheetDetailByName(worksheetDetailName, type, ['arrivalNotice'])\n */\n async findActivatableWorksheetDetailByName(\n worksheetDetailName: string,\n type: string,\n relations: string[] = []\n ): Promise<WorksheetDetail> {\n const worksheetDetail: WorksheetDetail = await this.findWorksheetDetailByName(worksheetDetailName, relations)\n this.checkRecordValidity(worksheetDetail, { type, status: WORKSHEET_STATUS.DEACTIVATED })\n\n return worksheetDetail\n }\n\n /**\n * @summary find worksheet detail by passed condition\n * @description find worksheet detail based on passed condition\n * If you want to get additional relations you need to define reltaions\n * ex) findWorksheetDetail(condition, ['worksheet'])\n */\n async findWorksheetDetail(condition: Record<string, any>, relations?: string[]): Promise<WorksheetDetail> {\n condition = this.tidyConditions(condition)\n const worksheetDetail: WorksheetDetail = await this.trxMgr.getRepository(WorksheetDetail).findOne({\n where: {\n domain: { id: this.domain.id },\n ...condition\n },\n relations\n })\n\n if (!worksheetDetail) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(condition))\n return worksheetDetail\n }\n\n /**\n * @summary find worksheet detail by passed worksheet detail name\n * @description find worksheey based on passed name of worksheet detail\n * If you want to get additional relations you need to define reltaions\n * ex) findWorksheetDetail(condition, ['worksheet'])\n */\n async findWorksheetDetailByName(worksheetDetailName: string, relations?: string[]): Promise<WorksheetDetail> {\n const worksheetDetail: WorksheetDetail = await this.trxMgr.getRepository(WorksheetDetail).findOne({\n where: { domain: { id: this.domain.id }, name: worksheetDetailName },\n relations\n })\n\n if (!worksheetDetail) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(worksheetDetailName))\n return worksheetDetail\n }\n\n async findWorksheetDetailByNames(worksheetDetailNames: [string], relations?: string[]): Promise<WorksheetDetail[]> {\n const worksheetDetails: WorksheetDetail[] = await this.trxMgr.getRepository(WorksheetDetail).find({\n where: { domain: { id: this.domain.id }, name: In(worksheetDetailNames) },\n relations\n })\n\n if (!worksheetDetails?.length) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(worksheetDetailNames.toString()))\n return worksheetDetails\n }\n\n /**\n * @summary Find executable worksheet detail by its name\n * @description Find worksheet detail by passwd worksheet detail name\n * and check validity by passed type and status (EXECUTING)\n * If you want to get additional relations you need to define relations\n * ex) findExecutableWorksheetDetailByName(worksheetDetailName, type, ['arrivalNotice'])\n */\n async findExecutableWorksheetDetailByName(\n worksheetDetailName: string,\n type: string,\n relations: string[] = []\n ): Promise<WorksheetDetail> {\n const worksheetDetail: WorksheetDetail = await this.findWorksheetDetailByName(worksheetDetailName, relations)\n this.checkRecordValidity(worksheetDetail, { type, status: WORKSHEET_STATUS.EXECUTING })\n\n return worksheetDetail\n }\n\n async findExecutableWorksheetDetailByNames(\n worksheetDetailNames: [string],\n type: string,\n relations: string[] = []\n ): Promise<WorksheetDetail[]> {\n const worksheetDetails: WorksheetDetail[] = await this.findWorksheetDetailByNames(worksheetDetailNames, relations)\n worksheetDetails.map(worksheetDetail => {\n this.checkRecordValidity(worksheetDetail, { type, status: WORKSHEET_STATUS.EXECUTING })\n })\n\n return worksheetDetails\n }\n\n /**\n * @summary Creating worksheet\n * @description creating worksheet by passed params\n * It will set status as DEACTIVATED by default\n * If you want to define status by yourself, need to pass status in additionalProps\n * ex) createWorksheet(refOrder, type, { status: WORKSHEET_STATUS.ACTIVATED })\n */\n async createWorksheet(\n refOrder: ReferenceOrderType,\n type: string,\n additionalProps: Partial<Worksheet> = {}\n ): Promise<Worksheet> {\n let refOrderType: string = await this.getRefOrderField(refOrder)\n const bizplace: Bizplace = await this.extractBizplaceFromRefOrder(refOrder)\n\n let existingWorksheet: Worksheet\n try {\n existingWorksheet = await this.findWorksheetByRefOrder(refOrder, type)\n } catch (e) { }\n\n if (existingWorksheet)\n throw new Error(\n this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY(\n `create ${type.toLocaleLowerCase()} worksheet`,\n 'existing worksheet is found'\n )\n )\n\n const worksheet: Partial<Worksheet> = {\n domain: this.domain,\n bizplace,\n name: WorksheetNoGenerator.generate(type),\n type,\n status: WORKSHEET_STATUS.DEACTIVATED,\n creator: this.user,\n updater: this.user,\n [refOrderType]: refOrder,\n ...additionalProps\n }\n\n if (worksheet.id) throw new Error(this.ERROR_MSG.CREATE.ID_EXISTS)\n\n return await this.trxMgr.getRepository(Worksheet).save(worksheet)\n }\n\n async createBatchWorksheet(\n taskNo: string,\n bizplace: Bizplace,\n type: string,\n additionalProps: Partial<Worksheet> = {}\n ): Promise<Worksheet> {\n const worksheet: Partial<Worksheet> = {\n domain: this.domain,\n bizplace,\n name: WorksheetNoGenerator.generate(type),\n type,\n taskNo,\n status: WORKSHEET_STATUS.DEACTIVATED,\n creator: this.user,\n updater: this.user,\n ...additionalProps\n }\n\n if (worksheet.id) throw new Error(this.ERROR_MSG.CREATE.ID_EXISTS)\n\n return await this.trxMgr.getRepository(Worksheet).save(worksheet)\n }\n\n /**\n * @summary Creating worksheet details\n * @description creating worksheet details by passed params\n * It will set status as DEACTIVATED by default\n * If you want to define status by yourself, need to pass status in additionalProps\n * ex) createWorksheetDetails(refOrder, type, { status: WORKSHEET_STATUS.ACTIVATED })\n *\n */\n async createWorksheetDetails(\n worksheet: Worksheet,\n type: string,\n orderTargets: OrderTargetTypes[],\n additionalProps: Partial<WorksheetDetail> = {}\n ): Promise<WorksheetDetail[]> {\n if (!worksheet.bizplace?.id) {\n worksheet = await this.findWorksheetById(worksheet.id, ['bizplace'])\n }\n const bizplace: Bizplace = worksheet.bizplace\n\n const worksheetDetails: Partial<WorksheetDetail>[] = orderTargets.map((orderTarget: OrderTargetTypes) => {\n const orderTargetField: string = this.getOrderTargetField(orderTarget)\n return {\n domain: this.domain,\n bizplace,\n worksheet,\n name: WorksheetNoGenerator.generate(type, true),\n type,\n status: WORKSHEET_STATUS.DEACTIVATED,\n [orderTargetField]: orderTarget,\n creator: this.user,\n updater: this.user,\n ...additionalProps\n }\n })\n\n if (worksheetDetails.some((wsd: Partial<WorksheetDetail>) => wsd.id))\n throw new Error(this.ERROR_MSG.CREATE.ID_EXISTS)\n\n return await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetails)\n }\n\n /**\n * @summary Update reference order (ArrivalNotice, ReleaseGood, VasOrder, InventoryCheck)\n * @description\n * Update reference order like (ArrivalNotice, ReleaseGood, VasOrder, InventoryCheck)\n */\n async updateRefOrder(\n refOrder: ReferenceOrderType,\n entitySchema?: EntitySchema,\n currentStatus?: string\n ): Promise<any> {\n if (!entitySchema) {\n if (refOrder instanceof ArrivalNotice) {\n entitySchema = ArrivalNotice\n } else if (refOrder instanceof ReleaseGood) {\n entitySchema = ReleaseGood\n } else if (refOrder instanceof VasOrder) {\n entitySchema = VasOrder\n } else if (refOrder instanceof InventoryCheck) {\n entitySchema = InventoryCheck\n } else if (refOrder instanceof ReturnOrder) {\n entitySchema = ReturnOrder\n }\n }\n\n if (!refOrder.id) throw new Error(this.ERROR_MSG.UPDATE.ID_NOT_EXISTS)\n if (!refOrder.updater?.id) refOrder = this.setStamp(refOrder)\n\n if (currentStatus && entitySchema == ReleaseGood) {\n\n let res = await getRepository(entitySchema).query(\n `\n update release_goods\n set status = $1\n where id = $2\n and status = $3\n returning id\n `,\n [refOrder.status, refOrder.id, currentStatus]\n )\n\n if (res[1] == 0) {\n this.trxMgr.queryRunner.rollbackTransaction()\n throw new Error('Worksheet has already been created')\n }\n }\n\n return await this.trxMgr.getRepository(entitySchema).save(refOrder)\n }\n\n /**\n * @summary Update order targets (OrderProduct, OrderInventory, OrderVas)\n * @description\n * Update order targets like (OrderProduct, OrderInventory, OrderVas)\n */\n async updateOrderTargets(orderTargets: OrderTargetTypes[], entitySchema?: EntitySchema): Promise<any> {\n if (!entitySchema) {\n if (orderTargets[0] instanceof OrderProduct) {\n entitySchema = OrderProduct\n } else if (orderTargets[0] instanceof OrderInventory) {\n entitySchema = OrderInventory\n } else if (orderTargets[0] instanceof OrderVas) {\n entitySchema = OrderVas\n }\n }\n\n if (orderTargets.some((orderTarget: any) => !orderTarget.id)) throw new Error(this.ERROR_MSG.UPDATE.ID_NOT_EXISTS)\n orderTargets.forEach((orderTarget: OrderTargetTypes) => {\n if (!orderTarget.updater?.id) orderTarget = this.setStamp(orderTarget)\n })\n\n return await this.trxMgr.getRepository(entitySchema).save(orderTargets)\n }\n\n /**\n * @summary generate worksheet and worksheet details\n * @description It will generate worksheet and worksheet details in onetime\n * Step 1. Call createWorksheet to create worksheet\n * The status of worksheet will be DEACTIVATED by default\n * You can change it through passing additionalProps\n * Step 2. Update status of order targets\n * Beacuse its status can be different based on type of worksheet\n * Step 3. Call createWorksheetDetails to create worksheet details\n * Step 4. Call updateRefOrder to change status of reference order\n */\n async generateWorksheet(\n worksheetType: string,\n refOrder: ReferenceOrderType,\n orderTargets: OrderTargetTypes[],\n refOrderStatus: string,\n orderTargetStatus: string,\n additionalProps: Partial<Worksheet> = {}\n ): Promise<Worksheet> {\n const worksheet: Worksheet = await this.createWorksheet(refOrder, worksheetType, additionalProps)\n\n orderTargets.forEach((orderTarget: OrderTargetTypes) => {\n orderTarget.status = orderTargetStatus\n })\n orderTargets = await this.updateOrderTargets(orderTargets)\n\n worksheet.worksheetDetails = await this.createWorksheetDetails(worksheet, worksheetType, orderTargets)\n\n refOrder.status = refOrderStatus\n await this.updateRefOrder(refOrder)\n\n return worksheet\n }\n\n // @chernhaoee I think the naming of this function is not proper. Seems like it should be something like \"updateLoadingWorksheet\" since the logic targets only Loading Order Target\n async updateWorksheet(\n worksheetType: string,\n refOrder: ReferenceOrderType,\n worksheet: Worksheet,\n orderTargets: OrderTargetTypes[],\n refOrderStatus: string,\n orderTargetStatus: string\n ): Promise<Worksheet> {\n let newOrderTarget = []\n\n orderTargets.forEach((orderTarget: OrderTargetTypes) => {\n orderTarget.status = orderTargetStatus\n })\n orderTargets = await this.updateOrderTargets(orderTargets)\n\n for (let orderTarget of orderTargets) {\n try {\n await this.findWorksheetDetail({\n targetInventory: orderTarget.id,\n type: WORKSHEET_TYPE.LOADING\n })\n } catch (e) {\n newOrderTarget.push(orderTarget)\n }\n }\n\n worksheet.worksheetDetails = await this.createWorksheetDetails(worksheet, worksheetType, newOrderTarget)\n\n // find worksheet details that doesnt exist based on order inventory\n //worksheet.worksheetDetails = await this.findWorksheetDetail(worksheet.id)\n\n refOrder.status = refOrderStatus\n await this.updateRefOrder(refOrder)\n\n return worksheet\n }\n\n async generateBatchWorksheet(\n worksheetType: string,\n batchPickingWorksheet: Worksheet,\n orderTargets: OrderTargetTypes[],\n orderTargetStatus: string,\n additionalProps: Partial<Worksheet> = {}\n ): Promise<Worksheet> {\n const worksheet: Worksheet = await this.createBatchWorksheet(\n batchPickingWorksheet.taskNo,\n batchPickingWorksheet.bizplace,\n worksheetType,\n additionalProps\n )\n\n orderTargets.forEach((orderTarget: OrderTargetTypes) => {\n orderTarget.status = orderTargetStatus\n })\n orderTargets = await this.updateOrderTargets(orderTargets)\n\n worksheet.worksheetDetails = await this.createWorksheetDetails(worksheet, worksheetType, orderTargets)\n\n return worksheet\n }\n\n /**\n * @summary Activate worksheet\n * @description It will activate passed worksheet\n * Every passed worksheet and worksheet details should have value on its id field\n * Because this function has logic to update worksheet and worksheet details\n * Step 1. Check whether every passed worksheet and worksheet details has id\n * Step 2. Change worksheet properly and update it\n * Step 3. Change worksheet details properly and update it\n */\n async activateWorksheet(\n worksheet: Worksheet,\n worksheetDetails: WorksheetDetail[],\n changedWorksheetDetails: Partial<WorksheetDetail>[]\n ): Promise<Worksheet> {\n if (!worksheet.id || worksheetDetails.some((wsd: WorksheetDetail) => !wsd.id)) {\n throw new Error(this.ERROR_MSG.UPDATE.ID_NOT_EXISTS)\n }\n\n worksheet.status = WORKSHEET_STATUS.EXECUTING\n worksheet.startedAt = new Date()\n worksheet.updater = this.user\n worksheet = await this.trxMgr.getRepository(Worksheet).save(worksheet)\n\n worksheetDetails = this.renewWorksheetDetails(worksheetDetails, changedWorksheetDetails, 'name', {\n status: WORKSHEET_STATUS.EXECUTING,\n updater: this.user\n })\n worksheet.worksheetDetails = await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetails)\n\n return worksheet\n }\n\n /**\n * @summary Complete worksheet\n * @description It will activate passed worksheet\n * Passed worksheet should have value on its id field\n * Because this function has logic to update worksheet\n * Step 1. Check whether passed worksheet has id\n * Step 2. Change worksheet properly and update it\n * Step 3. Renew worksheet with relations which is needed to complete worksheet\n * Step 4. Change order targets properly and update it based on type of worksheet\n * Step 5. If passed updatedRefOrderStatus has value it update reference order status\n */\n async completeWorksheet(worksheet: Worksheet, updatedRefOrderStatus?: string): Promise<Worksheet> {\n if (!worksheet.id) throw new Error(this.ERROR_MSG.UPDATE.ID_NOT_EXISTS)\n\n worksheet.status = WORKSHEET_STATUS.DONE\n worksheet.endedAt = new Date()\n worksheet.updater = this.user\n worksheet = await this.trxMgr.getRepository(Worksheet).save(worksheet)\n\n const worksheetType: string = worksheet.type\n worksheet = await this.findWorksheet(worksheet, [\n 'worksheetDetails',\n 'worksheetDetails.targetProduct',\n 'worksheetDetails.targetInventory',\n 'worksheetDetails.targetVas'\n ])\n\n let worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails\n\n worksheetDetails\n .filter((wsd: WorksheetDetail) => wsd.status !== ORDER_INVENTORY_STATUS.REPLACED)\n .forEach((wsd: WorksheetDetail) => {\n wsd.status = WORKSHEET_STATUS.DONE\n wsd.updater = this.user\n })\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetails)\n\n if (worksheetType === WORKSHEET_TYPE.UNLOADING) {\n let targetProducts: OrderProduct[] = worksheet.worksheetDetails.map((wsd: WorksheetDetail) => {\n let targetProduct: OrderProduct = wsd.targetProduct\n targetProduct.status = ORDER_PRODUCT_STATUS.TERMINATED\n targetProduct.updater = this.user\n return targetProduct\n })\n\n await this.updateOrderTargets(targetProducts)\n } else if (worksheetType === WORKSHEET_TYPE.VAS) {\n let targetVASs: OrderVas[] = worksheet.worksheetDetails.map((wsd: WorksheetDetail) => {\n let targetVAS: OrderVas = wsd.targetVas\n targetVAS.status = ORDER_VAS_STATUS.TERMINATED\n targetVAS.updater = this.user\n return targetVAS\n })\n\n await this.updateOrderTargets(targetVASs)\n } else if (\n worksheetType === WORKSHEET_TYPE.PUTAWAY ||\n worksheetType === WORKSHEET_TYPE.PICKING ||\n worksheetType === WORKSHEET_TYPE.PACKING ||\n worksheetType === WORKSHEET_TYPE.LOADING ||\n worksheetType === WORKSHEET_TYPE.WAREHOUSE_RETURN ||\n worksheetType === WORKSHEET_TYPE.UNLOADING_RETURN\n ) {\n let targetInventories: OrderInventory[] = worksheet.worksheetDetails\n .filter((wsd: WorksheetDetail) => wsd.status !== ORDER_INVENTORY_STATUS.REPLACED)\n .map((wsd: WorksheetDetail) => {\n let targetInventory: OrderInventory = wsd.targetInventory\n targetInventory.status = ORDER_INVENTORY_STATUS.TERMINATED\n targetInventory.updater = this.user\n return targetInventory\n })\n\n await this.updateOrderTargets(targetInventories)\n }\n\n if (updatedRefOrderStatus) {\n const refOrder: ReferenceOrderType = await this.extractRefOrderFromWorksheet(worksheet)\n refOrder.status = updatedRefOrderStatus\n refOrder.updater = this.user\n await this.updateRefOrder(refOrder)\n }\n\n return worksheet\n }\n\n /**\n * @summary Renew worksheet details by changed worksheet details\n * @description When you want to merge changed worksheet detail list into original worksheet detail list\n * you can use this function\n * it will loop through whole passed original worksheet details and find out matched changed one by value of 'ID' or its 'name'\n * Because of this, every passed origin worksheet details and changed worksheet details should have one of those values\n */\n renewWorksheetDetails(\n originWSDs: WorksheetDetail[],\n changedWSDs: Partial<WorksheetDetail>[],\n identifier: string,\n additionalProps: Partial<WorksheetDetail> = {}\n ): WorksheetDetail[] {\n if (\n originWSDs.some((wsd: WorksheetDetail) => !wsd[identifier]) ||\n changedWSDs.some((wsd: Partial<WorksheetDetail>) => !wsd[identifier])\n ) {\n throw new Error(\n this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY(\n 'renew worksheet details',\n `some passed parameter doesn't have identifier (${identifier})`\n )\n )\n }\n\n return originWSDs.map((originWSD: WorksheetDetail) => {\n const changedWSD: Partial<WorksheetDetail> = this.findMatchedWSD(originWSD[identifier], changedWSDs)\n\n return {\n ...originWSD,\n ...changedWSD,\n ...additionalProps\n }\n })\n }\n\n /**\n * @summary Find out matched worksheet detail by identifier\n * @description Find out matched worksheet detail by identifier\n * identifier can be 'ID' or 'name' of worksheet detail\n */\n findMatchedWSD(identifier: string, candidates: any[]): any {\n return candidates.find(\n (candidate: Partial<WorksheetDetail>) => candidate.id === identifier || candidate.name === identifier\n )\n }\n\n /**\n * @summary Valitiy checker\n * @description It will try to check whether passed record has same properties with passed conditions\n * Basically it will check equality of value\n * If you want to check advanced validation you can pass function to customize the logic of validation\n * Passed function will be call with actual value of record as parameter\n */\n checkRecordValidity(record: Record<string, any>, conditions: Record<string, any>): void {\n for (let field in conditions) {\n let isValid: boolean = false\n if (typeof conditions[field] === 'function') {\n isValid = conditions[field](record[field])\n } else {\n isValid = conditions[field] === record[field]\n }\n\n if (!isValid)\n throw new Error(this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE(field, conditions[field], record[field]))\n }\n }\n\n /**\n * @summary Notify to passed users\n * @description Passed notification message will be sent to passed users\n */\n async notifyToUsers(users: User[], message: NotificationMsgInterface): Promise<void> {\n const receivers: any[] = users.map(user => user.id)\n\n /**\n * @notes Temporary off sendNotification due to suspect of causing wms down\n */\n\n // await sendNotification({\n // receivers,\n // message\n // })\n }\n\n /**\n * @summary Notify to office admin\n * @description Passed notification message will be sent to office admin of current domain\n * default role name is defiend as ROLE_NAME.OFFICE_ADMIn by default\n * You can change role name by passing roleName as parameter\n */\n async notifyToOfficeAdmin(message: NotificationMsgInterface, roleName?: string): Promise<void> {\n const users: User[] = await this.trxMgr\n .getRepository('users_roles')\n .createQueryBuilder('ur')\n .select('ur.users_id', 'id')\n .where(qb => {\n const subQuery = qb\n .subQuery()\n .select('role.id')\n .from(Role, 'role')\n .where('role.name = :roleName', { roleName: roleName || this.ROLE_NAMES.OFFICE_ADMIN })\n .andWhere('role.domain_id = :domainId', { domainId: this.domain.id })\n .getQuery()\n return 'ur.roles_id IN ' + subQuery\n })\n .getRawMany()\n\n this.notifyToUsers(users, message)\n }\n\n /**\n * @summary Notify to customer of passed bizplace\n * @description Passed notification message will be sent to customer of passed bizplace\n */\n async notifyToCustomer(bizplace: Bizplace, message: NotificationMsgInterface): Promise<void> {\n const users: any[] = await getDomainUsers(bizplace, this.trxMgr)\n\n this.notifyToUsers(users, message)\n }\n\n /**\n * @summary extract out referenc order from given worksheet\n * @description If it doesn't have any reference order\n * find worksheet with every possible reference order once again\n * and extract out reference order from found worksheet\n */\n async extractRefOrderFromWorksheet(worksheet: Worksheet): Promise<ReferenceOrderType> {\n let refOrder: ReferenceOrderType =\n worksheet.arrivalNotice ||\n worksheet.releaseGood ||\n worksheet.vasOrder ||\n worksheet.inventoryCheck ||\n worksheet.returnOrder ||\n null\n if (!refOrder) {\n const wsWithRefOrd: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({\n where: { id: worksheet.id },\n relations: ['arrivalNotice', 'releaseGood', 'vasOrder', 'inventoryCheck', 'returnOrder']\n })\n\n refOrder =\n wsWithRefOrd.arrivalNotice ||\n wsWithRefOrd.releaseGood ||\n wsWithRefOrd.vasOrder ||\n wsWithRefOrd.inventoryCheck ||\n wsWithRefOrd.returnOrder ||\n null\n if (!refOrder) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(worksheet.id))\n }\n\n return refOrder\n }\n\n /**\n * @summary extract out reference orders from given merged order worksheet\n * @description If it doesn't have any reference order\n * find worksheet with every possible reference order once again\n * and extract out reference order from found worksheet\n */\n async extractMultipleRefOrderFromWorksheet(worksheet: Worksheet): Promise<ReferenceOrderType> {\n const wsdWithRefOrd: WorksheetDetail[] = await this.trxMgr.getRepository(WorksheetDetail).find({\n where: { domain: { id: this.domain.id }, worksheet: { id: worksheet.id } },\n relations: ['targetInventory', 'targetInventory.releaseGood']\n })\n\n let refOrder: ReferenceOrderType[] = wsdWithRefOrd.map((ord: WorksheetDetail) => ord.targetInventory.releaseGood)\n\n if (!refOrder) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(worksheet.id))\n\n return refOrder\n }\n\n /**\n * @summary Check whether passed pallet is existing alreay\n * @description It will try to count inventories which has same domain and same pallet Id and not terminated one\n * If there's positive result it will throw an error cause pallet is duplicated\n */\n async checkPalletDuplication(palletId: string): Promise<void> {\n const duplicatedPalletCnt: number = await this.trxMgr.getRepository(Inventory).countBy({\n domain: { id: this.domain.id },\n palletId,\n status: Not(Equal(INVENTORY_STATUS.TERMINATED))\n })\n\n if (duplicatedPalletCnt) throw new Error(this.ERROR_MSG.VALIDITY.DUPLICATED('Pallet ID', palletId))\n\n const duplicatedReusablePalletCnt: number = await this.trxMgr.getRepository(Pallet).count({\n where: {\n domain: { id: this.domain.id },\n name: palletId\n }\n })\n\n if (duplicatedReusablePalletCnt) throw new Error(this.ERROR_MSG.VALIDITY.DUPLICATED('Pallet ID', palletId))\n }\n\n /**\n * @summary Check whether passed carton is existing alreay\n * @description It will try to count inventories which has same domain and same carton Id and not terminated one\n * If there's positive result it will throw an error cause carton is duplicated\n */\n async checkCartonDuplication(cartonId: string, orderId: string): Promise<void> {\n const duplicatedCartonCnt: number = await this.trxMgr.getRepository(Inventory).countBy({\n domain: { id: this.domain.id },\n cartonId,\n refOrderId: Not(Equal(orderId)),\n status: Not(Equal(INVENTORY_STATUS.TERMINATED))\n })\n\n if (duplicatedCartonCnt) throw new Error(this.ERROR_MSG.VALIDITY.DUPLICATED('Carton ID', cartonId))\n }\n\n /**\n * @summary Check whether passed serial number is existing already\n * @description It will try to count inventories which has same domain and same serial number and and not terminated one\n * If there's positive result it will throw an error cause serial number is duplicated\n */\n async checkSerialNumberDuplication(serialNumber: string, product: Product): Promise<void> {\n const duplicatedSerialNumberCnt: number = await this.trxMgr.getRepository(InventoryItem).countBy({\n domain: { id: this.domain.id },\n product: { id: product.id },\n serialNumber,\n status: Not(Equal(INVENTORY_STATUS.DELETED))\n })\n\n if (duplicatedSerialNumberCnt) throw new Error(this.ERROR_MSG.VALIDITY.DUPLICATED('Serial Number', serialNumber))\n }\n\n /**\n * @summary Check for product child qty at any scanned level\n * @description It will check every level of product detail by comparing scanned level and GAN registered level.\n * By getting the level that has relation, child qty will be retrieved\n * 1st level: PALLET -> 2 CARTONS (scan), 2nd level: CARTON -> 6 BAGS, 3rd level: BAG -> 10 UNITS, lowest: UNIT (order registered packing type)\n */\n async getChildQty(\n productDetails: ProductDetail[],\n productBarcode: string,\n orderProductDetail: ProductDetail\n ): Promise<number> {\n const scannedProductDetail: ProductDetail = productDetails.find(\n (productDetail: ProductDetail) => productDetail.gtin === productBarcode\n )\n let hasChildRelation: boolean = Boolean(scannedProductDetail?.childProductDetail)\n let hasMatchingChild: boolean\n let childQty: number\n let currentProductDetail: ProductDetail\n\n if (hasChildRelation) {\n hasMatchingChild = Boolean(orderProductDetail.id === scannedProductDetail.childProductDetail.id)\n currentProductDetail = productDetails.find(\n (productDetail: ProductDetail) => productDetail.id === scannedProductDetail.childProductDetail.id\n )\n if (!currentProductDetail)\n throw new Error(this.ERROR_MSG.FIND.NOT_MATCH('inner pack', `GTIN (${productBarcode})`))\n childQty = scannedProductDetail.packingSize\n } else {\n throw new Error(this.ERROR_MSG.FIND.NO_RESULT(productBarcode))\n }\n\n if (hasMatchingChild) {\n childQty = scannedProductDetail.packingSize\n } else {\n while (hasChildRelation && !hasMatchingChild) {\n hasChildRelation = Boolean(currentProductDetail?.childProductDetail)\n\n if (hasChildRelation)\n hasMatchingChild = Boolean(orderProductDetail.id === currentProductDetail.childProductDetail.id)\n\n if (hasMatchingChild) {\n childQty = currentProductDetail.packingSize * childQty\n } else if (!hasMatchingChild && hasChildRelation) {\n childQty = currentProductDetail.packingSize * childQty\n currentProductDetail = productDetails.find(\n (productDetail: ProductDetail) => productDetail.id === currentProductDetail.childProductDetail.id\n )\n } else if (!hasChildRelation && !hasMatchingChild) {\n throw new Error(this.ERROR_MSG.FIND.NO_RESULT(productBarcode))\n }\n }\n }\n\n return childQty\n }\n\n public async getDirectQty(\n productDetail: ProductDetail,\n productBarcode: string,\n qty: number\n ): Promise<any> {\n try {\n console.time('getDirectQty')\n let results = await this.trxMgr.query(`\n WITH RECURSIVE cte as (\n select * from (\n select pd.product_id as \"productId\", id, pd.packing_size as \"packingSize\",\n pd.packing_type as \"packingType\", pd.uom as \"uom\", (pd.uom_value * $2::float) as \"uomValue\", $2::float as \"qty\", pd.gtin \n from product_details pd \n where pd.id = $1\n ) as dt\n union all\n select pd.product_id as \"productId\", pd.id, pd.packing_size as \"packingSize\",\n pd.packing_type as \"packingType\", pd.uom,\n dt1.qty * pd.packing_size * pd.uom_value as \"uomValue\", dt1.qty * pd.packing_size as \"qty\", pd.gtin\n from product_details pd\n inner join cte dt1 on dt1.id = pd.child_product_detail_id \n where pd.deleted_at is null\n )\n select * from cte where gtin = $3\n `, [\n productDetail.id,\n qty,\n productBarcode\n ])\n\n if (results.length <= 0)\n throw new Error(this.ERROR_MSG.FIND.NO_RESULT(productBarcode))\n\n console.timeEnd('getDirectQty')\n return results[0]\n } catch (error) {\n throw error\n }\n }\n\n\n\n /**\n * @summary Check for product child qty at any scanned level\n * @description It will check every level of product detail by comparing scanned level and GAN registered level.\n * By getting the level that has relation, child qty will be retrieved\n * 1st level: PALLET -> 2 CARTONS (scan), 2nd level: CARTON -> 6 BAGS, 3rd level: BAG -> 10 UNITS, lowest: UNIT (order registered packing type)\n */\n async getChildPackingSize(\n productDetails: ProductDetail[],\n defaultProductDetail: ProductDetail,\n unmatchingProductDetail: ProductDetail\n ): Promise<number> {\n let hasChildRelation: boolean = Boolean(unmatchingProductDetail?.childProductDetail)\n let hasMatchingChild: boolean\n let packingSize: number = 1\n let currentChildProductDetail: ProductDetail\n\n if (hasChildRelation) {\n currentChildProductDetail = productDetails.find(\n (productDetail: ProductDetail) => productDetail.id === unmatchingProductDetail.childProductDetail.id\n )\n\n if (!currentChildProductDetail) {\n throw new Error(this.ERROR_MSG.FIND.NOT_MATCH('packing type', `GTIN (${unmatchingProductDetail.gtin})`))\n }\n\n hasMatchingChild = Boolean(defaultProductDetail.id === currentChildProductDetail.id)\n if (hasMatchingChild) {\n packingSize = unmatchingProductDetail.packingSize\n } else {\n packingSize = unmatchingProductDetail.packingSize * packingSize\n }\n } else {\n throw new Error(this.ERROR_MSG.FIND.NO_CHILD_RESULT(`${unmatchingProductDetail.gtin}`))\n }\n\n while (hasChildRelation && !hasMatchingChild) {\n if (hasMatchingChild) {\n packingSize = currentChildProductDetail.packingSize * packingSize // 12 x 10\n } else if (!hasMatchingChild && hasChildRelation) {\n packingSize = currentChildProductDetail.packingSize * packingSize // 12 x 10\n currentChildProductDetail = productDetails.find(\n (productDetail: ProductDetail) => productDetail.id === currentChildProductDetail.childProductDetail.id\n )\n\n hasChildRelation = Boolean(currentChildProductDetail?.childProductDetail)\n hasMatchingChild = Boolean(defaultProductDetail.id === currentChildProductDetail.id)\n } else if (!hasChildRelation && !hasMatchingChild) {\n throw new Error(this.ERROR_MSG.FIND.NO_RESULT(unmatchingProductDetail.gtin))\n }\n }\n\n return packingSize\n }\n\n async createInventory(inventory: Partial<Inventory> | Partial<Inventory>[]): Promise<Inventory | Inventory[]> {\n inventory = this.setStamp(inventory)\n return await this.trxMgr.getRepository(Inventory).save(inventory)\n }\n\n /**\n * @summary Update inventory record\n * @description It will update inventory after set a stamp (domain, updater)\n * The special point of this function is that this changes won't generate inventory history\n * If you want to generate inventory history automatically you would better to use transactionInventory function\n */\n async updateInventory(inventory: Partial<Inventory> | Partial<Inventory>[]): Promise<Inventory | Inventory[]> {\n if (!inventory.id) throw new Error(this.ERROR_MSG.UPDATE.ID_NOT_EXISTS)\n inventory = this.setStamp(inventory)\n return await this.trxMgr.getRepository(Inventory).save(inventory)\n }\n\n /**\n * @summary Do transaction on inventory record\n * @description It will update inventory after set a temp (domain, updater)\n * and then generate inventory history based on current changes\n */\n async transactionInventory(\n inventory: Partial<Inventory>,\n referencOrder: ReferenceOrderType,\n changedQty: number,\n changedWeight: number,\n transactionType: string\n ): Promise<Inventory> {\n if (inventory.id) {\n inventory = await this.updateInventory(inventory)\n } else {\n inventory = await this.createInventory(inventory)\n }\n\n await generateInventoryHistory(\n inventory,\n referencOrder,\n transactionType,\n changedQty,\n changedWeight,\n this.user,\n this.trxMgr\n )\n\n return inventory\n }\n\n /**\n * @summary set common stamp like domain, creator, updater\n * @description Set common stamp to passed record\n * If it doesn't have id it will handle it as creating one\n * If it has id it will handle it as updating one\n */\n setStamp(record: Record<string, any>): Record<string, any> {\n if (!record.domain) record.domain = this.domain\n if (!record.id && !record.creator) record.creator = this.user\n if (!record.updater) record.updater = this.user\n\n return record\n }\n\n /**\n * @summary Extract bizplace from reference order\n * @description It will find reference order with bizplace and return only bizplace to extract it out\n */\n async extractBizplaceFromRefOrder(refOrder: ReferenceOrderType, entitySchema?: EntitySchema): Promise<Bizplace> {\n if (!entitySchema) {\n if (refOrder instanceof ArrivalNotice) {\n entitySchema = ArrivalNotice\n } else if (refOrder instanceof ReleaseGood) {\n entitySchema = ReleaseGood\n } else if (refOrder instanceof VasOrder) {\n entitySchema = VasOrder\n } else if (refOrder instanceof InventoryCheck) {\n entitySchema = InventoryCheck\n } else if (refOrder instanceof ReturnOrder) {\n entitySchema = ReturnOrder\n }\n }\n\n const { bizplace }: { bizplace: Bizplace } = await this.findRefOrder(entitySchema, refOrder, ['bizplace'])\n return bizplace\n }\n\n tidyConditions(record: Record<string, any>): Record<string, any> {\n if ('id' in record) {\n return { id: record.id }\n } else {\n Object.keys(record).forEach((key: string) => {\n if (record[key] === null || record[key] instanceof Date || Array.isArray(record[key])) delete record[key]\n })\n }\n\n return record\n }\n}\n"]}
|
|
@@ -157,7 +157,8 @@ WarehouseBizplaceOnhandInventory = tslib_1.__decorate([
|
|
|
157
157
|
AS src
|
|
158
158
|
inner join domains d on d.id = src."domainId"
|
|
159
159
|
inner join bizplaces b on b.id = src."bizplaceId"
|
|
160
|
-
where src."remainQty"
|
|
160
|
+
where src."remainQty" >= 0
|
|
161
|
+
and src."qty" > 0
|
|
161
162
|
order by src."domainId"
|
|
162
163
|
`
|
|
163
164
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"warehouse-bizplace-onhand-inventory.js","sourceRoot":"","sources":["../../server/entities/warehouse-bizplace-onhand-inventory.ts"],"names":[],"mappings":";;;;AAAA,qCAAgD;
|
|
1
|
+
{"version":3,"file":"warehouse-bizplace-onhand-inventory.js","sourceRoot":"","sources":["../../server/entities/warehouse-bizplace-onhand-inventory.ts"],"names":[],"mappings":";;;;AAAA,qCAAgD;AA+GhD,IAAa,gCAAgC,GAA7C,MAAa,gCAAgC;CAoC5C,CAAA;AAlCC;IADC,IAAA,oBAAU,GAAE;;oEACK;AAGlB;IADC,IAAA,oBAAU,GAAE;;sEACO;AAGpB;IADC,IAAA,oBAAU,GAAE;;kEACG;AAGhB;IADC,IAAA,oBAAU,GAAE;;oEACK;AAGlB;IADC,IAAA,oBAAU,GAAE;;qEACM;AAGnB;IADC,IAAA,oBAAU,GAAE;;qEACM;AAGnB;IADC,IAAA,oBAAU,GAAE;;6DACF;AAGX;IADC,IAAA,oBAAU,GAAE;;mEACI;AAGjB;IADC,IAAA,oBAAU,GAAE;;yEACU;AAGvB;IADC,IAAA,oBAAU,GAAE;;mEACI;AAGjB;IADC,IAAA,oBAAU,GAAE;;wEACS;AAGtB;IADC,IAAA,oBAAU,GAAE;;mEACI;AAnCN,gCAAgC;IA7G5C,IAAA,oBAAU,EAAC;QACV,UAAU,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyGX;KACF,CAAC;GAEW,gCAAgC,CAoC5C;AApCY,4EAAgC","sourcesContent":["import { ViewColumn, ViewEntity } from 'typeorm'\n\n@ViewEntity({\n expression: ` \n select d.name as \"domainName\", b.name as \"bizplaceName\", src.* from (\n WITH oi as (\n select\n oi.domain_id,\n oi.bizplace_id,\n SUM(oi.release_qty) AS release_qty,\n SUM(oi.release_uom_value) AS release_uom_value,\n oi.batch_id,\n oi.batch_id_ref,\n oi.product_id,\n oi.packing_type,\n oi.packing_size,\n oi.uom\n FROM\n order_inventories oi\n WHERE\n (oi.status = 'PENDING' or oi.status = 'PENDING_RECEIVE' or oi.status = 'PENDING_WORKSHEET' or oi.status = 'PENDING_SPLIT')\n AND oi.batch_id NOTNULL\n AND oi.product_id NOTNULL\n AND oi.packing_type NOTNULL\n AND oi.packing_size NOTNULL\n AND oi.inventory_id IS NULL\n GROUP BY\n oi.domain_id,\n oi.bizplace_id,\n oi.batch_id,\n oi.batch_id_ref,\n oi.product_id,\n oi.packing_type,\n oi.packing_size,\n oi.uom\n ) \n -- SINGLE ITEM INVENTORY QUERY\n select\n i.domain_id as \"domainId\",\n i.bizplace_id as \"bizplaceId\",\n i.packing_type as \"packingType\",\n i.packing_size as \"packingSize\",\n i.uom,\n i.product_id as \"productId\",\n null as \"productBundleId\",\n COALESCE(SUM(COALESCE(i.qty, 0)) - SUM(COALESCE(i.locked_qty, 0)) - MAX(COALESCE(oi.release_qty, 0))) AS \"remainQty\",\n COALESCE(SUM(COALESCE(i.uom_value, 0)) - SUM(COALESCE(i.locked_uom_value, 0)) - MAX(COALESCE(oi.release_uom_value, 0)), 0) AS \"remainUomValue\",\n COALESCE(sum(COALESCE(i.qty, 0::double precision))) AS \"qty\",\n COALESCE(sum(COALESCE(i.uom_value, 0::double precision))) AS \"uomValue\",\n 'SINGLE' AS \"groupType\"\n FROM inventories i\n INNER JOIN locations l2 ON i.location_id = l2.id AND i.domain_id = l2.domain_id AND l2.type NOT IN ('QUARANTINE', 'RESERVE')\n LEFT JOIN oi ON i.batch_id = oi.batch_id AND i.product_id = oi.product_id AND i.packing_type = oi.packing_type AND i.packing_size = oi.packing_size AND i.uom = oi.uom\n WHERE i.status = 'STORED'\n GROUP by\n i.domain_id,\n i.bizplace_id,\n i.product_id,\n i.packing_type,\n i.packing_size,\n i.uom\n union all\n -- BUNDLE ITEM INVENTORY QUERY\n SELECT \n pbs.domain_id as \"domainId\",\n pbs.bizplace_id as \"bizplaceId\",\n pb.packing_type as \"packingType\", \n pb.packing_size as \"packingSize\",\n 'UNIT' AS \"uom\", \n null as \"productId\",\n pb.id AS \"productBundleId\",\n COALESCE(MIN(FLOOR(pbs.\"availableQty\")),0) AS \"remainQty\", \n COALESCE(MIN(FLOOR(pbs.\"availableUomValue\")),0) AS \"remainUomValue\",\n COALESCE(MIN(FLOOR(pbs.\"qty\")), 0::double precision) AS \"qty\",\n COALESCE(MIN(FLOOR(pbs.\"uomValue\")), 0::double precision) AS \"uomValue\",\n 'BUNDLE' AS \"groupType\"\n FROM product_bundles pb\n INNER JOIN (\n SELECT i.domain_id, i.bizplace_id, pbs.product_id, pbs.product_bundle_id, min(pbs.bundle_qty),\n (SUM(COALESCE(i.qty, 0)) - SUM(COALESCE(i.locked_qty, 0)) - MAX(COALESCE(oi.release_qty, 0))) / min(pbs.bundle_qty) AS \"availableQty\",\n (SUM(COALESCE(i.uom_value, 0)) - SUM(COALESCE(i.locked_uom_value, 0)) - MAX(COALESCE(oi.release_uom_value, 0))) / min(pbs.bundle_qty) AS \"availableUomValue\",\n (sum(COALESCE(i.qty, 0::double precision))) / min(pbs.bundle_qty)::double precision AS \"qty\",\n (sum(COALESCE(i.uom_value, 0::double precision))) / min(pbs.bundle_qty)::double precision AS \"uomValue\"\n FROM product_bundle_settings pbs \n LEFT JOIN inventories i ON i.product_id = pbs.product_id AND i.status = 'STORED'\n INNER JOIN locations l ON i.location_id = l.id AND i.domain_id = l.domain_id AND l.type NOT IN ('QUARANTINE', 'RESERVE') \n LEFT JOIN oi ON oi.product_id = i.product_id\n GROUP by\n i.domain_id, \n i.bizplace_id,\n pbs.product_id, \n pbs.product_bundle_id\n ) pbs ON pbs.product_bundle_id = pb.id\n GROUP BY \n pbs.domain_id,\n pbs.bizplace_id,\n pb.packing_type, \n pb.packing_size, \n pb.name, \n pb.sku, \n pb.id\n )\n AS src \n inner join domains d on d.id = src.\"domainId\"\n inner join bizplaces b on b.id = src.\"bizplaceId\"\n where src.\"remainQty\" >= 0\n and src.\"qty\" > 0\n order by src.\"domainId\"\n `\n})\n\nexport class WarehouseBizplaceOnhandInventory {\n @ViewColumn()\n domainName: string\n\n @ViewColumn()\n bizplaceName: string\n\n @ViewColumn()\n domainId: string\n\n @ViewColumn()\n bizplaceId: string\n\n @ViewColumn()\n packingType: string\n\n @ViewColumn()\n packingSize: number\n\n @ViewColumn()\n uom: string\n\n @ViewColumn()\n productId: string\n\n @ViewColumn()\n productBundleId: string\n\n @ViewColumn()\n remainQty: number\n\n @ViewColumn()\n remainUomValue: number\n\n @ViewColumn()\n groupType: string\n}\n"]}
|