@things-factory/operato-wms 4.3.671 → 4.3.673
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/graphql/index.js +33 -0
- package/dist-server/graphql/index.js.map +1 -0
- package/dist-server/graphql/resolvers/board-setting/board-settings.js +78 -0
- package/dist-server/graphql/resolvers/board-setting/board-settings.js.map +1 -0
- package/dist-server/graphql/resolvers/board-setting/index.js +6 -0
- package/dist-server/graphql/resolvers/board-setting/index.js.map +1 -0
- package/dist-server/graphql/resolvers/custom/elccl/elccl-daily-collection-report.js +87 -0
- package/dist-server/graphql/resolvers/custom/elccl/elccl-daily-collection-report.js.map +1 -0
- package/dist-server/graphql/resolvers/custom/elccl/elccl-daily-order-inventory-report.js +138 -0
- package/dist-server/graphql/resolvers/custom/elccl/elccl-daily-order-inventory-report.js.map +1 -0
- package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-pallet-detail-report.js +124 -0
- package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-pallet-detail-report.js.map +1 -0
- package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-report.js +159 -0
- package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-report.js.map +1 -0
- package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-summary-report.js +90 -0
- package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-summary-report.js.map +1 -0
- package/dist-server/graphql/resolvers/custom/elccl/elccl-onhand-inventory-counter.js +34 -0
- package/dist-server/graphql/resolvers/custom/elccl/elccl-onhand-inventory-counter.js.map +1 -0
- package/dist-server/graphql/resolvers/custom/elccl/index.js +11 -0
- package/dist-server/graphql/resolvers/custom/elccl/index.js.map +1 -0
- package/dist-server/graphql/resolvers/custom/kimeda/index.js +6 -0
- package/dist-server/graphql/resolvers/custom/kimeda/index.js.map +1 -0
- package/dist-server/graphql/resolvers/custom/kimeda/kimeda-onhand-inventory-counter.js +40 -0
- package/dist-server/graphql/resolvers/custom/kimeda/kimeda-onhand-inventory-counter.js.map +1 -0
- package/dist-server/graphql/resolvers/dashboard/arrival-notices-by-status.js +36 -0
- package/dist-server/graphql/resolvers/dashboard/arrival-notices-by-status.js.map +1 -0
- package/dist-server/graphql/resolvers/dashboard/collection-orders-by-status.js +24 -0
- package/dist-server/graphql/resolvers/dashboard/collection-orders-by-status.js.map +1 -0
- package/dist-server/graphql/resolvers/dashboard/delivery-orders-by-status.js +24 -0
- package/dist-server/graphql/resolvers/dashboard/delivery-orders-by-status.js.map +1 -0
- package/dist-server/graphql/resolvers/dashboard/index.js +12 -0
- package/dist-server/graphql/resolvers/dashboard/index.js.map +1 -0
- package/dist-server/graphql/resolvers/dashboard/inventory-expiry-monitor.js +65 -0
- package/dist-server/graphql/resolvers/dashboard/inventory-expiry-monitor.js.map +1 -0
- package/dist-server/graphql/resolvers/dashboard/outbound-order-by-status.js +22 -0
- package/dist-server/graphql/resolvers/dashboard/outbound-order-by-status.js.map +1 -0
- package/dist-server/graphql/resolvers/dashboard/release-goods-by-status.js +36 -0
- package/dist-server/graphql/resolvers/dashboard/release-goods-by-status.js.map +1 -0
- package/dist-server/graphql/resolvers/dashboard/unit-inbounded-outbounded.js +56 -0
- package/dist-server/graphql/resolvers/dashboard/unit-inbounded-outbounded.js.map +1 -0
- package/dist-server/graphql/resolvers/index.js +58 -0
- package/dist-server/graphql/resolvers/index.js.map +1 -0
- package/dist-server/graphql/resolvers/inventory-comparison/index.js +6 -0
- package/dist-server/graphql/resolvers/inventory-comparison/index.js.map +1 -0
- package/dist-server/graphql/resolvers/inventory-comparison/inventory-comparison-list.js +78 -0
- package/dist-server/graphql/resolvers/inventory-comparison/inventory-comparison-list.js.map +1 -0
- package/dist-server/graphql/resolvers/opa-menu/index.js +6 -0
- package/dist-server/graphql/resolvers/opa-menu/index.js.map +1 -0
- package/dist-server/graphql/resolvers/opa-menu/opa-menus.js +73 -0
- package/dist-server/graphql/resolvers/opa-menu/opa-menus.js.map +1 -0
- package/dist-server/graphql/resolvers/other/add-release-good-products.js +309 -0
- package/dist-server/graphql/resolvers/other/add-release-good-products.js.map +1 -0
- package/dist-server/graphql/resolvers/other/index.js +8 -0
- package/dist-server/graphql/resolvers/other/index.js.map +1 -0
- package/dist-server/graphql/resolvers/other/page-settings.js +135 -0
- package/dist-server/graphql/resolvers/other/page-settings.js.map +1 -0
- package/dist-server/graphql/resolvers/outbound/complete-load.js +162 -0
- package/dist-server/graphql/resolvers/outbound/complete-load.js.map +1 -0
- package/dist-server/graphql/resolvers/outbound/find-loadable-release-good-by-bin.js +148 -0
- package/dist-server/graphql/resolvers/outbound/find-loadable-release-good-by-bin.js.map +1 -0
- package/dist-server/graphql/resolvers/outbound/find-loadable-release-good.js +114 -0
- package/dist-server/graphql/resolvers/outbound/find-loadable-release-good.js.map +1 -0
- package/dist-server/graphql/resolvers/outbound/get-delivery-orders.js +46 -0
- package/dist-server/graphql/resolvers/outbound/get-delivery-orders.js.map +1 -0
- package/dist-server/graphql/resolvers/outbound/get-loading-task.js +100 -0
- package/dist-server/graphql/resolvers/outbound/get-loading-task.js.map +1 -0
- package/dist-server/graphql/resolvers/outbound/index.js +17 -0
- package/dist-server/graphql/resolvers/outbound/index.js.map +1 -0
- package/dist-server/graphql/resolvers/outbound/load-by-qty.js +121 -0
- package/dist-server/graphql/resolvers/outbound/load-by-qty.js.map +1 -0
- package/dist-server/graphql/resolvers/outbound/loading-worksheet-v2.js +158 -0
- package/dist-server/graphql/resolvers/outbound/loading-worksheet-v2.js.map +1 -0
- package/dist-server/graphql/resolvers/outbound/my-loading-assignment-status.js +32 -0
- package/dist-server/graphql/resolvers/outbound/my-loading-assignment-status.js.map +1 -0
- package/dist-server/graphql/resolvers/outbound/sort-item.js +66 -0
- package/dist-server/graphql/resolvers/outbound/sort-item.js.map +1 -0
- package/dist-server/graphql/resolvers/outbound/undo-load.js +72 -0
- package/dist-server/graphql/resolvers/outbound/undo-load.js.map +1 -0
- package/dist-server/graphql/resolvers/outbound/warehouse-return.js +101 -0
- package/dist-server/graphql/resolvers/outbound/warehouse-return.js.map +1 -0
- package/dist-server/graphql/resolvers/reports/analysis-picking-packing-report.js +128 -0
- package/dist-server/graphql/resolvers/reports/analysis-picking-packing-report.js.map +1 -0
- package/dist-server/graphql/resolvers/reports/billing-module-report.js +355 -0
- package/dist-server/graphql/resolvers/reports/billing-module-report.js.map +1 -0
- package/dist-server/graphql/resolvers/reports/costing-report.js +166 -0
- package/dist-server/graphql/resolvers/reports/costing-report.js.map +1 -0
- package/dist-server/graphql/resolvers/reports/cycle-count-report.js +311 -0
- package/dist-server/graphql/resolvers/reports/cycle-count-report.js.map +1 -0
- package/dist-server/graphql/resolvers/reports/inbound-order-details-report.js +218 -0
- package/dist-server/graphql/resolvers/reports/inbound-order-details-report.js.map +1 -0
- package/dist-server/graphql/resolvers/reports/inbound-serial-number-report.js +140 -0
- package/dist-server/graphql/resolvers/reports/inbound-serial-number-report.js.map +1 -0
- package/dist-server/graphql/resolvers/reports/index.js +21 -0
- package/dist-server/graphql/resolvers/reports/index.js.map +1 -0
- package/dist-server/graphql/resolvers/reports/manifest-report.js +98 -0
- package/dist-server/graphql/resolvers/reports/manifest-report.js.map +1 -0
- package/dist-server/graphql/resolvers/reports/non-loaded-inventory-report.js +143 -0
- package/dist-server/graphql/resolvers/reports/non-loaded-inventory-report.js.map +1 -0
- package/dist-server/graphql/resolvers/reports/outbound-order-details-report.js +290 -0
- package/dist-server/graphql/resolvers/reports/outbound-order-details-report.js.map +1 -0
- package/dist-server/graphql/resolvers/reports/outbound-serial-number-report.js +143 -0
- package/dist-server/graphql/resolvers/reports/outbound-serial-number-report.js.map +1 -0
- package/dist-server/graphql/resolvers/reports/pg-udf-query.js +70 -0
- package/dist-server/graphql/resolvers/reports/pg-udf-query.js.map +1 -0
- package/dist-server/graphql/resolvers/reports/product-label-report.js +57 -0
- package/dist-server/graphql/resolvers/reports/product-label-report.js.map +1 -0
- package/dist-server/graphql/resolvers/reports/release-inventory-report.js +180 -0
- package/dist-server/graphql/resolvers/reports/release-inventory-report.js.map +1 -0
- package/dist-server/graphql/resolvers/reports/shortage-report.js +165 -0
- package/dist-server/graphql/resolvers/reports/shortage-report.js.map +1 -0
- package/dist-server/graphql/resolvers/reports/tote-loading-qc-report.js +129 -0
- package/dist-server/graphql/resolvers/reports/tote-loading-qc-report.js.map +1 -0
- package/dist-server/graphql/resolvers/reports/vas-report.js +386 -0
- package/dist-server/graphql/resolvers/reports/vas-report.js.map +1 -0
- package/dist-server/graphql/resolvers/shipping-provider/index.js +6 -0
- package/dist-server/graphql/resolvers/shipping-provider/index.js.map +1 -0
- package/dist-server/graphql/resolvers/shipping-provider/shipping-providers.js +24 -0
- package/dist-server/graphql/resolvers/shipping-provider/shipping-providers.js.map +1 -0
- package/dist-server/graphql/resolvers/warehouse-inventory-adjustment/index.js +6 -0
- package/dist-server/graphql/resolvers/warehouse-inventory-adjustment/index.js.map +1 -0
- package/dist-server/graphql/resolvers/warehouse-inventory-adjustment/warehouse-intentory-adjustment.js +97 -0
- package/dist-server/graphql/resolvers/warehouse-inventory-adjustment/warehouse-intentory-adjustment.js.map +1 -0
- package/dist-server/graphql/resolvers/zone-worksheet/activate-zone-worksheet.js +91 -0
- package/dist-server/graphql/resolvers/zone-worksheet/activate-zone-worksheet.js.map +1 -0
- package/dist-server/graphql/resolvers/zone-worksheet/assign-sorter.js +36 -0
- package/dist-server/graphql/resolvers/zone-worksheet/assign-sorter.js.map +1 -0
- package/dist-server/graphql/resolvers/zone-worksheet/generate-zone-worksheet.js +106 -0
- package/dist-server/graphql/resolvers/zone-worksheet/generate-zone-worksheet.js.map +1 -0
- package/dist-server/graphql/resolvers/zone-worksheet/get-zone-picking-task.js +108 -0
- package/dist-server/graphql/resolvers/zone-worksheet/get-zone-picking-task.js.map +1 -0
- package/dist-server/graphql/resolvers/zone-worksheet/index.js +12 -0
- package/dist-server/graphql/resolvers/zone-worksheet/index.js.map +1 -0
- package/dist-server/graphql/resolvers/zone-worksheet/zone-picking.js +346 -0
- package/dist-server/graphql/resolvers/zone-worksheet/zone-picking.js.map +1 -0
- package/dist-server/graphql/resolvers/zone-worksheet/zone-worksheet.js +146 -0
- package/dist-server/graphql/resolvers/zone-worksheet/zone-worksheet.js.map +1 -0
- package/dist-server/graphql/types/board-setting/board-setting.js +16 -0
- package/dist-server/graphql/types/board-setting/board-setting.js.map +1 -0
- package/dist-server/graphql/types/board-setting/index.js +9 -0
- package/dist-server/graphql/types/board-setting/index.js.map +1 -0
- package/dist-server/graphql/types/custom/elccl/elccl-daily-collection-report-list.js +14 -0
- package/dist-server/graphql/types/custom/elccl/elccl-daily-collection-report-list.js.map +1 -0
- package/dist-server/graphql/types/custom/elccl/elccl-daily-collection-report.js +30 -0
- package/dist-server/graphql/types/custom/elccl/elccl-daily-collection-report.js.map +1 -0
- package/dist-server/graphql/types/custom/elccl/elccl-daily-order-inventory-report-list.js +14 -0
- package/dist-server/graphql/types/custom/elccl/elccl-daily-order-inventory-report-list.js.map +1 -0
- package/dist-server/graphql/types/custom/elccl/elccl-daily-order-inventory-report.js +25 -0
- package/dist-server/graphql/types/custom/elccl/elccl-daily-order-inventory-report.js.map +1 -0
- package/dist-server/graphql/types/custom/elccl/elccl-inventory-report.js +22 -0
- package/dist-server/graphql/types/custom/elccl/elccl-inventory-report.js.map +1 -0
- package/dist-server/graphql/types/custom/elccl/elccl-inventory-summary-report-list.js +14 -0
- package/dist-server/graphql/types/custom/elccl/elccl-inventory-summary-report-list.js.map +1 -0
- package/dist-server/graphql/types/custom/elccl/elccl-inventory-summary-report.js +23 -0
- package/dist-server/graphql/types/custom/elccl/elccl-inventory-summary-report.js.map +1 -0
- package/dist-server/graphql/types/custom/elccl/elccl-pallet-detail-report.js +22 -0
- package/dist-server/graphql/types/custom/elccl/elccl-pallet-detail-report.js.map +1 -0
- package/dist-server/graphql/types/custom/elccl/index.js +30 -0
- package/dist-server/graphql/types/custom/elccl/index.js.map +1 -0
- package/dist-server/graphql/types/custom/kimeda/index.js +7 -0
- package/dist-server/graphql/types/custom/kimeda/index.js.map +1 -0
- package/dist-server/graphql/types/dashboard/index.js +17 -0
- package/dist-server/graphql/types/dashboard/index.js.map +1 -0
- package/dist-server/graphql/types/dashboard/inventory-expiry-counter.js +16 -0
- package/dist-server/graphql/types/dashboard/inventory-expiry-counter.js.map +1 -0
- package/dist-server/graphql/types/dashboard/inventory-expiry-status.js +14 -0
- package/dist-server/graphql/types/dashboard/inventory-expiry-status.js.map +1 -0
- package/dist-server/graphql/types/dashboard/order-status-counter.js +14 -0
- package/dist-server/graphql/types/dashboard/order-status-counter.js.map +1 -0
- package/dist-server/graphql/types/index.js +70 -0
- package/dist-server/graphql/types/index.js.map +1 -0
- package/dist-server/graphql/types/inventory-comparison/index.js +13 -0
- package/dist-server/graphql/types/inventory-comparison/index.js.map +1 -0
- package/dist-server/graphql/types/inventory-comparison/inventory-comparison-list.js +14 -0
- package/dist-server/graphql/types/inventory-comparison/inventory-comparison-list.js.map +1 -0
- package/dist-server/graphql/types/inventory-comparison/inventory-comparison.js +18 -0
- package/dist-server/graphql/types/inventory-comparison/inventory-comparison.js.map +1 -0
- package/dist-server/graphql/types/opa-menu/index.js +9 -0
- package/dist-server/graphql/types/opa-menu/index.js.map +1 -0
- package/dist-server/graphql/types/opa-menu/opa-menu.js +45 -0
- package/dist-server/graphql/types/opa-menu/opa-menu.js.map +1 -0
- package/dist-server/graphql/types/other/index.js +21 -0
- package/dist-server/graphql/types/other/index.js.map +1 -0
- package/dist-server/graphql/types/other/page-setting.js +37 -0
- package/dist-server/graphql/types/other/page-setting.js.map +1 -0
- package/dist-server/graphql/types/outbound/delivery-order-info-list.js +14 -0
- package/dist-server/graphql/types/outbound/delivery-order-info-list.js.map +1 -0
- package/dist-server/graphql/types/outbound/index.js +24 -0
- package/dist-server/graphql/types/outbound/index.js.map +1 -0
- package/dist-server/graphql/types/outbound/loading-assignment.js +15 -0
- package/dist-server/graphql/types/outbound/loading-assignment.js.map +1 -0
- package/dist-server/graphql/types/outbound/loading-worksheet-type.js +25 -0
- package/dist-server/graphql/types/outbound/loading-worksheet-type.js.map +1 -0
- package/dist-server/graphql/types/reports/analysis-picking-packing-report-list.js +14 -0
- package/dist-server/graphql/types/reports/analysis-picking-packing-report-list.js.map +1 -0
- package/dist-server/graphql/types/reports/analysis-picking-packing-report.js +18 -0
- package/dist-server/graphql/types/reports/analysis-picking-packing-report.js.map +1 -0
- package/dist-server/graphql/types/reports/billing-module-report-list.js +14 -0
- package/dist-server/graphql/types/reports/billing-module-report-list.js.map +1 -0
- package/dist-server/graphql/types/reports/billing-module-report.js +15 -0
- package/dist-server/graphql/types/reports/billing-module-report.js.map +1 -0
- package/dist-server/graphql/types/reports/costing-report-list.js +14 -0
- package/dist-server/graphql/types/reports/costing-report-list.js.map +1 -0
- package/dist-server/graphql/types/reports/costing-report.js +19 -0
- package/dist-server/graphql/types/reports/costing-report.js.map +1 -0
- package/dist-server/graphql/types/reports/cycle-count-report-list.js +14 -0
- package/dist-server/graphql/types/reports/cycle-count-report-list.js.map +1 -0
- package/dist-server/graphql/types/reports/cycle-count-report.js +35 -0
- package/dist-server/graphql/types/reports/cycle-count-report.js.map +1 -0
- package/dist-server/graphql/types/reports/inbound-order-details-report-list.js +14 -0
- package/dist-server/graphql/types/reports/inbound-order-details-report-list.js.map +1 -0
- package/dist-server/graphql/types/reports/inbound-order-details-report.js +60 -0
- package/dist-server/graphql/types/reports/inbound-order-details-report.js.map +1 -0
- package/dist-server/graphql/types/reports/inbound-serial-number-report-list.js +14 -0
- package/dist-server/graphql/types/reports/inbound-serial-number-report-list.js.map +1 -0
- package/dist-server/graphql/types/reports/inbound-serial-number-report.js +23 -0
- package/dist-server/graphql/types/reports/inbound-serial-number-report.js.map +1 -0
- package/dist-server/graphql/types/reports/index.js +89 -0
- package/dist-server/graphql/types/reports/index.js.map +1 -0
- package/dist-server/graphql/types/reports/loading-qc-report-list.js +14 -0
- package/dist-server/graphql/types/reports/loading-qc-report-list.js.map +1 -0
- package/dist-server/graphql/types/reports/loading-qc-report.js +24 -0
- package/dist-server/graphql/types/reports/loading-qc-report.js.map +1 -0
- package/dist-server/graphql/types/reports/manifest-report-list.js +14 -0
- package/dist-server/graphql/types/reports/manifest-report-list.js.map +1 -0
- package/dist-server/graphql/types/reports/manifest-report-type.js +23 -0
- package/dist-server/graphql/types/reports/manifest-report-type.js.map +1 -0
- package/dist-server/graphql/types/reports/non-loaded-inventory-report-list.js +14 -0
- package/dist-server/graphql/types/reports/non-loaded-inventory-report-list.js.map +1 -0
- package/dist-server/graphql/types/reports/non-loaded-inventory-report.js +23 -0
- package/dist-server/graphql/types/reports/non-loaded-inventory-report.js.map +1 -0
- package/dist-server/graphql/types/reports/outbound-order-details-report-list.js +14 -0
- package/dist-server/graphql/types/reports/outbound-order-details-report-list.js.map +1 -0
- package/dist-server/graphql/types/reports/outbound-order-details-report.js +79 -0
- package/dist-server/graphql/types/reports/outbound-order-details-report.js.map +1 -0
- package/dist-server/graphql/types/reports/outbound-serial-number-report-list.js +14 -0
- package/dist-server/graphql/types/reports/outbound-serial-number-report-list.js.map +1 -0
- package/dist-server/graphql/types/reports/outbound-serial-number-report.js +25 -0
- package/dist-server/graphql/types/reports/outbound-serial-number-report.js.map +1 -0
- package/dist-server/graphql/types/reports/pg-udf-query-list.js +13 -0
- package/dist-server/graphql/types/reports/pg-udf-query-list.js.map +1 -0
- package/dist-server/graphql/types/reports/product-label-report-list.js +14 -0
- package/dist-server/graphql/types/reports/product-label-report-list.js.map +1 -0
- package/dist-server/graphql/types/reports/product-label-report.js +16 -0
- package/dist-server/graphql/types/reports/product-label-report.js.map +1 -0
- package/dist-server/graphql/types/reports/release-inventory-report-list.js +14 -0
- package/dist-server/graphql/types/reports/release-inventory-report-list.js.map +1 -0
- package/dist-server/graphql/types/reports/release-inventory-report.js +29 -0
- package/dist-server/graphql/types/reports/release-inventory-report.js.map +1 -0
- package/dist-server/graphql/types/reports/shortage-report-list.js +14 -0
- package/dist-server/graphql/types/reports/shortage-report-list.js.map +1 -0
- package/dist-server/graphql/types/reports/shortage-report-type.js +26 -0
- package/dist-server/graphql/types/reports/shortage-report-type.js.map +1 -0
- package/dist-server/graphql/types/reports/vas-report-list.js +20 -0
- package/dist-server/graphql/types/reports/vas-report-list.js.map +1 -0
- package/dist-server/graphql/types/reports/vas-report.js +29 -0
- package/dist-server/graphql/types/reports/vas-report.js.map +1 -0
- package/dist-server/graphql/types/shipping-provider/index.js +10 -0
- package/dist-server/graphql/types/shipping-provider/index.js.map +1 -0
- package/dist-server/graphql/types/shipping-provider/shipping-provider-list.js +13 -0
- package/dist-server/graphql/types/shipping-provider/shipping-provider-list.js.map +1 -0
- package/dist-server/graphql/types/shipping-provider/shipping-provider.js +13 -0
- package/dist-server/graphql/types/shipping-provider/shipping-provider.js.map +1 -0
- package/dist-server/graphql/types/warehouse-inventory-adjustment/index.js +9 -0
- package/dist-server/graphql/types/warehouse-inventory-adjustment/index.js.map +1 -0
- package/dist-server/graphql/types/zone-worksheet/index.js +22 -0
- package/dist-server/graphql/types/zone-worksheet/index.js.map +1 -0
- package/dist-server/graphql/types/zone-worksheet/zone-picking-worksheet.js +18 -0
- package/dist-server/graphql/types/zone-worksheet/zone-picking-worksheet.js.map +1 -0
- package/dist-server/graphql/types/zone-worksheet/zone-worksheet-overview-list.js +13 -0
- package/dist-server/graphql/types/zone-worksheet/zone-worksheet-overview-list.js.map +1 -0
- package/dist-server/graphql/types/zone-worksheet/zone-worksheet-overview.js +16 -0
- package/dist-server/graphql/types/zone-worksheet/zone-worksheet-overview.js.map +1 -0
- package/dist-server/index.js +20 -0
- package/dist-server/index.js.map +1 -0
- package/dist-server/migrations/1568858861188-SeedSetting.js +51 -0
- package/dist-server/migrations/1568858861188-SeedSetting.js.map +1 -0
- package/dist-server/migrations/1623308919899-SeedLocationRecommendSetting.js +35 -0
- package/dist-server/migrations/1623308919899-SeedLocationRecommendSetting.js.map +1 -0
- package/dist-server/migrations/1623381200659-SeedStoringRule.js +33 -0
- package/dist-server/migrations/1623381200659-SeedStoringRule.js.map +1 -0
- package/dist-server/migrations/1687413760311-UpdateProductDetailStockQty.js +36 -0
- package/dist-server/migrations/1687413760311-UpdateProductDetailStockQty.js.map +1 -0
- package/dist-server/migrations/1687415141200-InsertNewProductDetailStock.js +32 -0
- package/dist-server/migrations/1687415141200-InsertNewProductDetailStock.js.map +1 -0
- package/dist-server/migrations/index.js +12 -0
- package/dist-server/migrations/index.js.map +1 -0
- package/dist-server/opa-app-setting-constants.js +15 -0
- package/dist-server/opa-app-setting-constants.js.map +1 -0
- package/dist-server/routes.js +3 -0
- package/dist-server/routes.js.map +1 -0
- package/dist-server/utils/index.js +18 -0
- package/dist-server/utils/index.js.map +1 -0
- package/dist-server/utils/report-query-util.js +42 -0
- package/dist-server/utils/report-query-util.js.map +1 -0
- package/package.json +38 -38
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.assignSorter = void 0;
|
|
4
|
+
const typeorm_1 = require("typeorm");
|
|
5
|
+
const auth_base_1 = require("@things-factory/auth-base");
|
|
6
|
+
const sales_base_1 = require("@things-factory/sales-base");
|
|
7
|
+
exports.assignSorter = {
|
|
8
|
+
async assignSorter(_parentObj, { releaseGoodId, userId }, context) {
|
|
9
|
+
const { tx, domain } = context.state;
|
|
10
|
+
const sorter = await tx.getRepository(auth_base_1.User).findOne(userId, { relations: ['domains'] });
|
|
11
|
+
if (((sorter === null || sorter === void 0 ? void 0 : sorter.domains) || []).every((userDomain) => userDomain.id !== domain.id)) {
|
|
12
|
+
throw new Error('Target user does not belong to current domain');
|
|
13
|
+
}
|
|
14
|
+
if (!sorter)
|
|
15
|
+
throw new Error('failed to find target user');
|
|
16
|
+
await Promise.all(releaseGoodId.map(async (releaseGoodId) => {
|
|
17
|
+
const releaseGood = await tx.getRepository(sales_base_1.ReleaseGood).findOne({
|
|
18
|
+
id: releaseGoodId
|
|
19
|
+
}, {
|
|
20
|
+
where: [
|
|
21
|
+
{
|
|
22
|
+
status: (0, typeorm_1.Not)((0, typeorm_1.In)([sales_base_1.ORDER_STATUS.PROCESSING, sales_base_1.ORDER_STATUS.DONE]))
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
});
|
|
26
|
+
if (!releaseGood)
|
|
27
|
+
throw new Error('failed to find target order');
|
|
28
|
+
await tx.getRepository(sales_base_1.ReleaseGood).update({
|
|
29
|
+
id: releaseGoodId
|
|
30
|
+
}, {
|
|
31
|
+
sortedBy: sorter
|
|
32
|
+
});
|
|
33
|
+
}));
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=assign-sorter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assign-sorter.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/zone-worksheet/assign-sorter.ts"],"names":[],"mappings":";;;AAAA,qCAAgD;AAEhD,yDAAgD;AAGhD,2DAAsE;AAEzD,QAAA,YAAY,GAAG;IAC1B,KAAK,CAAC,YAAY,CAChB,UAAgB,EAChB,EAAE,aAAa,EAAE,MAAM,EAA+C,EACtE,OAAY;QAEZ,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAA0C,OAAO,CAAC,KAAK,CAAA;QAC3E,MAAM,MAAM,GAAS,MAAM,EAAE,CAAC,aAAa,CAAC,gBAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QAE7F,IAAI,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,KAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,UAAkB,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,EAAE;YACtF,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;SACjE;QACD,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;QAE1D,MAAM,OAAO,CAAC,GAAG,CACf,aAAa,CAAC,GAAG,CAAC,KAAK,EAAC,aAAa,EAAC,EAAE;YACtC,MAAM,WAAW,GAAgB,MAAM,EAAE,CAAC,aAAa,CAAC,wBAAW,CAAC,CAAC,OAAO,CAC1E;gBACE,EAAE,EAAE,aAAa;aAClB,EACD;gBACE,KAAK,EAAE;oBACL;wBACE,MAAM,EAAE,IAAA,aAAG,EAAC,IAAA,YAAE,EAAC,CAAC,yBAAY,CAAC,UAAU,EAAE,yBAAY,CAAC,IAAI,CAAC,CAAC,CAAC;qBAC9D;iBACF;aACF,CACF,CAAA;YAED,IAAI,CAAC,WAAW;gBAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;YAChE,MAAM,EAAE,CAAC,aAAa,CAAC,wBAAW,CAAC,CAAC,MAAM,CACxC;gBACE,EAAE,EAAE,aAAa;aAClB,EACD;gBACE,QAAQ,EAAE,MAAM;aACjB,CACF,CAAA;QACH,CAAC,CAAC,CACH,CAAA;IACH,CAAC;CACF,CAAA"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateWorksheetZonePicking = void 0;
|
|
4
|
+
const sales_base_1 = require("@things-factory/sales-base");
|
|
5
|
+
const worksheet_base_1 = require("@things-factory/worksheet-base");
|
|
6
|
+
const warehouse_base_1 = require("@things-factory/warehouse-base");
|
|
7
|
+
const typeorm_1 = require("typeorm");
|
|
8
|
+
exports.generateWorksheetZonePicking = {
|
|
9
|
+
async generateWorksheetZonePicking(_, { releaseGoods }, context) {
|
|
10
|
+
const { user, domain, tx } = context.state;
|
|
11
|
+
let worksheets = [];
|
|
12
|
+
//fetch all orders
|
|
13
|
+
let relatedReleaseGoods = await tx.getRepository(sales_base_1.ReleaseGood).find({
|
|
14
|
+
where: {
|
|
15
|
+
name: (0, typeorm_1.In)(releaseGoods),
|
|
16
|
+
status: sales_base_1.ORDER_STATUS.PENDING_WORKSHEET,
|
|
17
|
+
domain: domain
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
//split by bizplace
|
|
21
|
+
const bizplaces = new Set();
|
|
22
|
+
relatedReleaseGoods.forEach(item => {
|
|
23
|
+
bizplaces.add(item.bizplaceId);
|
|
24
|
+
});
|
|
25
|
+
for (const bizplace of bizplaces) {
|
|
26
|
+
let bizplaceFilteredReleaseGoods = relatedReleaseGoods.filter(rg => rg.bizplaceId === bizplace);
|
|
27
|
+
let releaseGoodIds = bizplaceFilteredReleaseGoods.map(rg => rg.id);
|
|
28
|
+
//fetch all oi
|
|
29
|
+
let orderInventories = await tx.getRepository(sales_base_1.OrderInventory).find({
|
|
30
|
+
where: {
|
|
31
|
+
releaseGood: (0, typeorm_1.In)(releaseGoodIds)
|
|
32
|
+
},
|
|
33
|
+
relations: ['inventory', 'inventory.location']
|
|
34
|
+
});
|
|
35
|
+
let oiIds = orderInventories.map(item => item.id);
|
|
36
|
+
let zones = await tx
|
|
37
|
+
.getRepository(warehouse_base_1.Location)
|
|
38
|
+
.createQueryBuilder('l')
|
|
39
|
+
.select('DISTINCT l.zone', 'zone')
|
|
40
|
+
.innerJoin('inventories', 'iv', 'iv.location_id = l.id')
|
|
41
|
+
.innerJoin('order_inventories', 'oi', 'oi.inventory_id = iv.id')
|
|
42
|
+
.where('oi.id in (:...ids)', { ids: oiIds })
|
|
43
|
+
.getRawMany()
|
|
44
|
+
.then(rows => rows.map(row => row.zone));
|
|
45
|
+
//split by zone
|
|
46
|
+
for (const zone of zones) {
|
|
47
|
+
//generate worksheets by zone
|
|
48
|
+
let zoneFilteredOi = orderInventories.filter(item => item.inventory.location.zone == zone);
|
|
49
|
+
let worksheet = {
|
|
50
|
+
name: worksheet_base_1.WorksheetNoGenerator.generate(worksheet_base_1.WORKSHEET_TYPE.ZONE_PICKING),
|
|
51
|
+
type: worksheet_base_1.WORKSHEET_TYPE.ZONE_PICKING,
|
|
52
|
+
status: worksheet_base_1.WORKSHEET_STATUS.DEACTIVATED,
|
|
53
|
+
bizplace: bizplace,
|
|
54
|
+
domain: domain,
|
|
55
|
+
creator: user,
|
|
56
|
+
updater: user,
|
|
57
|
+
createdAt: new Date(),
|
|
58
|
+
updatedAt: new Date(),
|
|
59
|
+
zone: zone
|
|
60
|
+
};
|
|
61
|
+
worksheet = await tx.getRepository(worksheet_base_1.Worksheet).save(worksheet);
|
|
62
|
+
if ((zoneFilteredOi === null || zoneFilteredOi === void 0 ? void 0 : zoneFilteredOi.length) > 0) {
|
|
63
|
+
worksheet.worksheetDetails = [];
|
|
64
|
+
for (const oi of zoneFilteredOi) {
|
|
65
|
+
//generate worksheet detail for all OIs in the group
|
|
66
|
+
const worksheetDetail = {
|
|
67
|
+
name: worksheet_base_1.WorksheetNoGenerator.generateDetail(worksheet_base_1.WORKSHEET_TYPE.ZONE_PICKING),
|
|
68
|
+
domain: domain,
|
|
69
|
+
bizplace: bizplace,
|
|
70
|
+
worksheet: worksheet,
|
|
71
|
+
type: worksheet_base_1.WORKSHEET_TYPE.ZONE_PICKING,
|
|
72
|
+
status: worksheet_base_1.WORKSHEET_STATUS.DEACTIVATED,
|
|
73
|
+
targetInventory: oi,
|
|
74
|
+
creator: user,
|
|
75
|
+
updater: user,
|
|
76
|
+
createdAt: new Date(),
|
|
77
|
+
updatedAt: new Date()
|
|
78
|
+
};
|
|
79
|
+
await tx.getRepository(worksheet_base_1.WorksheetDetail).save(worksheetDetail);
|
|
80
|
+
worksheet.worksheetDetails.push(Object.assign({}, worksheetDetail));
|
|
81
|
+
}
|
|
82
|
+
//update for all OIs
|
|
83
|
+
await tx.getRepository(sales_base_1.OrderInventory).update({ id: (0, typeorm_1.In)(zoneFilteredOi.map(oi => oi.id)) }, {
|
|
84
|
+
refWorksheetId: worksheet.id,
|
|
85
|
+
status: sales_base_1.ORDER_INVENTORY_STATUS.READY_TO_PICK,
|
|
86
|
+
updater: user,
|
|
87
|
+
updatedAt: new Date()
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
worksheets.push(worksheet);
|
|
91
|
+
}
|
|
92
|
+
await tx.getRepository(sales_base_1.ReleaseGood).update({ id: (0, typeorm_1.In)(bizplaceFilteredReleaseGoods.map(rg => rg.id)) }, {
|
|
93
|
+
status: sales_base_1.ORDER_STATUS.READY_TO_PICK,
|
|
94
|
+
updater: user,
|
|
95
|
+
updatedAt: new Date()
|
|
96
|
+
});
|
|
97
|
+
await tx.getRepository(sales_base_1.ReleaseGood).update({ id: (0, typeorm_1.In)(bizplaceFilteredReleaseGoods.map(rg => rg.id)) }, {
|
|
98
|
+
status: sales_base_1.ORDER_STATUS.READY_TO_PICK,
|
|
99
|
+
updater: user,
|
|
100
|
+
updatedAt: new Date()
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
return worksheets;
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
//# sourceMappingURL=generate-zone-worksheet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-zone-worksheet.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/zone-worksheet/generate-zone-worksheet.ts"],"names":[],"mappings":";;;AAAA,2DAA8G;AAC9G,mEAOuC;AACvC,mEAAyD;AACzD,qCAA2C;AAI9B,QAAA,4BAA4B,GAAG;IAC1C,KAAK,CAAC,4BAA4B,CAAC,CAAM,EAAE,EAAE,YAAY,EAAE,EAAE,OAAY;QACvE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,GAAsD,OAAO,CAAC,KAAK,CAAA;QAE7F,IAAI,UAAU,GAAG,EAAE,CAAA;QACnB,kBAAkB;QAClB,IAAI,mBAAmB,GAAkB,MAAM,EAAE,CAAC,aAAa,CAAC,wBAAW,CAAC,CAAC,IAAI,CAAC;YAChF,KAAK,EAAE;gBACL,IAAI,EAAE,IAAA,YAAE,EAAC,YAAY,CAAC;gBACtB,MAAM,EAAE,yBAAY,CAAC,iBAAiB;gBACtC,MAAM,EAAE,MAAM;aACf;SACF,CAAC,CAAA;QAEF,mBAAmB;QACnB,MAAM,SAAS,GAAG,IAAI,GAAG,EAAE,CAAA;QAC3B,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACjC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAChC,CAAC,CAAC,CAAA;QAEF,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;YAChC,IAAI,4BAA4B,GAAG,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAA;YAE/F,IAAI,cAAc,GAAG,4BAA4B,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;YAElE,cAAc;YACd,IAAI,gBAAgB,GAAqB,MAAM,EAAE,CAAC,aAAa,CAAC,2BAAc,CAAC,CAAC,IAAI,CAAC;gBACnF,KAAK,EAAE;oBACL,WAAW,EAAE,IAAA,YAAE,EAAC,cAAc,CAAC;iBAChC;gBACD,SAAS,EAAE,CAAC,WAAW,EAAE,oBAAoB,CAAC;aAC/C,CAAC,CAAA;YAEF,IAAI,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAEjD,IAAI,KAAK,GAAG,MAAM,EAAE;iBACjB,aAAa,CAAC,yBAAQ,CAAC;iBACvB,kBAAkB,CAAC,GAAG,CAAC;iBACvB,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC;iBACjC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,uBAAuB,CAAC;iBACvD,SAAS,CAAC,mBAAmB,EAAE,IAAI,EAAE,yBAAyB,CAAC;iBAC/D,KAAK,CAAC,oBAAoB,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;iBAC3C,UAAU,EAAE;iBACZ,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;YAE1C,eAAe;YACf,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;gBACxB,6BAA6B;gBAC7B,IAAI,cAAc,GAAG,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,CAAA;gBAE1F,IAAI,SAAS,GAAc;oBACzB,IAAI,EAAE,qCAAoB,CAAC,QAAQ,CAAC,+BAAc,CAAC,YAAY,CAAC;oBAChE,IAAI,EAAE,+BAAc,CAAC,YAAY;oBACjC,MAAM,EAAE,iCAAgB,CAAC,WAAW;oBACpC,QAAQ,EAAE,QAAQ;oBAClB,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,IAAI;oBACb,SAAS,EAAE,IAAI,IAAI,EAAE;oBACrB,SAAS,EAAE,IAAI,IAAI,EAAE;oBACrB,IAAI,EAAE,IAAI;iBACX,CAAA;gBAED,SAAS,GAAG,MAAM,EAAE,CAAC,aAAa,CAAC,0BAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;gBAE7D,IAAI,CAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,MAAM,IAAG,CAAC,EAAE;oBAC9B,SAAS,CAAC,gBAAgB,GAAG,EAAE,CAAA;oBAE/B,KAAK,MAAM,EAAE,IAAI,cAAc,EAAE;wBAC/B,oDAAoD;wBACpD,MAAM,eAAe,GAAoB;4BACvC,IAAI,EAAE,qCAAoB,CAAC,cAAc,CAAC,+BAAc,CAAC,YAAY,CAAC;4BACtE,MAAM,EAAE,MAAM;4BACd,QAAQ,EAAE,QAAQ;4BAClB,SAAS,EAAE,SAAS;4BACpB,IAAI,EAAE,+BAAc,CAAC,YAAY;4BACjC,MAAM,EAAE,iCAAgB,CAAC,WAAW;4BACpC,eAAe,EAAE,EAAE;4BACnB,OAAO,EAAE,IAAI;4BACb,OAAO,EAAE,IAAI;4BACb,SAAS,EAAE,IAAI,IAAI,EAAE;4BACrB,SAAS,EAAE,IAAI,IAAI,EAAE;yBACtB,CAAA;wBAED,MAAM,EAAE,CAAC,aAAa,CAAC,gCAAe,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;wBAC7D,SAAS,CAAC,gBAAgB,CAAC,IAAI,mBAAM,eAAe,EAAG,CAAA;qBACxD;oBAED,oBAAoB;oBACpB,MAAM,EAAE,CAAC,aAAa,CAAC,2BAAc,CAAC,CAAC,MAAM,CAC3C,EAAE,EAAE,EAAE,IAAA,YAAE,EAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAC3C;wBACE,cAAc,EAAE,SAAS,CAAC,EAAE;wBAC5B,MAAM,EAAE,mCAAsB,CAAC,aAAa;wBAC5C,OAAO,EAAE,IAAI;wBACb,SAAS,EAAE,IAAI,IAAI,EAAE;qBACtB,CACF,CAAA;iBACF;gBACD,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;aAC3B;YAED,MAAM,EAAE,CAAC,aAAa,CAAC,wBAAW,CAAC,CAAC,MAAM,CACxC,EAAE,EAAE,EAAE,IAAA,YAAE,EAAC,4BAA4B,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EACzD;gBACE,MAAM,EAAE,yBAAY,CAAC,aAAa;gBAClC,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB,CACF,CAAA;YACD,MAAM,EAAE,CAAC,aAAa,CAAC,wBAAW,CAAC,CAAC,MAAM,CACxC,EAAE,EAAE,EAAE,IAAA,YAAE,EAAC,4BAA4B,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EACzD;gBACE,MAAM,EAAE,yBAAY,CAAC,aAAa;gBAClC,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB,CACF,CAAA;SACF;QACD,OAAO,UAAU,CAAA;IACnB,CAAC;CACF,CAAA"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getZonePickingTask = void 0;
|
|
4
|
+
const typeorm_1 = require("typeorm");
|
|
5
|
+
const auth_base_1 = require("@things-factory/auth-base");
|
|
6
|
+
const sales_base_1 = require("@things-factory/sales-base");
|
|
7
|
+
const worksheet_base_1 = require("@things-factory/worksheet-base");
|
|
8
|
+
const setting_base_1 = require("@things-factory/setting-base");
|
|
9
|
+
const zone_worksheet_1 = require("./zone-worksheet");
|
|
10
|
+
exports.getZonePickingTask = {
|
|
11
|
+
async getZonePickingTask(_, {}, context) {
|
|
12
|
+
try {
|
|
13
|
+
let worksheet;
|
|
14
|
+
let locationSortingRules;
|
|
15
|
+
await (0, typeorm_1.getConnection)().transaction(async (tx) => {
|
|
16
|
+
const { domain, user } = context.state;
|
|
17
|
+
const assignee = await tx.getRepository(auth_base_1.User).findOne(user.id, { relations: ['domains'] });
|
|
18
|
+
if (((assignee === null || assignee === void 0 ? void 0 : assignee.domains) || []).every((userDomain) => userDomain.id !== domain.id))
|
|
19
|
+
throw new Error('Target user is not belong to current domain');
|
|
20
|
+
if (!assignee)
|
|
21
|
+
throw new Error('failed to find target user');
|
|
22
|
+
let worksheetQb = await tx
|
|
23
|
+
.getRepository(worksheet_base_1.Worksheet)
|
|
24
|
+
.createQueryBuilder('ws')
|
|
25
|
+
.select('ws.id')
|
|
26
|
+
.addSelect('ws.name')
|
|
27
|
+
.addSelect('ws.status')
|
|
28
|
+
.where('(ws.domain_id = :domain_id AND ws.type = :type AND ws.assignee_id = :assignee AND (ws.status = :status1 OR ws.status = :status2))', {
|
|
29
|
+
domain_id: domain.id,
|
|
30
|
+
type: worksheet_base_1.WORKSHEET_TYPE.ZONE_PICKING,
|
|
31
|
+
assignee: assignee.id,
|
|
32
|
+
status1: worksheet_base_1.WORKSHEET_STATUS.EXECUTING,
|
|
33
|
+
status2: worksheet_base_1.WORKSHEET_STATUS.DEACTIVATED
|
|
34
|
+
});
|
|
35
|
+
worksheet = await worksheetQb.getOne();
|
|
36
|
+
if (!worksheet) {
|
|
37
|
+
//find a worksheet and update assignee to user
|
|
38
|
+
let updatedWorksheets = await (0, typeorm_1.getConnection)().transaction(async (tx2) => {
|
|
39
|
+
let x = await tx2.getRepository(worksheet_base_1.Worksheet).query(`
|
|
40
|
+
UPDATE worksheets ws SET
|
|
41
|
+
assignee_id = $2,
|
|
42
|
+
updated_at = NOW(),
|
|
43
|
+
updater_id = $2
|
|
44
|
+
FROM (
|
|
45
|
+
SELECT ws.id, ws.name, ws.status, ws.release_good_id FROM worksheets ws
|
|
46
|
+
WHERE ws.domain_id = $1
|
|
47
|
+
AND ws.type = 'ZONE_PICKING'
|
|
48
|
+
AND ws.status IN ('EXECUTING', 'DEACTIVATED')
|
|
49
|
+
AND ws.assignee_id IS NULL
|
|
50
|
+
ORDER BY ws.created_at
|
|
51
|
+
) src where src.id = ws.id
|
|
52
|
+
RETURNING ws.id;
|
|
53
|
+
`, [domain.id, assignee.id]);
|
|
54
|
+
return x[0];
|
|
55
|
+
});
|
|
56
|
+
if (updatedWorksheets.length == 0)
|
|
57
|
+
throw new Error('no suitable worksheet found');
|
|
58
|
+
//fetch updated ws
|
|
59
|
+
worksheet = await tx
|
|
60
|
+
.getRepository(worksheet_base_1.Worksheet)
|
|
61
|
+
.findOne({ where: { id: updatedWorksheets[0].id, assignee: assignee } });
|
|
62
|
+
}
|
|
63
|
+
//validate worksheet is assigned to user
|
|
64
|
+
if (!worksheet)
|
|
65
|
+
throw new Error('Please try again by clicking the "Get Task" button');
|
|
66
|
+
if (worksheet.status == worksheet_base_1.WORKSHEET_STATUS.DEACTIVATED) {
|
|
67
|
+
await tx.getRepository(worksheet_base_1.Worksheet).update(worksheet.id, {
|
|
68
|
+
status: worksheet_base_1.WORKSHEET_STATUS.EXECUTING,
|
|
69
|
+
startedAt: new Date()
|
|
70
|
+
});
|
|
71
|
+
const worksheetDetails = await tx.getRepository(worksheet_base_1.WorksheetDetail).find({
|
|
72
|
+
where: { worksheet: worksheet },
|
|
73
|
+
relations: ['targetInventory']
|
|
74
|
+
});
|
|
75
|
+
await tx
|
|
76
|
+
.getRepository(worksheet_base_1.WorksheetDetail)
|
|
77
|
+
.update({ worksheet: worksheet, status: worksheet_base_1.WORKSHEET_STATUS.DEACTIVATED }, { status: worksheet_base_1.WORKSHEET_STATUS.EXECUTING });
|
|
78
|
+
const orderInventoryIds = worksheetDetails
|
|
79
|
+
.map(detail => detail.targetInventory)
|
|
80
|
+
.filter(oi => oi.status === sales_base_1.ORDER_INVENTORY_STATUS.READY_TO_PICK)
|
|
81
|
+
.map(oi => oi.id);
|
|
82
|
+
if (orderInventoryIds.length > 0) {
|
|
83
|
+
await tx
|
|
84
|
+
.getRepository(sales_base_1.OrderInventory)
|
|
85
|
+
.update({ id: (0, typeorm_1.In)(orderInventoryIds) }, { status: sales_base_1.ORDER_INVENTORY_STATUS.PROCESSING });
|
|
86
|
+
const releaseGoodIds = worksheetDetails
|
|
87
|
+
.map(detail => detail.targetInventory.releaseGoodId)
|
|
88
|
+
.filter((value, index, self) => self.indexOf(value) === index);
|
|
89
|
+
if (releaseGoodIds.length > 0) {
|
|
90
|
+
await tx
|
|
91
|
+
.getRepository(sales_base_1.ReleaseGood)
|
|
92
|
+
.update({ id: (0, typeorm_1.In)(releaseGoodIds), status: sales_base_1.ORDER_STATUS.READY_TO_PICK }, { status: sales_base_1.ORDER_STATUS.PROCESSING });
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
locationSortingRules = await tx.getRepository(setting_base_1.Setting).findOne({
|
|
97
|
+
where: { domain, name: 'rule-for-picking-product' }
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
//call zonePickingWorksheet
|
|
101
|
+
return zone_worksheet_1.zonePickingWorksheet.zonePickingWorksheet(_, { name: worksheet.name, locationSortingRules, filter: 'PICKING' }, context);
|
|
102
|
+
}
|
|
103
|
+
catch (e) {
|
|
104
|
+
throw e;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
//# sourceMappingURL=get-zone-picking-task.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-zone-picking-task.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/zone-worksheet/get-zone-picking-task.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Mutation = exports.Query = void 0;
|
|
4
|
+
const zone_worksheet_1 = require("./zone-worksheet");
|
|
5
|
+
const generate_zone_worksheet_1 = require("./generate-zone-worksheet");
|
|
6
|
+
const activate_zone_worksheet_1 = require("./activate-zone-worksheet");
|
|
7
|
+
const zone_picking_1 = require("./zone-picking");
|
|
8
|
+
const assign_sorter_1 = require("./assign-sorter");
|
|
9
|
+
const get_zone_picking_task_1 = require("./get-zone-picking-task");
|
|
10
|
+
exports.Query = Object.assign(Object.assign({}, zone_worksheet_1.zoneWorksheetOverview), zone_worksheet_1.zonePickingWorksheet);
|
|
11
|
+
exports.Mutation = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, generate_zone_worksheet_1.generateWorksheetZonePicking), activate_zone_worksheet_1.activateWorksheetZonePicking), activate_zone_worksheet_1.activateBulkWorksheetZonePicking), zone_picking_1.zonePicking), assign_sorter_1.assignSorter), get_zone_picking_task_1.getZonePickingTask);
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/zone-worksheet/index.ts"],"names":[],"mappings":";;;AAAA,qDAA8E;AAC9E,uEAAyE;AACzE,uEAA0G;AAC1G,iDAA4C;AAC5C,mDAA8C;AAC9C,mEAA4D;AAE/C,QAAA,KAAK,mCACb,sCAAqB,GACrB,qCAAoB,EACxB;AAEY,QAAA,QAAQ,2FAChB,sDAA4B,GAC5B,sDAA4B,GAC5B,0DAAgC,GAChC,0BAAW,GACX,4BAAY,GACZ,0CAAkB,EACtB"}
|
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.zonePicking = void 0;
|
|
4
|
+
const typeorm_1 = require("typeorm");
|
|
5
|
+
const worksheet_base_1 = require("@things-factory/worksheet-base");
|
|
6
|
+
const sales_base_1 = require("@things-factory/sales-base");
|
|
7
|
+
const warehouse_base_1 = require("@things-factory/warehouse-base");
|
|
8
|
+
const product_base_1 = require("@things-factory/product-base");
|
|
9
|
+
const uuid_1 = require("uuid");
|
|
10
|
+
exports.zonePicking = {
|
|
11
|
+
async scanProductZonePicking(_, { worksheetId, cartonId, productBarcode, binNo, pickingQty }, context) {
|
|
12
|
+
const { domain, tx, user } = context.state;
|
|
13
|
+
try {
|
|
14
|
+
console.time('ws');
|
|
15
|
+
//fetch ws, wsd, oi
|
|
16
|
+
const worksheet = await tx
|
|
17
|
+
.getRepository(worksheet_base_1.Worksheet)
|
|
18
|
+
.createQueryBuilder('ws')
|
|
19
|
+
.innerJoinAndSelect('ws.worksheetDetails', 'wsd', 'wsd.worksheet_id = ws.id')
|
|
20
|
+
.innerJoinAndSelect('wsd.targetInventory', 'oi', 'oi.id= wsd.target_inventory_id')
|
|
21
|
+
.where('ws.id = :worksheetId', { worksheetId: worksheetId })
|
|
22
|
+
.andWhere('ws.domain_id = :domainId', { domainId: domain.id })
|
|
23
|
+
.andWhere('ws.status in (:...status)', {
|
|
24
|
+
status: [worksheet_base_1.WORKSHEET_STATUS.EXECUTING, worksheet_base_1.WORKSHEET_STATUS.PARTIAL_EXECUTING]
|
|
25
|
+
})
|
|
26
|
+
.andWhere('ws.type = :type', { type: worksheet_base_1.WORKSHEET_TYPE.ZONE_PICKING })
|
|
27
|
+
.getOne();
|
|
28
|
+
if (!worksheet)
|
|
29
|
+
throw new Error('No worksheet found');
|
|
30
|
+
let worksheetDetails = worksheet.worksheetDetails;
|
|
31
|
+
let oiIds = worksheetDetails.map(wsd => wsd.targetInventory.id);
|
|
32
|
+
const targetInventories = await tx
|
|
33
|
+
.getRepository(sales_base_1.OrderInventory)
|
|
34
|
+
.createQueryBuilder('oi')
|
|
35
|
+
.innerJoinAndSelect('oi.inventory', 'i', 'i.id = oi.inventory_id')
|
|
36
|
+
.where('oi.id IN(:...oiIds)', { oiIds: oiIds })
|
|
37
|
+
.andWhere('i.carton_id = :cartonId', { cartonId: cartonId })
|
|
38
|
+
.andWhere('oi.status = :status', { status: sales_base_1.ORDER_INVENTORY_STATUS.PROCESSING })
|
|
39
|
+
.orderBy('oi.created_at')
|
|
40
|
+
.getMany();
|
|
41
|
+
if (!targetInventories || targetInventories.length === 0) {
|
|
42
|
+
throw new Error(`No inventory found for carton ID: ${cartonId}. Please verify the carton ID and worksheet details.`);
|
|
43
|
+
}
|
|
44
|
+
//fetch product, product detail
|
|
45
|
+
const productDetail = await tx
|
|
46
|
+
.getRepository(product_base_1.ProductDetail)
|
|
47
|
+
.createQueryBuilder('pd')
|
|
48
|
+
.innerJoinAndSelect('pd.product', 'p')
|
|
49
|
+
.innerJoin('pd.productBarcodes', 'pb')
|
|
50
|
+
.where('pd.id IN (:...productDetailIds)', { productDetailIds: targetInventories.map(oi => oi.productDetailId) })
|
|
51
|
+
.andWhere('p.id IN (:...productIds)', { productIds: targetInventories.map(oi => oi.productId) })
|
|
52
|
+
.andWhere('pb.gtin = :productBarcode', { productBarcode: productBarcode })
|
|
53
|
+
.getOne();
|
|
54
|
+
if (!productDetail) {
|
|
55
|
+
throw new Error(`Product not found with barcode: ${productBarcode}.`);
|
|
56
|
+
}
|
|
57
|
+
const product = productDetail.product;
|
|
58
|
+
let pickedQty = pickingQty ? pickingQty : 1;
|
|
59
|
+
// Add decimal quantity validation
|
|
60
|
+
if (pickingQty % 1 !== 0 && !product.isInventoryDecimal) {
|
|
61
|
+
throw new Error('Decimal quantities are not allowed for this product');
|
|
62
|
+
}
|
|
63
|
+
//calculate unit picked qty if user scan ctn barcode
|
|
64
|
+
let matchingProduct;
|
|
65
|
+
let wsController = new worksheet_base_1.WorksheetController(tx, domain, user);
|
|
66
|
+
matchingProduct = await wsController.getDirectQty(Object.assign(Object.assign({}, productDetail), { product }), productBarcode, pickedQty);
|
|
67
|
+
if (!matchingProduct)
|
|
68
|
+
throw new Error(wsController.ERROR_MSG.FIND.NO_RESULT(productBarcode));
|
|
69
|
+
pickedQty = matchingProduct.qty;
|
|
70
|
+
const sumOfReleaseQty = targetInventories
|
|
71
|
+
.filter((oi) => oi.productDetailId === productDetail.id)
|
|
72
|
+
.map((oi) => oi.releaseQty)
|
|
73
|
+
.reduce((a, b) => a + b, 0);
|
|
74
|
+
// Calculate total picked quantity including the current picking
|
|
75
|
+
const sumOfPickedQty = targetInventories
|
|
76
|
+
.filter((oi) => oi.productDetailId === productDetail.id)
|
|
77
|
+
.map((oi) => oi.pickedQty)
|
|
78
|
+
.reduce((a, b) => a + b, 0);
|
|
79
|
+
// Add the current picking quantity
|
|
80
|
+
const totalPickedQty = sumOfPickedQty + pickedQty;
|
|
81
|
+
if (totalPickedQty > sumOfReleaseQty)
|
|
82
|
+
throw new Error(wsController.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('picking', `quantity can't exceed limitation`));
|
|
83
|
+
let productOrderInventory = targetInventories.filter(oi => oi.productId === product.id && oi.productDetailId === productDetail.id);
|
|
84
|
+
//update all oi
|
|
85
|
+
for (const oi of productOrderInventory) {
|
|
86
|
+
let targetInventory = oi;
|
|
87
|
+
let inventory = targetInventory.inventory;
|
|
88
|
+
const targetReleaseQty = targetInventory.releaseQty;
|
|
89
|
+
const targetPickedQty = targetInventory.pickedQty;
|
|
90
|
+
const releaseGood = targetInventory.releaseGood;
|
|
91
|
+
if (pickedQty <= 0)
|
|
92
|
+
break;
|
|
93
|
+
// validation to prevent picking if the inventory is involved in cycle count
|
|
94
|
+
let inventoryCheckItem = await tx.getRepository(sales_base_1.InventoryCheckItem).findOne({
|
|
95
|
+
where: {
|
|
96
|
+
domain: domain,
|
|
97
|
+
inventory: inventory.id,
|
|
98
|
+
status: (0, typeorm_1.In)([
|
|
99
|
+
sales_base_1.INVENTORY_CHECK_ITEM_STATUS.PENDING,
|
|
100
|
+
sales_base_1.INVENTORY_CHECK_ITEM_STATUS.INSPECTING,
|
|
101
|
+
sales_base_1.INVENTORY_CHECK_ITEM_STATUS.INSPECTED,
|
|
102
|
+
sales_base_1.INVENTORY_CHECK_ITEM_STATUS.NOT_TALLY,
|
|
103
|
+
sales_base_1.INVENTORY_CHECK_ITEM_STATUS.MISSING,
|
|
104
|
+
sales_base_1.INVENTORY_CHECK_ITEM_STATUS.ADDED
|
|
105
|
+
])
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
if (inventoryCheckItem) {
|
|
109
|
+
throw new Error(`Inventory currently involved in an ongoing cycle count. Please complete the cycle count to proceed with picking.`);
|
|
110
|
+
}
|
|
111
|
+
//logic for qty deduction
|
|
112
|
+
if (targetInventory.status === sales_base_1.ORDER_INVENTORY_STATUS.PROCESSING &&
|
|
113
|
+
targetReleaseQty > targetPickedQty &&
|
|
114
|
+
pickedQty > 0) {
|
|
115
|
+
let remainingAssignedQty = pickedQty - (targetReleaseQty - targetPickedQty); // -1, 0, 1
|
|
116
|
+
const gapQtyRemaining = targetReleaseQty - targetPickedQty; // > 0
|
|
117
|
+
if (binNo && !(targetInventory === null || targetInventory === void 0 ? void 0 : targetInventory.binLocation)) {
|
|
118
|
+
const binLocation = await tx.getRepository(warehouse_base_1.Location).findOne({
|
|
119
|
+
where: { domain: domain, name: binNo, type: warehouse_base_1.LOCATION_TYPE.BIN }
|
|
120
|
+
});
|
|
121
|
+
if (!binLocation)
|
|
122
|
+
throw new Error(wsController.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('picking', `invalid bin location id`));
|
|
123
|
+
targetInventory.binLocation = binLocation;
|
|
124
|
+
}
|
|
125
|
+
targetInventory.pickedQty += pickedQty > gapQtyRemaining ? gapQtyRemaining : pickedQty;
|
|
126
|
+
remainingAssignedQty = remainingAssignedQty < 0 ? 0 : remainingAssignedQty;
|
|
127
|
+
if (targetInventory.pickedQty == targetReleaseQty) {
|
|
128
|
+
//update oi and wsd to done if pickedQty matches releaseQty
|
|
129
|
+
const leftQty = inventory.qty - targetInventory.releaseQty;
|
|
130
|
+
if (leftQty < 0) {
|
|
131
|
+
throw new Error(wsController.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('picking', `quantity can't exceed limitation`));
|
|
132
|
+
}
|
|
133
|
+
let releaseGood = await tx.getRepository(sales_base_1.ReleaseGood).findOne({
|
|
134
|
+
where: { id: targetInventory.releaseGoodId }
|
|
135
|
+
});
|
|
136
|
+
//update oi
|
|
137
|
+
targetInventory.status = sales_base_1.ORDER_INVENTORY_STATUS.PICKED;
|
|
138
|
+
await updateOrderInventories(tx, targetInventory);
|
|
139
|
+
//update loading wsd if exist
|
|
140
|
+
let loadingWorksheetDetail = await tx.getRepository(worksheet_base_1.WorksheetDetail).findOne({
|
|
141
|
+
where: { type: worksheet_base_1.WORKSHEET_TYPE.LOADING, targetInventory: targetInventory }
|
|
142
|
+
});
|
|
143
|
+
if (loadingWorksheetDetail && loadingWorksheetDetail.status == worksheet_base_1.WORKSHEET_STATUS.DEACTIVATED) {
|
|
144
|
+
await tx
|
|
145
|
+
.getRepository(worksheet_base_1.WorksheetDetail)
|
|
146
|
+
.update({ id: loadingWorksheetDetail.id }, { status: worksheet_base_1.WORKSHEET_STATUS.EXECUTING, updatedAt: new Date(), updater: user });
|
|
147
|
+
}
|
|
148
|
+
//update inventory with proper decimal handling
|
|
149
|
+
let updateInvObj = {
|
|
150
|
+
qty: () => `"qty" - ${targetInventory.releaseQty}::numeric`,
|
|
151
|
+
lockedQty: () => `"locked_qty" - ${targetInventory.releaseQty}::numeric`,
|
|
152
|
+
uomValue: () => `"uom_value" - ${targetInventory.releaseUomValue}::numeric`,
|
|
153
|
+
lockedUomValue: () => `"locked_uom_value" - ${targetInventory.releaseUomValue}::numeric`,
|
|
154
|
+
updater: user,
|
|
155
|
+
updatedAt: new Date()
|
|
156
|
+
};
|
|
157
|
+
await tx
|
|
158
|
+
.getRepository(warehouse_base_1.Inventory)
|
|
159
|
+
.createQueryBuilder()
|
|
160
|
+
.update(warehouse_base_1.Inventory)
|
|
161
|
+
.set(updateInvObj)
|
|
162
|
+
.where('id = :id', { id: targetInventory.inventory.id })
|
|
163
|
+
.returning(['qty'])
|
|
164
|
+
.execute();
|
|
165
|
+
console.time('inv history');
|
|
166
|
+
//slow
|
|
167
|
+
await (0, warehouse_base_1.generateInventoryHistory)(inventory, releaseGood, warehouse_base_1.INVENTORY_TRANSACTION_TYPE.PICKING, -targetInventory.releaseQty, -targetInventory.releaseUomValue, user, tx);
|
|
168
|
+
console.timeEnd('inv history');
|
|
169
|
+
if (leftQty === 0) {
|
|
170
|
+
inventory.status = warehouse_base_1.INVENTORY_STATUS.TERMINATED;
|
|
171
|
+
}
|
|
172
|
+
let worksheetDetail = worksheetDetails.find((wsd) => wsd.targetInventory.id === targetInventory.id);
|
|
173
|
+
await tx.getRepository(worksheet_base_1.WorksheetDetail).update({
|
|
174
|
+
id: worksheetDetail.id
|
|
175
|
+
}, {
|
|
176
|
+
status: worksheet_base_1.WORKSHEET_STATUS.DONE,
|
|
177
|
+
updater: user,
|
|
178
|
+
updatedAt: new Date()
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
//updates oi if pickedQty != releaseQty
|
|
183
|
+
await updateOrderInventories(tx, targetInventory);
|
|
184
|
+
}
|
|
185
|
+
//deduct pickedQty for the next oi
|
|
186
|
+
pickedQty = pickedQty - (targetReleaseQty - targetPickedQty);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
console.timeEnd('ws');
|
|
190
|
+
return true;
|
|
191
|
+
}
|
|
192
|
+
catch (e) {
|
|
193
|
+
throw new Error(e);
|
|
194
|
+
}
|
|
195
|
+
},
|
|
196
|
+
async completeZonePicking(_, { worksheetId }, context) {
|
|
197
|
+
return completeZonePicking(worksheetId, context, false);
|
|
198
|
+
},
|
|
199
|
+
async completeZonePickingPartially(_, { worksheetId }, context) {
|
|
200
|
+
return completeZonePicking(worksheetId, context, true);
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
async function updateOrderInventories(tx, orderInventory) {
|
|
204
|
+
//delete relations
|
|
205
|
+
delete orderInventory.domainId;
|
|
206
|
+
delete orderInventory.bizplaceId;
|
|
207
|
+
delete orderInventory.creatorId;
|
|
208
|
+
delete orderInventory.inventoryCheckId;
|
|
209
|
+
delete orderInventory.inventoryId;
|
|
210
|
+
delete orderInventory.orderProductId;
|
|
211
|
+
delete orderInventory.productId;
|
|
212
|
+
delete orderInventory.releaseGoodId;
|
|
213
|
+
delete orderInventory.replenishmentId;
|
|
214
|
+
delete orderInventory.arrivalNoticeId;
|
|
215
|
+
delete orderInventory.binLocationId;
|
|
216
|
+
delete orderInventory.deliveryOrderId;
|
|
217
|
+
delete orderInventory.originLocationId;
|
|
218
|
+
delete orderInventory.refWorksheetId;
|
|
219
|
+
delete orderInventory.returnOrderId;
|
|
220
|
+
delete orderInventory.transferOrderId;
|
|
221
|
+
delete orderInventory.updaterId;
|
|
222
|
+
delete orderInventory.inspectedLocationId;
|
|
223
|
+
delete orderInventory.productDetailId;
|
|
224
|
+
await tx.getRepository(sales_base_1.OrderInventory).update({ id: orderInventory.id }, orderInventory);
|
|
225
|
+
}
|
|
226
|
+
async function completeZonePicking(worksheetId, context, isPartial) {
|
|
227
|
+
const { domain, tx, user } = context.state;
|
|
228
|
+
//fetch zone picking worksheet
|
|
229
|
+
const worksheet = await tx.getRepository(worksheet_base_1.Worksheet).findOne({
|
|
230
|
+
where: { id: worksheetId },
|
|
231
|
+
relations: ['worksheetDetails', 'worksheetDetails.targetInventory']
|
|
232
|
+
});
|
|
233
|
+
const worksheetDetails = worksheet.worksheetDetails;
|
|
234
|
+
const targetInventories = worksheetDetails
|
|
235
|
+
// .filter(wsd => wsd.status != 'MISSING' || wsd.status != 'CANCELLED')
|
|
236
|
+
.map((wsd) => wsd.targetInventory);
|
|
237
|
+
let roIds = [...new Set(targetInventories.map(oi => oi.releaseGoodId))];
|
|
238
|
+
//update ro status to partial processing for partial complete
|
|
239
|
+
if (isPartial) {
|
|
240
|
+
await tx.getRepository(sales_base_1.ReleaseGood).update({ id: (0, typeorm_1.In)(roIds), status: sales_base_1.ORDER_STATUS.PROCESSING }, {
|
|
241
|
+
status: sales_base_1.ORDER_STATUS.PARTIAL_PROCESSING,
|
|
242
|
+
updater: user,
|
|
243
|
+
updatedAt: new Date()
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
else if (!isPartial) {
|
|
247
|
+
await tx.getRepository(sales_base_1.ReleaseGood).update({ id: (0, typeorm_1.In)(roIds), status: sales_base_1.ORDER_STATUS.PARTIAL_PROCESSING }, {
|
|
248
|
+
status: sales_base_1.ORDER_STATUS.PROCESSING,
|
|
249
|
+
updater: user,
|
|
250
|
+
updatedAt: new Date()
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
//find exist loading worksheet
|
|
254
|
+
const existLoadingWorksheet = await tx
|
|
255
|
+
.getRepository(worksheet_base_1.Worksheet)
|
|
256
|
+
.createQueryBuilder('ws')
|
|
257
|
+
.innerJoinAndSelect('ws.releaseGood', 'rg', 'rg.id = ws.release_good_id')
|
|
258
|
+
.where('ws.domain_id = :domainId', { domainId: domain.id })
|
|
259
|
+
.andWhere('ws.type = :type', { type: worksheet_base_1.WORKSHEET_TYPE.LOADING })
|
|
260
|
+
.andWhere('rg.id IN (:...roIds)', { roIds })
|
|
261
|
+
.getMany();
|
|
262
|
+
let roWithoutLoadingWorksheet = roIds.filter(roId => !existLoadingWorksheet.some(ws => ws.releaseGood.id === roId));
|
|
263
|
+
let roWithLoadingWorksheet = roIds.filter(roId => existLoadingWorksheet.some(ws => ws.releaseGood.id === roId));
|
|
264
|
+
if (roWithoutLoadingWorksheet.length > 0) {
|
|
265
|
+
await generateLoadingWorksheets(tx, domain, user, roWithoutLoadingWorksheet);
|
|
266
|
+
}
|
|
267
|
+
if (roWithLoadingWorksheet.length > 0) {
|
|
268
|
+
//update picked oi to loading
|
|
269
|
+
await tx.getRepository(sales_base_1.OrderInventory).update({ releaseGood: (0, typeorm_1.In)(roWithLoadingWorksheet), status: sales_base_1.ORDER_INVENTORY_STATUS.PICKED }, {
|
|
270
|
+
status: sales_base_1.ORDER_INVENTORY_STATUS.SORTING,
|
|
271
|
+
updater: user,
|
|
272
|
+
updatedAt: new Date()
|
|
273
|
+
});
|
|
274
|
+
const loadingOrderInventories = await tx.getRepository(sales_base_1.OrderInventory).find({
|
|
275
|
+
where: { releaseGood: (0, typeorm_1.In)(roWithLoadingWorksheet), status: sales_base_1.ORDER_INVENTORY_STATUS.SORTING }
|
|
276
|
+
});
|
|
277
|
+
//update loading wsd deactivated to executing
|
|
278
|
+
await tx.getRepository(worksheet_base_1.WorksheetDetail).update({
|
|
279
|
+
targetInventory: (0, typeorm_1.In)(loadingOrderInventories.map(oi => oi.id)),
|
|
280
|
+
type: worksheet_base_1.WORKSHEET_TYPE.LOADING,
|
|
281
|
+
status: worksheet_base_1.WORKSHEET_STATUS.DEACTIVATED
|
|
282
|
+
}, { status: worksheet_base_1.WORKSHEET_STATUS.EXECUTING, updatedAt: new Date(), updater: user });
|
|
283
|
+
}
|
|
284
|
+
const wsStatus = isPartial ? worksheet_base_1.WORKSHEET_STATUS.PARTIAL_EXECUTING : worksheet_base_1.WORKSHEET_STATUS.DONE;
|
|
285
|
+
await updateWorksheetsAndDetails(tx, worksheet, worksheetDetails, wsStatus, user);
|
|
286
|
+
return true;
|
|
287
|
+
}
|
|
288
|
+
async function generateLoadingWorksheets(tx, domain, user, roWithoutLoadingWorksheet) {
|
|
289
|
+
const releaseGoods = await tx.getRepository(sales_base_1.ReleaseGood).find({
|
|
290
|
+
where: { id: (0, typeorm_1.In)(roWithoutLoadingWorksheet), status: (0, typeorm_1.Not)((0, typeorm_1.In)(sales_base_1.ORDER_STATUS.OBSOLETE)) },
|
|
291
|
+
relations: ['orderInventories', 'sortedBy']
|
|
292
|
+
});
|
|
293
|
+
for (const ro of releaseGoods) {
|
|
294
|
+
const loadingWorksheet = {
|
|
295
|
+
name: `LOAD-` + (0, uuid_1.v4)(),
|
|
296
|
+
type: worksheet_base_1.WORKSHEET_TYPE.LOADING,
|
|
297
|
+
status: worksheet_base_1.WORKSHEET_STATUS.EXECUTING,
|
|
298
|
+
startedAt: new Date(),
|
|
299
|
+
createdAt: new Date(),
|
|
300
|
+
domain: ro.domainId,
|
|
301
|
+
bizplace: ro.bizplaceId,
|
|
302
|
+
releaseGood: ro,
|
|
303
|
+
creator: user,
|
|
304
|
+
sorter: ro.sortedBy ? ro.sortedBy : null
|
|
305
|
+
};
|
|
306
|
+
await tx.getRepository(worksheet_base_1.Worksheet).insert(loadingWorksheet);
|
|
307
|
+
const orderInventories = ro.orderInventories;
|
|
308
|
+
const loadingWorksheetDetails = orderInventories.map(oi => {
|
|
309
|
+
const status = oi.status === sales_base_1.ORDER_INVENTORY_STATUS.PICKED ? worksheet_base_1.WORKSHEET_STATUS.EXECUTING : worksheet_base_1.WORKSHEET_STATUS.DEACTIVATED;
|
|
310
|
+
return {
|
|
311
|
+
name: `LOAD-DETAIL-` + (0, uuid_1.v4)(),
|
|
312
|
+
type: worksheet_base_1.WORKSHEET_TYPE.LOADING,
|
|
313
|
+
status: status,
|
|
314
|
+
createdAt: new Date(),
|
|
315
|
+
domain: domain,
|
|
316
|
+
bizplace: ro.bizplaceId,
|
|
317
|
+
worksheet: loadingWorksheet,
|
|
318
|
+
targetInventory: oi,
|
|
319
|
+
creator: user
|
|
320
|
+
};
|
|
321
|
+
});
|
|
322
|
+
await tx.getRepository(worksheet_base_1.WorksheetDetail).insert(loadingWorksheetDetails);
|
|
323
|
+
//update picked oi to loading
|
|
324
|
+
await tx.getRepository(sales_base_1.OrderInventory).update({ id: (0, typeorm_1.In)(orderInventories.map(oi => oi.id)), status: sales_base_1.ORDER_INVENTORY_STATUS.PICKED }, {
|
|
325
|
+
status: sales_base_1.ORDER_INVENTORY_STATUS.SORTING,
|
|
326
|
+
updater: user,
|
|
327
|
+
updatedAt: new Date()
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
async function updateWorksheetsAndDetails(tx, worksheet, worksheetDetails, status, updater) {
|
|
332
|
+
worksheet.status = status;
|
|
333
|
+
worksheet.endedAt = status === worksheet_base_1.WORKSHEET_STATUS.DONE ? new Date() : null;
|
|
334
|
+
worksheet.updater = updater;
|
|
335
|
+
worksheet.updatedAt = new Date();
|
|
336
|
+
// Filter only the worksheet details that need to be updated
|
|
337
|
+
const updateWorksheetDetails = worksheetDetails.filter(wsd => { var _a; return ((_a = wsd.targetInventory) === null || _a === void 0 ? void 0 : _a.status) === sales_base_1.ORDER_INVENTORY_STATUS.PICKED; });
|
|
338
|
+
if (updateWorksheetDetails.length > 0) {
|
|
339
|
+
await tx.getRepository(worksheet_base_1.WorksheetDetail).update({ id: (0, typeorm_1.In)(updateWorksheetDetails.map(wsd => wsd.id)) }, {
|
|
340
|
+
status: worksheet_base_1.WORKSHEET_STATUS.DONE,
|
|
341
|
+
updater: updater
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
await tx.getRepository(worksheet_base_1.Worksheet).save(worksheet);
|
|
345
|
+
}
|
|
346
|
+
//# sourceMappingURL=zone-picking.js.map
|