@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
|
@@ -49,12 +49,20 @@ class ReturningWorksheetController extends vas_worksheet_controller_1.VasWorkshe
|
|
|
49
49
|
const releaseGood = worksheet.releaseGood;
|
|
50
50
|
let targetInventory = worksheetDetail.targetInventory;
|
|
51
51
|
let inventory = targetInventory.inventory;
|
|
52
|
+
let location = inventory.location;
|
|
52
53
|
const originLocation = inventory.location;
|
|
53
54
|
const originPalletId = inventory.palletId;
|
|
54
55
|
const toLocation = await this.trxMgr.getRepository(warehouse_base_1.Location).findOne({
|
|
55
56
|
where: { domain: this.domain, name: toLocationName },
|
|
56
57
|
relations: ['warehouse']
|
|
57
58
|
});
|
|
59
|
+
if (worksheet.type === 'WAREHOUSE_RETURN' && releaseGood.recall) {
|
|
60
|
+
if (![warehouse_base_1.LOCATION_TYPE.QUARANTINE, warehouse_base_1.LOCATION_TYPE.RESERVE].some(l => {
|
|
61
|
+
return l === toLocation.type;
|
|
62
|
+
})) {
|
|
63
|
+
throw new Error('Location should be assigned only to Quarantine or Reserve Zone');
|
|
64
|
+
}
|
|
65
|
+
}
|
|
58
66
|
if (!toLocation)
|
|
59
67
|
throw new Error(this.ERROR_MSG.FIND.NO_RESULT(toLocationName));
|
|
60
68
|
const isPalletDiff = originPalletId !== palletId;
|
|
@@ -96,6 +104,7 @@ class ReturningWorksheetController extends vas_worksheet_controller_1.VasWorkshe
|
|
|
96
104
|
const releaseGood = worksheet.releaseGood;
|
|
97
105
|
let targetInventory = worksheetDetail.targetInventory;
|
|
98
106
|
let inventory = targetInventory.inventory;
|
|
107
|
+
let invLocation = inventory.location;
|
|
99
108
|
if (inventory.cartonId !== cartonId) {
|
|
100
109
|
throw new Error(this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE('cartonId', cartonId, inventory.cartonId));
|
|
101
110
|
}
|
|
@@ -113,6 +122,13 @@ class ReturningWorksheetController extends vas_worksheet_controller_1.VasWorkshe
|
|
|
113
122
|
},
|
|
114
123
|
relations: ['warehouse']
|
|
115
124
|
});
|
|
125
|
+
if (worksheet.type === 'WAREHOUSE_RETURN' && releaseGood.recall) {
|
|
126
|
+
if (![warehouse_base_1.LOCATION_TYPE.QUARANTINE, warehouse_base_1.LOCATION_TYPE.RESERVE].some(l => {
|
|
127
|
+
return l === location.type;
|
|
128
|
+
})) {
|
|
129
|
+
throw new Error('Location should be assigned only to Quarantine or Reserve Zone');
|
|
130
|
+
}
|
|
131
|
+
}
|
|
116
132
|
if (!location)
|
|
117
133
|
throw new Error(this.ERROR_MSG.FIND.NO_RESULT(toLocationName));
|
|
118
134
|
const warehouse = location.warehouse;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"returning-worksheet-controller.js","sourceRoot":"","sources":["../../../server/controllers/outbound/returning-worksheet-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { OrderInventory, ORDER_INVENTORY_STATUS, ORDER_STATUS, ReleaseGood } from '@things-factory/sales-base'\nimport {\n Inventory,\n Warehouse,\n INVENTORY_STATUS,\n INVENTORY_TRANSACTION_TYPE,\n LOCATION_TYPE,\n Location\n} from '@things-factory/warehouse-base'\nimport { In } from 'typeorm'\nimport { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../constants'\nimport { Worksheet, WorksheetDetail } from '../../entities'\nimport { VasWorksheetController } from '../vas/vas-worksheet-controller'\n\nexport class ReturningWorksheetController extends VasWorksheetController {\n async generateReturningWorksheet(\n releaseGoodNo: string,\n targetInventories: Partial<OrderInventory>[]\n ): Promise<Worksheet> {\n const releaseGood: ReleaseGood = await this.findRefOrder(\n ReleaseGood,\n { domain: this.domain, name: releaseGoodNo },\n ['bizplace']\n )\n return await this.generateWorksheet(\n WORKSHEET_TYPE.WAREHOUSE_RETURN,\n releaseGood,\n targetInventories,\n ORDER_STATUS.PARTIAL_RETURN,\n ORDER_INVENTORY_STATUS.RETURNING\n )\n }\n\n async activateReturning(\n worksheetNo: string,\n returningWorksheetDetails: Partial<WorksheetDetail>[]\n ): Promise<Worksheet> {\n const worksheet: Worksheet = await this.findActivatableWorksheet(worksheetNo, WORKSHEET_TYPE.WAREHOUSE_RETURN, [\n 'bizplace',\n 'releaseGood',\n 'worksheetDetails',\n 'worksheetDetails.targetInventory'\n ])\n\n const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails\n const targetInventories: OrderInventory[] = worksheetDetails.map((wsd: WorksheetDetail) => {\n let targetInventory: OrderInventory = wsd.targetInventory\n targetInventory.status = ORDER_INVENTORY_STATUS.RETURNING\n targetInventory.updater = this.user\n return targetInventory\n })\n await this.updateOrderTargets(targetInventories)\n return await this.activateWorksheet(worksheet, worksheetDetails, returningWorksheetDetails)\n }\n\n async returning(\n worksheetDetailName: [string],\n palletId: string,\n cartonId: string,\n toLocation: string\n ): Promise<void> {\n if (cartonId) {\n await this.warehouseReturnPutawayCarton(worksheetDetailName, cartonId, toLocation)\n } else {\n await this.warehouseReturnPutawayPallet(worksheetDetailName[0], palletId, toLocation)\n }\n }\n\n async warehouseReturnPutawayPallet(\n worksheetDetailName: string,\n palletId: string,\n toLocationName: string\n ): Promise<void> {\n let worksheetDetail: WorksheetDetail = await this.findExecutableWorksheetDetailByName(\n worksheetDetailName,\n WORKSHEET_TYPE.WAREHOUSE_RETURN,\n [\n 'worksheet',\n 'worksheet.releaseGood',\n 'targetInventory',\n 'targetInventory.inventory',\n 'targetInventory.inventory.location'\n ]\n )\n\n const worksheet: Worksheet = worksheetDetail.worksheet\n const releaseGood: ReleaseGood = worksheet.releaseGood\n let targetInventory: OrderInventory = worksheetDetail.targetInventory\n let inventory: Inventory = targetInventory.inventory\n\n const originLocation: Location = inventory.location\n const originPalletId: string = inventory.palletId\n\n const toLocation: Location = await this.trxMgr.getRepository(Location).findOne({\n where: { domain: this.domain, name: toLocationName },\n relations: ['warehouse']\n })\n if (!toLocation) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(toLocationName))\n\n const isPalletDiff: boolean = originPalletId !== palletId\n if (isPalletDiff) {\n throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('return', 'pallet ID is not matched'))\n }\n\n inventory.qty += targetInventory.releaseQty\n inventory.uomValue += targetInventory.releaseUomValue\n inventory.status = INVENTORY_STATUS.STORED\n\n const isLocationChanged: boolean = originLocation.id !== toLocation.id\n if (isLocationChanged) {\n inventory.location = toLocation\n inventory.warehouse = toLocation.warehouse\n inventory.zone = toLocation.zone\n }\n\n await this.transactionInventory(\n inventory,\n releaseGood,\n targetInventory.releaseQty,\n targetInventory.releaseUomValue,\n INVENTORY_TRANSACTION_TYPE.RETURN\n )\n\n // update status of order inventory\n targetInventory.status = ORDER_INVENTORY_STATUS.TERMINATED\n targetInventory.updater = this.user\n targetInventory.returnToLocationQty = targetInventory.releaseQty\n targetInventory.returnToLocationUomValue = targetInventory.releaseUomValue\n\n await this.updateOrderTargets([targetInventory])\n\n // update status of worksheet detail (EXECUTING => DONE)\n worksheetDetail.status = WORKSHEET_STATUS.DONE\n worksheetDetail.updater = this.user\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n }\n\n async warehouseReturnPutawayCarton(\n worksheetDetailName: [string],\n cartonId: string,\n toLocationName: string\n ): Promise<void> {\n const worksheetDetails: WorksheetDetail[] = await this.findExecutableWorksheetDetailByNames(\n worksheetDetailName,\n WORKSHEET_TYPE.WAREHOUSE_RETURN,\n [\n 'worksheet',\n 'worksheet.releaseGood',\n 'targetInventory',\n 'targetInventory.inventory',\n 'targetInventory.inventory.location'\n ]\n )\n\n for (var i = 0; i < worksheetDetails.length; i++) {\n const worksheetDetail = worksheetDetails[i]\n const worksheet: Worksheet = worksheetDetail.worksheet\n const releaseGood: ReleaseGood = worksheet.releaseGood\n let targetInventory: OrderInventory = worksheetDetail.targetInventory\n let inventory: Inventory = targetInventory.inventory\n\n if (inventory.cartonId !== cartonId) {\n throw new Error(this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE('cartonId', cartonId, inventory.cartonId))\n }\n\n const location: Location = await this.trxMgr.getRepository(Location).findOne({\n where: {\n domain: this.domain,\n name: toLocationName,\n type: In([\n LOCATION_TYPE.SHELF,\n LOCATION_TYPE.BUFFER,\n LOCATION_TYPE.FLOOR,\n LOCATION_TYPE.BIN,\n LOCATION_TYPE.QUARANTINE\n ])\n },\n relations: ['warehouse']\n })\n\n if (!location) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(toLocationName))\n const warehouse: Warehouse = location.warehouse\n const zone: string = warehouse.zone\n\n inventory.qty += targetInventory.releaseQty\n inventory.uomValue += targetInventory.releaseUomValue\n inventory.location = location\n inventory.status = INVENTORY_STATUS.STORED\n inventory.warehouse = warehouse\n inventory.zone = zone\n await this.transactionInventory(\n inventory,\n releaseGood,\n targetInventory.releaseQty,\n targetInventory.releaseUomValue,\n INVENTORY_TRANSACTION_TYPE.RETURN\n )\n\n targetInventory.status = ORDER_INVENTORY_STATUS.TERMINATED\n targetInventory.updater = this.user\n targetInventory.returnToLocationQty = targetInventory.releaseQty\n targetInventory.returnToLocationUomValue = targetInventory.releaseUomValue\n await this.updateOrderTargets([targetInventory])\n\n worksheetDetail.status = WORKSHEET_STATUS.DONE\n worksheetDetail.updater = this.user\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n }\n }\n\n async completeReturning(releaseGoodNo: string): Promise<Worksheet> {\n const releaseGood: ReleaseGood = await this.findRefOrder(ReleaseGood, {\n domain: this.domain,\n name: releaseGoodNo,\n status: ORDER_STATUS.PARTIAL_RETURN\n })\n\n const worksheet: Worksheet = await this.findWorksheetByRefOrder(releaseGood, WORKSHEET_TYPE.WAREHOUSE_RETURN, [\n 'worksheetDetails',\n 'worksheetDetails.targetInventory'\n ])\n this.checkRecordValidity(worksheet, { status: WORKSHEET_STATUS.EXECUTING })\n\n return await this.completeWorksheet(worksheet, ORDER_STATUS.DONE)\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"returning-worksheet-controller.js","sourceRoot":"","sources":["../../../server/controllers/outbound/returning-worksheet-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { OrderInventory, ORDER_INVENTORY_STATUS, ORDER_STATUS, ReleaseGood } from '@things-factory/sales-base'\nimport {\n Inventory,\n Warehouse,\n INVENTORY_STATUS,\n INVENTORY_TRANSACTION_TYPE,\n LOCATION_TYPE,\n Location\n} from '@things-factory/warehouse-base'\nimport { In } from 'typeorm'\nimport { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../constants'\nimport { Worksheet, WorksheetDetail } from '../../entities'\nimport { VasWorksheetController } from '../vas/vas-worksheet-controller'\n\nexport class ReturningWorksheetController extends VasWorksheetController {\n async generateReturningWorksheet(\n releaseGoodNo: string,\n targetInventories: Partial<OrderInventory>[]\n ): Promise<Worksheet> {\n const releaseGood: ReleaseGood = await this.findRefOrder(\n ReleaseGood,\n { domain: this.domain, name: releaseGoodNo },\n ['bizplace']\n )\n return await this.generateWorksheet(\n WORKSHEET_TYPE.WAREHOUSE_RETURN,\n releaseGood,\n targetInventories,\n ORDER_STATUS.PARTIAL_RETURN,\n ORDER_INVENTORY_STATUS.RETURNING\n )\n }\n\n async activateReturning(\n worksheetNo: string,\n returningWorksheetDetails: Partial<WorksheetDetail>[]\n ): Promise<Worksheet> {\n const worksheet: Worksheet = await this.findActivatableWorksheet(worksheetNo, WORKSHEET_TYPE.WAREHOUSE_RETURN, [\n 'bizplace',\n 'releaseGood',\n 'worksheetDetails',\n 'worksheetDetails.targetInventory'\n ])\n\n const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails\n const targetInventories: OrderInventory[] = worksheetDetails.map((wsd: WorksheetDetail) => {\n let targetInventory: OrderInventory = wsd.targetInventory\n targetInventory.status = ORDER_INVENTORY_STATUS.RETURNING\n targetInventory.updater = this.user\n return targetInventory\n })\n await this.updateOrderTargets(targetInventories)\n return await this.activateWorksheet(worksheet, worksheetDetails, returningWorksheetDetails)\n }\n\n async returning(\n worksheetDetailName: [string],\n palletId: string,\n cartonId: string,\n toLocation: string\n ): Promise<void> {\n if (cartonId) {\n await this.warehouseReturnPutawayCarton(worksheetDetailName, cartonId, toLocation)\n } else {\n await this.warehouseReturnPutawayPallet(worksheetDetailName[0], palletId, toLocation)\n }\n }\n\n async warehouseReturnPutawayPallet(\n worksheetDetailName: string,\n palletId: string,\n toLocationName: string\n ): Promise<void> {\n let worksheetDetail: WorksheetDetail = await this.findExecutableWorksheetDetailByName(\n worksheetDetailName,\n WORKSHEET_TYPE.WAREHOUSE_RETURN,\n [\n 'worksheet',\n 'worksheet.releaseGood',\n 'targetInventory',\n 'targetInventory.inventory',\n 'targetInventory.inventory.location'\n ]\n )\n\n const worksheet: Worksheet = worksheetDetail.worksheet\n const releaseGood: ReleaseGood = worksheet.releaseGood\n let targetInventory: OrderInventory = worksheetDetail.targetInventory\n let inventory: Inventory = targetInventory.inventory\n let location: Location = inventory.location\n\n const originLocation: Location = inventory.location\n const originPalletId: string = inventory.palletId\n\n const toLocation: Location = await this.trxMgr.getRepository(Location).findOne({\n where: { domain: this.domain, name: toLocationName },\n relations: ['warehouse']\n })\n\n if (worksheet.type === 'WAREHOUSE_RETURN' && releaseGood.recall) {\n if (\n ![LOCATION_TYPE.QUARANTINE, LOCATION_TYPE.RESERVE].some(l => {\n return l === toLocation.type\n })\n ) {\n throw new Error('Location should be assigned only to Quarantine or Reserve Zone')\n }\n }\n\n if (!toLocation) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(toLocationName))\n\n const isPalletDiff: boolean = originPalletId !== palletId\n if (isPalletDiff) {\n throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('return', 'pallet ID is not matched'))\n }\n\n inventory.qty += targetInventory.releaseQty\n inventory.uomValue += targetInventory.releaseUomValue\n inventory.status = INVENTORY_STATUS.STORED\n\n const isLocationChanged: boolean = originLocation.id !== toLocation.id\n if (isLocationChanged) {\n inventory.location = toLocation\n inventory.warehouse = toLocation.warehouse\n inventory.zone = toLocation.zone\n }\n\n await this.transactionInventory(\n inventory,\n releaseGood,\n targetInventory.releaseQty,\n targetInventory.releaseUomValue,\n INVENTORY_TRANSACTION_TYPE.RETURN\n )\n\n // update status of order inventory\n targetInventory.status = ORDER_INVENTORY_STATUS.TERMINATED\n targetInventory.updater = this.user\n targetInventory.returnToLocationQty = targetInventory.releaseQty\n targetInventory.returnToLocationUomValue = targetInventory.releaseUomValue\n\n await this.updateOrderTargets([targetInventory])\n\n // update status of worksheet detail (EXECUTING => DONE)\n worksheetDetail.status = WORKSHEET_STATUS.DONE\n worksheetDetail.updater = this.user\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n }\n\n async warehouseReturnPutawayCarton(\n worksheetDetailName: [string],\n cartonId: string,\n toLocationName: string\n ): Promise<void> {\n const worksheetDetails: WorksheetDetail[] = await this.findExecutableWorksheetDetailByNames(\n worksheetDetailName,\n WORKSHEET_TYPE.WAREHOUSE_RETURN,\n [\n 'worksheet',\n 'worksheet.releaseGood',\n 'targetInventory',\n 'targetInventory.inventory',\n 'targetInventory.inventory.location'\n ]\n )\n\n for (var i = 0; i < worksheetDetails.length; i++) {\n const worksheetDetail = worksheetDetails[i]\n const worksheet: Worksheet = worksheetDetail.worksheet\n const releaseGood: ReleaseGood = worksheet.releaseGood\n let targetInventory: OrderInventory = worksheetDetail.targetInventory\n let inventory: Inventory = targetInventory.inventory\n let invLocation: Location = inventory.location\n\n if (inventory.cartonId !== cartonId) {\n throw new Error(this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE('cartonId', cartonId, inventory.cartonId))\n }\n\n const location: Location = await this.trxMgr.getRepository(Location).findOne({\n where: {\n domain: this.domain,\n name: toLocationName,\n type: In([\n LOCATION_TYPE.SHELF,\n LOCATION_TYPE.BUFFER,\n LOCATION_TYPE.FLOOR,\n LOCATION_TYPE.BIN,\n LOCATION_TYPE.QUARANTINE\n ])\n },\n relations: ['warehouse']\n })\n\n if (worksheet.type === 'WAREHOUSE_RETURN' && releaseGood.recall) {\n if (\n ![LOCATION_TYPE.QUARANTINE, LOCATION_TYPE.RESERVE].some(l => {\n return l === location.type\n })\n ) {\n throw new Error('Location should be assigned only to Quarantine or Reserve Zone')\n }\n }\n\n if (!location) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(toLocationName))\n const warehouse: Warehouse = location.warehouse\n const zone: string = warehouse.zone\n\n inventory.qty += targetInventory.releaseQty\n inventory.uomValue += targetInventory.releaseUomValue\n inventory.location = location\n inventory.status = INVENTORY_STATUS.STORED\n inventory.warehouse = warehouse\n inventory.zone = zone\n await this.transactionInventory(\n inventory,\n releaseGood,\n targetInventory.releaseQty,\n targetInventory.releaseUomValue,\n INVENTORY_TRANSACTION_TYPE.RETURN\n )\n\n targetInventory.status = ORDER_INVENTORY_STATUS.TERMINATED\n targetInventory.updater = this.user\n targetInventory.returnToLocationQty = targetInventory.releaseQty\n targetInventory.returnToLocationUomValue = targetInventory.releaseUomValue\n await this.updateOrderTargets([targetInventory])\n\n worksheetDetail.status = WORKSHEET_STATUS.DONE\n worksheetDetail.updater = this.user\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n }\n }\n\n async completeReturning(releaseGoodNo: string): Promise<Worksheet> {\n const releaseGood: ReleaseGood = await this.findRefOrder(ReleaseGood, {\n domain: this.domain,\n name: releaseGoodNo,\n status: ORDER_STATUS.PARTIAL_RETURN\n })\n\n const worksheet: Worksheet = await this.findWorksheetByRefOrder(releaseGood, WORKSHEET_TYPE.WAREHOUSE_RETURN, [\n 'worksheetDetails',\n 'worksheetDetails.targetInventory'\n ])\n this.checkRecordValidity(worksheet, { status: WORKSHEET_STATUS.EXECUTING })\n\n return await this.completeWorksheet(worksheet, ORDER_STATUS.DONE)\n }\n}\n"]}
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SortingWorksheetController = void 0;
|
|
4
4
|
const typeorm_1 = require("typeorm");
|
|
5
|
-
const vas_worksheet_controller_1 = require("../vas/vas-worksheet-controller");
|
|
6
|
-
const warehouse_base_1 = require("@things-factory/warehouse-base");
|
|
7
5
|
const sales_base_1 = require("@things-factory/sales-base");
|
|
8
|
-
const
|
|
6
|
+
const warehouse_base_1 = require("@things-factory/warehouse-base");
|
|
9
7
|
const constants_1 = require("../../constants");
|
|
8
|
+
const entities_1 = require("../../entities");
|
|
9
|
+
const vas_worksheet_controller_1 = require("../vas/vas-worksheet-controller");
|
|
10
10
|
class SortingWorksheetController extends vas_worksheet_controller_1.VasWorksheetController {
|
|
11
11
|
async generateSortingWorksheet(batchPickingWorksheet, targetInventories) {
|
|
12
12
|
const worksheet = await this.generateBatchWorksheet(constants_1.WORKSHEET_TYPE.SORTING, batchPickingWorksheet, targetInventories, sales_base_1.ORDER_INVENTORY_STATUS.READY_TO_SORT);
|
|
@@ -386,11 +386,11 @@ class SortingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
|
|
|
386
386
|
throw new Error('Tote has been sealed, please try another tote!');
|
|
387
387
|
}
|
|
388
388
|
//if found order tote then check if order tote item exist
|
|
389
|
-
const foundOrderToteItem = await this.trxMgr.getRepository(sales_base_1.OrderToteItem).
|
|
390
|
-
domain: this.domain,
|
|
391
|
-
orderProduct: targetProduct,
|
|
392
|
-
orderInventory: targetInventory,
|
|
393
|
-
orderTote: foundOrderTote
|
|
389
|
+
const foundOrderToteItem = await this.trxMgr.getRepository(sales_base_1.OrderToteItem).findOneBy({
|
|
390
|
+
domain: { id: this.domain.id },
|
|
391
|
+
orderProduct: { id: targetProduct.id },
|
|
392
|
+
orderInventory: { id: targetInventory.id },
|
|
393
|
+
orderTote: { id: foundOrderTote.id }
|
|
394
394
|
});
|
|
395
395
|
//if not order tote item doesnt exist then create one
|
|
396
396
|
if (!foundOrderToteItem) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sorting-worksheet-controller.js","sourceRoot":"","sources":["../../../server/controllers/outbound/sorting-worksheet-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { IsNull, In } from 'typeorm'\n\nimport { VasWorksheetController } from '../vas/vas-worksheet-controller'\nimport { Product, ProductDetail } from '@things-factory/product-base'\nimport {\n Inventory,\n INVENTORY_TRANSACTION_TYPE,\n InventoryItem,\n INVENTORY_STATUS,\n InventoryNoGenerator,\n INVENTORY_ITEM_SOURCE,\n Tote,\n TOTE_STATUS\n} from '@things-factory/warehouse-base'\nimport {\n ReleaseGood,\n OrderInventory,\n ORDER_INVENTORY_STATUS,\n ORDER_STATUS,\n OrderTote,\n OrderToteItem,\n OrderNoGenerator\n} from '@things-factory/sales-base'\nimport { Worksheet, WorksheetDetail } from '../../entities'\nimport { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../constants'\nimport { temporaryGetRemainInventoryAmount } from 'server/graphql/resolvers/worksheet/vas-transactions/common-utils'\n\nexport class SortingWorksheetController extends VasWorksheetController {\n async generateSortingWorksheet(\n batchPickingWorksheet: Worksheet,\n targetInventories: Partial<OrderInventory>[]\n ): Promise<Worksheet> {\n const worksheet: Worksheet = await this.generateBatchWorksheet(\n WORKSHEET_TYPE.SORTING,\n batchPickingWorksheet,\n targetInventories,\n ORDER_INVENTORY_STATUS.READY_TO_SORT\n )\n\n return worksheet\n }\n\n async activateSorting(worksheetNo: string, sortingWorksheetDetails: WorksheetDetail[]): Promise<Worksheet> {\n const worksheet: Worksheet = await this.findActivatableWorksheet(worksheetNo, WORKSHEET_TYPE.SORTING, [\n 'worksheetDetails',\n 'worksheetDetails.targetInventory',\n 'worksheetDetails.targetInventory.releaseGood'\n ])\n\n const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails\n let targetInventories: OrderInventory[] = worksheetDetails.map((wsd: WorksheetDetail) => wsd.targetInventory)\n\n targetInventories = targetInventories\n .filter(targetInventory => targetInventory.status == ORDER_INVENTORY_STATUS.READY_TO_SORT)\n .map((targetInventory: OrderInventory) => {\n targetInventory.status = ORDER_INVENTORY_STATUS.SORTING\n targetInventory.updater = this.user\n return targetInventory\n })\n\n let releaseGoods: ReleaseGood[] = worksheet.worksheetDetails.map(\n (wsd: WorksheetDetail) => wsd.targetInventory.releaseGood\n )\n releaseGoods = [...new Map(releaseGoods.map(item => [item.id, item])).values()]\n releaseGoods.forEach((releaseGood: ReleaseGood) => {\n releaseGood.status = ORDER_STATUS.SORTING\n })\n await this.trxMgr.getRepository(ReleaseGood).save(releaseGoods)\n\n if (targetInventories.length > 0) await this.updateOrderTargets(targetInventories)\n return await this.activateWorksheet(worksheet, worksheetDetails, sortingWorksheetDetails)\n }\n\n async scanProductSorting(\n taskNo: string,\n releaseGoodNo: string,\n productBarcode: string,\n serialNumber: string,\n toteNo: string\n ): Promise<void> {\n const worksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({\n where: {\n domain: this.domain,\n taskNo,\n type: WORKSHEET_TYPE.SORTING,\n status: WORKSHEET_STATUS.EXECUTING\n },\n relations: [\n 'worksheetDetails',\n 'worksheetDetails.targetInventory',\n 'worksheetDetails.targetInventory.product',\n 'worksheetDetails.targetInventory.orderProduct',\n 'worksheetDetails.targetInventory.bizplace',\n 'worksheetDetails.targetInventory.inventory',\n 'worksheetDetails.targetInventory.inventory.product',\n 'worksheetDetails.targetInventory.inventory.product.productDetails',\n 'worksheetDetails.targetInventory.inventory.product.productDetails.product',\n 'worksheetDetails.targetInventory.releaseGood'\n ]\n })\n\n this.checkRecordValidity(worksheet, { status: WORKSHEET_STATUS.EXECUTING })\n\n const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails\n const orderInventories: OrderInventory[] = worksheetDetails\n .map((wsd: WorksheetDetail) => wsd.targetInventory)\n .filter((oi: OrderInventory) => oi.releaseGood.name === releaseGoodNo)\n\n if (productBarcode) {\n let productDetails: ProductDetail[] = []\n orderInventories.map((oi: OrderInventory) => {\n const foundPDs: ProductDetail[] = oi.inventory && oi.inventory.product && oi.inventory.product.productDetails\n foundPDs.map(productDetail => {\n productDetails.push(productDetail)\n })\n })\n\n const matchingProductDetail: ProductDetail = productDetails.find(\n (productDetail: ProductDetail) => productDetail.gtin === productBarcode\n )\n if (!matchingProductDetail) throw new Error('Unable to find product barcode.')\n const packingType: string = matchingProductDetail.packingType\n const packingSize: number = matchingProductDetail.packingSize\n if (!matchingProductDetail)\n throw new Error(this.ERROR_MSG.PRODUCT.BARCODE_NOT_EXIST(productBarcode, packingType, packingSize))\n\n let matchingOIs: OrderInventory[] = orderInventories.filter(\n (oi: OrderInventory) =>\n oi.packingType === packingType &&\n oi.packingSize === packingSize &&\n oi.product?.id === matchingProductDetail.product?.id\n )\n\n let sortedQty: number = 1\n\n if (!matchingOIs?.length) {\n throw new Error(this.ERROR_MSG.ORDER_ITEM.NO_MATCHING_RESULT(packingType, packingSize))\n } else {\n await Promise.all(\n matchingOIs.map(async (matchingOI: OrderInventory) => {\n const releaseQty: number = matchingOI.releaseQty\n const inventory: Inventory = matchingOI.inventory\n const releaseGood: ReleaseGood = matchingOI.releaseGood\n const product: Product = inventory.product\n\n if (releaseQty != matchingOI?.sortedQty && sortedQty == 1) {\n // Serial Number scanning for batch picking\n if (matchingOI?.refWorksheetId) {\n if (product?.isRequireSerialNumberScanningOutbound) {\n if (!serialNumber || serialNumber == '') {\n throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('sorting', `require serial number`))\n }\n\n let foundSerialNumber: InventoryItem = await this.trxMgr\n .getRepository(InventoryItem)\n .findOne({ where: { domain: this.domain, serialNumber: serialNumber, product } })\n\n if (foundSerialNumber) {\n if (foundSerialNumber.inventoryId !== inventory.id) {\n throw new Error('Serial Number scanned is in another inventory')\n }\n\n if (foundSerialNumber.outboundOrderId) {\n let releaseGood: ReleaseGood = await this.trxMgr\n .getRepository(ReleaseGood)\n .findOne({ where: { id: foundSerialNumber.outboundOrderId } })\n throw new Error(`Inventory Item is already picked/sorted in ${releaseGood.name}`)\n }\n\n foundSerialNumber.status = INVENTORY_STATUS.SORTING\n foundSerialNumber.updater = this.user\n foundSerialNumber.outboundOrderId = releaseGood.id\n\n await this.trxMgr.getRepository(InventoryItem).save(foundSerialNumber)\n } else {\n let inventoryItem: InventoryItem = new InventoryItem()\n inventoryItem.name = InventoryNoGenerator.inventoryItemName()\n inventoryItem.serialNumber = serialNumber\n inventoryItem.status = INVENTORY_STATUS.SORTING\n inventoryItem.outboundOrderId = releaseGood.id\n inventoryItem.source = INVENTORY_ITEM_SOURCE.OUTBOUND\n inventoryItem.product = product\n inventoryItem.inventory = inventory\n inventoryItem.domain = this.domain\n\n await this.trxMgr.getRepository(InventoryItem).save(inventoryItem)\n }\n }\n }\n\n matchingOI.sortedQty = Boolean(matchingOI?.sortedQty) ? matchingOI.sortedQty + sortedQty : sortedQty\n sortedQty -= 1\n if (matchingOI.sortedQty == releaseQty) {\n matchingOI.status = ORDER_INVENTORY_STATUS.SORTED\n await this.updateOrderTargets([matchingOI])\n await this.transactionInventory(inventory, releaseGood, 0, 0, INVENTORY_TRANSACTION_TYPE.SORTING)\n\n let worksheetDetail: WorksheetDetail = worksheetDetails.find(\n wsd => wsd.targetInventory.id === matchingOI.id\n )\n worksheetDetail.status = WORKSHEET_STATUS.DONE\n worksheetDetail.updater = this.user\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n\n let inventoryItems: InventoryItem = await this.trxMgr\n .getRepository(InventoryItem)\n .find({ where: { outboundOrderId: releaseGood.id } })\n\n if (inventoryItems.length > 0) {\n inventoryItems.forEach((itm: InventoryItem) => {\n itm.status = INVENTORY_STATUS.SORTED\n itm.updater = this.user\n })\n\n await this.trxMgr.getRepository(InventoryItem).save(inventoryItems)\n }\n } else if (matchingOI?.sortedQty > releaseQty) {\n const product: Product = matchingOI.inventory.product\n throw new Error(this.ERROR_MSG.ORDER_ITEM.EXCESS_QTY(product.sku, packingType, packingSize))\n } else {\n await this.updateOrderTargets([matchingOI])\n }\n\n if (toteNo) {\n await this.toteScanning(\n toteNo,\n matchingOI.orderProduct,\n matchingOI,\n 1,\n releaseGood,\n matchingOI.bizplace\n )\n }\n }\n })\n )\n }\n }\n }\n\n async sortingProduct(\n taskNo: string,\n releaseGoodNo: string,\n productId: string,\n sortingQty: number,\n serialNumber: string,\n toteNo: string\n ): Promise<void> {\n const worksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({\n where: {\n domain: this.domain,\n taskNo,\n type: WORKSHEET_TYPE.SORTING,\n status: WORKSHEET_STATUS.EXECUTING\n },\n relations: [\n 'worksheetDetails',\n 'worksheetDetails.targetInventory',\n 'worksheetDetails.targetInventory.product',\n 'worksheetDetails.targetInventory.orderProduct',\n 'worksheetDetails.targetInventory.bizplace',\n 'worksheetDetails.targetInventory.inventory',\n 'worksheetDetails.targetInventory.inventory.product',\n 'worksheetDetails.targetInventory.inventory.product.productDetails',\n 'worksheetDetails.targetInventory.inventory.product.productDetails.product',\n 'worksheetDetails.targetInventory.releaseGood'\n ]\n })\n\n this.checkRecordValidity(worksheet, { status: WORKSHEET_STATUS.EXECUTING })\n\n const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails\n let orderInventories: OrderInventory[] = worksheetDetails\n .map((wsd: WorksheetDetail) => wsd.targetInventory)\n .filter((oi: OrderInventory) => oi.releaseGood.name === releaseGoodNo && oi.product.id === productId)\n\n if (!orderInventories?.length) {\n throw new Error(this.ERROR_MSG.FIND.NO_RESULT(productId))\n } else {\n await Promise.all(\n orderInventories.map(async (matchingOI: OrderInventory) => {\n const releaseQty: number = matchingOI.releaseQty\n const inventory: Inventory = matchingOI.inventory\n const releaseGood: ReleaseGood = matchingOI.releaseGood\n const product: Product = matchingOI.inventory.product\n const packingType: string = matchingOI.packingType\n const packingSize: number = matchingOI.packingSize\n\n if (product?.isRequireSerialNumberScanningOutbound) {\n if (!serialNumber || serialNumber == '') {\n throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('sorting', `require serial number`))\n }\n\n let foundSerialNumber: InventoryItem = await this.trxMgr.getRepository(InventoryItem).findOne({\n where: { domain: this.domain, serialNumber: serialNumber, product },\n relations: ['product', 'inventory']\n })\n\n if (foundSerialNumber) {\n if (foundSerialNumber.outboundOrderId) {\n let releaseGood: ReleaseGood = await this.trxMgr\n .getRepository(ReleaseGood)\n .findOne({ where: { id: foundSerialNumber.outboundOrderId } })\n throw new Error(`Inventory Item is already picked/sorted in ${releaseGood.name}`)\n }\n\n foundSerialNumber.status = INVENTORY_STATUS.SORTING\n foundSerialNumber.updater = this.user\n foundSerialNumber.outboundOrderId = releaseGood.id\n\n await this.trxMgr.getRepository(InventoryItem).save(foundSerialNumber)\n } else {\n let inventoryItem: InventoryItem = new InventoryItem()\n inventoryItem.name = InventoryNoGenerator.inventoryItemName()\n inventoryItem.serialNumber = serialNumber\n inventoryItem.status = INVENTORY_STATUS.SORTING\n inventoryItem.source = INVENTORY_ITEM_SOURCE.OUTBOUND\n inventoryItem.outboundOrderId = releaseGood.id\n inventoryItem.product = product\n inventoryItem.inventory = inventory\n inventoryItem.domain = this.domain\n\n foundSerialNumber = await this.trxMgr.getRepository(InventoryItem).save(inventoryItem)\n }\n }\n\n if (toteNo) {\n await this.toteScanning(\n toteNo,\n matchingOI.orderProduct,\n matchingOI,\n sortingQty,\n releaseGood,\n matchingOI.bizplace\n )\n }\n\n if (releaseQty != matchingOI?.sortedQty && sortingQty != 0) {\n if (product?.isRequireSerialNumberScanningOutbound) {\n matchingOI.sortedQty += sortingQty\n } else {\n matchingOI.sortedQty = releaseQty\n }\n\n sortingQty -= releaseQty\n if (matchingOI.sortedQty == releaseQty) {\n matchingOI.status = ORDER_INVENTORY_STATUS.SORTED\n await this.updateOrderTargets([matchingOI])\n await this.transactionInventory(inventory, releaseGood, 0, 0, INVENTORY_TRANSACTION_TYPE.SORTING)\n\n let inventoryItems: InventoryItem = await this.trxMgr\n .getRepository(InventoryItem)\n .find({ where: { outboundOrderId: releaseGood.id } })\n\n if (inventoryItems.length > 0) {\n inventoryItems.forEach((itm: InventoryItem) => {\n itm.status = INVENTORY_STATUS.PACKED\n itm.updater = this.user\n })\n\n await this.trxMgr.getRepository(InventoryItem).save(inventoryItems)\n }\n\n let worksheetDetail: WorksheetDetail = worksheetDetails.find(\n wsd => wsd.targetInventory.id === matchingOI.id\n )\n worksheetDetail.status = WORKSHEET_STATUS.DONE\n worksheetDetail.updater = this.user\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n } else if (matchingOI?.sortedQty > releaseQty) {\n throw new Error(this.ERROR_MSG.ORDER_ITEM.EXCESS_QTY(product.sku, packingType, packingSize))\n } else {\n await this.updateOrderTargets([matchingOI])\n }\n }\n })\n )\n }\n }\n\n async completeOrderSorting(releaseGoodNo: string): Promise<ReleaseGood> {\n try {\n let releaseGood: ReleaseGood = await this.findRefOrder(\n ReleaseGood,\n {\n domain: this.domain,\n name: releaseGoodNo,\n status: ORDER_STATUS.SORTING\n },\n ['bizplace', 'orderInventories']\n )\n\n if (!releaseGood) {\n throw new Error('Order is already sorted')\n }\n\n const foundNotSealedOrderTote = await this.trxMgr\n .getRepository(OrderTote)\n .findOne({ where: { releaseGood, closedDate: IsNull() } })\n\n if (foundNotSealedOrderTote) {\n throw new Error('Please seal the tote(s) before proceeding')\n }\n\n releaseGood.status = ORDER_STATUS.READY_TO_LOAD\n releaseGood.updater = this.user\n await this.trxMgr.getRepository(ReleaseGood).save(releaseGood)\n\n let inventoryItems: InventoryItem = await this.trxMgr\n .getRepository(InventoryItem)\n .find({ where: { outboundOrderId: releaseGood.id } })\n\n if (inventoryItems.length > 0) {\n inventoryItems.forEach((itm: InventoryItem) => {\n itm.status = INVENTORY_STATUS.TERMINATED\n itm.updater = this.user\n })\n\n await this.trxMgr.getRepository(InventoryItem).save(inventoryItems)\n }\n\n return releaseGood\n } catch (e) {\n throw e\n }\n }\n\n async completeWorksheetSorting(taskNo: string): Promise<Worksheet> {\n let worksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({\n where: {\n domain: this.domain,\n taskNo,\n type: WORKSHEET_TYPE.SORTING,\n status: WORKSHEET_STATUS.EXECUTING\n },\n relations: [\n 'worksheetDetails',\n 'worksheetDetails.targetInventory',\n 'worksheetDetails.targetInventory.releaseGood'\n ]\n })\n\n let releaseGoodIds = worksheet.worksheetDetails.map(itm => itm.targetInventory.releaseGood.id)\n\n const foundNotSealedOrderTote = await this.trxMgr\n .getRepository(OrderTote)\n .findOne({ where: { releaseGood: In(releaseGoodIds), closedDate: IsNull() } })\n\n if (foundNotSealedOrderTote) {\n throw new Error('Please seal the tote(s) before proceeding')\n }\n\n this.checkRecordValidity(worksheet, { status: WORKSHEET_STATUS.EXECUTING })\n\n const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails\n const allTaskCompleted: boolean = worksheetDetails.every(wsd => wsd.status === WORKSHEET_STATUS.DONE)\n\n if (!allTaskCompleted)\n throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('complete worksheet', 'few incompleted line items'))\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 return worksheet\n }\n\n private async toteScanning(toteNo, targetProduct, targetInventory, pickedQty, releaseGood, bizplace) {\n //1. find tote\n let foundTote: Tote = await this.trxMgr\n .getRepository(Tote)\n .findOne({ where: { bizplace, name: toteNo, deletedAt: IsNull() } })\n\n if (foundTote?.status == TOTE_STATUS.DAMAGED) {\n throw new Error('Tote is damaged')\n }\n\n if (foundTote?.status == TOTE_STATUS.DISPATCHED) {\n throw new Error('Tote is dispatched')\n }\n\n //2. find order tote\n let foundOrderTote: OrderTote = await this.trxMgr\n .getRepository(OrderTote)\n .findOne({ where: { domain: this.domain, name: toteNo, releaseGood } })\n\n //if order tote not found the create one, if tote not found means it's tote box\n //create order tote item\n if (!foundOrderTote) {\n const orderTote = await this.trxMgr.getRepository(OrderTote).save({\n name: toteNo,\n domain: this.domain,\n releaseGood,\n tote: foundTote ? foundTote : null,\n updater: this.user\n })\n\n const orderToteItem = await this.trxMgr.getRepository(OrderToteItem).save({\n domain: this.domain,\n name: OrderNoGenerator.orderToteItem(),\n orderProduct: targetProduct,\n orderInventory: targetInventory,\n orderTote,\n qty: pickedQty,\n updater: this.user\n })\n } else {\n if (foundOrderTote.closedDate) {\n throw new Error('Tote has been sealed, please try another tote!')\n }\n\n //if found order tote then check if order tote item exist\n const foundOrderToteItem: OrderToteItem = await this.trxMgr.getRepository(OrderToteItem).findOne({\n domain: this.domain,\n orderProduct: targetProduct,\n orderInventory: targetInventory,\n orderTote: foundOrderTote\n })\n\n //if not order tote item doesnt exist then create one\n if (!foundOrderToteItem) {\n const orderToteItem = await this.trxMgr.getRepository(OrderToteItem).save({\n domain: this.domain,\n name: OrderNoGenerator.orderToteItem(),\n orderProduct: targetProduct,\n orderInventory: targetInventory,\n orderTote: foundOrderTote,\n qty: pickedQty,\n updater: this.user\n })\n } else {\n //if found order tote item found then add the quantity\n const orderToteItem = await this.trxMgr.getRepository(OrderToteItem).save({\n ...foundOrderToteItem,\n qty: foundOrderToteItem.qty + pickedQty\n })\n }\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"sorting-worksheet-controller.js","sourceRoot":"","sources":["../../../server/controllers/outbound/sorting-worksheet-controller.ts"],"names":[],"mappings":";;;AAAA,qCAAoC;AAGpC,2DAQmC;AACnC,mEASuC;AAEvC,+CAAkE;AAClE,6CAA2D;AAC3D,8EAAwE;AAExE,MAAa,0BAA2B,SAAQ,iDAAsB;IACpE,KAAK,CAAC,wBAAwB,CAC5B,qBAAgC,EAChC,iBAA4C;QAE5C,MAAM,SAAS,GAAc,MAAM,IAAI,CAAC,sBAAsB,CAC5D,0BAAc,CAAC,OAAO,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,mCAAsB,CAAC,aAAa,CACrC,CAAA;QAED,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,WAAmB,EAAE,uBAA0C;QACnF,MAAM,SAAS,GAAc,MAAM,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE,0BAAc,CAAC,OAAO,EAAE;YACpG,kBAAkB;YAClB,kCAAkC;YAClC,8CAA8C;SAC/C,CAAC,CAAA;QAEF,MAAM,gBAAgB,GAAsB,SAAS,CAAC,gBAAgB,CAAA;QACtE,IAAI,iBAAiB,GAAqB,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAoB,EAAE,EAAE,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;QAE7G,iBAAiB,GAAG,iBAAiB;aAClC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,eAAe,CAAC,MAAM,IAAI,mCAAsB,CAAC,aAAa,CAAC;aACzF,GAAG,CAAC,CAAC,eAA+B,EAAE,EAAE;YACvC,eAAe,CAAC,MAAM,GAAG,mCAAsB,CAAC,OAAO,CAAA;YACvD,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAA;YACnC,OAAO,eAAe,CAAA;QACxB,CAAC,CAAC,CAAA;QAEJ,IAAI,YAAY,GAAkB,SAAS,CAAC,gBAAgB,CAAC,GAAG,CAC9D,CAAC,GAAoB,EAAE,EAAE,CAAC,GAAG,CAAC,eAAe,CAAC,WAAW,CAC1D,CAAA;QACD,YAAY,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;QAC/E,YAAY,CAAC,OAAO,CAAC,CAAC,WAAwB,EAAE,EAAE;YAChD,WAAW,CAAC,MAAM,GAAG,yBAAY,CAAC,OAAO,CAAA;QAC3C,CAAC,CAAC,CAAA;QACF,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,wBAAW,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QAE/D,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAA;QAClF,OAAO,MAAM,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,gBAAgB,EAAE,uBAAuB,CAAC,CAAA;IAC3F,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,MAAc,EACd,aAAqB,EACrB,cAAsB,EACtB,YAAoB,EACpB,MAAc;QAEd,MAAM,SAAS,GAAc,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,oBAAS,CAAC,CAAC,OAAO,CAAC;YAC9E,KAAK,EAAE;gBACL,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,MAAM;gBACN,IAAI,EAAE,0BAAc,CAAC,OAAO;gBAC5B,MAAM,EAAE,4BAAgB,CAAC,SAAS;aACnC;YACD,SAAS,EAAE;gBACT,kBAAkB;gBAClB,kCAAkC;gBAClC,0CAA0C;gBAC1C,+CAA+C;gBAC/C,2CAA2C;gBAC3C,4CAA4C;gBAC5C,oDAAoD;gBACpD,mEAAmE;gBACnE,2EAA2E;gBAC3E,8CAA8C;aAC/C;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,4BAAgB,CAAC,SAAS,EAAE,CAAC,CAAA;QAE3E,MAAM,gBAAgB,GAAsB,SAAS,CAAC,gBAAgB,CAAA;QACtE,MAAM,gBAAgB,GAAqB,gBAAgB;aACxD,GAAG,CAAC,CAAC,GAAoB,EAAE,EAAE,CAAC,GAAG,CAAC,eAAe,CAAC;aAClD,MAAM,CAAC,CAAC,EAAkB,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,KAAK,aAAa,CAAC,CAAA;QAExE,IAAI,cAAc,EAAE;YAClB,IAAI,cAAc,GAAoB,EAAE,CAAA;YACxC,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAkB,EAAE,EAAE;gBAC1C,MAAM,QAAQ,GAAoB,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,CAAA;gBAC7G,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE;oBAC3B,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;gBACpC,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;YAEF,MAAM,qBAAqB,GAAkB,cAAc,CAAC,IAAI,CAC9D,CAAC,aAA4B,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,KAAK,cAAc,CACxE,CAAA;YACD,IAAI,CAAC,qBAAqB;gBAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;YAC9E,MAAM,WAAW,GAAW,qBAAqB,CAAC,WAAW,CAAA;YAC7D,MAAM,WAAW,GAAW,qBAAqB,CAAC,WAAW,CAAA;YAC7D,IAAI,CAAC,qBAAqB;gBACxB,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,iBAAiB,CAAC,cAAc,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAA;YAErG,IAAI,WAAW,GAAqB,gBAAgB,CAAC,MAAM,CACzD,CAAC,EAAkB,EAAE,EAAE;;gBACrB,OAAA,EAAE,CAAC,WAAW,KAAK,WAAW;oBAC9B,EAAE,CAAC,WAAW,KAAK,WAAW;oBAC9B,CAAA,MAAA,EAAE,CAAC,OAAO,0CAAE,EAAE,OAAK,MAAA,qBAAqB,CAAC,OAAO,0CAAE,EAAE,CAAA,CAAA;aAAA,CACvD,CAAA;YAED,IAAI,SAAS,GAAW,CAAC,CAAA;YAEzB,IAAI,CAAC,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,MAAM,CAAA,EAAE;gBACxB,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,kBAAkB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAA;aACxF;iBAAM;gBACL,MAAM,OAAO,CAAC,GAAG,CACf,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,UAA0B,EAAE,EAAE;oBACnD,MAAM,UAAU,GAAW,UAAU,CAAC,UAAU,CAAA;oBAChD,MAAM,SAAS,GAAc,UAAU,CAAC,SAAS,CAAA;oBACjD,MAAM,WAAW,GAAgB,UAAU,CAAC,WAAW,CAAA;oBACvD,MAAM,OAAO,GAAY,SAAS,CAAC,OAAO,CAAA;oBAE1C,IAAI,UAAU,KAAI,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,SAAS,CAAA,IAAI,SAAS,IAAI,CAAC,EAAE;wBACzD,2CAA2C;wBAC3C,IAAI,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,cAAc,EAAE;4BAC9B,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,qCAAqC,EAAE;gCAClD,IAAI,CAAC,YAAY,IAAI,YAAY,IAAI,EAAE,EAAE;oCACvC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,oBAAoB,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC,CAAA;iCAClG;gCAED,IAAI,iBAAiB,GAAkB,MAAM,IAAI,CAAC,MAAM;qCACrD,aAAa,CAAC,8BAAa,CAAC;qCAC5B,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,CAAC,CAAA;gCAEnF,IAAI,iBAAiB,EAAE;oCACrB,IAAI,iBAAiB,CAAC,WAAW,KAAK,SAAS,CAAC,EAAE,EAAE;wCAClD,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;qCACjE;oCAED,IAAI,iBAAiB,CAAC,eAAe,EAAE;wCACrC,IAAI,WAAW,GAAgB,MAAM,IAAI,CAAC,MAAM;6CAC7C,aAAa,CAAC,wBAAW,CAAC;6CAC1B,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,iBAAiB,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;wCAChE,MAAM,IAAI,KAAK,CAAC,8CAA8C,WAAW,CAAC,IAAI,EAAE,CAAC,CAAA;qCAClF;oCAED,iBAAiB,CAAC,MAAM,GAAG,iCAAgB,CAAC,OAAO,CAAA;oCACnD,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAA;oCACrC,iBAAiB,CAAC,eAAe,GAAG,WAAW,CAAC,EAAE,CAAA;oCAElD,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,8BAAa,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;iCACvE;qCAAM;oCACL,IAAI,aAAa,GAAkB,IAAI,8BAAa,EAAE,CAAA;oCACtD,aAAa,CAAC,IAAI,GAAG,qCAAoB,CAAC,iBAAiB,EAAE,CAAA;oCAC7D,aAAa,CAAC,YAAY,GAAG,YAAY,CAAA;oCACzC,aAAa,CAAC,MAAM,GAAG,iCAAgB,CAAC,OAAO,CAAA;oCAC/C,aAAa,CAAC,eAAe,GAAG,WAAW,CAAC,EAAE,CAAA;oCAC9C,aAAa,CAAC,MAAM,GAAG,sCAAqB,CAAC,QAAQ,CAAA;oCACrD,aAAa,CAAC,OAAO,GAAG,OAAO,CAAA;oCAC/B,aAAa,CAAC,SAAS,GAAG,SAAS,CAAA;oCACnC,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;oCAElC,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,8BAAa,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;iCACnE;6BACF;yBACF;wBAED,UAAU,CAAC,SAAS,GAAG,OAAO,CAAC,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAA;wBACpG,SAAS,IAAI,CAAC,CAAA;wBACd,IAAI,UAAU,CAAC,SAAS,IAAI,UAAU,EAAE;4BACtC,UAAU,CAAC,MAAM,GAAG,mCAAsB,CAAC,MAAM,CAAA;4BACjD,MAAM,IAAI,CAAC,kBAAkB,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;4BAC3C,MAAM,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,EAAE,2CAA0B,CAAC,OAAO,CAAC,CAAA;4BAEjG,IAAI,eAAe,GAAoB,gBAAgB,CAAC,IAAI,CAC1D,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE,CAChD,CAAA;4BACD,eAAe,CAAC,MAAM,GAAG,4BAAgB,CAAC,IAAI,CAAA;4BAC9C,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAA;4BACnC,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,0BAAe,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;4BAEtE,IAAI,cAAc,GAAkB,MAAM,IAAI,CAAC,MAAM;iCAClD,aAAa,CAAC,8BAAa,CAAC;iCAC5B,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,eAAe,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;4BAEvD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;gCAC7B,cAAc,CAAC,OAAO,CAAC,CAAC,GAAkB,EAAE,EAAE;oCAC5C,GAAG,CAAC,MAAM,GAAG,iCAAgB,CAAC,MAAM,CAAA;oCACpC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAA;gCACzB,CAAC,CAAC,CAAA;gCAEF,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,8BAAa,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;6BACpE;yBACF;6BAAM,IAAI,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,SAAS,IAAG,UAAU,EAAE;4BAC7C,MAAM,OAAO,GAAY,UAAU,CAAC,SAAS,CAAC,OAAO,CAAA;4BACrD,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAA;yBAC7F;6BAAM;4BACL,MAAM,IAAI,CAAC,kBAAkB,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;yBAC5C;wBAED,IAAI,MAAM,EAAE;4BACV,MAAM,IAAI,CAAC,YAAY,CACrB,MAAM,EACN,UAAU,CAAC,YAAY,EACvB,UAAU,EACV,CAAC,EACD,WAAW,EACX,UAAU,CAAC,QAAQ,CACpB,CAAA;yBACF;qBACF;gBACH,CAAC,CAAC,CACH,CAAA;aACF;SACF;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,MAAc,EACd,aAAqB,EACrB,SAAiB,EACjB,UAAkB,EAClB,YAAoB,EACpB,MAAc;QAEd,MAAM,SAAS,GAAc,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,oBAAS,CAAC,CAAC,OAAO,CAAC;YAC9E,KAAK,EAAE;gBACL,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,MAAM;gBACN,IAAI,EAAE,0BAAc,CAAC,OAAO;gBAC5B,MAAM,EAAE,4BAAgB,CAAC,SAAS;aACnC;YACD,SAAS,EAAE;gBACT,kBAAkB;gBAClB,kCAAkC;gBAClC,0CAA0C;gBAC1C,+CAA+C;gBAC/C,2CAA2C;gBAC3C,4CAA4C;gBAC5C,oDAAoD;gBACpD,mEAAmE;gBACnE,2EAA2E;gBAC3E,8CAA8C;aAC/C;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,4BAAgB,CAAC,SAAS,EAAE,CAAC,CAAA;QAE3E,MAAM,gBAAgB,GAAsB,SAAS,CAAC,gBAAgB,CAAA;QACtE,IAAI,gBAAgB,GAAqB,gBAAgB;aACtD,GAAG,CAAC,CAAC,GAAoB,EAAE,EAAE,CAAC,GAAG,CAAC,eAAe,CAAC;aAClD,MAAM,CAAC,CAAC,EAAkB,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,KAAK,aAAa,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,SAAS,CAAC,CAAA;QAEvG,IAAI,CAAC,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,MAAM,CAAA,EAAE;YAC7B,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAA;SAC1D;aAAM;YACL,MAAM,OAAO,CAAC,GAAG,CACf,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,UAA0B,EAAE,EAAE;gBACxD,MAAM,UAAU,GAAW,UAAU,CAAC,UAAU,CAAA;gBAChD,MAAM,SAAS,GAAc,UAAU,CAAC,SAAS,CAAA;gBACjD,MAAM,WAAW,GAAgB,UAAU,CAAC,WAAW,CAAA;gBACvD,MAAM,OAAO,GAAY,UAAU,CAAC,SAAS,CAAC,OAAO,CAAA;gBACrD,MAAM,WAAW,GAAW,UAAU,CAAC,WAAW,CAAA;gBAClD,MAAM,WAAW,GAAW,UAAU,CAAC,WAAW,CAAA;gBAElD,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,qCAAqC,EAAE;oBAClD,IAAI,CAAC,YAAY,IAAI,YAAY,IAAI,EAAE,EAAE;wBACvC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,oBAAoB,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC,CAAA;qBAClG;oBAED,IAAI,iBAAiB,GAAkB,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,8BAAa,CAAC,CAAC,OAAO,CAAC;wBAC5F,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE;wBACnE,SAAS,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC;qBACpC,CAAC,CAAA;oBAEF,IAAI,iBAAiB,EAAE;wBACrB,IAAI,iBAAiB,CAAC,eAAe,EAAE;4BACrC,IAAI,WAAW,GAAgB,MAAM,IAAI,CAAC,MAAM;iCAC7C,aAAa,CAAC,wBAAW,CAAC;iCAC1B,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,iBAAiB,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;4BAChE,MAAM,IAAI,KAAK,CAAC,8CAA8C,WAAW,CAAC,IAAI,EAAE,CAAC,CAAA;yBAClF;wBAED,iBAAiB,CAAC,MAAM,GAAG,iCAAgB,CAAC,OAAO,CAAA;wBACnD,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAA;wBACrC,iBAAiB,CAAC,eAAe,GAAG,WAAW,CAAC,EAAE,CAAA;wBAElD,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,8BAAa,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;qBACvE;yBAAM;wBACL,IAAI,aAAa,GAAkB,IAAI,8BAAa,EAAE,CAAA;wBACtD,aAAa,CAAC,IAAI,GAAG,qCAAoB,CAAC,iBAAiB,EAAE,CAAA;wBAC7D,aAAa,CAAC,YAAY,GAAG,YAAY,CAAA;wBACzC,aAAa,CAAC,MAAM,GAAG,iCAAgB,CAAC,OAAO,CAAA;wBAC/C,aAAa,CAAC,MAAM,GAAG,sCAAqB,CAAC,QAAQ,CAAA;wBACrD,aAAa,CAAC,eAAe,GAAG,WAAW,CAAC,EAAE,CAAA;wBAC9C,aAAa,CAAC,OAAO,GAAG,OAAO,CAAA;wBAC/B,aAAa,CAAC,SAAS,GAAG,SAAS,CAAA;wBACnC,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;wBAElC,iBAAiB,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,8BAAa,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;qBACvF;iBACF;gBAED,IAAI,MAAM,EAAE;oBACV,MAAM,IAAI,CAAC,YAAY,CACrB,MAAM,EACN,UAAU,CAAC,YAAY,EACvB,UAAU,EACV,UAAU,EACV,WAAW,EACX,UAAU,CAAC,QAAQ,CACpB,CAAA;iBACF;gBAED,IAAI,UAAU,KAAI,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,SAAS,CAAA,IAAI,UAAU,IAAI,CAAC,EAAE;oBAC1D,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,qCAAqC,EAAE;wBAClD,UAAU,CAAC,SAAS,IAAI,UAAU,CAAA;qBACnC;yBAAM;wBACL,UAAU,CAAC,SAAS,GAAG,UAAU,CAAA;qBAClC;oBAED,UAAU,IAAI,UAAU,CAAA;oBACxB,IAAI,UAAU,CAAC,SAAS,IAAI,UAAU,EAAE;wBACtC,UAAU,CAAC,MAAM,GAAG,mCAAsB,CAAC,MAAM,CAAA;wBACjD,MAAM,IAAI,CAAC,kBAAkB,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;wBAC3C,MAAM,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,EAAE,2CAA0B,CAAC,OAAO,CAAC,CAAA;wBAEjG,IAAI,cAAc,GAAkB,MAAM,IAAI,CAAC,MAAM;6BAClD,aAAa,CAAC,8BAAa,CAAC;6BAC5B,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,eAAe,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;wBAEvD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;4BAC7B,cAAc,CAAC,OAAO,CAAC,CAAC,GAAkB,EAAE,EAAE;gCAC5C,GAAG,CAAC,MAAM,GAAG,iCAAgB,CAAC,MAAM,CAAA;gCACpC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAA;4BACzB,CAAC,CAAC,CAAA;4BAEF,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,8BAAa,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;yBACpE;wBAED,IAAI,eAAe,GAAoB,gBAAgB,CAAC,IAAI,CAC1D,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE,CAChD,CAAA;wBACD,eAAe,CAAC,MAAM,GAAG,4BAAgB,CAAC,IAAI,CAAA;wBAC9C,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAA;wBACnC,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,0BAAe,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;qBACvE;yBAAM,IAAI,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,SAAS,IAAG,UAAU,EAAE;wBAC7C,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAA;qBAC7F;yBAAM;wBACL,MAAM,IAAI,CAAC,kBAAkB,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;qBAC5C;iBACF;YACH,CAAC,CAAC,CACH,CAAA;SACF;IACH,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,aAAqB;QAC9C,IAAI;YACF,IAAI,WAAW,GAAgB,MAAM,IAAI,CAAC,YAAY,CACpD,wBAAW,EACX;gBACE,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,IAAI,EAAE,aAAa;gBACnB,MAAM,EAAE,yBAAY,CAAC,OAAO;aAC7B,EACD,CAAC,UAAU,EAAE,kBAAkB,CAAC,CACjC,CAAA;YAED,IAAI,CAAC,WAAW,EAAE;gBAChB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;aAC3C;YAED,MAAM,uBAAuB,GAAG,MAAM,IAAI,CAAC,MAAM;iBAC9C,aAAa,CAAC,sBAAS,CAAC;iBACxB,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,IAAA,gBAAM,GAAE,EAAE,EAAE,CAAC,CAAA;YAE5D,IAAI,uBAAuB,EAAE;gBAC3B,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAA;aAC7D;YAED,WAAW,CAAC,MAAM,GAAG,yBAAY,CAAC,aAAa,CAAA;YAC/C,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAA;YAC/B,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,wBAAW,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;YAE9D,IAAI,cAAc,GAAkB,MAAM,IAAI,CAAC,MAAM;iBAClD,aAAa,CAAC,8BAAa,CAAC;iBAC5B,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,eAAe,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;YAEvD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC7B,cAAc,CAAC,OAAO,CAAC,CAAC,GAAkB,EAAE,EAAE;oBAC5C,GAAG,CAAC,MAAM,GAAG,iCAAgB,CAAC,UAAU,CAAA;oBACxC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAA;gBACzB,CAAC,CAAC,CAAA;gBAEF,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,8BAAa,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;aACpE;YAED,OAAO,WAAW,CAAA;SACnB;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,CAAC,CAAA;SACR;IACH,CAAC;IAED,KAAK,CAAC,wBAAwB,CAAC,MAAc;QAC3C,IAAI,SAAS,GAAc,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,oBAAS,CAAC,CAAC,OAAO,CAAC;YAC5E,KAAK,EAAE;gBACL,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,MAAM;gBACN,IAAI,EAAE,0BAAc,CAAC,OAAO;gBAC5B,MAAM,EAAE,4BAAgB,CAAC,SAAS;aACnC;YACD,SAAS,EAAE;gBACT,kBAAkB;gBAClB,kCAAkC;gBAClC,8CAA8C;aAC/C;SACF,CAAC,CAAA;QAEF,IAAI,cAAc,GAAG,SAAS,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;QAE9F,MAAM,uBAAuB,GAAG,MAAM,IAAI,CAAC,MAAM;aAC9C,aAAa,CAAC,sBAAS,CAAC;aACxB,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,IAAA,YAAE,EAAC,cAAc,CAAC,EAAE,UAAU,EAAE,IAAA,gBAAM,GAAE,EAAE,EAAE,CAAC,CAAA;QAEhF,IAAI,uBAAuB,EAAE;YAC3B,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAA;SAC7D;QAED,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,4BAAgB,CAAC,SAAS,EAAE,CAAC,CAAA;QAE3E,MAAM,gBAAgB,GAAsB,SAAS,CAAC,gBAAgB,CAAA;QACtE,MAAM,gBAAgB,GAAY,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,4BAAgB,CAAC,IAAI,CAAC,CAAA;QAErG,IAAI,CAAC,gBAAgB;YACnB,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,oBAAoB,CAAC,oBAAoB,EAAE,4BAA4B,CAAC,CAAC,CAAA;QAEnH,SAAS,CAAC,MAAM,GAAG,4BAAgB,CAAC,IAAI,CAAA;QACxC,SAAS,CAAC,OAAO,GAAG,IAAI,IAAI,EAAE,CAAA;QAC9B,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAA;QAC7B,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,oBAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAEtE,OAAO,SAAS,CAAA;IAClB,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,eAAe,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ;QACjG,cAAc;QACd,IAAI,SAAS,GAAS,MAAM,IAAI,CAAC,MAAM;aACpC,aAAa,CAAC,qBAAI,CAAC;aACnB,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,IAAA,gBAAM,GAAE,EAAE,EAAE,CAAC,CAAA;QAEtE,IAAI,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,MAAM,KAAI,4BAAW,CAAC,OAAO,EAAE;YAC5C,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAA;SACnC;QAED,IAAI,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,MAAM,KAAI,4BAAW,CAAC,UAAU,EAAE;YAC/C,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;SACtC;QAED,oBAAoB;QACpB,IAAI,cAAc,GAAc,MAAM,IAAI,CAAC,MAAM;aAC9C,aAAa,CAAC,sBAAS,CAAC;aACxB,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC,CAAA;QAEzE,+EAA+E;QAC/E,wBAAwB;QACxB,IAAI,CAAC,cAAc,EAAE;YACnB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,sBAAS,CAAC,CAAC,IAAI,CAAC;gBAChE,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,WAAW;gBACX,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;gBAClC,OAAO,EAAE,IAAI,CAAC,IAAI;aACnB,CAAC,CAAA;YAEF,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,0BAAa,CAAC,CAAC,IAAI,CAAC;gBACxE,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,IAAI,EAAE,6BAAgB,CAAC,aAAa,EAAE;gBACtC,YAAY,EAAE,aAAa;gBAC3B,cAAc,EAAE,eAAe;gBAC/B,SAAS;gBACT,GAAG,EAAE,SAAS;gBACd,OAAO,EAAE,IAAI,CAAC,IAAI;aACnB,CAAC,CAAA;SACH;aAAM;YACL,IAAI,cAAc,CAAC,UAAU,EAAE;gBAC7B,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAA;aAClE;YAED,yDAAyD;YACzD,MAAM,kBAAkB,GAAkB,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,0BAAa,CAAC,CAAC,SAAS,CAAC;gBACjG,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE;gBAC9B,YAAY,EAAE,EAAE,EAAE,EAAE,aAAa,CAAC,EAAE,EAAE;gBACtC,cAAc,EAAE,EAAE,EAAE,EAAE,eAAe,CAAC,EAAE,EAAE;gBAC1C,SAAS,EAAE,EAAE,EAAE,EAAE,cAAc,CAAC,EAAE,EAAE;aACrC,CAAC,CAAA;YAEF,qDAAqD;YACrD,IAAI,CAAC,kBAAkB,EAAE;gBACvB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,0BAAa,CAAC,CAAC,IAAI,CAAC;oBACxE,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,IAAI,EAAE,6BAAgB,CAAC,aAAa,EAAE;oBACtC,YAAY,EAAE,aAAa;oBAC3B,cAAc,EAAE,eAAe;oBAC/B,SAAS,EAAE,cAAc;oBACzB,GAAG,EAAE,SAAS;oBACd,OAAO,EAAE,IAAI,CAAC,IAAI;iBACnB,CAAC,CAAA;aACH;iBAAM;gBACL,sDAAsD;gBACtD,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,0BAAa,CAAC,CAAC,IAAI,iCACpE,kBAAkB,KACrB,GAAG,EAAE,kBAAkB,CAAC,GAAG,GAAG,SAAS,IACvC,CAAA;aACH;SACF;IACH,CAAC;CACF;AAjgBD,gEAigBC","sourcesContent":["import { In, IsNull } from 'typeorm'\n\nimport { Product, ProductDetail } from '@things-factory/product-base'\nimport {\n ORDER_INVENTORY_STATUS,\n ORDER_STATUS,\n OrderInventory,\n OrderNoGenerator,\n OrderTote,\n OrderToteItem,\n ReleaseGood\n} from '@things-factory/sales-base'\nimport {\n Inventory,\n INVENTORY_ITEM_SOURCE,\n INVENTORY_STATUS,\n INVENTORY_TRANSACTION_TYPE,\n InventoryItem,\n InventoryNoGenerator,\n Tote,\n TOTE_STATUS\n} from '@things-factory/warehouse-base'\n\nimport { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../constants'\nimport { Worksheet, WorksheetDetail } from '../../entities'\nimport { VasWorksheetController } from '../vas/vas-worksheet-controller'\n\nexport class SortingWorksheetController extends VasWorksheetController {\n async generateSortingWorksheet(\n batchPickingWorksheet: Worksheet,\n targetInventories: Partial<OrderInventory>[]\n ): Promise<Worksheet> {\n const worksheet: Worksheet = await this.generateBatchWorksheet(\n WORKSHEET_TYPE.SORTING,\n batchPickingWorksheet,\n targetInventories,\n ORDER_INVENTORY_STATUS.READY_TO_SORT\n )\n\n return worksheet\n }\n\n async activateSorting(worksheetNo: string, sortingWorksheetDetails: WorksheetDetail[]): Promise<Worksheet> {\n const worksheet: Worksheet = await this.findActivatableWorksheet(worksheetNo, WORKSHEET_TYPE.SORTING, [\n 'worksheetDetails',\n 'worksheetDetails.targetInventory',\n 'worksheetDetails.targetInventory.releaseGood'\n ])\n\n const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails\n let targetInventories: OrderInventory[] = worksheetDetails.map((wsd: WorksheetDetail) => wsd.targetInventory)\n\n targetInventories = targetInventories\n .filter(targetInventory => targetInventory.status == ORDER_INVENTORY_STATUS.READY_TO_SORT)\n .map((targetInventory: OrderInventory) => {\n targetInventory.status = ORDER_INVENTORY_STATUS.SORTING\n targetInventory.updater = this.user\n return targetInventory\n })\n\n let releaseGoods: ReleaseGood[] = worksheet.worksheetDetails.map(\n (wsd: WorksheetDetail) => wsd.targetInventory.releaseGood\n )\n releaseGoods = [...new Map(releaseGoods.map(item => [item.id, item])).values()]\n releaseGoods.forEach((releaseGood: ReleaseGood) => {\n releaseGood.status = ORDER_STATUS.SORTING\n })\n await this.trxMgr.getRepository(ReleaseGood).save(releaseGoods)\n\n if (targetInventories.length > 0) await this.updateOrderTargets(targetInventories)\n return await this.activateWorksheet(worksheet, worksheetDetails, sortingWorksheetDetails)\n }\n\n async scanProductSorting(\n taskNo: string,\n releaseGoodNo: string,\n productBarcode: string,\n serialNumber: string,\n toteNo: string\n ): Promise<void> {\n const worksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({\n where: {\n domain: this.domain,\n taskNo,\n type: WORKSHEET_TYPE.SORTING,\n status: WORKSHEET_STATUS.EXECUTING\n },\n relations: [\n 'worksheetDetails',\n 'worksheetDetails.targetInventory',\n 'worksheetDetails.targetInventory.product',\n 'worksheetDetails.targetInventory.orderProduct',\n 'worksheetDetails.targetInventory.bizplace',\n 'worksheetDetails.targetInventory.inventory',\n 'worksheetDetails.targetInventory.inventory.product',\n 'worksheetDetails.targetInventory.inventory.product.productDetails',\n 'worksheetDetails.targetInventory.inventory.product.productDetails.product',\n 'worksheetDetails.targetInventory.releaseGood'\n ]\n })\n\n this.checkRecordValidity(worksheet, { status: WORKSHEET_STATUS.EXECUTING })\n\n const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails\n const orderInventories: OrderInventory[] = worksheetDetails\n .map((wsd: WorksheetDetail) => wsd.targetInventory)\n .filter((oi: OrderInventory) => oi.releaseGood.name === releaseGoodNo)\n\n if (productBarcode) {\n let productDetails: ProductDetail[] = []\n orderInventories.map((oi: OrderInventory) => {\n const foundPDs: ProductDetail[] = oi.inventory && oi.inventory.product && oi.inventory.product.productDetails\n foundPDs.map(productDetail => {\n productDetails.push(productDetail)\n })\n })\n\n const matchingProductDetail: ProductDetail = productDetails.find(\n (productDetail: ProductDetail) => productDetail.gtin === productBarcode\n )\n if (!matchingProductDetail) throw new Error('Unable to find product barcode.')\n const packingType: string = matchingProductDetail.packingType\n const packingSize: number = matchingProductDetail.packingSize\n if (!matchingProductDetail)\n throw new Error(this.ERROR_MSG.PRODUCT.BARCODE_NOT_EXIST(productBarcode, packingType, packingSize))\n\n let matchingOIs: OrderInventory[] = orderInventories.filter(\n (oi: OrderInventory) =>\n oi.packingType === packingType &&\n oi.packingSize === packingSize &&\n oi.product?.id === matchingProductDetail.product?.id\n )\n\n let sortedQty: number = 1\n\n if (!matchingOIs?.length) {\n throw new Error(this.ERROR_MSG.ORDER_ITEM.NO_MATCHING_RESULT(packingType, packingSize))\n } else {\n await Promise.all(\n matchingOIs.map(async (matchingOI: OrderInventory) => {\n const releaseQty: number = matchingOI.releaseQty\n const inventory: Inventory = matchingOI.inventory\n const releaseGood: ReleaseGood = matchingOI.releaseGood\n const product: Product = inventory.product\n\n if (releaseQty != matchingOI?.sortedQty && sortedQty == 1) {\n // Serial Number scanning for batch picking\n if (matchingOI?.refWorksheetId) {\n if (product?.isRequireSerialNumberScanningOutbound) {\n if (!serialNumber || serialNumber == '') {\n throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('sorting', `require serial number`))\n }\n\n let foundSerialNumber: InventoryItem = await this.trxMgr\n .getRepository(InventoryItem)\n .findOne({ where: { domain: this.domain, serialNumber: serialNumber, product } })\n\n if (foundSerialNumber) {\n if (foundSerialNumber.inventoryId !== inventory.id) {\n throw new Error('Serial Number scanned is in another inventory')\n }\n\n if (foundSerialNumber.outboundOrderId) {\n let releaseGood: ReleaseGood = await this.trxMgr\n .getRepository(ReleaseGood)\n .findOne({ where: { id: foundSerialNumber.outboundOrderId } })\n throw new Error(`Inventory Item is already picked/sorted in ${releaseGood.name}`)\n }\n\n foundSerialNumber.status = INVENTORY_STATUS.SORTING\n foundSerialNumber.updater = this.user\n foundSerialNumber.outboundOrderId = releaseGood.id\n\n await this.trxMgr.getRepository(InventoryItem).save(foundSerialNumber)\n } else {\n let inventoryItem: InventoryItem = new InventoryItem()\n inventoryItem.name = InventoryNoGenerator.inventoryItemName()\n inventoryItem.serialNumber = serialNumber\n inventoryItem.status = INVENTORY_STATUS.SORTING\n inventoryItem.outboundOrderId = releaseGood.id\n inventoryItem.source = INVENTORY_ITEM_SOURCE.OUTBOUND\n inventoryItem.product = product\n inventoryItem.inventory = inventory\n inventoryItem.domain = this.domain\n\n await this.trxMgr.getRepository(InventoryItem).save(inventoryItem)\n }\n }\n }\n\n matchingOI.sortedQty = Boolean(matchingOI?.sortedQty) ? matchingOI.sortedQty + sortedQty : sortedQty\n sortedQty -= 1\n if (matchingOI.sortedQty == releaseQty) {\n matchingOI.status = ORDER_INVENTORY_STATUS.SORTED\n await this.updateOrderTargets([matchingOI])\n await this.transactionInventory(inventory, releaseGood, 0, 0, INVENTORY_TRANSACTION_TYPE.SORTING)\n\n let worksheetDetail: WorksheetDetail = worksheetDetails.find(\n wsd => wsd.targetInventory.id === matchingOI.id\n )\n worksheetDetail.status = WORKSHEET_STATUS.DONE\n worksheetDetail.updater = this.user\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n\n let inventoryItems: InventoryItem = await this.trxMgr\n .getRepository(InventoryItem)\n .find({ where: { outboundOrderId: releaseGood.id } })\n\n if (inventoryItems.length > 0) {\n inventoryItems.forEach((itm: InventoryItem) => {\n itm.status = INVENTORY_STATUS.SORTED\n itm.updater = this.user\n })\n\n await this.trxMgr.getRepository(InventoryItem).save(inventoryItems)\n }\n } else if (matchingOI?.sortedQty > releaseQty) {\n const product: Product = matchingOI.inventory.product\n throw new Error(this.ERROR_MSG.ORDER_ITEM.EXCESS_QTY(product.sku, packingType, packingSize))\n } else {\n await this.updateOrderTargets([matchingOI])\n }\n\n if (toteNo) {\n await this.toteScanning(\n toteNo,\n matchingOI.orderProduct,\n matchingOI,\n 1,\n releaseGood,\n matchingOI.bizplace\n )\n }\n }\n })\n )\n }\n }\n }\n\n async sortingProduct(\n taskNo: string,\n releaseGoodNo: string,\n productId: string,\n sortingQty: number,\n serialNumber: string,\n toteNo: string\n ): Promise<void> {\n const worksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({\n where: {\n domain: this.domain,\n taskNo,\n type: WORKSHEET_TYPE.SORTING,\n status: WORKSHEET_STATUS.EXECUTING\n },\n relations: [\n 'worksheetDetails',\n 'worksheetDetails.targetInventory',\n 'worksheetDetails.targetInventory.product',\n 'worksheetDetails.targetInventory.orderProduct',\n 'worksheetDetails.targetInventory.bizplace',\n 'worksheetDetails.targetInventory.inventory',\n 'worksheetDetails.targetInventory.inventory.product',\n 'worksheetDetails.targetInventory.inventory.product.productDetails',\n 'worksheetDetails.targetInventory.inventory.product.productDetails.product',\n 'worksheetDetails.targetInventory.releaseGood'\n ]\n })\n\n this.checkRecordValidity(worksheet, { status: WORKSHEET_STATUS.EXECUTING })\n\n const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails\n let orderInventories: OrderInventory[] = worksheetDetails\n .map((wsd: WorksheetDetail) => wsd.targetInventory)\n .filter((oi: OrderInventory) => oi.releaseGood.name === releaseGoodNo && oi.product.id === productId)\n\n if (!orderInventories?.length) {\n throw new Error(this.ERROR_MSG.FIND.NO_RESULT(productId))\n } else {\n await Promise.all(\n orderInventories.map(async (matchingOI: OrderInventory) => {\n const releaseQty: number = matchingOI.releaseQty\n const inventory: Inventory = matchingOI.inventory\n const releaseGood: ReleaseGood = matchingOI.releaseGood\n const product: Product = matchingOI.inventory.product\n const packingType: string = matchingOI.packingType\n const packingSize: number = matchingOI.packingSize\n\n if (product?.isRequireSerialNumberScanningOutbound) {\n if (!serialNumber || serialNumber == '') {\n throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('sorting', `require serial number`))\n }\n\n let foundSerialNumber: InventoryItem = await this.trxMgr.getRepository(InventoryItem).findOne({\n where: { domain: this.domain, serialNumber: serialNumber, product },\n relations: ['product', 'inventory']\n })\n\n if (foundSerialNumber) {\n if (foundSerialNumber.outboundOrderId) {\n let releaseGood: ReleaseGood = await this.trxMgr\n .getRepository(ReleaseGood)\n .findOne({ where: { id: foundSerialNumber.outboundOrderId } })\n throw new Error(`Inventory Item is already picked/sorted in ${releaseGood.name}`)\n }\n\n foundSerialNumber.status = INVENTORY_STATUS.SORTING\n foundSerialNumber.updater = this.user\n foundSerialNumber.outboundOrderId = releaseGood.id\n\n await this.trxMgr.getRepository(InventoryItem).save(foundSerialNumber)\n } else {\n let inventoryItem: InventoryItem = new InventoryItem()\n inventoryItem.name = InventoryNoGenerator.inventoryItemName()\n inventoryItem.serialNumber = serialNumber\n inventoryItem.status = INVENTORY_STATUS.SORTING\n inventoryItem.source = INVENTORY_ITEM_SOURCE.OUTBOUND\n inventoryItem.outboundOrderId = releaseGood.id\n inventoryItem.product = product\n inventoryItem.inventory = inventory\n inventoryItem.domain = this.domain\n\n foundSerialNumber = await this.trxMgr.getRepository(InventoryItem).save(inventoryItem)\n }\n }\n\n if (toteNo) {\n await this.toteScanning(\n toteNo,\n matchingOI.orderProduct,\n matchingOI,\n sortingQty,\n releaseGood,\n matchingOI.bizplace\n )\n }\n\n if (releaseQty != matchingOI?.sortedQty && sortingQty != 0) {\n if (product?.isRequireSerialNumberScanningOutbound) {\n matchingOI.sortedQty += sortingQty\n } else {\n matchingOI.sortedQty = releaseQty\n }\n\n sortingQty -= releaseQty\n if (matchingOI.sortedQty == releaseQty) {\n matchingOI.status = ORDER_INVENTORY_STATUS.SORTED\n await this.updateOrderTargets([matchingOI])\n await this.transactionInventory(inventory, releaseGood, 0, 0, INVENTORY_TRANSACTION_TYPE.SORTING)\n\n let inventoryItems: InventoryItem = await this.trxMgr\n .getRepository(InventoryItem)\n .find({ where: { outboundOrderId: releaseGood.id } })\n\n if (inventoryItems.length > 0) {\n inventoryItems.forEach((itm: InventoryItem) => {\n itm.status = INVENTORY_STATUS.PACKED\n itm.updater = this.user\n })\n\n await this.trxMgr.getRepository(InventoryItem).save(inventoryItems)\n }\n\n let worksheetDetail: WorksheetDetail = worksheetDetails.find(\n wsd => wsd.targetInventory.id === matchingOI.id\n )\n worksheetDetail.status = WORKSHEET_STATUS.DONE\n worksheetDetail.updater = this.user\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n } else if (matchingOI?.sortedQty > releaseQty) {\n throw new Error(this.ERROR_MSG.ORDER_ITEM.EXCESS_QTY(product.sku, packingType, packingSize))\n } else {\n await this.updateOrderTargets([matchingOI])\n }\n }\n })\n )\n }\n }\n\n async completeOrderSorting(releaseGoodNo: string): Promise<ReleaseGood> {\n try {\n let releaseGood: ReleaseGood = await this.findRefOrder(\n ReleaseGood,\n {\n domain: this.domain,\n name: releaseGoodNo,\n status: ORDER_STATUS.SORTING\n },\n ['bizplace', 'orderInventories']\n )\n\n if (!releaseGood) {\n throw new Error('Order is already sorted')\n }\n\n const foundNotSealedOrderTote = await this.trxMgr\n .getRepository(OrderTote)\n .findOne({ where: { releaseGood, closedDate: IsNull() } })\n\n if (foundNotSealedOrderTote) {\n throw new Error('Please seal the tote(s) before proceeding')\n }\n\n releaseGood.status = ORDER_STATUS.READY_TO_LOAD\n releaseGood.updater = this.user\n await this.trxMgr.getRepository(ReleaseGood).save(releaseGood)\n\n let inventoryItems: InventoryItem = await this.trxMgr\n .getRepository(InventoryItem)\n .find({ where: { outboundOrderId: releaseGood.id } })\n\n if (inventoryItems.length > 0) {\n inventoryItems.forEach((itm: InventoryItem) => {\n itm.status = INVENTORY_STATUS.TERMINATED\n itm.updater = this.user\n })\n\n await this.trxMgr.getRepository(InventoryItem).save(inventoryItems)\n }\n\n return releaseGood\n } catch (e) {\n throw e\n }\n }\n\n async completeWorksheetSorting(taskNo: string): Promise<Worksheet> {\n let worksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({\n where: {\n domain: this.domain,\n taskNo,\n type: WORKSHEET_TYPE.SORTING,\n status: WORKSHEET_STATUS.EXECUTING\n },\n relations: [\n 'worksheetDetails',\n 'worksheetDetails.targetInventory',\n 'worksheetDetails.targetInventory.releaseGood'\n ]\n })\n\n let releaseGoodIds = worksheet.worksheetDetails.map(itm => itm.targetInventory.releaseGood.id)\n\n const foundNotSealedOrderTote = await this.trxMgr\n .getRepository(OrderTote)\n .findOne({ where: { releaseGood: In(releaseGoodIds), closedDate: IsNull() } })\n\n if (foundNotSealedOrderTote) {\n throw new Error('Please seal the tote(s) before proceeding')\n }\n\n this.checkRecordValidity(worksheet, { status: WORKSHEET_STATUS.EXECUTING })\n\n const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails\n const allTaskCompleted: boolean = worksheetDetails.every(wsd => wsd.status === WORKSHEET_STATUS.DONE)\n\n if (!allTaskCompleted)\n throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('complete worksheet', 'few incompleted line items'))\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 return worksheet\n }\n\n private async toteScanning(toteNo, targetProduct, targetInventory, pickedQty, releaseGood, bizplace) {\n //1. find tote\n let foundTote: Tote = await this.trxMgr\n .getRepository(Tote)\n .findOne({ where: { bizplace, name: toteNo, deletedAt: IsNull() } })\n\n if (foundTote?.status == TOTE_STATUS.DAMAGED) {\n throw new Error('Tote is damaged')\n }\n\n if (foundTote?.status == TOTE_STATUS.DISPATCHED) {\n throw new Error('Tote is dispatched')\n }\n\n //2. find order tote\n let foundOrderTote: OrderTote = await this.trxMgr\n .getRepository(OrderTote)\n .findOne({ where: { domain: this.domain, name: toteNo, releaseGood } })\n\n //if order tote not found the create one, if tote not found means it's tote box\n //create order tote item\n if (!foundOrderTote) {\n const orderTote = await this.trxMgr.getRepository(OrderTote).save({\n name: toteNo,\n domain: this.domain,\n releaseGood,\n tote: foundTote ? foundTote : null,\n updater: this.user\n })\n\n const orderToteItem = await this.trxMgr.getRepository(OrderToteItem).save({\n domain: this.domain,\n name: OrderNoGenerator.orderToteItem(),\n orderProduct: targetProduct,\n orderInventory: targetInventory,\n orderTote,\n qty: pickedQty,\n updater: this.user\n })\n } else {\n if (foundOrderTote.closedDate) {\n throw new Error('Tote has been sealed, please try another tote!')\n }\n\n //if found order tote then check if order tote item exist\n const foundOrderToteItem: OrderToteItem = await this.trxMgr.getRepository(OrderToteItem).findOneBy({\n domain: { id: this.domain.id },\n orderProduct: { id: targetProduct.id },\n orderInventory: { id: targetInventory.id },\n orderTote: { id: foundOrderTote.id }\n })\n\n //if not order tote item doesnt exist then create one\n if (!foundOrderToteItem) {\n const orderToteItem = await this.trxMgr.getRepository(OrderToteItem).save({\n domain: this.domain,\n name: OrderNoGenerator.orderToteItem(),\n orderProduct: targetProduct,\n orderInventory: targetInventory,\n orderTote: foundOrderTote,\n qty: pickedQty,\n updater: this.user\n })\n } else {\n //if found order tote item found then add the quantity\n const orderToteItem = await this.trxMgr.getRepository(OrderToteItem).save({\n ...foundOrderToteItem,\n qty: foundOrderToteItem.qty + pickedQty\n })\n }\n }\n }\n}\n"]}
|
|
@@ -16,12 +16,12 @@ const datetime_util_1 = require("../utils/datetime-util");
|
|
|
16
16
|
const REPORT_API_URL = env_1.config.get('reportApiUrl', 'http://localhost:8888/rest/report/show_html');
|
|
17
17
|
async function renderElcclGRN({ grnNo }, context) {
|
|
18
18
|
// 1. find domain
|
|
19
|
-
const domain = await (0,
|
|
19
|
+
const domain = await (0, shell_1.getRepository)(shell_1.Domain).findOne({
|
|
20
20
|
where: { id: context.state.domain.id }
|
|
21
21
|
});
|
|
22
22
|
// 2. find grn
|
|
23
|
-
const foundGRN = await (0,
|
|
24
|
-
where: { domain, name: grnNo },
|
|
23
|
+
const foundGRN = await (0, shell_1.getRepository)(sales_base_1.GoodsReceivalNote).findOne({
|
|
24
|
+
where: { domain: { id: domain.id }, name: grnNo },
|
|
25
25
|
relations: ['domain', 'bizplace', 'bizplace.company', 'arrivalNotice']
|
|
26
26
|
});
|
|
27
27
|
// 3. find GAN
|
|
@@ -30,39 +30,44 @@ async function renderElcclGRN({ grnNo }, context) {
|
|
|
30
30
|
// 4. find customer bizplace
|
|
31
31
|
const partnerBiz = foundGRN.bizplace;
|
|
32
32
|
// 5. find domain contact point
|
|
33
|
-
const foundCP = await (0,
|
|
34
|
-
where: { domain, bizplace: partnerBiz }
|
|
33
|
+
const foundCP = await (0, shell_1.getRepository)(biz_base_1.ContactPoint).findOne({
|
|
34
|
+
where: { domain: { id: domain.id }, bizplace: partnerBiz }
|
|
35
35
|
});
|
|
36
36
|
// 6. find unloading worksheet
|
|
37
|
-
const foundWS = await (0,
|
|
38
|
-
where: {
|
|
37
|
+
const foundWS = await (0, shell_1.getRepository)(entities_1.Worksheet).findOne({
|
|
38
|
+
where: {
|
|
39
|
+
domain: { id: domain.id },
|
|
40
|
+
arrivalNotice: foundGAN,
|
|
41
|
+
type: sales_base_1.ORDER_PRODUCT_STATUS.UNLOADING,
|
|
42
|
+
status: sales_base_1.ORDER_STATUS.DONE
|
|
43
|
+
},
|
|
39
44
|
relations: ['worksheetDetails']
|
|
40
45
|
});
|
|
41
46
|
// const targetProducts: OrderProduct[] = await getRepository(OrderProduct).find({
|
|
42
|
-
// where: { domain, arrivalNotice: foundGAN, actualPalletQty: Not(IsNull()), actualPackQty: Not(IsNull()) },
|
|
47
|
+
// where: { domain: { id: domain.id }, arrivalNotice: foundGAN, actualPalletQty: Not(IsNull()), actualPackQty: Not(IsNull()) },
|
|
43
48
|
// relations: ['product']
|
|
44
49
|
// })
|
|
45
50
|
// 7. find grn template based on category
|
|
46
|
-
const foundTemplate = await (0,
|
|
47
|
-
where: { domain, category: constants_1.TEMPLATE_TYPE.GRN_TEMPLATE }
|
|
51
|
+
const foundTemplate = await (0, shell_1.getRepository)(attachment_base_1.Attachment).findOne({
|
|
52
|
+
where: { domain: { id: domain.id }, category: constants_1.TEMPLATE_TYPE.GRN_TEMPLATE }
|
|
48
53
|
});
|
|
49
54
|
// 8. find grn logo
|
|
50
|
-
const foundLogo = await (0,
|
|
55
|
+
const foundLogo = await (0, shell_1.getRepository)(attachment_base_1.Attachment).findOne({
|
|
51
56
|
where: {
|
|
52
|
-
domain,
|
|
57
|
+
domain: { id: domain.id },
|
|
53
58
|
category: constants_1.TEMPLATE_TYPE.LOGO
|
|
54
59
|
}
|
|
55
60
|
});
|
|
56
61
|
// 9. find signature
|
|
57
|
-
const foundSignature = await (0,
|
|
62
|
+
const foundSignature = await (0, shell_1.getRepository)(attachment_base_1.Attachment).findOne({
|
|
58
63
|
where: {
|
|
59
|
-
domain,
|
|
64
|
+
domain: { id: domain.id },
|
|
60
65
|
category: constants_1.TEMPLATE_TYPE.SIGNATURE
|
|
61
66
|
}
|
|
62
67
|
});
|
|
63
|
-
const foundCop = await (0,
|
|
68
|
+
const foundCop = await (0, shell_1.getRepository)(attachment_base_1.Attachment).findOne({
|
|
64
69
|
where: {
|
|
65
|
-
domain,
|
|
70
|
+
domain: { id: domain.id },
|
|
66
71
|
category: constants_1.TEMPLATE_TYPE.COP
|
|
67
72
|
}
|
|
68
73
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-elccl-grn.js","sourceRoot":"","sources":["../../server/controllers/render-elccl-grn.ts"],"names":[],"mappings":"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","sourcesContent":["import FormData from 'form-data'\nimport fetch from 'node-fetch'\nimport { EntityManager, getManager, getRepository } from 'typeorm'\n\nimport { Attachment, STORAGE } from '@things-factory/attachment-base'\nimport { Bizplace, ContactPoint } from '@things-factory/biz-base'\nimport { config } from '@things-factory/env'\nimport { ArrivalNotice, GoodsReceivalNote, ORDER_PRODUCT_STATUS, ORDER_STATUS } from '@things-factory/sales-base'\nimport { Domain } from '@things-factory/shell'\n\nimport { TEMPLATE_TYPE, TRANSACTION_TYPE } from '../constants'\nimport { Worksheet } from '../entities'\nimport { DateTimeConverter } from '../utils/datetime-util'\n\nconst REPORT_API_URL = config.get('reportApiUrl', 'http://localhost:8888/rest/report/show_html')\n\nexport async function renderElcclGRN({ grnNo }, context: any) {\n // 1. find domain\n const domain: Domain = await getRepository(Domain).findOne({\n where: { id: context.state.domain.id }\n })\n\n // 2. find grn\n const foundGRN: GoodsReceivalNote = await getRepository(GoodsReceivalNote).findOne({\n where: { domain, name: grnNo },\n relations: ['domain', 'bizplace', 'bizplace.company', 'arrivalNotice']\n })\n\n // 3. find GAN\n const foundGAN: ArrivalNotice = foundGRN.arrivalNotice\n const ownRefNo = foundGAN.refNo\n\n // 4. find customer bizplace\n const partnerBiz: Bizplace = foundGRN.bizplace\n\n // 5. find domain contact point\n const foundCP: ContactPoint = await getRepository(ContactPoint).findOne({\n where: { domain, bizplace: partnerBiz }\n })\n\n // 6. find unloading worksheet\n const foundWS: Worksheet = await getRepository(Worksheet).findOne({\n where: { domain, arrivalNotice: foundGAN, type: ORDER_PRODUCT_STATUS.UNLOADING, status: ORDER_STATUS.DONE },\n relations: ['worksheetDetails']\n })\n\n // const targetProducts: OrderProduct[] = await getRepository(OrderProduct).find({\n // where: { domain, arrivalNotice: foundGAN, actualPalletQty: Not(IsNull()), actualPackQty: Not(IsNull()) },\n // relations: ['product']\n // })\n\n // 7. find grn template based on category\n const foundTemplate: Attachment = await getRepository(Attachment).findOne({\n where: { domain, category: TEMPLATE_TYPE.GRN_TEMPLATE }\n })\n\n // 8. find grn logo\n const foundLogo: Attachment = await getRepository(Attachment).findOne({\n where: {\n domain,\n category: TEMPLATE_TYPE.LOGO\n }\n })\n\n // 9. find signature\n const foundSignature: Attachment = await getRepository(Attachment).findOne({\n where: {\n domain,\n category: TEMPLATE_TYPE.SIGNATURE\n }\n })\n\n const foundCop: Attachment = await getRepository(Attachment).findOne({\n where: {\n domain,\n category: TEMPLATE_TYPE.COP\n }\n })\n\n const template = await STORAGE.readFile(foundTemplate.path, 'utf-8')\n\n let logo = null\n if (foundLogo?.path) {\n logo = 'data:' + foundLogo.mimetype + ';base64,' + (await STORAGE.readFile(foundLogo.path, 'base64'))\n }\n\n let signature = null\n if (foundSignature?.path) {\n signature = 'data:' + foundSignature.mimetype + ';base64,' + (await STORAGE.readFile(foundSignature.path, 'base64'))\n }\n\n let cop = null\n if (foundCop?.path) {\n cop = 'data:' + foundSignature.mimetype + ';base64,' + (await STORAGE.readFile(foundCop.path, 'base64'))\n }\n\n let invItems: any\n\n await getManager().transaction(async (trxMgr: EntityManager) => {\n await trxMgr.query(\n `\n create temp table tmp on commit drop as(\n select invh.*, invh2.ref_order_id as release_order_id, invh2.qty as release_qty, invh.qty as inbound_qty, \n invh.qty + invh2.qty as remaining_qty, invh2.uom_value as release_uom_value, invh.uom_value as inbound_uom_value, \n invh.uom_value + invh2.uom_value as remaining_uom_value\n from reduced_inventory_histories invh \n left join reduced_inventory_histories invh2 on \n invh2.domain_id = invh.domain_id and \n invh2.pallet_id = invh.pallet_id and \n invh2.seq = invh.seq + 1 and \n invh2.transaction_type='PICKING'\n where invh.ref_order_id is not null and invh.ref_order_id::uuid = $1 and invh.transaction_type = $2\n )\n `,\n [foundGAN.id, TRANSACTION_TYPE.UNLOADING]\n )\n\n await trxMgr.query(\n `\n create temp table tmp2 on commit drop as(\n select id,seq,ref_order_id,order_no,\"name\",pallet_id,batch_id,product_id,warehouse_id,location_id,\"zone\",order_ref_no,packing_type,uom as unit,qty,\n opening_qty,uom_value,description,status,transaction_type,created_at,updated_at,domain_id,bizplace_id,creator_id,updater_id,\n reusable_pallet_id,release_order_id,release_qty,inbound_qty,remaining_qty, inbound_qty as loose_amt, release_uom_value, inbound_uom_value,remaining_uom_value, \n inbound_uom_value as loose_wgt, null as cross_dock, inventory_id\n from tmp where release_qty > 0 or release_qty is null\n union all \n select id,seq,ref_order_id,order_no,\"name\",pallet_id,batch_id,product_id,warehouse_id,location_id,\"zone\",order_ref_no,packing_type,uom as unit,qty,\n opening_qty,uom_value,description,status,transaction_type,created_at,updated_at,domain_id,bizplace_id,creator_id,updater_id,\n reusable_pallet_id,release_order_id,release_qty,inbound_qty,remaining_qty, remaining_qty as loose_amt, release_uom_value, inbound_uom_value,remaining_uom_value, \n remaining_uom_value as loose_wgt, null as cross_dock, inventory_id\n from tmp where release_qty < 0 and remaining_qty > 0\n union all \n select id,seq,ref_order_id,order_no,\"name\",pallet_id,batch_id,product_id,warehouse_id,location_id,\"zone\",order_ref_no,packing_type,uom as unit,qty,\n opening_qty,uom_value,description,status,transaction_type,created_at,updated_at,domain_id,bizplace_id,creator_id,updater_id,\n reusable_pallet_id,release_order_id,release_qty,inbound_qty,remaining_qty, -release_qty as loose_amt, release_uom_value,inbound_uom_value,remaining_uom_value, \n -release_uom_value as loose_wgt, '[C/D]' as cross_dock, inventory_id\n from tmp where release_qty < 0\n )\n `\n )\n\n await trxMgr.query(\n `\n create temp table tmp3 on commit drop as (\n select main.*, concat(p2.name, ' (', p2.description, ')') as product_name, plt.name as pallet_name,\n case when main.reusable_pallet_id notnull then concat(main.qty, ' ', main.packing_type, '(S) ', plt.name) else concat(main.pallet, ' PALLET(S)')\n end as remarks,\n row_number() over (\n partition by p2.name, main.packing_type\n order by p2.name, reusable_pallet_id desc, cross_dock desc\n ) as sort\n from (\n select product_id, reusable_pallet_id, packing_type, cross_dock, sum(qty) as ori_qty, sum(loose_amt) as qty, sum(coalesce(release_qty, 0)) as release_qty, \n sum(loose_wgt) as uom_value, count(distinct pallet_id) as pallet\n from tmp2 \n group by cross_dock, reusable_pallet_id, product_id, packing_type\n ) as main\n inner join products p2 on p2.id = main.product_id\n left join pallets plt on plt.id = main.reusable_pallet_id\n order by product_name, sort, remarks\n )\n `\n )\n\n invItems = await trxMgr.query(\n `\n select product_name, qty, uom_value, concat(remarks, ' ', cross_dock) as remarks, 0 as rank from (\n select product_name, sum(qty) as qty, sum(uom_value) as uom_value, string_agg(remarks,' ' order by product_name, sort, remarks) as remarks, cross_dock\n from tmp3 group by product_name, cross_dock\n ) as foo\n union \n select vas.name as product_name, qty, 0 as uom_value, remark as remarks, 1 as rank \n from order_vass ov \n inner join vass vas on vas.id = ov.vas_id \n where arrival_notice_id = $1 and vas.type = 'MATERIALS'\n order by rank, product_name, remarks\n `,\n [foundGAN.id]\n )\n })\n\n const data = {\n logo_url: logo,\n sign_url: signature,\n cop_url: cop,\n customer_biz: partnerBiz.company.name,\n customer_address: partnerBiz.address,\n company_domain: partnerBiz.company.name,\n company_phone: foundCP.phone,\n company_email: foundCP.email,\n company_brn: partnerBiz.company.description,\n company_address: partnerBiz.company.address,\n order_no: foundGRN.name,\n unload_date: DateTimeConverter.date(foundWS.endedAt),\n ref_no: ownRefNo ? `${foundGAN.name} / ${foundGAN.refNo}` : `${foundGAN.name}`,\n received_date: DateTimeConverter.date(foundWS.endedAt),\n truck_no: foundGAN.truckNo || '',\n container_no: foundGAN?.containerNo ? foundGAN.containerNo : foundGAN.deliveryOrderNo,\n product_list: invItems.map((item, idx) => {\n return {\n list_no: idx + 1,\n product_name: item.product_name,\n product_type: item.packing_type,\n product_batch: item.batch_id,\n product_qty: item.qty,\n product_uom_value: Math.round(item.uom_value * 100) / 100,\n pallet_qty: item.pallet_count,\n remark: item.remarks\n }\n })\n }\n\n const formData = new FormData()\n formData.append('template', template)\n formData.append('jsonString', JSON.stringify(data))\n\n const response = await fetch(REPORT_API_URL, {\n method: 'POST',\n body: formData\n })\n\n return await response.text()\n}\n"]}
|
|
1
|
+
{"version":3,"file":"render-elccl-grn.js","sourceRoot":"","sources":["../../server/controllers/render-elccl-grn.ts"],"names":[],"mappings":"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","sourcesContent":["import FormData from 'form-data'\nimport fetch from 'node-fetch'\nimport { EntityManager, getManager } from 'typeorm'\n\nimport { Attachment, STORAGE } from '@things-factory/attachment-base'\nimport { Bizplace, ContactPoint } from '@things-factory/biz-base'\nimport { config } from '@things-factory/env'\nimport { ArrivalNotice, GoodsReceivalNote, ORDER_PRODUCT_STATUS, ORDER_STATUS } from '@things-factory/sales-base'\nimport { Domain, getRepository } from '@things-factory/shell'\n\nimport { TEMPLATE_TYPE, TRANSACTION_TYPE } from '../constants'\nimport { Worksheet } from '../entities'\nimport { DateTimeConverter } from '../utils/datetime-util'\n\nconst REPORT_API_URL = config.get('reportApiUrl', 'http://localhost:8888/rest/report/show_html')\n\nexport async function renderElcclGRN({ grnNo }, context: ResolverContext) {\n // 1. find domain\n const domain: Domain = await getRepository(Domain).findOne({\n where: { id: context.state.domain.id }\n })\n\n // 2. find grn\n const foundGRN: GoodsReceivalNote = await getRepository(GoodsReceivalNote).findOne({\n where: { domain: { id: domain.id }, name: grnNo },\n relations: ['domain', 'bizplace', 'bizplace.company', 'arrivalNotice']\n })\n\n // 3. find GAN\n const foundGAN: ArrivalNotice = foundGRN.arrivalNotice\n const ownRefNo = foundGAN.refNo\n\n // 4. find customer bizplace\n const partnerBiz: Bizplace = foundGRN.bizplace\n\n // 5. find domain contact point\n const foundCP: ContactPoint = await getRepository(ContactPoint).findOne({\n where: { domain: { id: domain.id }, bizplace: partnerBiz }\n })\n\n // 6. find unloading worksheet\n const foundWS: Worksheet = await getRepository(Worksheet).findOne({\n where: {\n domain: { id: domain.id },\n arrivalNotice: foundGAN,\n type: ORDER_PRODUCT_STATUS.UNLOADING,\n status: ORDER_STATUS.DONE\n },\n relations: ['worksheetDetails']\n })\n\n // const targetProducts: OrderProduct[] = await getRepository(OrderProduct).find({\n // where: { domain: { id: domain.id }, arrivalNotice: foundGAN, actualPalletQty: Not(IsNull()), actualPackQty: Not(IsNull()) },\n // relations: ['product']\n // })\n\n // 7. find grn template based on category\n const foundTemplate: Attachment = await getRepository(Attachment).findOne({\n where: { domain: { id: domain.id }, category: TEMPLATE_TYPE.GRN_TEMPLATE }\n })\n\n // 8. find grn logo\n const foundLogo: Attachment = await getRepository(Attachment).findOne({\n where: {\n domain: { id: domain.id },\n category: TEMPLATE_TYPE.LOGO\n }\n })\n\n // 9. find signature\n const foundSignature: Attachment = await getRepository(Attachment).findOne({\n where: {\n domain: { id: domain.id },\n category: TEMPLATE_TYPE.SIGNATURE\n }\n })\n\n const foundCop: Attachment = await getRepository(Attachment).findOne({\n where: {\n domain: { id: domain.id },\n category: TEMPLATE_TYPE.COP\n }\n })\n\n const template = await STORAGE.readFile(foundTemplate.path, 'utf-8')\n\n let logo = null\n if (foundLogo?.path) {\n logo = 'data:' + foundLogo.mimetype + ';base64,' + (await STORAGE.readFile(foundLogo.path, 'base64'))\n }\n\n let signature = null\n if (foundSignature?.path) {\n signature = 'data:' + foundSignature.mimetype + ';base64,' + (await STORAGE.readFile(foundSignature.path, 'base64'))\n }\n\n let cop = null\n if (foundCop?.path) {\n cop = 'data:' + foundSignature.mimetype + ';base64,' + (await STORAGE.readFile(foundCop.path, 'base64'))\n }\n\n let invItems: any\n\n await getManager().transaction(async (trxMgr: EntityManager) => {\n await trxMgr.query(\n `\n create temp table tmp on commit drop as(\n select invh.*, invh2.ref_order_id as release_order_id, invh2.qty as release_qty, invh.qty as inbound_qty, \n invh.qty + invh2.qty as remaining_qty, invh2.uom_value as release_uom_value, invh.uom_value as inbound_uom_value, \n invh.uom_value + invh2.uom_value as remaining_uom_value\n from reduced_inventory_histories invh \n left join reduced_inventory_histories invh2 on \n invh2.domain_id = invh.domain_id and \n invh2.pallet_id = invh.pallet_id and \n invh2.seq = invh.seq + 1 and \n invh2.transaction_type='PICKING'\n where invh.ref_order_id is not null and invh.ref_order_id::uuid = $1 and invh.transaction_type = $2\n )\n `,\n [foundGAN.id, TRANSACTION_TYPE.UNLOADING]\n )\n\n await trxMgr.query(\n `\n create temp table tmp2 on commit drop as(\n select id,seq,ref_order_id,order_no,\"name\",pallet_id,batch_id,product_id,warehouse_id,location_id,\"zone\",order_ref_no,packing_type,uom as unit,qty,\n opening_qty,uom_value,description,status,transaction_type,created_at,updated_at,domain_id,bizplace_id,creator_id,updater_id,\n reusable_pallet_id,release_order_id,release_qty,inbound_qty,remaining_qty, inbound_qty as loose_amt, release_uom_value, inbound_uom_value,remaining_uom_value, \n inbound_uom_value as loose_wgt, null as cross_dock, inventory_id\n from tmp where release_qty > 0 or release_qty is null\n union all \n select id,seq,ref_order_id,order_no,\"name\",pallet_id,batch_id,product_id,warehouse_id,location_id,\"zone\",order_ref_no,packing_type,uom as unit,qty,\n opening_qty,uom_value,description,status,transaction_type,created_at,updated_at,domain_id,bizplace_id,creator_id,updater_id,\n reusable_pallet_id,release_order_id,release_qty,inbound_qty,remaining_qty, remaining_qty as loose_amt, release_uom_value, inbound_uom_value,remaining_uom_value, \n remaining_uom_value as loose_wgt, null as cross_dock, inventory_id\n from tmp where release_qty < 0 and remaining_qty > 0\n union all \n select id,seq,ref_order_id,order_no,\"name\",pallet_id,batch_id,product_id,warehouse_id,location_id,\"zone\",order_ref_no,packing_type,uom as unit,qty,\n opening_qty,uom_value,description,status,transaction_type,created_at,updated_at,domain_id,bizplace_id,creator_id,updater_id,\n reusable_pallet_id,release_order_id,release_qty,inbound_qty,remaining_qty, -release_qty as loose_amt, release_uom_value,inbound_uom_value,remaining_uom_value, \n -release_uom_value as loose_wgt, '[C/D]' as cross_dock, inventory_id\n from tmp where release_qty < 0\n )\n `\n )\n\n await trxMgr.query(\n `\n create temp table tmp3 on commit drop as (\n select main.*, concat(p2.name, ' (', p2.description, ')') as product_name, plt.name as pallet_name,\n case when main.reusable_pallet_id notnull then concat(main.qty, ' ', main.packing_type, '(S) ', plt.name) else concat(main.pallet, ' PALLET(S)')\n end as remarks,\n row_number() over (\n partition by p2.name, main.packing_type\n order by p2.name, reusable_pallet_id desc, cross_dock desc\n ) as sort\n from (\n select product_id, reusable_pallet_id, packing_type, cross_dock, sum(qty) as ori_qty, sum(loose_amt) as qty, sum(coalesce(release_qty, 0)) as release_qty, \n sum(loose_wgt) as uom_value, count(distinct pallet_id) as pallet\n from tmp2 \n group by cross_dock, reusable_pallet_id, product_id, packing_type\n ) as main\n inner join products p2 on p2.id = main.product_id\n left join pallets plt on plt.id = main.reusable_pallet_id\n order by product_name, sort, remarks\n )\n `\n )\n\n invItems = await trxMgr.query(\n `\n select product_name, qty, uom_value, concat(remarks, ' ', cross_dock) as remarks, 0 as rank from (\n select product_name, sum(qty) as qty, sum(uom_value) as uom_value, string_agg(remarks,' ' order by product_name, sort, remarks) as remarks, cross_dock\n from tmp3 group by product_name, cross_dock\n ) as foo\n union \n select vas.name as product_name, qty, 0 as uom_value, remark as remarks, 1 as rank \n from order_vass ov \n inner join vass vas on vas.id = ov.vas_id \n where arrival_notice_id = $1 and vas.type = 'MATERIALS'\n order by rank, product_name, remarks\n `,\n [foundGAN.id]\n )\n })\n\n const data = {\n logo_url: logo,\n sign_url: signature,\n cop_url: cop,\n customer_biz: partnerBiz.company.name,\n customer_address: partnerBiz.address,\n company_domain: partnerBiz.company.name,\n company_phone: foundCP.phone,\n company_email: foundCP.email,\n company_brn: partnerBiz.company.description,\n company_address: partnerBiz.company.address,\n order_no: foundGRN.name,\n unload_date: DateTimeConverter.date(foundWS.endedAt),\n ref_no: ownRefNo ? `${foundGAN.name} / ${foundGAN.refNo}` : `${foundGAN.name}`,\n received_date: DateTimeConverter.date(foundWS.endedAt),\n truck_no: foundGAN.truckNo || '',\n container_no: foundGAN?.containerNo ? foundGAN.containerNo : foundGAN.deliveryOrderNo,\n product_list: invItems.map((item, idx) => {\n return {\n list_no: idx + 1,\n product_name: item.product_name,\n product_type: item.packing_type,\n product_batch: item.batch_id,\n product_qty: item.qty,\n product_uom_value: Math.round(item.uom_value * 100) / 100,\n pallet_qty: item.pallet_count,\n remark: item.remarks\n }\n })\n }\n\n const formData = new FormData()\n formData.append('template', template)\n formData.append('jsonString', JSON.stringify(data))\n\n const response = await fetch(REPORT_API_URL, {\n method: 'POST',\n body: formData\n })\n\n return await response.text()\n}\n"]}
|
|
@@ -19,30 +19,30 @@ const datetime_util_1 = require("../utils/datetime-util");
|
|
|
19
19
|
const REPORT_API_URL = env_1.config.get('reportApiUrl', 'http://localhost:8888/rest/report/show_html');
|
|
20
20
|
async function renderFmGRN({ grnNo, timezoneOffSet }, context) {
|
|
21
21
|
// 1. find domain
|
|
22
|
-
const domain = await (0,
|
|
22
|
+
const domain = await (0, shell_1.getRepository)(shell_1.Domain).findOne({
|
|
23
23
|
where: { id: context.state.domain.id }
|
|
24
24
|
});
|
|
25
25
|
// 2. find grn
|
|
26
|
-
const foundGRN = await (0,
|
|
27
|
-
where: { domain, name: grnNo },
|
|
26
|
+
const foundGRN = await (0, shell_1.getRepository)(sales_base_1.GoodsReceivalNote).findOne({
|
|
27
|
+
where: { domain: { id: domain.id }, name: grnNo },
|
|
28
28
|
relations: ['domain', 'bizplace', 'bizplace.domain', 'bizplace.company', 'arrivalNotice']
|
|
29
29
|
});
|
|
30
30
|
// 3. find GAN
|
|
31
31
|
const foundGAN = foundGRN.arrivalNotice;
|
|
32
32
|
const ownRefNo = foundGAN.refNo;
|
|
33
|
-
const foundInventoryItem = await (0,
|
|
33
|
+
const foundInventoryItem = await (0, shell_1.getRepository)(warehouse_base_1.InventoryItem).query(`select row_number() over (partition by p.sku) as "seq",p.sku,p.brand_sku, ii.serial_number from inventory_items ii left join products p on ii.product_id = p.id where inbound_order_id = '${foundGAN.id}' group by p.sku,ii.serial_number,p.brand_sku`);
|
|
34
34
|
// 4. find customer bizplace
|
|
35
35
|
const partnerBiz = foundGRN.bizplace;
|
|
36
|
-
const partnerDomain = await (0,
|
|
36
|
+
const partnerDomain = await (0, shell_1.getRepository)(auth_base_1.Partner).findOne({
|
|
37
37
|
where: { partnerDomain: partnerBiz.domain, domain },
|
|
38
38
|
relations: ['domain']
|
|
39
39
|
});
|
|
40
40
|
const domainOwner = partnerDomain.domain;
|
|
41
|
-
const domainBizplace = await (0,
|
|
41
|
+
const domainBizplace = await (0, shell_1.getRepository)(biz_base_1.Bizplace).findOne({
|
|
42
42
|
where: { domain: domainOwner },
|
|
43
43
|
relations: ['company']
|
|
44
44
|
});
|
|
45
|
-
const qbReducedInventory = (0,
|
|
45
|
+
const qbReducedInventory = (0, shell_1.getRepository)(warehouse_base_1.ReducedInventoryHistory)
|
|
46
46
|
.createQueryBuilder('ivh')
|
|
47
47
|
.select('product_id', 'productId')
|
|
48
48
|
.addSelect('batch_id', 'batchId')
|
|
@@ -65,48 +65,63 @@ async function renderFmGRN({ grnNo, timezoneOffSet }, context) {
|
|
|
65
65
|
.addGroupBy('expiration_date')
|
|
66
66
|
.getRawMany();
|
|
67
67
|
// 5. find domain contact point
|
|
68
|
-
const foundCP = await (0,
|
|
69
|
-
where: { domain, bizplace: domainBizplace }
|
|
68
|
+
const foundCP = await (0, shell_1.getRepository)(biz_base_1.ContactPoint).findOne({
|
|
69
|
+
where: { domain: { id: domain.id }, bizplace: domainBizplace }
|
|
70
70
|
});
|
|
71
71
|
// 5. find domain contact point
|
|
72
|
-
const foundPartnerCP = await (0,
|
|
73
|
-
where: { domain, bizplace: partnerBiz }
|
|
72
|
+
const foundPartnerCP = await (0, shell_1.getRepository)(biz_base_1.ContactPoint).findOne({
|
|
73
|
+
where: { domain: { id: domain.id }, bizplace: partnerBiz }
|
|
74
74
|
});
|
|
75
75
|
// 6. find unloading worksheet
|
|
76
|
-
const foundWS = await (0,
|
|
77
|
-
where: {
|
|
76
|
+
const foundWS = await (0, shell_1.getRepository)(entities_1.Worksheet).findOne({
|
|
77
|
+
where: {
|
|
78
|
+
domain: { id: domain.id },
|
|
79
|
+
arrivalNotice: foundGAN,
|
|
80
|
+
type: constants_1.WORKSHEET_TYPE.UNLOADING,
|
|
81
|
+
status: sales_base_1.ORDER_STATUS.DONE
|
|
82
|
+
},
|
|
78
83
|
relations: ['worksheetDetails', 'updater']
|
|
79
84
|
});
|
|
80
85
|
// find putaway worksheet
|
|
81
|
-
const foundPutawayWS = await (0,
|
|
82
|
-
where: {
|
|
86
|
+
const foundPutawayWS = await (0, shell_1.getRepository)(entities_1.Worksheet).findOne({
|
|
87
|
+
where: {
|
|
88
|
+
domain: { id: domain.id },
|
|
89
|
+
arrivalNotice: foundGAN,
|
|
90
|
+
type: constants_1.WORKSHEET_TYPE.PUTAWAY,
|
|
91
|
+
status: sales_base_1.ORDER_STATUS.DONE
|
|
92
|
+
},
|
|
83
93
|
relations: ['worksheetDetails', 'updater']
|
|
84
94
|
});
|
|
85
|
-
const targetProducts = await (0,
|
|
86
|
-
where: {
|
|
95
|
+
const targetProducts = await (0, shell_1.getRepository)(sales_base_1.OrderProduct).find({
|
|
96
|
+
where: {
|
|
97
|
+
domain: { id: domain.id },
|
|
98
|
+
arrivalNotice: foundGAN,
|
|
99
|
+
actualPalletQty: (0, typeorm_1.Not)((0, typeorm_1.IsNull)()),
|
|
100
|
+
actualPackQty: (0, typeorm_1.Not)((0, typeorm_1.IsNull)())
|
|
101
|
+
},
|
|
87
102
|
relations: ['product']
|
|
88
103
|
});
|
|
89
104
|
// 7. find grn template based on category
|
|
90
|
-
const foundTemplate = await (0,
|
|
91
|
-
where: { domain, category: constants_1.TEMPLATE_TYPE.GRN_TEMPLATE }
|
|
105
|
+
const foundTemplate = await (0, shell_1.getRepository)(attachment_base_1.Attachment).findOne({
|
|
106
|
+
where: { domain: { id: domain.id }, category: constants_1.TEMPLATE_TYPE.GRN_TEMPLATE }
|
|
92
107
|
});
|
|
93
108
|
// 8. find grn logo
|
|
94
|
-
const foundLogo = await (0,
|
|
109
|
+
const foundLogo = await (0, shell_1.getRepository)(attachment_base_1.Attachment).findOne({
|
|
95
110
|
where: {
|
|
96
|
-
domain,
|
|
111
|
+
domain: { id: domain.id },
|
|
97
112
|
category: constants_1.TEMPLATE_TYPE.LOGO
|
|
98
113
|
}
|
|
99
114
|
});
|
|
100
115
|
// 9. find signature
|
|
101
|
-
const foundSignature = await (0,
|
|
116
|
+
const foundSignature = await (0, shell_1.getRepository)(attachment_base_1.Attachment).findOne({
|
|
102
117
|
where: {
|
|
103
|
-
domain,
|
|
118
|
+
domain: { id: domain.id },
|
|
104
119
|
category: constants_1.TEMPLATE_TYPE.SIGNATURE
|
|
105
120
|
}
|
|
106
121
|
});
|
|
107
|
-
const foundCop = await (0,
|
|
122
|
+
const foundCop = await (0, shell_1.getRepository)(attachment_base_1.Attachment).findOne({
|
|
108
123
|
where: {
|
|
109
|
-
domain,
|
|
124
|
+
domain: { id: domain.id },
|
|
110
125
|
category: constants_1.TEMPLATE_TYPE.COP
|
|
111
126
|
}
|
|
112
127
|
});
|
|
@@ -203,7 +218,9 @@ async function renderFmGRN({ grnNo, timezoneOffSet }, context) {
|
|
|
203
218
|
product_uom: `${unloadInvHistory.uom || item.uom}`,
|
|
204
219
|
product_gross_weight: item.product.grossWeight || null,
|
|
205
220
|
unit_price: item.unitPrice || null,
|
|
206
|
-
expiry_date: unloadInvHistory.expiryDate && unloadInvHistory.expiryDate != ''
|
|
221
|
+
expiry_date: unloadInvHistory.expiryDate && unloadInvHistory.expiryDate != ''
|
|
222
|
+
? new Date(unloadInvHistory.expiryDate).toISOString().split('T')[0]
|
|
223
|
+
: '',
|
|
207
224
|
manufacture_date: item.manufactureDate,
|
|
208
225
|
reusable_pallet_id: unloadInvHistory.reusablePalletId || '',
|
|
209
226
|
remark: (item.remark ? item.remark : '') + (item.issue ? ' [Issue]: ' + item.issue : '')
|