@things-factory/operato-wms 5.0.13 → 6.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client/pages/bulk-operation/bulk-operation.js +96 -8
- package/client/pages/bulk-operation/validate-gan-popup.js +37 -27
- package/client/pages/bulk-operation/validate-ro-popup.js +40 -0
- package/client/pages/components/select-inventory-popup.js +633 -0
- package/client/pages/constants/order.js +2 -1
- package/client/pages/inbound/pallet-label-popup.js +2 -0
- package/client/pages/inbound/select-product-batch.js +7 -1
- package/client/pages/inbound/undo-unload-popup.js +37 -21
- package/client/pages/inbound/unload-product.js +147 -59
- package/client/pages/inbound/worksheet-putaway.js +1 -1
- package/client/pages/inbound/worksheet-unloading.js +11 -7
- package/client/pages/inventory/inventory-adjustment.js +261 -238
- package/client/pages/inventory/inventory-by-product-detail.js +99 -92
- package/client/pages/inventory/inventory-by-product.js +170 -68
- package/client/pages/inventory/onhand-inventory.js +10 -12
- package/client/pages/inventory/serial-number-list-popup.js +36 -5
- package/client/pages/inventory-check/inspecting-product.js +1 -1
- package/client/pages/manifest/create-loading-manifest.js +47 -22
- package/client/pages/manifest/dispatcher-verification-popup.js +24 -13
- package/client/pages/manifest/loading-manifest-detail.js +311 -46
- package/client/pages/manifest/loading-manifest-list.js +86 -13
- package/client/pages/order/arrival-notice/arrival-notice-detail.js +305 -52
- package/client/pages/order/arrival-notice/arrival-notice-list.js +20 -1
- package/client/pages/order/arrival-notice/create-arrival-notice.js +2 -2
- package/client/pages/order/goods-received-note/received-note-detail.js +187 -15
- package/client/pages/order/release-order/b2b/b2b-order-list.js +76 -80
- package/client/pages/order/release-order/b2c/b2c-order-requests.js +148 -123
- package/client/pages/order/release-order/batch-picking-popup.js +11 -0
- package/client/pages/order/release-order/create-release-order.js +762 -250
- package/client/pages/order/release-order/release-extra-product-popup.js +10 -3
- package/client/pages/order/release-order/release-order-detail.js +897 -215
- package/client/pages/order/transport-order/delivery-note-popup.js +1050 -107
- package/client/pages/order/transport-order/print-delivery-note.js +214 -33
- package/client/pages/order/transport-order/upload-delivery-note.js +6 -4
- package/client/pages/order/transport-order/view-delivery-note.js +0 -1
- package/client/pages/outbound/generate-worksheet-popup.js +374 -0
- package/client/pages/outbound/inventory-reassign-popup.js +1097 -0
- package/client/pages/outbound/loading-product.js +88 -78
- package/client/pages/outbound/merged-outbound-worksheet.js +1 -1
- package/client/pages/outbound/packing-product.js +193 -82
- package/client/pages/outbound/packing-worksheet-list.js +10 -9
- package/client/pages/outbound/picking-product.js +979 -905
- package/client/pages/outbound/route-label-popup.js +283 -191
- package/client/pages/outbound/serial-number-popup.js +1 -0
- package/client/pages/outbound/sorting-product.js +12 -12
- package/client/pages/outbound/worksheet-batch-picking.js +39 -5
- package/client/pages/outbound/worksheet-packing.js +17 -4
- package/client/pages/outbound/worksheet-picking.js +45 -6
- package/client/pages/report/inbound-serial-number-report.js +86 -9
- package/client/pages/report/inventory-report.js +10 -0
- package/client/pages/report/inventory-summary-report.js +28 -19
- package/client/pages/report/outbound-order-details-report.js +204 -43
- package/client/pages/report/outbound-serial-number-report.js +87 -9
- package/client/pages/report/release-inventory-report.js +503 -0
- package/client/route.js +5 -0
- package/client/util/index.js +2 -0
- package/client/util/page-settings.js +43 -0
- package/client/util/toast.js +10 -0
- package/dist-server/graphql/resolvers/board-setting/board-settings.js +3 -3
- package/dist-server/graphql/resolvers/board-setting/board-settings.js.map +1 -1
- package/dist-server/graphql/resolvers/custom/elccl/elccl-daily-collection-report.js +2 -2
- package/dist-server/graphql/resolvers/custom/elccl/elccl-daily-collection-report.js.map +1 -1
- package/dist-server/graphql/resolvers/custom/elccl/elccl-daily-order-inventory-report.js +1 -1
- package/dist-server/graphql/resolvers/custom/elccl/elccl-daily-order-inventory-report.js.map +1 -1
- package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-pallet-detail-report.js +2 -2
- package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-pallet-detail-report.js.map +1 -1
- package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-report.js +9 -10
- package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-report.js.map +1 -1
- package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-summary-report.js +2 -2
- package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-summary-report.js.map +1 -1
- package/dist-server/graphql/resolvers/custom/elccl/elccl-onhand-inventory-counter.js +6 -4
- package/dist-server/graphql/resolvers/custom/elccl/elccl-onhand-inventory-counter.js.map +1 -1
- package/dist-server/graphql/resolvers/custom/kimeda/kimeda-onhand-inventory-counter.js +6 -4
- package/dist-server/graphql/resolvers/custom/kimeda/kimeda-onhand-inventory-counter.js.map +1 -1
- package/dist-server/graphql/resolvers/dashboard/arrival-notices-by-status.js +21 -10
- package/dist-server/graphql/resolvers/dashboard/arrival-notices-by-status.js.map +1 -1
- package/dist-server/graphql/resolvers/dashboard/collection-orders-by-status.js +1 -2
- package/dist-server/graphql/resolvers/dashboard/collection-orders-by-status.js.map +1 -1
- package/dist-server/graphql/resolvers/dashboard/delivery-orders-by-status.js +1 -2
- package/dist-server/graphql/resolvers/dashboard/delivery-orders-by-status.js.map +1 -1
- package/dist-server/graphql/resolvers/dashboard/index.js +2 -1
- package/dist-server/graphql/resolvers/dashboard/index.js.map +1 -1
- package/dist-server/graphql/resolvers/dashboard/inventory-expiry-monitor.js +17 -1
- package/dist-server/graphql/resolvers/dashboard/inventory-expiry-monitor.js.map +1 -1
- package/dist-server/graphql/resolvers/dashboard/outbound-order-by-status.js +113 -75
- package/dist-server/graphql/resolvers/dashboard/outbound-order-by-status.js.map +1 -1
- package/dist-server/graphql/resolvers/dashboard/release-goods-by-status.js +21 -10
- package/dist-server/graphql/resolvers/dashboard/release-goods-by-status.js.map +1 -1
- 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 +5 -4
- package/dist-server/graphql/resolvers/index.js.map +1 -1
- package/dist-server/graphql/resolvers/inventory-comparison/inventory-comparison-list.js.map +1 -1
- package/dist-server/graphql/resolvers/opa-menu/opa-menus.js +8 -7
- package/dist-server/graphql/resolvers/opa-menu/opa-menus.js.map +1 -1
- package/dist-server/graphql/resolvers/{extra → other}/add-release-good-products.js +59 -8
- package/dist-server/graphql/resolvers/other/add-release-good-products.js.map +1 -0
- package/dist-server/graphql/resolvers/{extra → other}/index.js +3 -1
- package/dist-server/graphql/resolvers/other/index.js.map +1 -0
- package/dist-server/graphql/resolvers/other/page-settings.js +87 -0
- package/dist-server/graphql/resolvers/other/page-settings.js.map +1 -0
- package/dist-server/graphql/resolvers/reports/costing-report.js +4 -4
- package/dist-server/graphql/resolvers/reports/costing-report.js.map +1 -1
- package/dist-server/graphql/resolvers/reports/inbound-order-details-report.js +3 -3
- package/dist-server/graphql/resolvers/reports/inbound-order-details-report.js.map +1 -1
- package/dist-server/graphql/resolvers/reports/inbound-serial-number-report.js +36 -7
- package/dist-server/graphql/resolvers/reports/inbound-serial-number-report.js.map +1 -1
- package/dist-server/graphql/resolvers/reports/index.js +2 -1
- package/dist-server/graphql/resolvers/reports/index.js.map +1 -1
- package/dist-server/graphql/resolvers/reports/outbound-order-details-report.js +69 -30
- package/dist-server/graphql/resolvers/reports/outbound-order-details-report.js.map +1 -1
- package/dist-server/graphql/resolvers/reports/outbound-serial-number-report.js +36 -11
- package/dist-server/graphql/resolvers/reports/outbound-serial-number-report.js.map +1 -1
- package/dist-server/graphql/resolvers/reports/product-label-report.js +3 -3
- package/dist-server/graphql/resolvers/reports/product-label-report.js.map +1 -1
- 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/shipping-provider/shipping-providers.js +2 -2
- package/dist-server/graphql/resolvers/shipping-provider/shipping-providers.js.map +1 -1
- package/dist-server/graphql/resolvers/warehouse-inventory-adjustment/warehouse-intentory-adjustment.js +1 -1
- package/dist-server/graphql/resolvers/warehouse-inventory-adjustment/warehouse-intentory-adjustment.js.map +1 -1
- package/dist-server/graphql/types/dashboard/index.js +1 -0
- package/dist-server/graphql/types/dashboard/index.js.map +1 -1
- package/dist-server/graphql/types/index.js +7 -2
- package/dist-server/graphql/types/index.js.map +1 -1
- package/dist-server/graphql/types/other/index.js +19 -0
- package/dist-server/graphql/types/other/index.js.map +1 -0
- package/dist-server/graphql/types/other/page-setting.js +34 -0
- package/dist-server/graphql/types/other/page-setting.js.map +1 -0
- package/dist-server/graphql/types/reports/index.js +6 -1
- package/dist-server/graphql/types/reports/index.js.map +1 -1
- package/dist-server/graphql/types/reports/outbound-order-details-report.js +17 -1
- package/dist-server/graphql/types/reports/outbound-order-details-report.js.map +1 -1
- package/dist-server/graphql/types/reports/release-inventory-report-list.js +12 -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 +27 -0
- package/dist-server/graphql/types/reports/release-inventory-report.js.map +1 -0
- package/dist-server/migrations/1568858861188-SeedSetting.js +5 -6
- package/dist-server/migrations/1568858861188-SeedSetting.js.map +1 -1
- package/dist-server/migrations/1623308919899-SeedLocationRecommendSetting.js +1 -1
- package/dist-server/migrations/1623308919899-SeedLocationRecommendSetting.js.map +1 -1
- package/dist-server/migrations/1623381200659-SeedStoringRule.js +1 -1
- package/dist-server/migrations/1623381200659-SeedStoringRule.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/dist-server/utils/report-query-util.js +5 -2
- package/dist-server/utils/report-query-util.js.map +1 -1
- package/helps/release-note.ko.md +8 -20
- package/helps/release-note.md +8 -20
- package/helps/release-note.ms.md +8 -20
- package/helps/release-note.zh.md +8 -20
- package/package.json +42 -42
- package/server/graphql/resolvers/board-setting/board-settings.ts +4 -6
- package/server/graphql/resolvers/custom/elccl/elccl-daily-collection-report.ts +4 -5
- package/server/graphql/resolvers/custom/elccl/elccl-daily-order-inventory-report.ts +9 -10
- package/server/graphql/resolvers/custom/elccl/elccl-inventory-history-pallet-detail-report.ts +4 -5
- package/server/graphql/resolvers/custom/elccl/elccl-inventory-history-report.ts +17 -19
- package/server/graphql/resolvers/custom/elccl/elccl-inventory-history-summary-report.ts +10 -8
- package/server/graphql/resolvers/custom/elccl/elccl-onhand-inventory-counter.ts +9 -9
- package/server/graphql/resolvers/custom/kimeda/kimeda-onhand-inventory-counter.ts +9 -9
- package/server/graphql/resolvers/dashboard/arrival-notices-by-status.ts +23 -14
- package/server/graphql/resolvers/dashboard/collection-orders-by-status.ts +4 -5
- package/server/graphql/resolvers/dashboard/delivery-orders-by-status.ts +4 -5
- package/server/graphql/resolvers/dashboard/index.ts +3 -1
- package/server/graphql/resolvers/dashboard/inventory-expiry-monitor.ts +18 -6
- package/server/graphql/resolvers/dashboard/outbound-order-by-status.ts +114 -81
- package/server/graphql/resolvers/dashboard/release-goods-by-status.ts +23 -14
- package/server/graphql/resolvers/dashboard/unit-inbounded-outbounded.ts +61 -0
- package/server/graphql/resolvers/index.ts +5 -4
- package/server/graphql/resolvers/inventory-comparison/inventory-comparison-list.ts +11 -9
- package/server/graphql/resolvers/opa-menu/opa-menus.ts +7 -6
- package/server/graphql/resolvers/{extra → other}/add-release-good-products.ts +73 -12
- package/server/graphql/resolvers/other/index.ts +10 -0
- package/server/graphql/resolvers/other/page-settings.ts +105 -0
- package/server/graphql/resolvers/reports/costing-report.ts +8 -10
- package/server/graphql/resolvers/reports/inbound-order-details-report.ts +7 -9
- package/server/graphql/resolvers/reports/inbound-serial-number-report.ts +41 -13
- package/server/graphql/resolvers/reports/index.ts +3 -1
- package/server/graphql/resolvers/reports/outbound-order-details-report.ts +76 -38
- package/server/graphql/resolvers/reports/outbound-serial-number-report.ts +42 -18
- package/server/graphql/resolvers/reports/product-label-report.ts +4 -6
- package/server/graphql/resolvers/reports/release-inventory-report.ts +201 -0
- package/server/graphql/resolvers/shipping-provider/shipping-providers.ts +3 -5
- package/server/graphql/resolvers/warehouse-inventory-adjustment/warehouse-intentory-adjustment.ts +10 -10
- package/server/graphql/types/dashboard/index.ts +1 -0
- package/server/graphql/types/index.ts +8 -2
- package/server/graphql/types/other/index.ts +19 -0
- package/server/graphql/types/other/page-setting.ts +33 -0
- package/server/graphql/types/reports/index.ts +6 -1
- package/server/graphql/types/reports/outbound-order-details-report.ts +17 -1
- package/server/graphql/types/reports/release-inventory-report-list.ts +8 -0
- package/server/graphql/types/reports/release-inventory-report.ts +23 -0
- package/server/migrations/1568858861188-SeedSetting.ts +4 -4
- package/server/migrations/1623308919899-SeedLocationRecommendSetting.ts +3 -2
- package/server/migrations/1623381200659-SeedStoringRule.ts +3 -2
- package/server/utils/report-query-util.ts +5 -2
- package/things-factory.config.js +4 -0
- package/translations/en.json +148 -27
- package/translations/ko.json +185 -105
- package/translations/ms.json +183 -98
- package/translations/zh.json +197 -112
- package/dist-server/graphql/resolvers/extra/add-release-good-products.js.map +0 -1
- package/dist-server/graphql/resolvers/extra/index.js.map +0 -1
- package/dist-server/graphql/types/extra/index.js +0 -11
- package/dist-server/graphql/types/extra/index.js.map +0 -1
- package/server/graphql/resolvers/extra/index.ts +0 -5
- package/server/graphql/types/extra/index.ts +0 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbound-serial-number-report.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/reports/inbound-serial-number-report.ts"],"names":[],"mappings":"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","sourcesContent":["import { EntityManager } from 'typeorm'\n\nimport { User } from '@things-factory/auth-base'\nimport { Bizplace } from '@things-factory/biz-base'\nimport { ListParam } from '@things-factory/shell'\n\nimport { rawProductsQuery } from '../../../utils'\n\nexport const inboundSerialNumberReport = {\n async inboundSerialNumberReport(_: any, params: ListParam, context: any) {\n try {\n const { tx }: { tx: EntityManager } = context.state\n let bizplaceFilter = { name: '', operator: '', value: '' }\n let userFilter = params.filters.find(data => data.name === 'user')\n let fromDate = params.filters.find(data => data.name === 'fromDate')\n let toDate = params.filters.find(data => data.name === 'toDate')\n let ganNo = params.filters.find(data => data.name === 'ganNo')\n\n if (userFilter) {\n const user: User = await tx.getRepository(User).findOne({\n where: { id: userFilter.value },\n relations: ['bizplaces']\n })\n\n const bizplace: Bizplace = user.bizplaces[0]\n\n if (!bizplace) throw 'Invalid input'\n\n bizplaceFilter = { name: 'bizplace', operator: 'eq', value: bizplace.id }\n } else {\n bizplaceFilter = params.filters.find(data => data.name === 'bizplace')\n }\n\n if (!bizplaceFilter || !fromDate || !toDate) throw 'Invalid input'\n\n const bizplace: Bizplace = await tx.getRepository(Bizplace).findOne({\n id: bizplaceFilter.value\n })\n\n await rawProductsQuery(tx, params, bizplace)\n\n let extraQueryFilters = ''\n if (ganNo) {\n extraQueryFilters = `${extraQueryFilters} and order_no like '%${ganNo.value}%' `\n }\n\n await tx.query(\n `\n create temp table temp_inbound_serial_number_report on commit drop as (\n select * from ( \n select \n row_number() over(partition by an.\"name\" order by coalesce(w.started_at, ii.created_at), p.sku ) as \"no\",\n case when \"source\" = 'ADJUSTMENT' then 'adjustment' else an.\"name\" end as \"order_no\",\n i.pallet_id, i.carton_id,an.ref_no, an.ref_no_2, an.ref_no_3,\n p.id as \"product_id\", p.sku as \"product_sku\", p.brand_sku as \"product_brand_sku\",\n p.name as \"product_name\", p.description as \"product_description\", p.\"type\" as \"product_type\",\n coalesce(pd.volume, '0') as \"product_volume\", \n ii.serial_number, \n coalesce(w.started_at,ii.created_at) as \"etd\"\n from inventory_items ii \n inner join inventories i on i.id = ii.inventory_id \n inner join products p on p.id = i.product_id\n left join product_details pd on pd.product_id = p.id and pd.packing_type = i.packing_type and pd.packing_size = i.packing_size \n left join arrival_notices an on an.id = ii.inbound_order_id::uuid\n left join worksheets w on w.arrival_notice_id = an.id and w.type = 'UNLOADING'\n where \n i.domain_id = $1 and i.bizplace_id = $2\n and coalesce(w.started_at, ii.created_at) between $3 and $4\n order by coalesce(w.started_at, ii.created_at), p.sku\n ) src\n where 1=1\n ${extraQueryFilters}\n )\n `,\n [context.state.domain.id, bizplace.id, fromDate.value, toDate.value]\n )\n\n const total: any = await tx.query(`\n select count(*) from temp_inbound_serial_number_report\n `)\n\n const result: any = await tx.query(\n `\n select *\n from temp_inbound_serial_number_report\n offset $1 limit $2\n `,\n [(params.pagination.page - 1) * params.pagination.limit, params.pagination.limit]\n )\n\n let items = result.map(itm => {\n let data = {\n no: itm.no,\n bizplace: {\n description: bizplace.description,\n name: bizplace.name\n },\n palletId: itm.pallet_id,\n cartonId: itm.carton_id,\n orderNo: itm.order_no,\n refNo1: itm.ref_no,\n refNo2: itm.ref_no_2,\n refNo3: itm.ref_no_3,\n product: {\n id: itm.product_id,\n sku: itm.product_sku,\n brandSku: itm.product_brand_sku,\n name: itm.product_name,\n description: itm.product_description,\n type: itm.product_type,\n volume: itm.product_volume\n },\n serialNumber: itm.serial_number,\n etd: itm.etd\n }\n\n return data\n })\n\n return {\n items,\n total: total[0].count\n }\n } catch (error) {\n throw error\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"inbound-serial-number-report.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/reports/inbound-serial-number-report.ts"],"names":[],"mappings":"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","sourcesContent":["import { User } from '@things-factory/auth-base'\nimport { Bizplace } from '@things-factory/biz-base'\nimport { Filter, ListParam } from '@things-factory/shell'\n\nimport { rawProductsQuery } from '../../../utils'\n\nexport const inboundSerialNumberReport = {\n async inboundSerialNumberReport(_: any, params: ListParam, context: ResolverContext) {\n try {\n const { tx } = context.state\n let bizplaceFilter: Filter = { name: '', operator: '', value: '' }\n let userFilter = params.filters.find(data => data.name === 'user')\n let fromDate = params.filters.find(data => data.name === 'fromDate')\n let toDate = params.filters.find(data => data.name === 'toDate')\n let orderNo = params.filters.find(data => data.name === 'orderNo')\n let ref = params.filters.find(data => data.name === 'ref')\n let palletId = params.filters.find(data => data.name === 'palletId')\n let cartonId = params.filters.find(data => data.name === 'cartonId')\n let serialNumber = params.filters.find(data => data.name === 'serialNumber')\n\n if (userFilter) {\n const user = (await tx.getRepository(User).findOne({\n where: { id: userFilter.value },\n relations: ['bizplaces']\n })) as User & { bizplaces: Bizplace[] }\n\n const bizplace: Bizplace = user.bizplaces[0]\n\n if (!bizplace) throw 'Invalid input'\n\n bizplaceFilter = { name: 'bizplace', operator: 'eq', value: bizplace.id }\n } else {\n bizplaceFilter = params.filters.find(data => data.name === 'bizplace')\n }\n\n if (!bizplaceFilter || !fromDate || !toDate) throw 'Invalid input'\n\n const bizplace: Bizplace = await tx.getRepository(Bizplace).findOneBy({\n id: bizplaceFilter.value\n })\n\n await rawProductsQuery(tx, params, bizplace)\n\n let extraQueryFilters = ''\n if (orderNo) {\n extraQueryFilters = `${extraQueryFilters} and order_no like '%${orderNo.value}%' `\n }\n if (palletId) {\n extraQueryFilters = `${extraQueryFilters} and pallet_id like '%${palletId.value}%' `\n }\n if (cartonId) {\n extraQueryFilters = `${extraQueryFilters} and carton_id like '%${cartonId.value}%' `\n }\n if (serialNumber) {\n extraQueryFilters = `${extraQueryFilters} and serial_number like '%${serialNumber.value}%' `\n }\n\n let refNoQueryFilter = ''\n if (ref) {\n let refValue = ref.value\n .toLowerCase()\n .split(',')\n .map(ref => {\n return \"'%\" + ref.trim().replace(/'/g, \"''\") + \"%'\"\n })\n .join(',')\n refNoQueryFilter = `AND (\n Lower(an.ref_no) LIKE ANY(ARRAY[${refValue}])\n OR Lower(an.ref_no_2) LIKE ANY(ARRAY[${refValue}])\n OR Lower(an.ref_no_3) LIKE ANY(ARRAY[${refValue}])\n )`\n }\n\n await tx.query(\n `\n create temp table temp_inbound_serial_number_report on commit drop as (\n select * from ( \n select \n row_number() over(partition by an.\"name\" order by coalesce(w.started_at, ii.created_at), p.sku ) as \"no\",\n case when \"source\" = 'ADJUSTMENT' then 'adjustment' else an.\"name\" end as \"order_no\",\n i.pallet_id, i.carton_id,an.ref_no, an.ref_no_2, an.ref_no_3,\n p.id as \"product_id\", p.sku as \"product_sku\", p.brand_sku as \"product_brand_sku\",\n p.name as \"product_name\", p.description as \"product_description\", p.\"type\" as \"product_type\",\n coalesce(pd.volume, '0') as \"product_volume\", \n ii.serial_number, \n coalesce(w.started_at,ii.created_at) as \"etd\"\n from inventory_items ii \n inner join inventories i on i.id = ii.inventory_id \n inner join temp_products p on p.id = i.product_id\n left join product_details pd on pd.product_id = p.id and pd.packing_type = i.packing_type and pd.packing_size = i.packing_size \n left join arrival_notices an on an.id = ii.inbound_order_id::uuid\n left join worksheets w on w.arrival_notice_id = an.id and w.type = 'UNLOADING'\n where \n i.domain_id = $1 and i.bizplace_id = $2\n and coalesce(w.started_at, ii.created_at) between $3 and $4\n ${refNoQueryFilter}\n order by coalesce(w.started_at, ii.created_at), p.sku\n ) src\n where 1=1\n ${extraQueryFilters}\n )\n `,\n [context.state.domain.id, bizplace.id, fromDate.value, toDate.value]\n )\n\n const total: any = await tx.query(`\n select count(*) from temp_inbound_serial_number_report\n `)\n\n const result: any = await tx.query(\n `\n select *\n from temp_inbound_serial_number_report\n offset $1 limit $2\n `,\n [(params.pagination.page - 1) * params.pagination.limit, params.pagination.limit]\n )\n\n let items = result.map(itm => {\n let data = {\n no: itm.no,\n bizplace: {\n description: bizplace.description,\n name: bizplace.name\n },\n palletId: itm.pallet_id,\n cartonId: itm.carton_id,\n orderNo: itm.order_no,\n refNo1: itm.ref_no,\n refNo2: itm.ref_no_2,\n refNo3: itm.ref_no_3,\n product: {\n id: itm.product_id,\n sku: itm.product_sku,\n brandSku: itm.product_brand_sku,\n name: itm.product_name,\n description: itm.product_description,\n type: itm.product_type,\n volume: itm.product_volume\n },\n serialNumber: itm.serial_number,\n etd: itm.etd\n }\n\n return data\n })\n\n return {\n items,\n total: total[0].count\n }\n } catch (error) {\n throw error\n }\n }\n}\n"]}
|
|
@@ -7,5 +7,6 @@ const costing_report_1 = require("./costing-report");
|
|
|
7
7
|
const inbound_order_details_report_1 = require("./inbound-order-details-report");
|
|
8
8
|
const outbound_order_details_report_1 = require("./outbound-order-details-report");
|
|
9
9
|
const product_label_report_1 = require("./product-label-report");
|
|
10
|
-
|
|
10
|
+
const release_inventory_report_1 = require("./release-inventory-report");
|
|
11
|
+
exports.Query = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, inbound_serial_number_report_1.inboundSerialNumberReport), outbound_serial_number_report_1.outboundSerialNumberReport), costing_report_1.costingReport), inbound_order_details_report_1.inboundOrderDetailsReport), outbound_order_details_report_1.outboundOrderDetailsReport), product_label_report_1.productLabelReport), release_inventory_report_1.releaseInventoryReport);
|
|
11
12
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/reports/index.ts"],"names":[],"mappings":";;;AAAA,iFAA0E;AAC1E,mFAA4E;AAE5E,qDAAgD;AAChD,iFAA0E;AAC1E,mFAA4E;AAC5E,iEAA2D;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/reports/index.ts"],"names":[],"mappings":";;;AAAA,iFAA0E;AAC1E,mFAA4E;AAE5E,qDAAgD;AAChD,iFAA0E;AAC1E,mFAA4E;AAC5E,iEAA2D;AAC3D,yEAAmE;AAEtD,QAAA,KAAK,yGACb,wDAAyB,GACzB,0DAA0B,GAC1B,8BAAa,GACb,wDAAyB,GACzB,0DAA0B,GAC1B,yCAAkB,GAClB,iDAAsB,EAC1B","sourcesContent":["import { inboundSerialNumberReport } from './inbound-serial-number-report'\nimport { outboundSerialNumberReport } from './outbound-serial-number-report'\n\nimport { costingReport } from './costing-report'\nimport { inboundOrderDetailsReport } from './inbound-order-details-report'\nimport { outboundOrderDetailsReport } from './outbound-order-details-report'\nimport { productLabelReport } from './product-label-report'\nimport { releaseInventoryReport } from './release-inventory-report'\n\nexport const Query = {\n ...inboundSerialNumberReport,\n ...outboundSerialNumberReport,\n ...costingReport,\n ...inboundOrderDetailsReport,\n ...outboundOrderDetailsReport,\n ...productLabelReport,\n ...releaseInventoryReport\n}\n"]}
|
|
@@ -16,10 +16,10 @@ exports.outboundOrderDetailsReport = {
|
|
|
16
16
|
let doNo = params.filters.find(data => data.name === 'doNo');
|
|
17
17
|
let status = params.filters.find(data => data.name === 'status');
|
|
18
18
|
if (userFilter) {
|
|
19
|
-
const user = await tx.getRepository(auth_base_1.User).findOne({
|
|
19
|
+
const user = (await tx.getRepository(auth_base_1.User).findOne({
|
|
20
20
|
where: { id: userFilter.value },
|
|
21
21
|
relations: ['bizplaces']
|
|
22
|
-
});
|
|
22
|
+
}));
|
|
23
23
|
const bizplace = user.bizplaces[0];
|
|
24
24
|
if (!bizplace)
|
|
25
25
|
throw 'Invalid input';
|
|
@@ -30,7 +30,7 @@ exports.outboundOrderDetailsReport = {
|
|
|
30
30
|
}
|
|
31
31
|
if (!bizplaceFilter || !fromDate || !toDate)
|
|
32
32
|
throw 'Invalid input';
|
|
33
|
-
const bizplace = await tx.getRepository(biz_base_1.Bizplace).
|
|
33
|
+
const bizplace = await tx.getRepository(biz_base_1.Bizplace).findOneBy({
|
|
34
34
|
id: bizplaceFilter.value
|
|
35
35
|
});
|
|
36
36
|
await (0, utils_1.rawProductsQuery)(tx, params, bizplace);
|
|
@@ -45,39 +45,55 @@ exports.outboundOrderDetailsReport = {
|
|
|
45
45
|
await tx.query(`
|
|
46
46
|
create temp table temp_outbound_order_report on commit drop as (
|
|
47
47
|
select * from (
|
|
48
|
-
select oi.id,
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
48
|
+
select oi.id,
|
|
49
|
+
oi.release_qty AS "release_qty", oi.picked_at, oi.picked_by, oi.packed_at, oi.packed_by, oi.loaded_at, oi.loaded_by,
|
|
50
|
+
oi.release_qty as "qty", oi.release_uom_value as "uom_value", oi.return_to_location_qty, oi.return_to_location_uom_value,
|
|
51
|
+
coalesce(do2.other_driver, td.name) as driver_name,
|
|
52
|
+
coalesce(do2.truck_no, tv.name, rg.truck_no) as vehicle_no,
|
|
53
|
+
do2.name AS "delivery_order_no", do2.delivery_date AS "delivery_order_delivery_date", do2."to", do2.contact_point_ref_id, do2.pallet_qty,
|
|
54
|
+
coalesce(do2.delivery_date_time, do2.delivery_date::timestamp, ms.dispatched_at, null) as "dispatched_at",
|
|
55
|
+
rg.bizplace_id, $5 AS "bizplace_name", $6 AS "bizplace_description",
|
|
56
|
+
coalesce( concat(do2.delivery_address_1, do2.delivery_address_2, do2.delivery_address_3, do2.delivery_address_4, do2.delivery_address_5, do2.postal_code, do2.country), concat(rg.delivery_address_1, rg.delivery_address_2, rg.delivery_address_3, rg.delivery_address_4, rg.delivery_address_5, rg.postal_code, rg.country)) as delivery_address,
|
|
57
|
+
so.container_no, so.container_size,
|
|
58
|
+
rg.export_option, rg.name AS "ro_no", rg."type" as "ro_type", rg.ref_no AS "ref_no_1", rg.ref_no_2 AS "ref_no_2", rg.ref_no_3 AS "ref_no_3", rg.status as "ro_status",
|
|
59
|
+
rg.created_at AS "order_created_at", rg.accepted_at, u4.name as accepted_by, rg.checked_remark_by, rg.checked_remark_at, coalesce(do2.own_collection, rg.own_transport) AS own_transport,
|
|
53
60
|
p.id as "product_id", p.sku as "product_sku", p.name AS "product_name", p.description AS "product_description", p.type as "product_type",
|
|
54
|
-
i.packing_type as "pack_type", i.packing_size as "pack_size",
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
+
i.packing_type as "pack_type", i.packing_size as "pack_size",
|
|
62
|
+
i.uom, i.unit_cost,
|
|
63
|
+
i.id as inventory_id, i.pallet_id, i.carton_id, i.batch_id, i.batch_id_ref, i.expiration_date, i.manufacture_date,
|
|
64
|
+
coalesce(ms.name,'') as manifest_no, coalesce(rg.manifested_at, ms.created_at) as manifested_at, coalesce(u6.name, u5.name) as manifested_by
|
|
65
|
+
from release_goods rg
|
|
66
|
+
inner join order_inventories oi on rg.id = oi.release_good_id
|
|
67
|
+
left join shipping_orders so on so.id = rg.shipping_order_id
|
|
61
68
|
left join users u4 on u4.id = rg.accepted_by_id
|
|
69
|
+
left join manifests ms on ms.id = rg.manifest_id
|
|
70
|
+
left join users u5 on u5.id = ms.creator_id
|
|
71
|
+
left join users u6 on u6.id = rg.manifested_by_id
|
|
62
72
|
inner join inventories i on i.id = oi.inventory_id
|
|
63
73
|
inner join temp_products p on p.id = oi.product_id
|
|
64
74
|
left join delivery_orders do2 on do2.id = oi.delivery_order_id
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
)
|
|
75
|
+
left join transport_drivers td ON td.id = do2.transport_driver_id
|
|
76
|
+
left join transport_vehicles tv on tv.id = do2.transport_vehicle_id
|
|
77
|
+
where rg.bizplace_id = $2 and rg.domain_id = $1
|
|
78
|
+
and rg.created_at >= $3 and rg.created_at <= $4
|
|
70
79
|
and oi.status <> 'REPLACED'
|
|
71
80
|
${status ? `and rg.status = '${status.value}' ` : ``}
|
|
72
81
|
) src
|
|
73
82
|
where 1=1
|
|
74
83
|
${extraQueryFilters}
|
|
75
84
|
)
|
|
76
|
-
`, [context.state.domain.id, bizplace.id, fromDate.value, toDate.value]);
|
|
85
|
+
`, [context.state.domain.id, bizplace.id, fromDate.value, toDate.value, bizplace.name, bizplace.description]);
|
|
77
86
|
console.timeEnd('temp');
|
|
78
87
|
const total = await tx.query(`
|
|
79
88
|
select count(*) from temp_outbound_order_report
|
|
80
89
|
`);
|
|
90
|
+
await tx.query(`
|
|
91
|
+
create temp table temp_outbound_order_worksheet on commit drop as (
|
|
92
|
+
select oi.id, w.started_at, w.ended_at, w.type from temp_outbound_order_report oi
|
|
93
|
+
inner join worksheet_details wd on wd.target_inventory_id = oi.id
|
|
94
|
+
inner join worksheets w on w.id = wd.worksheet_id
|
|
95
|
+
)
|
|
96
|
+
`);
|
|
81
97
|
console.time('result');
|
|
82
98
|
const result = await tx.query(`
|
|
83
99
|
select *,
|
|
@@ -85,10 +101,12 @@ exports.outboundOrderDetailsReport = {
|
|
|
85
101
|
round((qty * unit_nett_weight)::numeric ,4) as total_unit_nett_weight,
|
|
86
102
|
round((qty * unit_gross_weight)::numeric ,4) as total_unit_gross_weight
|
|
87
103
|
from (
|
|
88
|
-
select
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
104
|
+
select oi.*,
|
|
105
|
+
wpick.started_at as picking_start, wpick.ended_at as picking_complete,
|
|
106
|
+
wpack.started_at as packing_start, wpack.ended_at as packing_complete,
|
|
107
|
+
wsort.started_at as sorting_start, wsort.ended_at as sorting_complete,
|
|
108
|
+
wload.started_at as loading_start, wload.ended_at as loading_complete,
|
|
109
|
+
coalesce(delivery_address, concat(cp.address, cp.address_2)) as "delivery_address",
|
|
92
110
|
coalesce((select volume from product_details pd where pd.product_id = oi.product_id and pd.packing_type = oi.pack_type and pd.packing_size = oi.pack_size
|
|
93
111
|
order by created_at desc
|
|
94
112
|
fetch first 1 rows only),0) as unit_volume,
|
|
@@ -108,10 +126,15 @@ exports.outboundOrderDetailsReport = {
|
|
|
108
126
|
order by created_at desc
|
|
109
127
|
fetch first 1 rows only), oi.unit_cost, 0) as unit_cost
|
|
110
128
|
from temp_outbound_order_report oi
|
|
111
|
-
left join worksheet_details wd on wd.target_inventory_id = oi.id
|
|
112
|
-
left join worksheets w on w.id = wd.worksheet_id
|
|
113
129
|
left join contact_points cp on cp.id = oi.contact_point_ref_id
|
|
114
|
-
|
|
130
|
+
left join temp_outbound_order_worksheet wpick on wpick.id = oi.id
|
|
131
|
+
and (wpick.type= 'PICKING' OR wpick.type = 'BATCH_PICKING')
|
|
132
|
+
left join temp_outbound_order_worksheet wpack on wpack.id = oi.id
|
|
133
|
+
and wpack.type= 'PACKING'
|
|
134
|
+
left join temp_outbound_order_worksheet wsort on wsort.id = oi.id
|
|
135
|
+
and wsort.type= 'SORTING'
|
|
136
|
+
left join temp_outbound_order_worksheet wload on wload.id = oi.id
|
|
137
|
+
and wload.type= 'LOADING'
|
|
115
138
|
order by oi.ro_no, oi.product_sku
|
|
116
139
|
offset $1 limit $2
|
|
117
140
|
) src
|
|
@@ -125,8 +148,10 @@ exports.outboundOrderDetailsReport = {
|
|
|
125
148
|
description: itm.bizplace_description
|
|
126
149
|
},
|
|
127
150
|
doNo: itm.delivery_order_no,
|
|
128
|
-
doDeliveryDate: itm.
|
|
151
|
+
doDeliveryDate: itm.delivery_order_delivery_date,
|
|
152
|
+
dispatchedAt: itm.dispatched_at,
|
|
129
153
|
deliveryAddress: itm.delivery_address,
|
|
154
|
+
manifestNo: itm.manifest_no,
|
|
130
155
|
roNo: itm.ro_no,
|
|
131
156
|
roType: itm.ro_type,
|
|
132
157
|
status: itm.ro_status,
|
|
@@ -138,6 +163,12 @@ exports.outboundOrderDetailsReport = {
|
|
|
138
163
|
orderCreatedAt: itm.order_created_at,
|
|
139
164
|
pickingStart: itm.picking_start,
|
|
140
165
|
pickingComplete: itm.picking_complete,
|
|
166
|
+
packingStart: itm.packing_start,
|
|
167
|
+
packingComplete: itm.packing_complete,
|
|
168
|
+
sortingStart: itm.sorting_start,
|
|
169
|
+
sortingComplete: itm.sorting_complete,
|
|
170
|
+
loadingStart: itm.loading_start,
|
|
171
|
+
loadingComplete: itm.loading_complete,
|
|
141
172
|
product: {
|
|
142
173
|
id: itm.product_id,
|
|
143
174
|
sku: itm.product_sku,
|
|
@@ -174,7 +205,15 @@ exports.outboundOrderDetailsReport = {
|
|
|
174
205
|
checkedRemarkAt: itm.checked_remark_at,
|
|
175
206
|
loadedAt: itm.loaded_at,
|
|
176
207
|
loadedBy: itm.loaded_by,
|
|
177
|
-
|
|
208
|
+
manifestedAt: itm.manifested_at,
|
|
209
|
+
manifestedBy: itm.manifested_by,
|
|
210
|
+
exportOption: itm.export_option,
|
|
211
|
+
containerNo: itm.container_no,
|
|
212
|
+
containerSize: itm.container_size,
|
|
213
|
+
palletQty: itm.pallet_qty,
|
|
214
|
+
transportOption: itm.own_transport ? 'Own Transport' : 'Warehouse Transport',
|
|
215
|
+
vehicleNo: itm.vehicle_no,
|
|
216
|
+
driverName: itm.driver_name
|
|
178
217
|
};
|
|
179
218
|
});
|
|
180
219
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outbound-order-details-report.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/reports/outbound-order-details-report.ts"],"names":[],"mappings":"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","sourcesContent":["import { EntityManager } from 'typeorm'\n\nimport { User } from '@things-factory/auth-base'\nimport { Bizplace } from '@things-factory/biz-base'\nimport { ListParam } from '@things-factory/shell'\n\nimport { rawProductsQuery } from '../../../utils'\n\nexport const outboundOrderDetailsReport = {\n async outboundOrderDetailsReport(_: any, params: ListParam, context: any) {\n try {\n const { tx }: { tx: EntityManager } = context.state\n let bizplaceFilter = { name: '', operator: '', value: '' }\n let userFilter = params.filters.find(data => data.name === 'user')\n let fromDate = params.filters.find(data => data.name === 'fromDate')\n let toDate = params.filters.find(data => data.name === 'toDate')\n let roNo = params.filters.find(data => data.name === 'roNo')\n let doNo = params.filters.find(data => data.name === 'doNo')\n let status = params.filters.find(data => data.name === 'status')\n\n if (userFilter) {\n const user: User = await tx.getRepository(User).findOne({\n where: { id: userFilter.value },\n relations: ['bizplaces']\n })\n\n const bizplace: Bizplace = user.bizplaces[0]\n\n if (!bizplace) throw 'Invalid input'\n\n bizplaceFilter = { name: 'bizplace', operator: 'eq', value: bizplace.id }\n } else {\n bizplaceFilter = params.filters.find(data => data.name === 'bizplace')\n }\n\n if (!bizplaceFilter || !fromDate || !toDate) throw 'Invalid input'\n\n const bizplace: Bizplace = await tx.getRepository(Bizplace).findOne({\n id: bizplaceFilter.value\n })\n\n await rawProductsQuery(tx, params, bizplace)\n\n let extraQueryFilters = ''\n if (roNo) {\n extraQueryFilters = `${extraQueryFilters} and ro_no like '%${roNo.value}%' `\n }\n if (doNo) {\n extraQueryFilters = `${extraQueryFilters} and delivery_order_no like '%${doNo.value}%' `\n }\n\n console.time('temp')\n await tx.query(\n `\n create temp table temp_outbound_order_report on commit drop as (\n select * from (\n select oi.id, '${bizplace.id}' AS \"bizplace_id\", '${bizplace.name}' AS \"bizplace_name\", '${\n bizplace.description\n }' AS \"bizplace_description\", \n do2.name AS \"delivery_order_no\", do2.delivery_date as \"delivery_order_date\",\n do2.\"to\", do2.contact_point_ref_id,\n rg.name AS \"ro_no\", rg.\"type\" as \"ro_type\", rg.ref_no AS \"ref_no_1\", rg.ref_no_2 AS \"ref_no_2\", rg.ref_no_3 AS \"ref_no_3\", rg.status as \"ro_status\", \n rg.created_at AS \"order_created_at\", rg.accepted_at, u4.name as accepted_by, rg.checked_remark_by, rg.checked_remark_at,\n p.id as \"product_id\", p.sku as \"product_sku\", p.name AS \"product_name\", p.description AS \"product_description\", p.type as \"product_type\",\n i.packing_type as \"pack_type\", i.packing_size as \"pack_size\", oi.release_qty AS \"release_qty\",\n oi.picked_at, oi.picked_by, oi.packed_at, oi.packed_by, oi.loaded_at, oi.loaded_by, oi.shipped_at,\n oi.release_qty as \"qty\", oi.release_uom_value as \"uom_value\", i.uom, i.unit_cost,\n oi.return_to_location_qty, oi.return_to_location_uom_value, \n i.id as inventory_id, i.pallet_id, i.carton_id, i.batch_id, i.batch_id_ref, i.expiration_date, i.manufacture_date\n from order_inventories oi\n inner join release_goods rg on rg.id = oi.release_good_id \n left join users u4 on u4.id = rg.accepted_by_id \n inner join inventories i on i.id = oi.inventory_id \n inner join temp_products p on p.id = oi.product_id\n left join delivery_orders do2 on do2.id = oi.delivery_order_id \n where exists (\n select rg2.id from release_goods rg2\n where rg2.domain_id = $1 and rg2.bizplace_id = $2\n and rg2.created_at >= $3 and rg2.created_at <= $4 and rg2.id = oi.release_good_id \n )\n and oi.status <> 'REPLACED'\n ${status ? `and rg.status = '${status.value}' ` : ``}\n ) src\n where 1=1\n ${extraQueryFilters}\n )\n `,\n [context.state.domain.id, bizplace.id, fromDate.value, toDate.value]\n )\n\n console.timeEnd('temp')\n const total: any = await tx.query(`\n select count(*) from temp_outbound_order_report\n `)\n\n console.time('result')\n const result: any = await tx.query(\n `\n select *, \n round((qty * unit_volume)::numeric ,4) as total_volume, \n round((qty * unit_nett_weight)::numeric ,4) as total_unit_nett_weight, \n round((qty * unit_gross_weight)::numeric ,4) as total_unit_gross_weight\n from (\n select *,\n w.started_at as picking_start,\n w.ended_at as picking_complete,\n coalesce(oi.\"to\", concat(cp.address, cp.address_2)) as \"delivery_address\",\n coalesce((select volume from product_details pd where pd.product_id = oi.product_id and pd.packing_type = oi.pack_type and pd.packing_size = oi.pack_size \n order by created_at desc\n fetch first 1 rows only),0) as unit_volume,\n coalesce((select nett_weight from product_details pd where pd.product_id = oi.product_id and pd.packing_type = oi.pack_type and pd.packing_size = oi.pack_size \n order by created_at desc\n fetch first 1 rows only),0) as unit_nett_weight,\n coalesce((select gross_weight from product_details pd where pd.product_id = oi.product_id and pd.packing_type = oi.pack_type and pd.packing_size = oi.pack_size \n order by created_at desc\n fetch first 1 rows only),0) as unit_gross_weight,\n coalesce((select weight_unit from product_details pd where pd.product_id = oi.product_id and pd.packing_type = oi.pack_type and pd.packing_size = oi.pack_size \n order by created_at desc\n fetch first 1 rows only),'') as weight_unit,\n coalesce((select unit_cost from reduced_inventory_histories rih where \n rih.ref_order_id::uuid = oi.id and \n rih.inventory_id::uuid = oi.inventory_id and\n rih.transaction_type = 'PICKING'\n order by created_at desc\n fetch first 1 rows only), oi.unit_cost, 0) as unit_cost\n from temp_outbound_order_report oi\n left join worksheet_details wd on wd.target_inventory_id = oi.id\n left join worksheets w on w.id = wd.worksheet_id\n left join contact_points cp on cp.id = oi.contact_point_ref_id\n where (w.type= 'PICKING' OR w.type = 'BATCH_PICKING') \n order by oi.ro_no, oi.product_sku\n offset $1 limit $2\n ) src \n `,\n [(params.pagination.page - 1) * params.pagination.limit, params.pagination.limit]\n )\n\n console.timeEnd('result')\n\n let items = result.map(itm => {\n return {\n bizplace: {\n id: itm.bizplace_id,\n name: itm.bizplace_name,\n description: itm.bizplace_description\n },\n doNo: itm.delivery_order_no,\n doDeliveryDate: itm.delivery_order_date,\n deliveryAddress: itm.delivery_address,\n roNo: itm.ro_no,\n roType: itm.ro_type,\n status: itm.ro_status,\n refNo1: itm.ref_no_1,\n refNo3: itm.ref_no_3,\n refNo2: itm.ref_no_2,\n acceptedBy: itm.accepted_by,\n acceptedAt: itm.accepted_at,\n orderCreatedAt: itm.order_created_at,\n pickingStart: itm.picking_start,\n pickingComplete: itm.picking_complete,\n product: {\n id: itm.product_id,\n sku: itm.product_sku,\n name: itm.product_name,\n description: itm.product_description,\n type: itm.product_type\n },\n packType: itm.pack_type,\n packSize: itm.pack_size,\n qty: Math.abs(itm.qty),\n uomValue: Math.abs(itm.uom_value),\n uom: itm.uom,\n unitCost: itm.unit_cost,\n returnToLocationQty: itm.return_to_location_qty,\n returnToLocationUomValue: itm.return_to_location_uom_value,\n unitVolume: itm.unit_volume,\n totalVolume: itm.total_volume,\n unitNettWeight: itm.unit_nett_weight,\n totalUnitNettWeight: itm.total_unit_nett_weight,\n unitGrossWeight: itm.unit_gross_weight,\n totalUnitGrossWeight: itm.total_unit_gross_weight,\n weightUnit: itm.weight_unit,\n palletId: itm.pallet_id,\n cartonId: itm.carton_id,\n batchId: itm.batch_id,\n batchIdRef: itm.batch_id_ref,\n expirationDate: itm.expiration_date,\n manufactureDate: itm.manufacture_date,\n pickedAt: itm.picked_at,\n pickedBy: itm.picked_by,\n packedAt: itm.packed_at,\n packedBy: itm.packed_by,\n checkedRemarkBy: itm.checked_remark_by,\n checkedRemarkAt: itm.checked_remark_at,\n loadedAt: itm.loaded_at,\n loadedBy: itm.loaded_by,\n shippedAt: itm.shipped_at\n }\n })\n\n return {\n items,\n total: total[0].count\n }\n } catch (error) {\n throw error\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"outbound-order-details-report.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/reports/outbound-order-details-report.ts"],"names":[],"mappings":"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","sourcesContent":["import { User } from '@things-factory/auth-base'\nimport { Bizplace } from '@things-factory/biz-base'\nimport { Filter, ListParam } from '@things-factory/shell'\n\nimport { rawProductsQuery } from '../../../utils'\n\nexport const outboundOrderDetailsReport = {\n async outboundOrderDetailsReport(_: any, params: ListParam, context: ResolverContext) {\n try {\n const { tx } = context.state\n let bizplaceFilter: Filter = { name: '', operator: '', value: '' }\n let userFilter = params.filters.find(data => data.name === 'user')\n let fromDate = params.filters.find(data => data.name === 'fromDate')\n let toDate = params.filters.find(data => data.name === 'toDate')\n let roNo = params.filters.find(data => data.name === 'roNo')\n let doNo = params.filters.find(data => data.name === 'doNo')\n let status = params.filters.find(data => data.name === 'status')\n\n if (userFilter) {\n const user = (await tx.getRepository(User).findOne({\n where: { id: userFilter.value },\n relations: ['bizplaces']\n })) as User & { bizplaces: Bizplace[] }\n\n const bizplace: Bizplace = user.bizplaces[0]\n\n if (!bizplace) throw 'Invalid input'\n\n bizplaceFilter = { name: 'bizplace', operator: 'eq', value: bizplace.id }\n } else {\n bizplaceFilter = params.filters.find(data => data.name === 'bizplace')\n }\n\n if (!bizplaceFilter || !fromDate || !toDate) throw 'Invalid input'\n\n const bizplace: Bizplace = await tx.getRepository(Bizplace).findOneBy({\n id: bizplaceFilter.value\n })\n\n await rawProductsQuery(tx, params, bizplace)\n\n let extraQueryFilters = ''\n if (roNo) {\n extraQueryFilters = `${extraQueryFilters} and ro_no like '%${roNo.value}%' `\n }\n if (doNo) {\n extraQueryFilters = `${extraQueryFilters} and delivery_order_no like '%${doNo.value}%' `\n }\n\n console.time('temp')\n await tx.query(\n `\n create temp table temp_outbound_order_report on commit drop as (\n select * from (\n select oi.id,\n oi.release_qty AS \"release_qty\", oi.picked_at, oi.picked_by, oi.packed_at, oi.packed_by, oi.loaded_at, oi.loaded_by,\n oi.release_qty as \"qty\", oi.release_uom_value as \"uom_value\", oi.return_to_location_qty, oi.return_to_location_uom_value,\n coalesce(do2.other_driver, td.name) as driver_name, \n coalesce(do2.truck_no, tv.name, rg.truck_no) as vehicle_no,\n do2.name AS \"delivery_order_no\", do2.delivery_date AS \"delivery_order_delivery_date\", do2.\"to\", do2.contact_point_ref_id, do2.pallet_qty,\n coalesce(do2.delivery_date_time, do2.delivery_date::timestamp, ms.dispatched_at, null) as \"dispatched_at\",\n rg.bizplace_id, $5 AS \"bizplace_name\", $6 AS \"bizplace_description\", \n coalesce( concat(do2.delivery_address_1, do2.delivery_address_2, do2.delivery_address_3, do2.delivery_address_4, do2.delivery_address_5, do2.postal_code, do2.country), concat(rg.delivery_address_1, rg.delivery_address_2, rg.delivery_address_3, rg.delivery_address_4, rg.delivery_address_5, rg.postal_code, rg.country)) as delivery_address,\n so.container_no, so.container_size,\n rg.export_option, rg.name AS \"ro_no\", rg.\"type\" as \"ro_type\", rg.ref_no AS \"ref_no_1\", rg.ref_no_2 AS \"ref_no_2\", rg.ref_no_3 AS \"ref_no_3\", rg.status as \"ro_status\", \n rg.created_at AS \"order_created_at\", rg.accepted_at, u4.name as accepted_by, rg.checked_remark_by, rg.checked_remark_at, coalesce(do2.own_collection, rg.own_transport) AS own_transport,\n p.id as \"product_id\", p.sku as \"product_sku\", p.name AS \"product_name\", p.description AS \"product_description\", p.type as \"product_type\",\n i.packing_type as \"pack_type\", i.packing_size as \"pack_size\", \n i.uom, i.unit_cost,\n i.id as inventory_id, i.pallet_id, i.carton_id, i.batch_id, i.batch_id_ref, i.expiration_date, i.manufacture_date,\n coalesce(ms.name,'') as manifest_no, coalesce(rg.manifested_at, ms.created_at) as manifested_at, coalesce(u6.name, u5.name) as manifested_by\n from release_goods rg\n inner join order_inventories oi on rg.id = oi.release_good_id\n left join shipping_orders so on so.id = rg.shipping_order_id \n left join users u4 on u4.id = rg.accepted_by_id \n left join manifests ms on ms.id = rg.manifest_id\n left join users u5 on u5.id = ms.creator_id\n left join users u6 on u6.id = rg.manifested_by_id\n inner join inventories i on i.id = oi.inventory_id \n inner join temp_products p on p.id = oi.product_id\n left join delivery_orders do2 on do2.id = oi.delivery_order_id \n left join transport_drivers td ON td.id = do2.transport_driver_id \n left join transport_vehicles tv on tv.id = do2.transport_vehicle_id\n where rg.bizplace_id = $2 and rg.domain_id = $1\n and rg.created_at >= $3 and rg.created_at <= $4\n and oi.status <> 'REPLACED'\n ${status ? `and rg.status = '${status.value}' ` : ``}\n ) src\n where 1=1\n ${extraQueryFilters}\n )\n `,\n [context.state.domain.id, bizplace.id, fromDate.value, toDate.value, bizplace.name, bizplace.description]\n )\n\n console.timeEnd('temp')\n const total: any = await tx.query(`\n select count(*) from temp_outbound_order_report\n `)\n\n await tx.query(\n `\n create temp table temp_outbound_order_worksheet on commit drop as ( \n select oi.id, w.started_at, w.ended_at, w.type from temp_outbound_order_report oi \n inner join worksheet_details wd on wd.target_inventory_id = oi.id\n inner join worksheets w on w.id = wd.worksheet_id\n )\n `\n )\n\n console.time('result')\n const result: any = await tx.query(\n `\n select *, \n round((qty * unit_volume)::numeric ,4) as total_volume, \n round((qty * unit_nett_weight)::numeric ,4) as total_unit_nett_weight, \n round((qty * unit_gross_weight)::numeric ,4) as total_unit_gross_weight\n from (\n select oi.*,\n wpick.started_at as picking_start, wpick.ended_at as picking_complete,\n wpack.started_at as packing_start, wpack.ended_at as packing_complete,\n wsort.started_at as sorting_start, wsort.ended_at as sorting_complete,\n wload.started_at as loading_start, wload.ended_at as loading_complete,\n coalesce(delivery_address, concat(cp.address, cp.address_2)) as \"delivery_address\",\n coalesce((select volume from product_details pd where pd.product_id = oi.product_id and pd.packing_type = oi.pack_type and pd.packing_size = oi.pack_size \n order by created_at desc\n fetch first 1 rows only),0) as unit_volume,\n coalesce((select nett_weight from product_details pd where pd.product_id = oi.product_id and pd.packing_type = oi.pack_type and pd.packing_size = oi.pack_size \n order by created_at desc\n fetch first 1 rows only),0) as unit_nett_weight,\n coalesce((select gross_weight from product_details pd where pd.product_id = oi.product_id and pd.packing_type = oi.pack_type and pd.packing_size = oi.pack_size \n order by created_at desc\n fetch first 1 rows only),0) as unit_gross_weight,\n coalesce((select weight_unit from product_details pd where pd.product_id = oi.product_id and pd.packing_type = oi.pack_type and pd.packing_size = oi.pack_size \n order by created_at desc\n fetch first 1 rows only),'') as weight_unit,\n coalesce((select unit_cost from reduced_inventory_histories rih where \n rih.ref_order_id::uuid = oi.id and \n rih.inventory_id::uuid = oi.inventory_id and\n rih.transaction_type = 'PICKING'\n order by created_at desc\n fetch first 1 rows only), oi.unit_cost, 0) as unit_cost\n from temp_outbound_order_report oi\n left join contact_points cp on cp.id = oi.contact_point_ref_id\n left join temp_outbound_order_worksheet wpick on wpick.id = oi.id \n and (wpick.type= 'PICKING' OR wpick.type = 'BATCH_PICKING') \n left join temp_outbound_order_worksheet wpack on wpack.id = oi.id \n and wpack.type= 'PACKING'\n left join temp_outbound_order_worksheet wsort on wsort.id = oi.id \n and wsort.type= 'SORTING'\n left join temp_outbound_order_worksheet wload on wload.id = oi.id \n and wload.type= 'LOADING' \n order by oi.ro_no, oi.product_sku\n offset $1 limit $2\n ) src \n `,\n [(params.pagination.page - 1) * params.pagination.limit, params.pagination.limit]\n )\n\n console.timeEnd('result')\n\n let items = result.map(itm => {\n return {\n bizplace: {\n id: itm.bizplace_id,\n name: itm.bizplace_name,\n description: itm.bizplace_description\n },\n doNo: itm.delivery_order_no,\n doDeliveryDate: itm.delivery_order_delivery_date,\n dispatchedAt: itm.dispatched_at,\n deliveryAddress: itm.delivery_address,\n manifestNo: itm.manifest_no,\n roNo: itm.ro_no,\n roType: itm.ro_type,\n status: itm.ro_status,\n refNo1: itm.ref_no_1,\n refNo3: itm.ref_no_3,\n refNo2: itm.ref_no_2,\n acceptedBy: itm.accepted_by,\n acceptedAt: itm.accepted_at,\n orderCreatedAt: itm.order_created_at,\n pickingStart: itm.picking_start,\n pickingComplete: itm.picking_complete,\n packingStart: itm.packing_start,\n packingComplete: itm.packing_complete,\n sortingStart: itm.sorting_start,\n sortingComplete: itm.sorting_complete,\n loadingStart: itm.loading_start,\n loadingComplete: itm.loading_complete,\n product: {\n id: itm.product_id,\n sku: itm.product_sku,\n name: itm.product_name,\n description: itm.product_description,\n type: itm.product_type\n },\n packType: itm.pack_type,\n packSize: itm.pack_size,\n qty: Math.abs(itm.qty),\n uomValue: Math.abs(itm.uom_value),\n uom: itm.uom,\n unitCost: itm.unit_cost,\n returnToLocationQty: itm.return_to_location_qty,\n returnToLocationUomValue: itm.return_to_location_uom_value,\n unitVolume: itm.unit_volume,\n totalVolume: itm.total_volume,\n unitNettWeight: itm.unit_nett_weight,\n totalUnitNettWeight: itm.total_unit_nett_weight,\n unitGrossWeight: itm.unit_gross_weight,\n totalUnitGrossWeight: itm.total_unit_gross_weight,\n weightUnit: itm.weight_unit,\n palletId: itm.pallet_id,\n cartonId: itm.carton_id,\n batchId: itm.batch_id,\n batchIdRef: itm.batch_id_ref,\n expirationDate: itm.expiration_date,\n manufactureDate: itm.manufacture_date,\n pickedAt: itm.picked_at,\n pickedBy: itm.picked_by,\n packedAt: itm.packed_at,\n packedBy: itm.packed_by,\n checkedRemarkBy: itm.checked_remark_by,\n checkedRemarkAt: itm.checked_remark_at,\n loadedAt: itm.loaded_at,\n loadedBy: itm.loaded_by,\n manifestedAt: itm.manifested_at,\n manifestedBy: itm.manifested_by,\n exportOption: itm.export_option,\n containerNo: itm.container_no,\n containerSize: itm.container_size,\n palletQty: itm.pallet_qty,\n transportOption: itm.own_transport ? 'Own Transport' : 'Warehouse Transport',\n vehicleNo: itm.vehicle_no,\n driverName: itm.driver_name\n }\n })\n\n return {\n items,\n total: total[0].count\n }\n } catch (error) {\n throw error\n }\n }\n}\n"]}
|
|
@@ -12,12 +12,16 @@ exports.outboundSerialNumberReport = {
|
|
|
12
12
|
let userFilter = params.filters.find(data => data.name === 'user');
|
|
13
13
|
let fromDate = params.filters.find(data => data.name === 'fromDate');
|
|
14
14
|
let toDate = params.filters.find(data => data.name === 'toDate');
|
|
15
|
-
let
|
|
15
|
+
let orderNo = params.filters.find(data => data.name === 'orderNo');
|
|
16
|
+
let ref = params.filters.find(data => data.name === 'ref');
|
|
17
|
+
let palletId = params.filters.find(data => data.name === 'palletId');
|
|
18
|
+
let cartonId = params.filters.find(data => data.name === 'cartonId');
|
|
19
|
+
let serialNumber = params.filters.find(data => data.name === 'serialNumber');
|
|
16
20
|
if (userFilter) {
|
|
17
|
-
const user = await tx.getRepository(auth_base_1.User).findOne({
|
|
21
|
+
const user = (await tx.getRepository(auth_base_1.User).findOne({
|
|
18
22
|
where: { id: userFilter.value },
|
|
19
23
|
relations: ['bizplaces']
|
|
20
|
-
});
|
|
24
|
+
}));
|
|
21
25
|
const bizplace = user.bizplaces[0];
|
|
22
26
|
if (!bizplace)
|
|
23
27
|
throw 'Invalid input';
|
|
@@ -28,13 +32,37 @@ exports.outboundSerialNumberReport = {
|
|
|
28
32
|
}
|
|
29
33
|
if (!bizplaceFilter || !fromDate || !toDate)
|
|
30
34
|
throw 'Invalid input';
|
|
31
|
-
const bizplace = await tx.getRepository(biz_base_1.Bizplace).
|
|
35
|
+
const bizplace = await tx.getRepository(biz_base_1.Bizplace).findOneBy({
|
|
32
36
|
id: bizplaceFilter.value
|
|
33
37
|
});
|
|
34
38
|
await (0, utils_1.rawProductsQuery)(tx, params, bizplace);
|
|
35
39
|
let extraQueryFilters = '';
|
|
36
|
-
if (
|
|
37
|
-
extraQueryFilters = `${extraQueryFilters} and order_no like '%${
|
|
40
|
+
if (orderNo) {
|
|
41
|
+
extraQueryFilters = `${extraQueryFilters} and order_no like '%${orderNo.value}%' `;
|
|
42
|
+
}
|
|
43
|
+
if (palletId) {
|
|
44
|
+
extraQueryFilters = `${extraQueryFilters} and pallet_id like '%${palletId.value}%' `;
|
|
45
|
+
}
|
|
46
|
+
if (cartonId) {
|
|
47
|
+
extraQueryFilters = `${extraQueryFilters} and carton_id like '%${cartonId.value}%' `;
|
|
48
|
+
}
|
|
49
|
+
if (serialNumber) {
|
|
50
|
+
extraQueryFilters = `${extraQueryFilters} and serial_number like '%${serialNumber.value}%' `;
|
|
51
|
+
}
|
|
52
|
+
let refNoQueryFilter = '';
|
|
53
|
+
if (ref) {
|
|
54
|
+
let refValue = ref.value
|
|
55
|
+
.toLowerCase()
|
|
56
|
+
.split(',')
|
|
57
|
+
.map(ref => {
|
|
58
|
+
return "'%" + ref.trim().replace(/'/g, "''") + "%'";
|
|
59
|
+
})
|
|
60
|
+
.join(',');
|
|
61
|
+
refNoQueryFilter = `AND (
|
|
62
|
+
Lower(rg.ref_no) LIKE ANY(ARRAY[${refValue}])
|
|
63
|
+
OR Lower(rg.ref_no_2) LIKE ANY(ARRAY[${refValue}])
|
|
64
|
+
OR Lower(rg.ref_no_3) LIKE ANY(ARRAY[${refValue}])
|
|
65
|
+
)`;
|
|
38
66
|
}
|
|
39
67
|
await tx.query(`
|
|
40
68
|
create temp table temp_outbound_serial_number_report on commit drop as (
|
|
@@ -51,17 +79,14 @@ exports.outboundSerialNumberReport = {
|
|
|
51
79
|
coalesce(w.started_at,ii.created_at) as "etd"
|
|
52
80
|
from inventory_items ii
|
|
53
81
|
inner join inventories i on i.id = ii.inventory_id
|
|
54
|
-
inner join
|
|
82
|
+
inner join temp_products p on p.id = i.product_id
|
|
55
83
|
left join product_details pd on pd.product_id = p.id and pd.packing_type = i.packing_type and pd.packing_size = i.packing_size
|
|
56
84
|
inner join release_goods rg on rg.id = ii.outbound_order_id::uuid
|
|
57
|
-
left join contact_points cp on cp.id = rg.deliver_to_id
|
|
58
|
-
left join order_inventories oi on oi.release_good_id = rg.id and oi.inventory_id = i.id
|
|
59
|
-
left join delivery_orders do2 on do2.id = oi.delivery_order_id
|
|
60
|
-
left join contact_points cp2 on cp2.id = do2.contact_point_ref_id
|
|
61
85
|
left join worksheets w on w.arrival_notice_id = rg.id and w.type = 'PICKING'
|
|
62
86
|
where
|
|
63
87
|
i.domain_id = $1 and i.bizplace_id = $2
|
|
64
88
|
and coalesce(w.started_at, ii.created_at) between $3 and $4
|
|
89
|
+
${refNoQueryFilter}
|
|
65
90
|
order by coalesce(w.started_at, ii.created_at), p.sku
|
|
66
91
|
) src
|
|
67
92
|
where 1=1
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outbound-serial-number-report.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/reports/outbound-serial-number-report.ts"],"names":[],"mappings":"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","sourcesContent":["import { EntityManager } from 'typeorm'\n\nimport { User } from '@things-factory/auth-base'\nimport { Bizplace } from '@things-factory/biz-base'\nimport { ListParam } from '@things-factory/shell'\n\nimport { rawProductsQuery } from '../../../utils'\n\nexport const outboundSerialNumberReport = {\n async outboundSerialNumberReport(_: any, params: ListParam, context: any) {\n try {\n const { tx }: { tx: EntityManager } = context.state\n let bizplaceFilter = { name: '', operator: '', value: '' }\n let userFilter = params.filters.find(data => data.name === 'user')\n let fromDate = params.filters.find(data => data.name === 'fromDate')\n let toDate = params.filters.find(data => data.name === 'toDate')\n let ganNo = params.filters.find(data => data.name === 'ganNo')\n\n if (userFilter) {\n const user: User = await tx.getRepository(User).findOne({\n where: { id: userFilter.value },\n relations: ['bizplaces']\n })\n\n const bizplace: Bizplace = user.bizplaces[0]\n\n if (!bizplace) throw 'Invalid input'\n\n bizplaceFilter = { name: 'bizplace', operator: 'eq', value: bizplace.id }\n } else {\n bizplaceFilter = params.filters.find(data => data.name === 'bizplace')\n }\n\n if (!bizplaceFilter || !fromDate || !toDate) throw 'Invalid input'\n\n const bizplace: Bizplace = await tx.getRepository(Bizplace).findOne({\n id: bizplaceFilter.value\n })\n\n await rawProductsQuery(tx, params, bizplace)\n\n let extraQueryFilters = ''\n if (ganNo) {\n extraQueryFilters = `${extraQueryFilters} and order_no like '%${ganNo.value}%' `\n }\n\n await tx.query(\n `\n create temp table temp_outbound_serial_number_report on commit drop as (\n select * from ( \n select \n row_number() over(partition by rg.\"name\" order by coalesce(w.started_at, ii.created_at), p.sku ) as \"no\",\n rg.\"name\" as \"order_no\", concat_ws(', ',rg.delivery_address_1,rg.delivery_address_2,rg.delivery_address_3,rg.delivery_address_4,rg.delivery_address_5,rg.postal_code,rg.city,rg.state) as \"full_delivery_address\",\n rg.\"attention_to\" as \"attention_to\",\n i.pallet_id, i.carton_id, rg.ref_no, rg.ref_no_2, rg.ref_no_3,\n p.id as \"product_id\", p.sku as \"product_sku\", p.brand_sku as \"product_brand_sku\",\n p.name as \"product_name\", p.description as \"product_description\", p.\"type\" as \"product_type\",\n coalesce(pd.volume, '0') as \"product_volume\", \n ii.serial_number, \n coalesce(w.started_at,ii.created_at) as \"etd\"\n from inventory_items ii \n inner join inventories i on i.id = ii.inventory_id \n inner join products p on p.id = i.product_id\n left join product_details pd on pd.product_id = p.id and pd.packing_type = i.packing_type and pd.packing_size = i.packing_size \n inner join release_goods rg on rg.id = ii.outbound_order_id::uuid\n left join contact_points cp on cp.id = rg.deliver_to_id \n left join order_inventories oi on oi.release_good_id = rg.id and oi.inventory_id = i.id\n left join delivery_orders do2 on do2.id = oi.delivery_order_id\n left join contact_points cp2 on cp2.id = do2.contact_point_ref_id \n left join worksheets w on w.arrival_notice_id = rg.id and w.type = 'PICKING'\n where \n i.domain_id = $1 and i.bizplace_id = $2\n and coalesce(w.started_at, ii.created_at) between $3 and $4\n order by coalesce(w.started_at, ii.created_at), p.sku\n ) src\n where 1=1\n ${extraQueryFilters}\n )\n `,\n [context.state.domain.id, bizplace.id, fromDate.value, toDate.value]\n )\n\n const total: any = await tx.query(`\n select count(*) from temp_outbound_serial_number_report\n `)\n\n const result: any = await tx.query(\n `\n select *\n from temp_outbound_serial_number_report\n offset $1 limit $2\n `,\n [(params.pagination.page - 1) * params.pagination.limit, params.pagination.limit]\n )\n\n let items = result.map(itm => {\n let data = {\n no: itm.no,\n bizplace: {\n description: bizplace.description,\n name: bizplace.name\n },\n fullDeliveryAddress: itm.full_delivery_address,\n attentionTo:itm.attention_to,\n palletId: itm.pallet_id,\n cartonId: itm.carton_id,\n orderNo: itm.order_no,\n refNo1: itm.ref_no,\n refNo2: itm.ref_no_2,\n refNo3: itm.ref_no_3,\n product: {\n id: itm.product_id,\n sku: itm.product_sku,\n brandSku: itm.product_brand_sku,\n name: itm.product_name,\n description: itm.product_description,\n type: itm.product_type,\n volume: itm.product_volume\n },\n serialNumber: itm.serial_number,\n etd: itm.etd\n }\n\n return data\n })\n\n return {\n items,\n total: total[0].count\n }\n } catch (error) {\n throw error\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"outbound-serial-number-report.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/reports/outbound-serial-number-report.ts"],"names":[],"mappings":"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","sourcesContent":["import { User } from '@things-factory/auth-base'\nimport { Bizplace } from '@things-factory/biz-base'\nimport { Filter, ListParam } from '@things-factory/shell'\n\nimport { rawProductsQuery } from '../../../utils'\n\nexport const outboundSerialNumberReport = {\n async outboundSerialNumberReport(_: any, params: ListParam, context: ResolverContext) {\n try {\n const { tx } = context.state\n let bizplaceFilter: Filter = { name: '', operator: '', value: '' }\n let userFilter = params.filters.find(data => data.name === 'user')\n let fromDate = params.filters.find(data => data.name === 'fromDate')\n let toDate = params.filters.find(data => data.name === 'toDate')\n let orderNo = params.filters.find(data => data.name === 'orderNo')\n let ref = params.filters.find(data => data.name === 'ref')\n let palletId = params.filters.find(data => data.name === 'palletId')\n let cartonId = params.filters.find(data => data.name === 'cartonId')\n let serialNumber = params.filters.find(data => data.name === 'serialNumber')\n\n if (userFilter) {\n const user = (await tx.getRepository(User).findOne({\n where: { id: userFilter.value },\n relations: ['bizplaces']\n })) as User & { bizplaces: Bizplace[] }\n\n const bizplace: Bizplace = user.bizplaces[0]\n\n if (!bizplace) throw 'Invalid input'\n\n bizplaceFilter = { name: 'bizplace', operator: 'eq', value: bizplace.id }\n } else {\n bizplaceFilter = params.filters.find(data => data.name === 'bizplace')\n }\n\n if (!bizplaceFilter || !fromDate || !toDate) throw 'Invalid input'\n\n const bizplace: Bizplace = await tx.getRepository(Bizplace).findOneBy({\n id: bizplaceFilter.value\n })\n\n await rawProductsQuery(tx, params, bizplace)\n\n let extraQueryFilters = ''\n if (orderNo) {\n extraQueryFilters = `${extraQueryFilters} and order_no like '%${orderNo.value}%' `\n }\n if (palletId) {\n extraQueryFilters = `${extraQueryFilters} and pallet_id like '%${palletId.value}%' `\n }\n if (cartonId) {\n extraQueryFilters = `${extraQueryFilters} and carton_id like '%${cartonId.value}%' `\n }\n if (serialNumber) {\n extraQueryFilters = `${extraQueryFilters} and serial_number like '%${serialNumber.value}%' `\n }\n\n let refNoQueryFilter = ''\n if (ref) {\n let refValue = ref.value\n .toLowerCase()\n .split(',')\n .map(ref => {\n return \"'%\" + ref.trim().replace(/'/g, \"''\") + \"%'\"\n })\n .join(',')\n refNoQueryFilter = `AND (\n Lower(rg.ref_no) LIKE ANY(ARRAY[${refValue}])\n OR Lower(rg.ref_no_2) LIKE ANY(ARRAY[${refValue}])\n OR Lower(rg.ref_no_3) LIKE ANY(ARRAY[${refValue}])\n )`\n }\n\n await tx.query(\n `\n create temp table temp_outbound_serial_number_report on commit drop as (\n select * from ( \n select \n row_number() over(partition by rg.\"name\" order by coalesce(w.started_at, ii.created_at), p.sku ) as \"no\",\n rg.\"name\" as \"order_no\", concat_ws(', ',rg.delivery_address_1,rg.delivery_address_2,rg.delivery_address_3,rg.delivery_address_4,rg.delivery_address_5,rg.postal_code,rg.city,rg.state) as \"full_delivery_address\",\n rg.\"attention_to\" as \"attention_to\",\n i.pallet_id, i.carton_id, rg.ref_no, rg.ref_no_2, rg.ref_no_3,\n p.id as \"product_id\", p.sku as \"product_sku\", p.brand_sku as \"product_brand_sku\",\n p.name as \"product_name\", p.description as \"product_description\", p.\"type\" as \"product_type\",\n coalesce(pd.volume, '0') as \"product_volume\", \n ii.serial_number, \n coalesce(w.started_at,ii.created_at) as \"etd\"\n from inventory_items ii \n inner join inventories i on i.id = ii.inventory_id \n inner join temp_products p on p.id = i.product_id\n left join product_details pd on pd.product_id = p.id and pd.packing_type = i.packing_type and pd.packing_size = i.packing_size \n inner join release_goods rg on rg.id = ii.outbound_order_id::uuid\n left join worksheets w on w.arrival_notice_id = rg.id and w.type = 'PICKING'\n where \n i.domain_id = $1 and i.bizplace_id = $2\n and coalesce(w.started_at, ii.created_at) between $3 and $4\n ${refNoQueryFilter}\n order by coalesce(w.started_at, ii.created_at), p.sku\n ) src\n where 1=1\n ${extraQueryFilters}\n )\n `,\n [context.state.domain.id, bizplace.id, fromDate.value, toDate.value]\n )\n\n const total: any = await tx.query(`\n select count(*) from temp_outbound_serial_number_report\n `)\n\n const result: any = await tx.query(\n `\n select *\n from temp_outbound_serial_number_report\n offset $1 limit $2\n `,\n [(params.pagination.page - 1) * params.pagination.limit, params.pagination.limit]\n )\n\n let items = result.map(itm => {\n let data = {\n no: itm.no,\n bizplace: {\n description: bizplace.description,\n name: bizplace.name\n },\n fullDeliveryAddress: itm.full_delivery_address,\n attentionTo: itm.attention_to,\n palletId: itm.pallet_id,\n cartonId: itm.carton_id,\n orderNo: itm.order_no,\n refNo1: itm.ref_no,\n refNo2: itm.ref_no_2,\n refNo3: itm.ref_no_3,\n product: {\n id: itm.product_id,\n sku: itm.product_sku,\n brandSku: itm.product_brand_sku,\n name: itm.product_name,\n description: itm.product_description,\n type: itm.product_type,\n volume: itm.product_volume\n },\n serialNumber: itm.serial_number,\n etd: itm.etd\n }\n\n return data\n })\n\n return {\n items,\n total: total[0].count\n }\n } catch (error) {\n throw error\n }\n }\n}\n"]}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.productLabelReport = void 0;
|
|
4
|
-
const typeorm_1 = require("typeorm");
|
|
5
4
|
const id_rule_base_1 = require("@things-factory/id-rule-base");
|
|
5
|
+
const shell_1 = require("@things-factory/shell");
|
|
6
6
|
exports.productLabelReport = {
|
|
7
7
|
async productLabelReport(_, params, context) {
|
|
8
8
|
var _a;
|
|
9
9
|
try {
|
|
10
10
|
const { domain } = context.state;
|
|
11
|
-
// const { domain }
|
|
11
|
+
// const { domain } = context.state
|
|
12
12
|
const bizplaceId = params.filters.find(data => data.name === 'bizplace').value;
|
|
13
13
|
const type = (_a = params.filters.find(data => data.name === 'type')) === null || _a === void 0 ? void 0 : _a.value;
|
|
14
14
|
const fromDate = params.filters.find(data => data.name === 'fromDate').value;
|
|
15
15
|
const toDate = params.filters.find(data => data.name === 'toDate').value;
|
|
16
16
|
if (!bizplaceId || !fromDate || !toDate)
|
|
17
17
|
throw new Error('Invalid input');
|
|
18
|
-
const items = await (0,
|
|
18
|
+
const items = await (0, shell_1.getRepository)(id_rule_base_1.Sequence).query(`
|
|
19
19
|
SELECT "date", "type", "count", "bizplace_id" FROM (
|
|
20
20
|
SELECT
|
|
21
21
|
"sq"."pattern"::JSONB ->> 'type' AS "type",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"product-label-report.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/reports/product-label-report.ts"],"names":[],"mappings":";;;AAAA
|
|
1
|
+
{"version":3,"file":"product-label-report.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/reports/product-label-report.ts"],"names":[],"mappings":";;;AAAA,+DAAsE;AACtE,iDAAgE;AAEnD,QAAA,kBAAkB,GAAG;IAChC,KAAK,CAAC,kBAAkB,CAAC,CAAM,EAAE,MAAiB,EAAE,OAAwB;;QAC1E,IAAI;YACF,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;YAChC,mCAAmC;YACnC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,KAAK,CAAA;YAC9E,MAAM,IAAI,GAAG,MAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,0CAAE,KAAK,CAAA;YACrE,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,KAAK,CAAA;YAC5E,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,KAAK,CAAA;YAExE,IAAI,CAAC,UAAU,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;YAEzE,MAAM,KAAK,GAAG,MAAM,IAAA,qBAAa,EAAC,uBAAQ,CAAC,CAAC,KAAK,CAAC;;;;;;;uDAOD,4BAAa,CAAC,qBAAqB;oCACtD,MAAM,CAAC,EAAE;;iCAEZ,UAAU;UACjC,IAAI,CAAC,CAAC,CAAC,sBAAsB,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE;oCAChB,QAAQ,UAAU,MAAM;;OAErD,CAAC,CAAA;YAEF,gEAAgE;YAChE;;;;;;;;;;;;cAYE;YAEF,OAAO;gBACL,KAAK;gBACL,KAAK,EAAE,CAAC;aACT,CAAA;SACF;QAAC,OAAO,KAAK,EAAE;YACd,MAAM,KAAK,CAAA;SACZ;IACH,CAAC;CACF,CAAA","sourcesContent":["import { Sequence, SEQUENCE_TYPE } from '@things-factory/id-rule-base'\nimport { getRepository, ListParam } from '@things-factory/shell'\n\nexport const productLabelReport = {\n async productLabelReport(_: any, params: ListParam, context: ResolverContext) {\n try {\n const { domain } = context.state\n // const { domain } = context.state\n const bizplaceId = params.filters.find(data => data.name === 'bizplace').value\n const type = params.filters.find(data => data.name === 'type')?.value\n const fromDate = params.filters.find(data => data.name === 'fromDate').value\n const toDate = params.filters.find(data => data.name === 'toDate').value\n\n if (!bizplaceId || !fromDate || !toDate) throw new Error('Invalid input')\n\n const items = await getRepository(Sequence).query(`\n SELECT \"date\", \"type\", \"count\", \"bizplace_id\" FROM (\n SELECT\n \"sq\".\"pattern\"::JSONB ->> 'type' AS \"type\",\n \"sq\".\"pattern\"::JSONB ->> 'date' AS \"date\",\n \"sq\".\"pattern\"::JSONB ->> 'bizplaceId' AS \"bizplace_id\",\n \"sq\".\"seq\" AS \"count\"\n FROM \"sequences\" \"sq\" WHERE \"sq\".\"type\" = '${SEQUENCE_TYPE.PRODUCT_LABEL_COUNTER}'\n AND \"sq\".\"domain_id\" = '${domain.id}'\n ) AS foo\n WHERE \"bizplace_id\" = '${bizplaceId}'\n ${type ? `AND \"type\" ilike '%${type}%'` : ''}\n AND \"date\"::date BETWEEN '${fromDate}' AND '${toDate}'\n ORDER BY type ASC, date ASC\n `)\n\n // @farishelmi any usage for this function? If no please remove.\n /* \n need to transform into queryBuilder form\n const qb: SelectQueryBuilder<Sequence> = tx\n .getRepository(Sequence)\n .createQueryBuilder('sq')\n .select(`\"sq\".\"pattern\"::JSONB ->> 'type'`, 'type')\n .addSelect(`\"sq\".\"pattern\"::JSONB ->> 'date'`, 'date')\n .addSelect(`\"sq\".\"pattern\"::JSONB ->> 'bizplaceId'`, 'bizplace_id')\n .addSelect(`\"sq\".\"seq\"`, 'count')\n .where('\"sq\".\"type\" = :sequenceType', { sequenceType: SEQUENCE_TYPE.PRODUCT_LABEL_COUNTER })\n .andWhere(`\"sq\".\"pattern\"::JSONB ->> 'bizplaceId' = :bizplaceId`, { bizplaceId })\n .andWhere(`\"sq\".\"domain_id\" = :domainId`, { domainId: domain.id }) \n */\n\n return {\n items,\n total: 0\n }\n } catch (error) {\n throw error\n }\n }\n}\n"]}
|