@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,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.analysisPickingPackingReport = void 0;
|
|
4
|
+
const biz_base_1 = require("@things-factory/biz-base");
|
|
5
|
+
const utils_1 = require("../../../utils");
|
|
6
|
+
exports.analysisPickingPackingReport = {
|
|
7
|
+
async analysisPickingPackingReport(_, params, context) {
|
|
8
|
+
try {
|
|
9
|
+
const { tx, domain } = context.state;
|
|
10
|
+
let bizplace = params.filters.find((data) => data.name === 'bizplace');
|
|
11
|
+
let fromDate = params.filters.find((data) => data.name == 'fromDate');
|
|
12
|
+
let toDate = params.filters.find((data) => data.name == 'toDate');
|
|
13
|
+
let name = params.filters.find((data) => data.name === 'name');
|
|
14
|
+
let rate = params.filters.find((data) => data.name === 'rate');
|
|
15
|
+
let type = params.filters.find((data) => data.name === 'type');
|
|
16
|
+
// throw error bizplace filter missing
|
|
17
|
+
if (!bizplace)
|
|
18
|
+
throw 'Invalid input';
|
|
19
|
+
let queryFilter = '';
|
|
20
|
+
if (name) {
|
|
21
|
+
let nameValue = name.value
|
|
22
|
+
.toLowerCase()
|
|
23
|
+
.split(',')
|
|
24
|
+
.map((prod) => {
|
|
25
|
+
return "'%" + prod.trim().replace(/'/g, "''") + "%'";
|
|
26
|
+
})
|
|
27
|
+
.join(',');
|
|
28
|
+
queryFilter += `AND (
|
|
29
|
+
Lower(u.name) LIKE ANY(ARRAY[${nameValue}])
|
|
30
|
+
)`;
|
|
31
|
+
}
|
|
32
|
+
let sortingTypes = '';
|
|
33
|
+
if (type) {
|
|
34
|
+
let typeValue = type.value;
|
|
35
|
+
if (typeValue === 'packing' || typeValue === 'picking') {
|
|
36
|
+
sortingTypes = `AND ih.transaction_type = '${typeValue.toUpperCase()}'`;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
let sortingOptions = '';
|
|
40
|
+
if (rate) {
|
|
41
|
+
let rateValue = rate.value;
|
|
42
|
+
if (rateValue === 'asc' || rateValue === 'desc') {
|
|
43
|
+
sortingOptions = `ORDER BY packing_rates."packingRate" ${rateValue.toUpperCase()}`;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (bizplace) {
|
|
47
|
+
queryFilter += ` AND ih.bizplace_id = '${bizplace.value}'`;
|
|
48
|
+
}
|
|
49
|
+
const bizplaceObj = await tx.getRepository(biz_base_1.Bizplace).findOne({
|
|
50
|
+
id: bizplace.value
|
|
51
|
+
});
|
|
52
|
+
await (0, utils_1.rawProductsQuery)(tx, params, bizplaceObj);
|
|
53
|
+
const fromDateValue = new Date(fromDate.value);
|
|
54
|
+
const toDateValue = new Date(toDate.value);
|
|
55
|
+
// Check if the date objects are valid
|
|
56
|
+
if (isNaN(fromDateValue.getTime()) || isNaN(toDateValue.getTime())) {
|
|
57
|
+
throw new Error('Invalid date format. Please provide valid date values.');
|
|
58
|
+
}
|
|
59
|
+
const sqlQuery = `
|
|
60
|
+
WITH packing_rates AS (
|
|
61
|
+
SELECT
|
|
62
|
+
u.name,
|
|
63
|
+
SUM(CASE WHEN EXTRACT(HOUR FROM (ih.created_at + INTERVAL '8 HOUR')) = 7 THEN 1 ELSE 0 END) AS "7",
|
|
64
|
+
SUM(CASE WHEN EXTRACT(HOUR FROM (ih.created_at + INTERVAL '8 HOUR')) = 8 THEN 1 ELSE 0 END) AS "8",
|
|
65
|
+
SUM(CASE WHEN EXTRACT(HOUR FROM (ih.created_at + INTERVAL '8 HOUR')) = 9 THEN 1 ELSE 0 END) AS "9",
|
|
66
|
+
SUM(CASE WHEN EXTRACT(HOUR FROM (ih.created_at + INTERVAL '8 HOUR')) = 10 THEN 1 ELSE 0 END) AS "10",
|
|
67
|
+
SUM(CASE WHEN EXTRACT(HOUR FROM (ih.created_at + INTERVAL '8 HOUR')) = 11 THEN 1 ELSE 0 END) AS "11",
|
|
68
|
+
SUM(CASE WHEN EXTRACT(HOUR FROM (ih.created_at + INTERVAL '8 HOUR')) = 12 THEN 1 ELSE 0 END) AS "12",
|
|
69
|
+
SUM(CASE WHEN EXTRACT(HOUR FROM (ih.created_at + INTERVAL '8 HOUR')) = 13 THEN 1 ELSE 0 END) AS "13",
|
|
70
|
+
SUM(CASE WHEN EXTRACT(HOUR FROM (ih.created_at + INTERVAL '8 HOUR')) = 14 THEN 1 ELSE 0 END) AS "14",
|
|
71
|
+
SUM(CASE WHEN EXTRACT(HOUR FROM (ih.created_at + INTERVAL '8 HOUR')) = 15 THEN 1 ELSE 0 END) AS "15",
|
|
72
|
+
SUM(CASE WHEN EXTRACT(HOUR FROM (ih.created_at + INTERVAL '8 HOUR')) = 16 THEN 1 ELSE 0 END) AS "16",
|
|
73
|
+
SUM(CASE WHEN EXTRACT(HOUR FROM (ih.created_at + INTERVAL '8 HOUR')) = 17 THEN 1 ELSE 0 END) AS "17",
|
|
74
|
+
SUM(CASE WHEN EXTRACT(HOUR FROM (ih.created_at + INTERVAL '8 HOUR')) = 18 THEN 1 ELSE 0 END) AS "18",
|
|
75
|
+
COUNT(DISTINCT DATE(ih.created_at)) AS "totalDaysWorked",
|
|
76
|
+
COUNT(DISTINCT DATE_TRUNC('hour', (ih.created_at + INTERVAL '8 HOUR'))) AS "totalHoursWorked",
|
|
77
|
+
COUNT(*) AS "totalPacks",
|
|
78
|
+
ROUND(COUNT(*) / COUNT(DISTINCT DATE_TRUNC('hour', (ih.created_at + INTERVAL '8 HOUR')))) AS "packingRate"
|
|
79
|
+
FROM
|
|
80
|
+
inventory_histories ih
|
|
81
|
+
INNER JOIN
|
|
82
|
+
users u ON ih.creator_id = u.id
|
|
83
|
+
WHERE
|
|
84
|
+
ih.domain_id = $1
|
|
85
|
+
AND ih.created_at BETWEEN $2 AND $3
|
|
86
|
+
${queryFilter}
|
|
87
|
+
${sortingTypes}
|
|
88
|
+
GROUP BY
|
|
89
|
+
u.name
|
|
90
|
+
)
|
|
91
|
+
SELECT
|
|
92
|
+
"name",
|
|
93
|
+
"7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18",
|
|
94
|
+
packing_rates."totalDaysWorked",
|
|
95
|
+
"totalPacks",
|
|
96
|
+
packing_rates."totalHoursWorked",
|
|
97
|
+
packing_rates."packingRate"
|
|
98
|
+
FROM
|
|
99
|
+
packing_rates
|
|
100
|
+
${sortingOptions}
|
|
101
|
+
`;
|
|
102
|
+
const result = await tx.query(sqlQuery, [domain.id, fromDate.value, toDate.value]);
|
|
103
|
+
return {
|
|
104
|
+
items: result.map((data) => {
|
|
105
|
+
return Object.assign(Object.assign({}, data), { name: data.name, hourlyData: JSON.stringify({
|
|
106
|
+
7: data["7"],
|
|
107
|
+
8: data["8"],
|
|
108
|
+
9: data["9"],
|
|
109
|
+
10: data["10"],
|
|
110
|
+
11: data["11"],
|
|
111
|
+
12: data["12"],
|
|
112
|
+
13: data["13"],
|
|
113
|
+
14: data["14"],
|
|
114
|
+
15: data["15"],
|
|
115
|
+
16: data["16"],
|
|
116
|
+
17: data["17"],
|
|
117
|
+
18: data["18"],
|
|
118
|
+
}) });
|
|
119
|
+
}),
|
|
120
|
+
total: result.length
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
throw error;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
//# sourceMappingURL=analysis-picking-packing-report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analysis-picking-packing-report.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/reports/analysis-picking-packing-report.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.billingModuleReport = void 0;
|
|
4
|
+
const auth_base_1 = require("@things-factory/auth-base");
|
|
5
|
+
const biz_base_1 = require("@things-factory/biz-base");
|
|
6
|
+
exports.billingModuleReport = {
|
|
7
|
+
async billingModuleReport(_, params, context) {
|
|
8
|
+
try {
|
|
9
|
+
const { tx } = context.state;
|
|
10
|
+
let bizplaceFilter = { name: '', operator: '', value: '' };
|
|
11
|
+
let userFilter = params.filters.find(data => data.name === 'user');
|
|
12
|
+
let fromDate = params.filters.find(data => data.name === 'fromDate');
|
|
13
|
+
let toDate = params.filters.find(data => data.name === 'toDate');
|
|
14
|
+
let locationType = params.filters.find(data => data.name === 'locationType');
|
|
15
|
+
if (userFilter) {
|
|
16
|
+
const user = await tx.getRepository(auth_base_1.User).findOne({
|
|
17
|
+
where: { id: userFilter.value },
|
|
18
|
+
relations: ['bizplaces']
|
|
19
|
+
});
|
|
20
|
+
const bizplace = user.bizplaces[0];
|
|
21
|
+
if (!bizplace)
|
|
22
|
+
throw 'Invalid input';
|
|
23
|
+
bizplaceFilter = { name: 'bizplace', operator: 'eq', value: bizplace.id };
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
bizplaceFilter = params.filters.find(data => data.name === 'bizplace');
|
|
27
|
+
}
|
|
28
|
+
if (!bizplaceFilter || !fromDate || !toDate)
|
|
29
|
+
throw 'Invalid input';
|
|
30
|
+
const bizplace = await tx.getRepository(biz_base_1.Bizplace).findOne({
|
|
31
|
+
id: bizplaceFilter.value
|
|
32
|
+
});
|
|
33
|
+
// Prepare dynamic locationType clause and query params
|
|
34
|
+
const queryParams = [context.state.domain.id, bizplace.id];
|
|
35
|
+
let locationTypeClause = '';
|
|
36
|
+
if (locationType && locationType.value) {
|
|
37
|
+
locationTypeClause = 'AND l.type = $3';
|
|
38
|
+
queryParams.push(locationType.value);
|
|
39
|
+
}
|
|
40
|
+
console.time('temp');
|
|
41
|
+
await tx.query(`
|
|
42
|
+
CREATE TEMP TABLE temp_data_src ON COMMIT DROP AS (
|
|
43
|
+
-- Inventory Histories
|
|
44
|
+
SELECT
|
|
45
|
+
invh.inventory_id,
|
|
46
|
+
UPPER(TRIM(invh.packing_type)) AS packing_type,
|
|
47
|
+
CASE
|
|
48
|
+
WHEN invh.order_no ILIKE 'RTO-%' OR invh.transaction_type = 'RETURN' THEN REPLACE((transaction_type)::text, 'UNLOADING', 'RETURN')
|
|
49
|
+
WHEN invh.transaction_type = 'RETURN' THEN REPLACE((transaction_type)::text, 'RETURN', 'RETURN')
|
|
50
|
+
ELSE invh.transaction_type
|
|
51
|
+
END AS transaction_type,
|
|
52
|
+
invh.status, invh.created_at + INTERVAL '8 hours' AS created_at,
|
|
53
|
+
invh.qty,
|
|
54
|
+
invh.opening_qty,
|
|
55
|
+
pd.volume,
|
|
56
|
+
l."type" as location,
|
|
57
|
+
w."type" as warehouse,
|
|
58
|
+
invh.domain_id,
|
|
59
|
+
invh.bizplace_id
|
|
60
|
+
FROM reduced_inventory_histories invh
|
|
61
|
+
INNER JOIN inventories i on i.id = invh.inventory_id
|
|
62
|
+
INNER JOIN locations l on l.id = i.location_id
|
|
63
|
+
INNER JOIN warehouses w on w.id = l.warehouse_id
|
|
64
|
+
LEFT JOIN product_details pd ON pd.id = i.product_detail_id
|
|
65
|
+
WHERE
|
|
66
|
+
invh.domain_id = $1
|
|
67
|
+
AND invh.bizplace_id = $2
|
|
68
|
+
${locationTypeClause}
|
|
69
|
+
UNION ALL
|
|
70
|
+
|
|
71
|
+
-- VAS Records
|
|
72
|
+
SELECT
|
|
73
|
+
ov.inventory_id,
|
|
74
|
+
UPPER(TRIM(COALESCE(ov.new_packing_type, ov.packing_type))) AS packing_type,
|
|
75
|
+
'VAS' AS transaction_type,
|
|
76
|
+
'VAS' AS status,
|
|
77
|
+
ov.updated_at + interval '8 hours' AS created_at,
|
|
78
|
+
COALESCE(ov.adjusted_output_qty, ov.qty) AS qty,
|
|
79
|
+
'0' as opening_qty,
|
|
80
|
+
COALESCE(p.volume, 0) as volume,
|
|
81
|
+
'-' as location,
|
|
82
|
+
'-' as warehouse,
|
|
83
|
+
ov.domain_id,
|
|
84
|
+
ov.bizplace_id
|
|
85
|
+
FROM order_vass ov
|
|
86
|
+
LEFT JOIN products p ON p.id = ov.target_product_id
|
|
87
|
+
WHERE
|
|
88
|
+
ov.domain_id = $1
|
|
89
|
+
AND ov.bizplace_id = $2
|
|
90
|
+
AND ov.qty IS NOT NULL
|
|
91
|
+
);
|
|
92
|
+
`, queryParams);
|
|
93
|
+
console.timeEnd('temp');
|
|
94
|
+
const result = await tx.query(`
|
|
95
|
+
WITH RECURSIVE date_series AS (
|
|
96
|
+
SELECT
|
|
97
|
+
CASE
|
|
98
|
+
WHEN $1::DATE < (SELECT MIN(created_at)::DATE FROM temp_data_src)
|
|
99
|
+
THEN (SELECT (MIN(created_at)+ INTERVAL '1 DAY')::DATE FROM temp_data_src)
|
|
100
|
+
ELSE $1 ::DATE
|
|
101
|
+
END AS query_date
|
|
102
|
+
UNION ALL
|
|
103
|
+
SELECT (query_date + INTERVAL '1 DAY')::DATE
|
|
104
|
+
FROM date_series
|
|
105
|
+
WHERE query_date < $2
|
|
106
|
+
),
|
|
107
|
+
distinct_groups AS (
|
|
108
|
+
SELECT DISTINCT
|
|
109
|
+
UPPER(TRIM(packing_type)) AS packing_type,
|
|
110
|
+
warehouse,
|
|
111
|
+
location
|
|
112
|
+
FROM temp_data_src
|
|
113
|
+
WHERE packing_type IS NOT NULL
|
|
114
|
+
),
|
|
115
|
+
date_packing_combinations AS (
|
|
116
|
+
SELECT DISTINCT ds.query_date, pt.packing_type
|
|
117
|
+
FROM date_series ds
|
|
118
|
+
CROSS JOIN distinct_groups pt
|
|
119
|
+
),
|
|
120
|
+
order_number AS(
|
|
121
|
+
SELECT
|
|
122
|
+
rg.name,
|
|
123
|
+
(rg.updated_at + interval '8 hours')::DATE AS query_date
|
|
124
|
+
FROM release_goods rg
|
|
125
|
+
INNER JOIN (SELECT domain_id, bizplace_id FROM temp_data_src src limit 1)src
|
|
126
|
+
ON rg.domain_id = src.domain_id
|
|
127
|
+
AND rg.bizplace_id = src.bizplace_id
|
|
128
|
+
WHERE rg.status = 'DONE'
|
|
129
|
+
),
|
|
130
|
+
inbound AS (
|
|
131
|
+
SELECT
|
|
132
|
+
dpc.query_date,
|
|
133
|
+
SUM(COALESCE(src.opening_qty, 0)) AS qty,
|
|
134
|
+
'Inbound ' || '(' || INITCAP(dpc.packing_type) || ')' AS data_type
|
|
135
|
+
FROM date_packing_combinations dpc
|
|
136
|
+
LEFT JOIN temp_data_src src
|
|
137
|
+
ON dpc.query_date = src.created_at::DATE
|
|
138
|
+
AND src.transaction_type = 'PUTAWAY'
|
|
139
|
+
AND dpc.packing_type = src.packing_type
|
|
140
|
+
GROUP BY dpc.query_date, dpc.packing_type
|
|
141
|
+
ORDER BY dpc.query_date
|
|
142
|
+
),
|
|
143
|
+
outbound AS (
|
|
144
|
+
SELECT
|
|
145
|
+
dpc.query_date,
|
|
146
|
+
SUM(ABS(COALESCE(src.qty, 0))) AS qty,
|
|
147
|
+
'Outbound ' || '(' || INITCAP(dpc.packing_type) || ')' AS data_type
|
|
148
|
+
FROM date_packing_combinations dpc
|
|
149
|
+
LEFT JOIN temp_data_src src
|
|
150
|
+
ON dpc.query_date = src.created_at::DATE
|
|
151
|
+
AND src.transaction_type = 'PICKING'
|
|
152
|
+
AND dpc.packing_type = src.packing_type
|
|
153
|
+
GROUP BY dpc.query_date, dpc.packing_type
|
|
154
|
+
ORDER BY dpc.query_date
|
|
155
|
+
),
|
|
156
|
+
return AS (
|
|
157
|
+
SELECT
|
|
158
|
+
dpc.query_date,
|
|
159
|
+
SUM(COALESCE(src.qty, 0)) AS qty,
|
|
160
|
+
'Return ' || '(' || INITCAP(dpc.packing_type) || ')' AS data_type
|
|
161
|
+
FROM date_packing_combinations dpc
|
|
162
|
+
LEFT JOIN temp_data_src src
|
|
163
|
+
ON dpc.query_date = src.created_at::DATE
|
|
164
|
+
AND src.transaction_type = 'RETURN'
|
|
165
|
+
AND dpc.packing_type = src.packing_type
|
|
166
|
+
GROUP BY dpc.query_date, dpc.packing_type
|
|
167
|
+
ORDER BY dpc.query_date
|
|
168
|
+
),
|
|
169
|
+
vas AS(
|
|
170
|
+
SELECT
|
|
171
|
+
dpc.query_date,
|
|
172
|
+
SUM(COALESCE(src.qty, 0)) AS qty,
|
|
173
|
+
'Vas ' || '(' || INITCAP(dpc.packing_type) || ')' AS data_type
|
|
174
|
+
FROM date_packing_combinations dpc
|
|
175
|
+
LEFT JOIN temp_data_src src
|
|
176
|
+
ON dpc.query_date = src.created_at::DATE
|
|
177
|
+
AND src.transaction_type = 'VAS'
|
|
178
|
+
AND dpc.packing_type = src.packing_type
|
|
179
|
+
GROUP BY dpc.query_date, dpc.packing_type
|
|
180
|
+
ORDER BY dpc.query_date
|
|
181
|
+
),
|
|
182
|
+
orders AS(
|
|
183
|
+
SELECT
|
|
184
|
+
dpc.query_date,
|
|
185
|
+
COUNT(DISTINCT rg.name) AS qty,
|
|
186
|
+
'Total Order Fulfilled' AS data_type
|
|
187
|
+
FROM date_series dpc
|
|
188
|
+
LEFT JOIN order_number rg ON dpc.query_date = rg.query_date
|
|
189
|
+
GROUP BY dpc.query_date
|
|
190
|
+
ORDER BY dpc.query_date
|
|
191
|
+
),
|
|
192
|
+
total_unit_processed AS(
|
|
193
|
+
SELECT
|
|
194
|
+
o.query_date,
|
|
195
|
+
SUM(ABS(qty)) as qty,
|
|
196
|
+
'Total Unit Processed' AS data_type
|
|
197
|
+
FROM outbound o
|
|
198
|
+
GROUP BY o.query_date
|
|
199
|
+
ORDER BY o.query_date
|
|
200
|
+
),
|
|
201
|
+
inbound_volume AS (
|
|
202
|
+
SELECT
|
|
203
|
+
dpc.query_date,
|
|
204
|
+
SUM(COALESCE(src.qty * src.volume, 0)) AS qty,
|
|
205
|
+
'Inbound (CBM)' AS data_type
|
|
206
|
+
FROM date_packing_combinations dpc
|
|
207
|
+
LEFT JOIN temp_data_src src
|
|
208
|
+
ON dpc.query_date = src.created_at::DATE
|
|
209
|
+
AND src.transaction_type IN ('UNLOADING', 'RETURN')
|
|
210
|
+
AND dpc.packing_type = src.packing_type
|
|
211
|
+
GROUP BY dpc.query_date
|
|
212
|
+
),
|
|
213
|
+
outbound_volume AS (
|
|
214
|
+
SELECT
|
|
215
|
+
dpc.query_date,
|
|
216
|
+
SUM(ABS(COALESCE(src.qty * src.volume, 0))) AS qty,
|
|
217
|
+
'Outbound (CBM)' AS data_type
|
|
218
|
+
FROM date_packing_combinations dpc
|
|
219
|
+
LEFT JOIN temp_data_src src
|
|
220
|
+
ON dpc.query_date = src.created_at::DATE
|
|
221
|
+
AND src.transaction_type = 'PICKING'
|
|
222
|
+
AND dpc.packing_type = src.packing_type
|
|
223
|
+
GROUP BY dpc.query_date
|
|
224
|
+
),
|
|
225
|
+
vas_volume AS (
|
|
226
|
+
SELECT
|
|
227
|
+
dpc.query_date,
|
|
228
|
+
SUM(COALESCE(src.qty * src.volume, 0)) AS qty,
|
|
229
|
+
'VAS (CBM)' AS data_type
|
|
230
|
+
FROM date_packing_combinations dpc
|
|
231
|
+
LEFT JOIN temp_data_src src
|
|
232
|
+
ON dpc.query_date = src.created_at::DATE
|
|
233
|
+
AND src.transaction_type = 'VAS'
|
|
234
|
+
AND dpc.packing_type = src.packing_type
|
|
235
|
+
GROUP BY dpc.query_date
|
|
236
|
+
),
|
|
237
|
+
-- Determine the cutoff date from date_series.
|
|
238
|
+
cutoff AS (
|
|
239
|
+
SELECT MIN(query_date) AS cutoff_date
|
|
240
|
+
FROM date_series
|
|
241
|
+
),
|
|
242
|
+
-- For each unique inventory_id, return the row with the latest created_at (before cutoff)
|
|
243
|
+
-- and calculate its effective opening using opening_qty + qty.
|
|
244
|
+
latest_opening AS (
|
|
245
|
+
SELECT DISTINCT ON (inventory_id)
|
|
246
|
+
inventory_id,
|
|
247
|
+
packing_type,
|
|
248
|
+
warehouse,
|
|
249
|
+
location,
|
|
250
|
+
(COALESCE(opening_qty, 0) + COALESCE(qty, 0)) AS effective_opening,
|
|
251
|
+
created_at AS last_record_date
|
|
252
|
+
FROM temp_data_src, cutoff
|
|
253
|
+
WHERE created_at::DATE < cutoff.cutoff_date
|
|
254
|
+
ORDER BY inventory_id, created_at DESC
|
|
255
|
+
),
|
|
256
|
+
---------------group by locations----------------
|
|
257
|
+
-- Aggregate the effective_opening from the latest record (per inventory_id) by group.
|
|
258
|
+
first_count AS (
|
|
259
|
+
SELECT
|
|
260
|
+
cutoff.cutoff_date AS query_date,
|
|
261
|
+
SUM(effective_opening) AS opening_balance,
|
|
262
|
+
0 AS closing_qty,
|
|
263
|
+
packing_type,
|
|
264
|
+
warehouse,
|
|
265
|
+
location
|
|
266
|
+
FROM latest_opening, cutoff
|
|
267
|
+
GROUP BY packing_type, warehouse, location, cutoff.cutoff_date
|
|
268
|
+
),
|
|
269
|
+
day_transaction AS (
|
|
270
|
+
SELECT
|
|
271
|
+
ds.query_date,
|
|
272
|
+
COALESCE(SUM(src.qty), 0) AS qty,
|
|
273
|
+
dg.packing_type, dg.warehouse, dg.location
|
|
274
|
+
FROM date_series ds
|
|
275
|
+
CROSS JOIN distinct_groups dg
|
|
276
|
+
LEFT JOIN temp_data_src src
|
|
277
|
+
ON src.created_at::DATE = ds.query_date
|
|
278
|
+
AND src.packing_type = dg.packing_type
|
|
279
|
+
AND src.warehouse = dg.warehouse
|
|
280
|
+
AND src.location = dg.location
|
|
281
|
+
GROUP BY ds.query_date, dg.packing_type, dg.warehouse, dg.location
|
|
282
|
+
),
|
|
283
|
+
c_transaction AS (
|
|
284
|
+
SELECT
|
|
285
|
+
dt.query_date,
|
|
286
|
+
dt.qty,
|
|
287
|
+
SUM(dt.qty) OVER (PARTITION BY dt.packing_type, dt.warehouse, dt.location ORDER BY dt.query_date) AS c_qty,
|
|
288
|
+
dt.packing_type, dt.warehouse, dt.location
|
|
289
|
+
FROM day_transaction dt
|
|
290
|
+
),
|
|
291
|
+
by_day_qty AS(
|
|
292
|
+
SELECT * from first_count
|
|
293
|
+
UNION ALL
|
|
294
|
+
SELECT
|
|
295
|
+
(ct.query_date + interval '1 day')::DATE as query_date,
|
|
296
|
+
fc.opening_balance + ct.c_qty AS opening_balance,
|
|
297
|
+
0 AS closing_qty,
|
|
298
|
+
ct.packing_type, ct.warehouse, ct.location
|
|
299
|
+
FROM c_transaction ct
|
|
300
|
+
JOIN first_count fc
|
|
301
|
+
ON fc.packing_type = ct.packing_type
|
|
302
|
+
AND ct.warehouse = fc.warehouse
|
|
303
|
+
AND ct.location = fc.location
|
|
304
|
+
WHERE ct.query_date < (SELECT MAX(query_date) FROM date_series)
|
|
305
|
+
ORDER BY packing_type, warehouse, location, query_date
|
|
306
|
+
),
|
|
307
|
+
by_location AS(
|
|
308
|
+
SELECT
|
|
309
|
+
query_date,
|
|
310
|
+
opening_balance as opening_balance,
|
|
311
|
+
INITCAP(SUBSTRING(warehouse FROM 1 FOR 1)) || LOWER(SUBSTRING(warehouse FROM 2)) || ' ' ||
|
|
312
|
+
INITCAP(SUBSTRING(location FROM 1 FOR 1)) || LOWER(SUBSTRING(location FROM 2)) || ' (' ||
|
|
313
|
+
INITCAP(SUBSTRING(packing_type FROM 1 FOR 1)) || LOWER(SUBSTRING(packing_type FROM 2)) || ')' as data_type
|
|
314
|
+
FROM by_day_qty
|
|
315
|
+
ORDER BY data_type, query_date
|
|
316
|
+
)
|
|
317
|
+
|
|
318
|
+
SELECT * FROM inbound
|
|
319
|
+
UNION ALL
|
|
320
|
+
SELECT * FROM outbound
|
|
321
|
+
UNION ALL
|
|
322
|
+
SELECT * FROM return
|
|
323
|
+
UNION ALL
|
|
324
|
+
SELECT * FROM vas
|
|
325
|
+
UNION ALL
|
|
326
|
+
SELECT * FROM orders
|
|
327
|
+
UNION ALL
|
|
328
|
+
SELECT * FROM total_unit_processed
|
|
329
|
+
UNION ALL
|
|
330
|
+
SELECT * FROM by_location
|
|
331
|
+
UNION ALL
|
|
332
|
+
SELECT * FROM inbound_volume
|
|
333
|
+
UNION ALL
|
|
334
|
+
SELECT * FROM outbound_volume
|
|
335
|
+
UNION ALL
|
|
336
|
+
SELECT * FROM vas_volume
|
|
337
|
+
ORDER BY query_date, data_type;
|
|
338
|
+
`, [fromDate.value, toDate.value]);
|
|
339
|
+
let items = result.map(itm => {
|
|
340
|
+
return {
|
|
341
|
+
date: itm.query_date,
|
|
342
|
+
packingType: itm.data_type,
|
|
343
|
+
quantity: itm.qty
|
|
344
|
+
};
|
|
345
|
+
});
|
|
346
|
+
return {
|
|
347
|
+
items
|
|
348
|
+
};
|
|
349
|
+
}
|
|
350
|
+
catch (error) {
|
|
351
|
+
throw error;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
};
|
|
355
|
+
//# sourceMappingURL=billing-module-report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"billing-module-report.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/reports/billing-module-report.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.costingReport = void 0;
|
|
4
|
+
const auth_base_1 = require("@things-factory/auth-base");
|
|
5
|
+
const biz_base_1 = require("@things-factory/biz-base");
|
|
6
|
+
const utils_1 = require("../../../utils");
|
|
7
|
+
exports.costingReport = {
|
|
8
|
+
async costingReport(_, params, context) {
|
|
9
|
+
try {
|
|
10
|
+
const { tx } = context.state;
|
|
11
|
+
let bizplaceFilter = { name: '', operator: '', value: '' };
|
|
12
|
+
let userFilter = params.filters.find(data => data.name === 'user');
|
|
13
|
+
let fromDate = params.filters.find(data => data.name === 'fromDate');
|
|
14
|
+
let toDate = params.filters.find(data => data.name === 'toDate');
|
|
15
|
+
if (userFilter) {
|
|
16
|
+
const user = await tx.getRepository(auth_base_1.User).findOne({
|
|
17
|
+
where: { id: userFilter.value },
|
|
18
|
+
relations: ['bizplaces']
|
|
19
|
+
});
|
|
20
|
+
const bizplace = user.bizplaces[0];
|
|
21
|
+
if (!bizplace)
|
|
22
|
+
throw 'Invalid input';
|
|
23
|
+
bizplaceFilter = { name: 'bizplace', operator: 'eq', value: bizplace.id };
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
bizplaceFilter = params.filters.find(data => data.name === 'bizplace');
|
|
27
|
+
}
|
|
28
|
+
if (!bizplaceFilter || !fromDate || !toDate)
|
|
29
|
+
throw 'Invalid input';
|
|
30
|
+
const bizplace = await tx.getRepository(biz_base_1.Bizplace).findOne({
|
|
31
|
+
id: bizplaceFilter.value
|
|
32
|
+
});
|
|
33
|
+
await (0, utils_1.rawProductsQuery)(tx, params, bizplace);
|
|
34
|
+
await tx.query(`
|
|
35
|
+
create temp table tmp_outbound_ord on commit drop as (
|
|
36
|
+
select p.sku, rih.domain_id, rih.bizplace_id, rih.product_detail_id, coalesce(rih.uom, pd.uom, pd2.uom) as uom,
|
|
37
|
+
sum(rih.qty) as total_picked_qty, sum(rih.uom_value) as total_picked_uom_value
|
|
38
|
+
from reduced_inventory_histories rih
|
|
39
|
+
inner join inventories inv on inv.domain_id = rih.domain_id and inv.pallet_id = rih.pallet_id
|
|
40
|
+
left join product_details pd on pd.id = rih.product_detail_id
|
|
41
|
+
left join product_details pd2 on pd2.product_id = rih.product_id and pd2.is_default = true
|
|
42
|
+
left join products p on p.id = rih.product_id
|
|
43
|
+
where rih.domain_id = $1
|
|
44
|
+
and inv.bizplace_id = $2
|
|
45
|
+
and rih.created_at >= $3 and rih.created_at <= $4
|
|
46
|
+
and rih.transaction_type = 'PICKING'
|
|
47
|
+
group by p.sku, rih.domain_id, rih.bizplace_id, rih.product_detail_id, coalesce(rih.uom, pd.uom, pd2.uom)
|
|
48
|
+
);
|
|
49
|
+
`, [context.state.domain.id, bizplace.id, fromDate.value, toDate.value]);
|
|
50
|
+
await tx.query(`
|
|
51
|
+
create temp table tmp_stored_inv on commit drop as (
|
|
52
|
+
select src2.sku, src2.domain_id, src2.bizplace_id, src2.pallet_id, src2.product_detail_id, src2.uom,
|
|
53
|
+
to_char(src2.created_at, 'YYYY-MM') as created_year_month, sum(closing_qty) as closing_qty from (
|
|
54
|
+
select distinct on (rih.pallet_id) p.sku, rih.domain_id, rih.bizplace_id, rih.pallet_id, rih.product_detail_id,
|
|
55
|
+
coalesce(rih.uom, pd.uom, pd2.uom) as uom,
|
|
56
|
+
rih.created_at, rih.transaction_type, rih.status, rih.opening_qty + rih.qty as closing_qty
|
|
57
|
+
from reduced_inventory_histories rih
|
|
58
|
+
inner join inventories i on i.domain_id = rih.domain_id and i.pallet_id = rih.pallet_id
|
|
59
|
+
left join product_details pd on pd.id = rih.product_detail_id
|
|
60
|
+
left join product_details pd2 on pd2.product_id = rih.product_id and pd2.is_default = true
|
|
61
|
+
left join products p on p.id = rih.product_id
|
|
62
|
+
where rih.domain_id = $1
|
|
63
|
+
and i.bizplace_id = $2
|
|
64
|
+
and rih.created_at <= $3
|
|
65
|
+
order by rih.pallet_id, rih.seq desc
|
|
66
|
+
) src2 where src2.status <> 'TERMINATED'
|
|
67
|
+
and exists (
|
|
68
|
+
select * from tmp_outbound_ord outboundOrd
|
|
69
|
+
where outboundOrd.domain_id = src2.domain_id
|
|
70
|
+
and outboundOrd.bizplace_id = src2.bizplace_id
|
|
71
|
+
and outboundOrd.product_detail_id = src2.product_detail_id
|
|
72
|
+
and outboundOrd.uom = src2.uom
|
|
73
|
+
)
|
|
74
|
+
group by src2.sku, src2.domain_id, src2.bizplace_id, src2.pallet_id, src2.product_detail_id, src2.uom, to_char(src2.created_at, 'YYYY-MM')
|
|
75
|
+
);
|
|
76
|
+
`, [context.state.domain.id, bizplace.id, toDate.value]);
|
|
77
|
+
await tx.query(`
|
|
78
|
+
create temp table temp_costing_report on commit drop as (
|
|
79
|
+
WITH RECURSIVE cte_forwarded_cost as (
|
|
80
|
+
select src.domain_id, src.bizplace_id, src.product_id, src.product_detail_id, src.uom, TO_DATE(src.created_year_month,'YYYY-MM')::timestamp as running_year_month,
|
|
81
|
+
sum(src.qty) as qty, sum(src.total_cost)/ sum(src.qty) as monthly_avg_cost,
|
|
82
|
+
coalesce(sum(src.qty)) as closing_qty from (
|
|
83
|
+
select distinct on (pallet_id)
|
|
84
|
+
ih.domain_id, ih.bizplace_id, ih.pallet_id, ih.unit_cost, (ih.unit_cost * (ih.opening_qty + ih.qty)) as total_cost, ih.status, ih.transaction_type, ih.product_id, ih.product_detail_id, coalesce(ih.uom, pd.uom) as uom,
|
|
85
|
+
ih.created_at, to_char(ih.created_at, 'YYYY-MM') as created_year_month,
|
|
86
|
+
ih.opening_qty,
|
|
87
|
+
ih.qty as transaction_qty,
|
|
88
|
+
ih.opening_qty + ih.qty as qty,
|
|
89
|
+
ih.opening_uom_value,
|
|
90
|
+
ih.uom_value as transaction_uom_value,
|
|
91
|
+
ih.opening_uom_value + ih.uom_value as uom_value
|
|
92
|
+
from reduced_inventory_histories ih
|
|
93
|
+
inner join inventories i on i.domain_id = ih.domain_id and i.pallet_id = ih.pallet_id
|
|
94
|
+
left join product_details pd on pd.id = ih.product_detail_id
|
|
95
|
+
where ih.domain_id = $1
|
|
96
|
+
and i.bizplace_id = $2
|
|
97
|
+
and ih.created_at <= $3 and ih.unit_cost is not null
|
|
98
|
+
and exists (
|
|
99
|
+
select * from tmp_outbound_ord outboundOrd
|
|
100
|
+
where outboundOrd.domain_id = ih.domain_id
|
|
101
|
+
and outboundOrd.bizplace_id = ih.bizplace_id
|
|
102
|
+
and outboundOrd.product_detail_id = ih.product_detail_id
|
|
103
|
+
and outboundOrd.uom = ih.uom
|
|
104
|
+
)
|
|
105
|
+
order by ih.pallet_id, ih.seq
|
|
106
|
+
) src
|
|
107
|
+
group by src.domain_id, src.bizplace_id, src.product_id, src.product_detail_id, src.uom, src.created_year_month
|
|
108
|
+
union all
|
|
109
|
+
select dt1.domain_id, dt1.bizplace_id, dt1.product_id, dt1.product_detail_id, dt1.uom,
|
|
110
|
+
dt1.running_year_month + interval '1 month' as running_year_month, dt1.qty, dt1.monthly_avg_cost, dt1.closing_qty
|
|
111
|
+
from cte_forwarded_cost dt1
|
|
112
|
+
where dt1.running_year_month + interval '1 month' < $3
|
|
113
|
+
) select fc.*, -outboundord.total_picked_qty as "qty", -outboundord.total_picked_uom_value as "uom_value", (-outboundord.total_picked_qty * fc.weighted_avg_unit_cost) as "total_cost" from (
|
|
114
|
+
select p.sku as "product_sku", p."name" as "product_name", p.description as "product_description", p."type" as "product_type",
|
|
115
|
+
fc.domain_id, fc.bizplace_id, fc.product_detail_id, fc.uom, fc.running_year_month,
|
|
116
|
+
ROUND(cast(sum(fc.monthly_avg_cost * fc.closing_qty) / sum(fc.qty) as numeric),2) as "weighted_avg_unit_cost"
|
|
117
|
+
from cte_forwarded_cost fc
|
|
118
|
+
left join products p on p.id = fc.product_id
|
|
119
|
+
where running_year_month = to_date(to_char($3::date, 'YYYY-MM'),'YYYY-MM')::timestamp
|
|
120
|
+
group by p.sku, p."name", p.description, p."type", fc.domain_id, fc.bizplace_id, fc.product_detail_id, fc.uom, fc.running_year_month
|
|
121
|
+
) fc
|
|
122
|
+
left join tmp_outbound_ord outboundord on outboundord.domain_id = fc.domain_id
|
|
123
|
+
and outboundord.bizplace_id = fc.bizplace_id
|
|
124
|
+
and outboundord.product_detail_id = fc.product_detail_id
|
|
125
|
+
and outboundord.uom = fc.uom
|
|
126
|
+
);
|
|
127
|
+
`, [context.state.domain.id, bizplace.id, toDate.value]);
|
|
128
|
+
const total = await tx.query(`
|
|
129
|
+
select count(*) from temp_costing_report
|
|
130
|
+
`);
|
|
131
|
+
const result = await tx.query(`
|
|
132
|
+
select * from temp_costing_report
|
|
133
|
+
offset $1 limit $2
|
|
134
|
+
`, [(params.pagination.page - 1) * params.pagination.limit, params.pagination.limit]);
|
|
135
|
+
let items = result.map(itm => {
|
|
136
|
+
let data = {
|
|
137
|
+
bizplace: {
|
|
138
|
+
description: bizplace.description,
|
|
139
|
+
name: bizplace.name
|
|
140
|
+
},
|
|
141
|
+
product: {
|
|
142
|
+
id: itm.product_id,
|
|
143
|
+
sku: itm.product_sku,
|
|
144
|
+
name: itm.product_name,
|
|
145
|
+
description: itm.product_description,
|
|
146
|
+
type: itm.product_type
|
|
147
|
+
},
|
|
148
|
+
qty: itm.qty,
|
|
149
|
+
uom: itm.uom,
|
|
150
|
+
uomValue: itm.uom_value,
|
|
151
|
+
weightedAvgUnitCost: itm.weighted_avg_unit_cost,
|
|
152
|
+
totalCost: itm.total_cost
|
|
153
|
+
};
|
|
154
|
+
return data;
|
|
155
|
+
});
|
|
156
|
+
return {
|
|
157
|
+
items,
|
|
158
|
+
total: total[0].count
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
throw error;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
//# sourceMappingURL=costing-report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"costing-report.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/reports/costing-report.ts"],"names":[],"mappings":"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"}
|