@things-factory/operato-wms 6.1.82 → 6.1.84

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.
Files changed (94) hide show
  1. package/dist-server/tsconfig.tsbuildinfo +1 -1
  2. package/package.json +39 -39
  3. package/server/graphql/index.ts +0 -7
  4. package/server/graphql/resolvers/board-setting/board-settings.ts +0 -93
  5. package/server/graphql/resolvers/board-setting/index.ts +0 -5
  6. package/server/graphql/resolvers/custom/elccl/elccl-daily-collection-report.ts +0 -92
  7. package/server/graphql/resolvers/custom/elccl/elccl-daily-order-inventory-report.ts +0 -147
  8. package/server/graphql/resolvers/custom/elccl/elccl-inventory-history-pallet-detail-report.ts +0 -135
  9. package/server/graphql/resolvers/custom/elccl/elccl-inventory-history-report.ts +0 -178
  10. package/server/graphql/resolvers/custom/elccl/elccl-inventory-history-summary-report.ts +0 -123
  11. package/server/graphql/resolvers/custom/elccl/elccl-onhand-inventory-counter.ts +0 -36
  12. package/server/graphql/resolvers/custom/elccl/index.ts +0 -15
  13. package/server/graphql/resolvers/custom/kimeda/index.ts +0 -5
  14. package/server/graphql/resolvers/custom/kimeda/kimeda-onhand-inventory-counter.ts +0 -42
  15. package/server/graphql/resolvers/dashboard/arrival-notices-by-status.ts +0 -34
  16. package/server/graphql/resolvers/dashboard/collection-orders-by-status.ts +0 -24
  17. package/server/graphql/resolvers/dashboard/delivery-orders-by-status.ts +0 -24
  18. package/server/graphql/resolvers/dashboard/index.ts +0 -17
  19. package/server/graphql/resolvers/dashboard/inventory-expiry-monitor.ts +0 -60
  20. package/server/graphql/resolvers/dashboard/outbound-order-by-status.ts +0 -126
  21. package/server/graphql/resolvers/dashboard/release-goods-by-status.ts +0 -34
  22. package/server/graphql/resolvers/dashboard/unit-inbounded-outbounded.ts +0 -61
  23. package/server/graphql/resolvers/index.ts +0 -24
  24. package/server/graphql/resolvers/inventory-comparison/index.ts +0 -5
  25. package/server/graphql/resolvers/inventory-comparison/inventory-comparison-list.ts +0 -101
  26. package/server/graphql/resolvers/opa-menu/index.ts +0 -5
  27. package/server/graphql/resolvers/opa-menu/opa-menus.ts +0 -77
  28. package/server/graphql/resolvers/other/add-release-good-products.ts +0 -413
  29. package/server/graphql/resolvers/other/index.ts +0 -10
  30. package/server/graphql/resolvers/other/page-settings.ts +0 -105
  31. package/server/graphql/resolvers/reports/costing-report.ts +0 -194
  32. package/server/graphql/resolvers/reports/inbound-order-details-report.ts +0 -216
  33. package/server/graphql/resolvers/reports/inbound-serial-number-report.ts +0 -156
  34. package/server/graphql/resolvers/reports/index.ts +0 -18
  35. package/server/graphql/resolvers/reports/outbound-order-details-report.ts +0 -250
  36. package/server/graphql/resolvers/reports/outbound-serial-number-report.ts +0 -159
  37. package/server/graphql/resolvers/reports/product-label-report.ts +0 -55
  38. package/server/graphql/resolvers/reports/release-inventory-report.ts +0 -201
  39. package/server/graphql/resolvers/shipping-provider/index.ts +0 -5
  40. package/server/graphql/resolvers/shipping-provider/shipping-providers.ts +0 -18
  41. package/server/graphql/resolvers/warehouse-inventory-adjustment/index.ts +0 -5
  42. package/server/graphql/resolvers/warehouse-inventory-adjustment/warehouse-intentory-adjustment.ts +0 -79
  43. package/server/graphql/types/board-setting/board-setting.ts +0 -10
  44. package/server/graphql/types/board-setting/index.ts +0 -6
  45. package/server/graphql/types/custom/elccl/elccl-daily-collection-report-list.ts +0 -8
  46. package/server/graphql/types/custom/elccl/elccl-daily-collection-report.ts +0 -24
  47. package/server/graphql/types/custom/elccl/elccl-daily-order-inventory-report-list.ts +0 -8
  48. package/server/graphql/types/custom/elccl/elccl-daily-order-inventory-report.ts +0 -19
  49. package/server/graphql/types/custom/elccl/elccl-inventory-report.ts +0 -16
  50. package/server/graphql/types/custom/elccl/elccl-inventory-summary-report-list.ts +0 -8
  51. package/server/graphql/types/custom/elccl/elccl-inventory-summary-report.ts +0 -17
  52. package/server/graphql/types/custom/elccl/elccl-pallet-detail-report.ts +0 -16
  53. package/server/graphql/types/custom/elccl/index.ts +0 -28
  54. package/server/graphql/types/custom/kimeda/index.ts +0 -3
  55. package/server/graphql/types/dashboard/index.ts +0 -14
  56. package/server/graphql/types/dashboard/inventory-expiry-counter.ts +0 -9
  57. package/server/graphql/types/dashboard/inventory-expiry-status.ts +0 -8
  58. package/server/graphql/types/dashboard/order-status-counter.ts +0 -8
  59. package/server/graphql/types/index.ts +0 -38
  60. package/server/graphql/types/inventory-comparison/index.ts +0 -11
  61. package/server/graphql/types/inventory-comparison/inventory-comparison-list.ts +0 -8
  62. package/server/graphql/types/inventory-comparison/inventory-comparison.ts +0 -12
  63. package/server/graphql/types/opa-menu/index.ts +0 -6
  64. package/server/graphql/types/opa-menu/opa-menu.ts +0 -39
  65. package/server/graphql/types/other/index.ts +0 -19
  66. package/server/graphql/types/other/page-setting.ts +0 -33
  67. package/server/graphql/types/reports/costing-report-list.ts +0 -8
  68. package/server/graphql/types/reports/costing-report.ts +0 -13
  69. package/server/graphql/types/reports/inbound-order-details-report-list.ts +0 -8
  70. package/server/graphql/types/reports/inbound-order-details-report.ts +0 -53
  71. package/server/graphql/types/reports/inbound-serial-number-report-list.ts +0 -8
  72. package/server/graphql/types/reports/inbound-serial-number-report.ts +0 -17
  73. package/server/graphql/types/reports/index.ts +0 -43
  74. package/server/graphql/types/reports/outbound-order-details-report-list.ts +0 -8
  75. package/server/graphql/types/reports/outbound-order-details-report.ts +0 -70
  76. package/server/graphql/types/reports/outbound-serial-number-report-list.ts +0 -8
  77. package/server/graphql/types/reports/outbound-serial-number-report.ts +0 -19
  78. package/server/graphql/types/reports/product-label-report-list.ts +0 -8
  79. package/server/graphql/types/reports/product-label-report.ts +0 -10
  80. package/server/graphql/types/reports/release-inventory-report-list.ts +0 -8
  81. package/server/graphql/types/reports/release-inventory-report.ts +0 -23
  82. package/server/graphql/types/shipping-provider/index.ts +0 -8
  83. package/server/graphql/types/shipping-provider/shipping-provider-list.ts +0 -7
  84. package/server/graphql/types/shipping-provider/shipping-provider.ts +0 -7
  85. package/server/graphql/types/warehouse-inventory-adjustment/index.ts +0 -5
  86. package/server/index.ts +0 -4
  87. package/server/migrations/1568858861188-SeedSetting.ts +0 -57
  88. package/server/migrations/1623308919899-SeedLocationRecommendSetting.ts +0 -35
  89. package/server/migrations/1623381200659-SeedStoringRule.ts +0 -33
  90. package/server/migrations/index.ts +0 -9
  91. package/server/opa-app-setting-constants.ts +0 -9
  92. package/server/routes.ts +0 -1
  93. package/server/utils/index.ts +0 -1
  94. package/server/utils/report-query-util.ts +0 -47
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@things-factory/operato-wms",
3
- "version": "6.1.82",
3
+ "version": "6.1.84",
4
4
  "main": "dist-server/index.js",
5
5
  "browser": "client/index.js",
6
6
  "things-factory": true,
@@ -19,9 +19,9 @@
19
19
  "scripts": {
20
20
  "serve": "things-factory operato-wms",
21
21
  "serve:dev": "npm run build:server && things-factory-dev operato-wms",
22
- "build": "tsc --p tsconfig.json",
22
+ "build": "npm run build:server",
23
23
  "build:client": "npm run clean:client && webpack --config ../builder/webpack.config.js",
24
- "build:server": "npm run clean:server && tsc",
24
+ "build:server": "npm run clean:server && tsc --p ./server/tsconfig.json",
25
25
  "clean:server": "rm -rf dist-server",
26
26
  "clean:client": "rm -rf dist-client",
27
27
  "clean": "npm run clean:server && npm run clean:client",
@@ -36,7 +36,7 @@
36
36
  "generate:bizplace": "node ./scripts/generator/bizplace-generator",
37
37
  "stop:dev": "kill $(lsof -t -i:3000,3001)",
38
38
  "stop": "things-factory-stop operato-wms",
39
- "docker": "things-factory-dockerize hatiolab/operato-wms:latest hatiolab/operato-wms:$npm_package_version linux/amd64",
39
+ "docker": "npm run build:app && things-factory-dockerize hatiolab/operato-wms:latest hatiolab/operato-wms:$npm_package_version linux/amd64",
40
40
  "docker:push": "docker image push hatiolab/operato-wms:latest && docker image push hatiolab/operato-wms:$npm_package_version",
41
41
  "docker:run": "docker run --platform linux/amd64 -p 4000:3000 hatiolab/operato-wms:latest",
42
42
  "test": "yarn run cypress run --headless --browser chrome",
@@ -72,50 +72,50 @@
72
72
  "@operato/scene-table": "^1.0.0",
73
73
  "@operato/scene-visualizer": "^1.0.0",
74
74
  "@operato/scene-wheel-sorter": "^1.0.0",
75
- "@things-factory/apptool-ui": "^6.1.81",
76
- "@things-factory/auth-ui": "^6.1.81",
77
- "@things-factory/barcode-ui": "^6.1.81",
78
- "@things-factory/biz-ui": "^6.1.81",
79
- "@things-factory/board-service": "^6.1.81",
80
- "@things-factory/board-ui": "^6.1.81",
81
- "@things-factory/code-ui": "^6.1.81",
82
- "@things-factory/context-ui": "^6.1.81",
75
+ "@things-factory/apptool-ui": "^6.1.84",
76
+ "@things-factory/auth-ui": "^6.1.84",
77
+ "@things-factory/barcode-ui": "^6.1.84",
78
+ "@things-factory/biz-ui": "^6.1.84",
79
+ "@things-factory/board-service": "^6.1.84",
80
+ "@things-factory/board-ui": "^6.1.84",
81
+ "@things-factory/code-ui": "^6.1.84",
82
+ "@things-factory/context-ui": "^6.1.84",
83
83
  "@things-factory/env": "^6.1.79",
84
- "@things-factory/export-ui": "^6.1.81",
85
- "@things-factory/export-ui-csv": "^6.1.81",
86
- "@things-factory/export-ui-excel": "^6.1.81",
87
- "@things-factory/fav-base": "^6.1.81",
84
+ "@things-factory/export-ui": "^6.1.84",
85
+ "@things-factory/export-ui-csv": "^6.1.84",
86
+ "@things-factory/export-ui-excel": "^6.1.84",
87
+ "@things-factory/fav-base": "^6.1.84",
88
88
  "@things-factory/form-ui": "^6.1.79",
89
- "@things-factory/geography": "^6.1.81",
90
- "@things-factory/help": "^6.1.81",
91
- "@things-factory/i18n-base": "^6.1.81",
92
- "@things-factory/id-rule-base": "^6.1.81",
93
- "@things-factory/import-ui": "^6.1.81",
94
- "@things-factory/import-ui-excel": "^6.1.81",
95
- "@things-factory/more-ui": "^6.1.81",
96
- "@things-factory/notification": "^6.1.81",
97
- "@things-factory/operato-tools": "^6.1.82",
89
+ "@things-factory/geography": "^6.1.84",
90
+ "@things-factory/help": "^6.1.84",
91
+ "@things-factory/i18n-base": "^6.1.84",
92
+ "@things-factory/id-rule-base": "^6.1.84",
93
+ "@things-factory/import-ui": "^6.1.84",
94
+ "@things-factory/import-ui-excel": "^6.1.84",
95
+ "@things-factory/more-ui": "^6.1.84",
96
+ "@things-factory/notification": "^6.1.84",
97
+ "@things-factory/operato-tools": "^6.1.84",
98
98
  "@things-factory/pdf": "^6.1.79",
99
- "@things-factory/print-proxy-service": "^6.1.81",
100
- "@things-factory/print-service": "^6.1.81",
101
- "@things-factory/print-ui": "^6.1.81",
102
- "@things-factory/product-base": "^6.1.81",
103
- "@things-factory/resource-ui": "^6.1.81",
104
- "@things-factory/sales-ui": "^6.1.81",
99
+ "@things-factory/print-proxy-service": "^6.1.84",
100
+ "@things-factory/print-service": "^6.1.84",
101
+ "@things-factory/print-ui": "^6.1.84",
102
+ "@things-factory/product-base": "^6.1.84",
103
+ "@things-factory/resource-ui": "^6.1.84",
104
+ "@things-factory/sales-ui": "^6.1.84",
105
105
  "@things-factory/scene-google-map": "^6.1.79",
106
- "@things-factory/setting-ui": "^6.1.81",
107
- "@things-factory/system-ui": "^6.1.81",
108
- "@things-factory/transport-base": "^6.1.81",
109
- "@things-factory/tutorial-ui": "^6.1.81",
110
- "@things-factory/warehouse-base": "^6.1.81",
111
- "@things-factory/worksheet-base": "^6.1.81"
106
+ "@things-factory/setting-ui": "^6.1.84",
107
+ "@things-factory/system-ui": "^6.1.84",
108
+ "@things-factory/transport-base": "^6.1.84",
109
+ "@things-factory/tutorial-ui": "^6.1.84",
110
+ "@things-factory/warehouse-base": "^6.1.84",
111
+ "@things-factory/worksheet-base": "^6.1.84"
112
112
  },
113
113
  "devDependencies": {
114
- "@things-factory/builder": "^6.1.79",
114
+ "@things-factory/builder": "^6.1.84",
115
115
  "cypress": "^9.4.1",
116
116
  "cypress-file-upload": "^5.0.8",
117
117
  "cypress-localstorage-commands": "^1.6.1",
118
118
  "eslint-plugin-cypress": "^2.12.1"
119
119
  },
120
- "gitHead": "49c8b7dec7d37aa762baf228bfe75045803cef2d"
120
+ "gitHead": "66cd7dd022e34cbd91dcd66e71320305be11873c"
121
121
  }
@@ -1,7 +0,0 @@
1
- import * as typeDefs from './types'
2
- import * as resolvers from './resolvers'
3
-
4
- export const schema = {
5
- typeDefs,
6
- resolvers
7
- }
@@ -1,93 +0,0 @@
1
- import { User } from '@things-factory/auth-base'
2
- import { Board } from '@things-factory/board-service'
3
- import { Setting } from '@things-factory/setting-base'
4
- import { getRepository } from '@things-factory/shell'
5
-
6
- import {
7
- CARTON_LABEL_SETTING_KEY,
8
- HOME_DASHBOARD_PREFIX,
9
- INTENALIZED_AWB_SETTING_KEY,
10
- LOCATION_LABEL_SETTING_KEY,
11
- PALLET_LABEL_SETTING_KEY,
12
- PRODUCT_LABEL_SETTING_KEY,
13
- REUSABLE_PALLET_LABEL_SETTING_KEY,
14
- ROUTE_LABEL_SETTING_KEY,
15
- TOTE_LABEL_SETTING_KEY
16
- } from '../../../opa-app-setting-constants'
17
-
18
- export const boardSettingsResolver = {
19
- async boardSettings(_: any, params: any, context: ResolverContext) {
20
- const { domain } = context.state
21
-
22
- /***********************************************************************************
23
- * Temporary solution for dashboard user type
24
- ***********************************************************************************/
25
- const user: User = await getRepository(User)
26
- .createQueryBuilder('USER')
27
- .leftJoinAndSelect('USER.roles', 'ROLES')
28
- .leftJoinAndSelect('ROLES.domain', 'ROLES_DOMAIN')
29
- .where('USER.id = :userId', { userId: context.state.user.id })
30
- .andWhere('ROLES_DOMAIN.id = :domainId', { domainId: domain.id })
31
- .getOne()
32
-
33
- const userType = user.roles.filter(role => role.description)[0].description
34
- /**********************************************************************************/
35
-
36
- const HOME_BOARD = `${HOME_DASHBOARD_PREFIX}:${userType}`
37
- // const HOME_BOARD = `${HOME_DASHBOARD_PREFIX}:${context.state.user.userType}`
38
-
39
- const queryBuilder = getRepository(Setting).createQueryBuilder()
40
- const names = [
41
- LOCATION_LABEL_SETTING_KEY,
42
- PRODUCT_LABEL_SETTING_KEY,
43
- PALLET_LABEL_SETTING_KEY,
44
- REUSABLE_PALLET_LABEL_SETTING_KEY,
45
- HOME_BOARD,
46
- CARTON_LABEL_SETTING_KEY,
47
- INTENALIZED_AWB_SETTING_KEY,
48
- ROUTE_LABEL_SETTING_KEY,
49
- TOTE_LABEL_SETTING_KEY
50
- ]
51
-
52
- var qb = queryBuilder
53
- // .innerJoin(Board, 'Board', 'Board.id = CAST(Setting.value AS uuid)')
54
- .innerJoin(Board, 'Board', 'Setting.value = CAST(Board.id AS char(36))')
55
- // .innerJoin(Board, 'Board', 'Board.id = Setting.value')
56
- .select([
57
- 'Setting.id as id',
58
- 'Setting.name as name',
59
- 'Setting.value as value',
60
- 'Board.id as boardId',
61
- 'Board.name as boardName',
62
- 'Board.description as boardDescription',
63
- 'Board.thumbnail as boardThumbnail'
64
- ])
65
- .where('Setting.domain_id = :domain', { domain: context.state.domain.id })
66
-
67
- if (names && names.length) qb.andWhere('Setting.name IN (:...names)', { names })
68
-
69
- var boardSettingList = await qb.getRawMany()
70
-
71
- return boardSettingList.map(boardSetting => {
72
- var setting: any = {
73
- board: {}
74
- }
75
-
76
- for (let key in boardSetting) {
77
- if (key.includes('board')) {
78
- let originKey = key
79
- key = key.replace('board', '').toLowerCase()
80
- setting.board[key] = boardSetting[originKey]
81
- } else {
82
- setting[key] = boardSetting[key]
83
- }
84
- }
85
-
86
- if (setting.name.indexOf(HOME_DASHBOARD_PREFIX) == 0) {
87
- setting.name = HOME_DASHBOARD_PREFIX
88
- }
89
-
90
- return setting
91
- })
92
- }
93
- }
@@ -1,5 +0,0 @@
1
- import { boardSettingsResolver } from './board-settings'
2
-
3
- export const Query = {
4
- ...boardSettingsResolver
5
- }
@@ -1,92 +0,0 @@
1
- import { Bizplace } from '@things-factory/biz-base'
2
- import { getRepository, ListParam } from '@things-factory/shell'
3
-
4
- export const elcclDailyCollectionReport = {
5
- async elcclDailyCollectionReport(_: any, params: ListParam, context: ResolverContext) {
6
- try {
7
- const { tx } = context.state
8
-
9
- let bizplaceQuery = ''
10
- if (params.filters.find((filter: any) => filter.name === 'bizplace')) {
11
- const bizplace: Bizplace = await getRepository(Bizplace).findOneBy({
12
- id: params.filters.find(data => data.name === 'bizplace').value
13
- })
14
- bizplaceQuery = "AND rg.bizplace_id = '" + bizplace.id + "'"
15
- }
16
-
17
- let fromDate = params.filters.find(data => data.name === 'fromDate')
18
- let toDate = params.filters.find(data => data.name === 'toDate')
19
- let arrivalNotice = params.filters.find(data => data.name === 'arrivalNotice')
20
- let tzoffset = params.filters.find(data => data.name === 'tzoffset').value + ' seconds'
21
-
22
- if (!fromDate || !toDate) throw 'Invalid input'
23
-
24
- let arrivalNoticeQuery = ''
25
- if (arrivalNotice) {
26
- arrivalNoticeQuery =
27
- 'AND arrival_notice_name ILIKE ANY(ARRAY[' +
28
- arrivalNotice.value
29
- .split(',')
30
- .map(an => {
31
- return "'%" + an.trim().replace(/'/g, "''") + "%'"
32
- })
33
- .join(',') +
34
- '])'
35
- }
36
-
37
- const result = await tx.query(
38
- `
39
- with src as (
40
- select ar.name as release_good_name, COALESCE(ar.name, 'MIGRATE') as arrival_notice_name, bz.name as bizplace_name,
41
- ws.ended_at::date, delord.own_collection, delord.name as delivery_order_name, inv.pallet_id, inv.batch_id
42
- from release_goods rg
43
- inner join bizplaces bz on bz.id = rg.bizplace_id
44
- inner join worksheets ws on ws.release_good_id = rg.id and ws.type = 'LOADING'
45
- inner join order_inventories oi on oi.release_good_id = rg.id
46
- inner join inventories inv on inv.id = oi.inventory_id
47
- inner join delivery_orders delord on delord.id = oi.delivery_order_id
48
- left join order_inventories inbound_oi on inbound_oi.inventory_id = inv.id and inbound_oi.type = 'ARRIVAL_NOTICE'
49
- left join arrival_notices ar on ar.id = inbound_oi.arrival_notice_id
50
- where rg.domain_id = $1
51
- and ws.ended_at >= $2::timestamp + $4::interval
52
- and ws.ended_at <= $3::timestamp + $4::interval
53
- ${bizplaceQuery}
54
- )
55
- select bizplace_name, arrival_notice_name, ended_at, batch_id,
56
- trim(trailing ', ' from self_collect) as self_collect, trim(trailing ', ' from delivery) as delivery,
57
- trim(trailing ', ' from self_collect_summary) as self_collect_summary, trim(trailing ', ' from delivery_summary) as delivery_summary,
58
- total_self_collect, total_delivery
59
- from(
60
- select bizplace_name, arrival_notice_name, ended_at, batch_id,
61
- string_agg(self_collect, '') as self_collect,
62
- string_agg(delivery, '') delivery,
63
- string_agg(self_collect_summary, '') as self_collect_summary,
64
- string_agg(delivery_summary, '') delivery_summary,
65
- COUNT(case when own_collection = true then 1 end) as total_self_collect,
66
- COUNT(case when own_collection = false then 1 end) as total_delivery
67
- from (
68
- select arrival_notice_name, delivery_order_name, bizplace_name, ended_at::varchar, own_collection, batch_id,
69
- case when own_collection = 'true' then concat(delivery_order_name, ' (', string_agg(pallet_id, ', ' ORDER BY pallet_id), '), ') else '' end as self_collect,
70
- case when own_collection = 'false' then concat(delivery_order_name, ' (', string_agg(pallet_id, ', ' ORDER BY pallet_id), '), ') else '' end as delivery,
71
- case when own_collection = 'true' then concat(delivery_order_name, ' (', count(*), '), ') else '' end as self_collect_summary,
72
- case when own_collection = 'false' then concat(delivery_order_name, ' (', count(*), '), ') else '' end as delivery_summary
73
- from src
74
- where 1 = 1
75
- ${arrivalNoticeQuery}
76
- group by bizplace_name, arrival_notice_name, ended_at, delivery_order_name, own_collection, batch_id
77
- ) src
78
- group by bizplace_name, arrival_notice_name, ended_at, batch_id
79
- order by bizplace_name, ended_at, arrival_notice_name
80
- ) src
81
- `,
82
- [context.state.domain.id, fromDate.value, toDate.value, tzoffset]
83
- )
84
-
85
- let items = result as any
86
-
87
- return items
88
- } catch (error) {
89
- throw error
90
- }
91
- }
92
- }
@@ -1,147 +0,0 @@
1
- import { Bizplace } from '@things-factory/biz-base'
2
- import { ListParam } from '@things-factory/shell'
3
-
4
- export const elcclDailyOrderInventoryReport = {
5
- async elcclDailyOrderInventoryReport(_: any, params: ListParam, context: ResolverContext) {
6
- try {
7
- const { tx } = context.state
8
-
9
- let bizplaceFilter = params.filters.find(data => data.name === 'bizplace')
10
-
11
- let month = params.filters.find(data => data.name === 'month').value + '-01'
12
- let tzoffset = params.filters.find(data => data.name === 'tzoffset').value + ' seconds'
13
-
14
- if (!bizplaceFilter || !month) throw 'Invalid input'
15
-
16
- const bizplace: Bizplace = await tx.getRepository(Bizplace).findOneBy({
17
- id: bizplaceFilter.value
18
- })
19
-
20
- await tx.query(
21
- `
22
- create temp table temp_invHistory as (
23
- select rih.pallet_id, rih.seq,
24
- coalesce(grn.name, do2.name, rih.order_no) as order_no , rih.order_ref_no , an.delivery_order_no as do_ref_no,
25
- rih.bizplace_id, rih.ref_order_id,
26
- coalesce(grn.created_at, rg.created_at, rih.created_at) as created_at,
27
- CASE WHEN rih.transaction_type = 'PICKING' THEN COALESCE(-oi.release_qty,rih.qty) ELSE rih.qty END AS qty,
28
- inv.packing_type, inv.reusable_pallet_id, rih.transaction_type,
29
- case when rih.status = 'TERMINATED' then rih.status else 'STORED' end as status,
30
- (case when lag(case when rih.status = 'TERMINATED' then 0 else 1 end) over (partition by rih.pallet_id order by rih.seq) = (case when rih.status = 'TERMINATED' then 0 else 1 end)
31
- then 0 else 1 end) as startflag
32
- from reduced_inventory_histories rih
33
- inner join inventories inv on inv.domain_id =rih.domain_id and inv.pallet_id =rih.pallet_id
34
- left join arrival_notices an on an.id = rih.ref_order_id::uuid and an.domain_id =rih.domain_id
35
- left join goods_receival_notes grn on grn.arrival_notice_id = an.id
36
- left join release_goods rg on rg.id = rih.ref_order_id::uuid and rg.domain_id =rih.domain_id
37
- left join order_inventories oi on oi.release_good_id = rih.ref_order_id::uuid and oi.inventory_id = inv.id
38
- left join delivery_orders do2 on do2.id = oi.delivery_order_id
39
- where ((rih.transaction_type <> 'PUTAWAY' and rih.transaction_type <> 'ADJUSTMENT' and rih.transaction_type <> 'RELOCATE') or rih.qty <> 0)
40
- and rih.domain_id =$1 and rih.bizplace_id = $2
41
- and coalesce(grn.created_at, rg.created_at, rih.created_at) < $3::timestamp + '1 month' + $4::interval
42
- )
43
- `,
44
- [context.state.domain.id, bizplace.id, month, tzoffset]
45
- )
46
-
47
- await tx.query(`
48
- create temp table temp_invByPallet as (
49
- select grp.*, ivh.order_no, ivh.order_ref_no, ivh.do_ref_no from (
50
- select pallet_id, packing_type, min(created_at) as started_at, max(created_at) as ended_at, min(seq) as min_seq, max(seq) as max_seq, status from (
51
- select startData.*, sum(startflag) over (partition by pallet_id order by seq) as grp from (
52
- select * from temp_invHistory s
53
- ) startData
54
- ) endData
55
- group by pallet_id, grp, status, packing_type
56
- order by pallet_id, min_seq
57
- ) grp
58
- inner join temp_invHistory ivh on ivh.pallet_id = grp.pallet_id and ivh.seq = grp.min_seq
59
- )
60
- `)
61
-
62
- const result: any = await tx.query(`
63
- select monthDays.created_at, order_no, order_ref_no, do_ref_no,
64
- coalesce(carton,0) as carton,
65
- coalesce(bag,0) as bag,
66
- coalesce(basket,0) as basket,
67
- coalesce(pallet,0) as pallet,
68
- sum(carton_running_total + carton) over (order by monthDays.created_at, src.rn) as carton_running_total,
69
- sum(bag_running_total + bag) over (order by monthDays.created_at, src.rn) as bag_running_total,
70
- sum(basket_running_total + basket) over (order by monthDays.created_at, src.rn) as basket_running_total,
71
- sum(pallet_running_total + pallet) over (order by monthDays.created_at, src.rn) as pallet_running_total
72
- from (select generate_series((date '${month}')::timestamp, date_trunc('month',(date '${month}')::timestamp) + '1 month' - '1 day'::interval, interval '1 day')::date as created_at) monthDays
73
- left join (
74
- select 0 as rn, loose.*, pallet.pallet, pallet.pallet_running_total from (
75
- select (date '${month}')::timestamp as created_at, 'NA' as order_no, 'NA' as order_ref_no, 'NA' as do_ref_no,
76
- 0 as carton, 0 as bag, 0 as basket,
77
- coalesce(sum(case when packing_type = 'CARTON' then qty else 0 end),0) as carton_running_total,
78
- coalesce(sum(case when packing_type = 'BAG' then qty else 0 end),0) as bag_running_total,
79
- coalesce(sum(case when packing_type = 'BASKET' then qty else 0 end),0) as basket_running_total
80
- from temp_invHistory
81
- where created_at < (date '${month}')::timestamp and qty <> 0
82
- ) loose
83
- left join (
84
- select (date '${month}')::timestamp as created_at,
85
- 0 as pallet,
86
- coalesce(sum(case when status = 'STORED' then 1 else -1 end),0) as pallet_running_total
87
- from temp_invByPallet ivp
88
- where started_at < (date '${month}')::timestamp
89
- ) pallet on pallet.created_at = loose.created_at
90
- union
91
- select row_number() over (order by loose.created_at) as rn,
92
- loose.*, pallet.pallet, pallet.pallet_running_total from (
93
- select MIN(created_at) as created_at, order_no, order_ref_no, do_ref_no,
94
- sum(case when packing_type = 'CARTON' then qty else 0 end) as carton,
95
- sum(case when packing_type = 'BAG' then qty else 0 end) as bag,
96
- sum(case when packing_type = 'BASKET' then qty else 0 end) as basket,
97
- 0 as carton_running_total, 0 as bag_running_total, 0 as basket_running_total
98
- from
99
- (
100
- SELECT pallet_id, packing_type, created_at, order_no, order_ref_no, do_ref_no, min(qty) AS qty FROM temp_invHistory
101
- where created_at >= (date '${month}')::timestamp and qty <> 0
102
- group by pallet_id, packing_type, created_at, order_no, order_ref_no, do_ref_no
103
- order by pallet_id, created_at, order_no, order_ref_no, do_ref_no
104
- ) foo
105
- group by created_at, order_no, order_ref_no, do_ref_no
106
- ) loose
107
- left join (
108
- select MIN(started_at) as created_at, order_no, order_ref_no, do_ref_no,
109
- sum(case when status = 'STORED' then 1 else -1 end) as pallet,
110
- 0 as pallet_running_total
111
- from temp_invByPallet ivp
112
- where started_at >= (date '${month}')::timestamp
113
- group by started_at::date, order_no, order_ref_no, do_ref_no
114
- ) pallet on pallet.created_at::date = loose.created_at::date and pallet.order_no = loose.order_no
115
- order by rn
116
- ) as src on src.created_at::date = monthDays.created_at::date
117
- order by monthDays.created_at, src.rn
118
- `)
119
-
120
- tx.query(`
121
- drop table temp_invHistory, temp_invByPallet
122
- `)
123
-
124
- let items = result.map(itm => {
125
- return {
126
- bag: itm.bag,
127
- bizplace: bizplace,
128
- bagRunningTotal: itm.bag_running_total,
129
- basket: itm.basket,
130
- basketRunningTotal: itm.basket_running_total,
131
- carton: itm.carton,
132
- cartonRunningTotal: itm.carton_running_total,
133
- createdAt: itm.created_at,
134
- doRefNo: itm.do_ref_no,
135
- orderNo: itm.order_no,
136
- orderRefNo: itm.order_ref_no,
137
- pallet: itm.pallet,
138
- palletRunningTotal: itm.pallet_running_total
139
- }
140
- })
141
-
142
- return { items, total: items.length }
143
- } catch (error) {
144
- throw error
145
- }
146
- }
147
- }
@@ -1,135 +0,0 @@
1
- import { Bizplace } from '@things-factory/biz-base'
2
- import { getRepository, ListParam } from '@things-factory/shell'
3
-
4
- export const elcclInventoryHistoryPalletDetailReport = {
5
- async elcclInventoryHistoryPalletDetailReport(_: any, params: ListParam, context: ResolverContext) {
6
- try {
7
- const { tx } = context.state
8
-
9
- let bizplaceFilter = params.filters.find(data => data.name === 'bizplace')
10
-
11
- let fromDate = params.filters.find(data => data.name === 'fromDate')
12
- let toDate = params.filters.find(data => data.name === 'toDate')
13
-
14
- if (!bizplaceFilter || !fromDate || !toDate) throw 'Invalid input'
15
-
16
- let bizplaceQuery = ''
17
- if (bizplaceFilter) {
18
- const bizplace: Bizplace = await getRepository(Bizplace).findOneBy({
19
- id: bizplaceFilter.value
20
- })
21
-
22
- if (bizplace) {
23
- bizplaceQuery = "AND i2.bizplace_id = '" + bizplace.id + "'"
24
- } else {
25
- throw 'Invalid input'
26
- }
27
- }
28
-
29
- await tx.query(
30
- `
31
- CREATE TEMP TABLE invHistory as (
32
- select COALESCE(js.name, ar.name, 'NEW') as job_sheet,
33
- COALESCE(js.container_size, '') as container_size,
34
- i2.batch_id,
35
- bzp.name as bizplace_name,
36
- coalesce(plt.name, i2.pallet_id) as pallet_id, ih.seq, ih.status, ih.transaction_type, i2.product_id,
37
- ih.id as inventory_history_id, ih.packing_type, ih.qty, ih.opening_qty,
38
- ih.uom_value, ih.opening_uom_value, ih.created_at
39
- from inventories i2
40
- inner join reduced_inventory_histories ih on ih.pallet_id = i2.pallet_id and ih.domain_id = $1
41
- inner join bizplaces bzp on bzp.id = ih.bizplace_id
42
- left join order_inventories oi on oi.inventory_id = i2.id and oi.arrival_notice_id is not null
43
- left join arrival_notices ar on ar.id = oi.arrival_notice_id
44
- left join job_sheets js on js.arrival_notice_ref_no = ar.name
45
- left join pallets plt on plt.id = i2.reusable_pallet_id
46
- where i2.domain_id = $1
47
- ${bizplaceQuery}
48
- and i2.ref_inventory_id is null
49
- )`,
50
- [context.state.domain.id]
51
- )
52
-
53
- await tx.query(`
54
- CREATE TEMP TABLE inventoryHistoryMovement AS (
55
- select bizplace_name, container_size, pallet_id, seq, status, transaction_type, batch_id,
56
- inventory_history_id, packing_type, qty, opening_qty, uom_value, opening_uom_value, created_at, job_sheet from (
57
- select row_number() over(partition by job_sheet, pallet_id order by created_at asc) as rn, * from invHistory where
58
- status = 'STORED' and (transaction_type = 'NEW' or transaction_type = 'CANCEL_ORDER' or transaction_type = 'RETURN' or transaction_type = 'PUTAWAY')
59
- )as invIn where rn = 1
60
- union all
61
- select bizplace_name, container_size, pallet_id, seq, status, transaction_type, batch_id,
62
- inventory_history_id, packing_type, qty, opening_qty, uom_value, opening_uom_value, created_at, job_sheet from (
63
- select row_number() over(partition by job_sheet, pallet_id order by created_at desc) as rn, * from invHistory ih1
64
- where (ih1.status = 'TERMINATED')
65
- ) as invOut where rn = 1 and invOut.transaction_type <> 'RETURN'
66
- );
67
- `)
68
-
69
- const result: any = await tx.query(
70
- `
71
- with inventoryHistoriesByPallet as (
72
- select invHistory.bizplace_name, invHistory.container_size, invHistory.job_sheet, invHistory.batch_id,
73
- SUM(case when invHistory.created_at < $1 then
74
- case when invHistory.status = 'STORED' then 1 else -1 end
75
- else 0 end) as opening_balance,
76
- SUM(case when invHistory.created_at >= $1
77
- and invHistory.created_at <= $2 then
78
- case when invHistory.status = 'STORED' then 1 else 0 end
79
- else 0 end) as in_balance,
80
- SUM(case when invHistory.created_at >= $1
81
- and invHistory.created_at <= $2 then
82
- case when invHistory.status = 'TERMINATED' then 1 else 0 end
83
- else 0 end) as out_balance
84
- from(
85
- select * from inventoryHistoryMovement
86
- ) as invHistory group by bizplace_name, container_size, job_sheet, batch_id
87
- )
88
- select invh.*, invh.opening_balance + invh.in_balance - invh.out_balance as closing_balance
89
- , (
90
- select json_agg(json_build_object('created_at', created_at, 'in_balance', in_balance, 'out_balance', out_balance)) as jsonData from
91
- (
92
- select bizplace_name, batch_id, job_sheet, created_at::date,
93
- SUM(case when status = 'STORED' then 1 else 0 end) as in_balance,
94
- SUM(case when status = 'TERMINATED' then 1 else 0 end) as out_balance
95
- from inventoryHistoryMovement
96
- where created_at >= $1 and
97
- created_at <= $2 and
98
- bizplace_name = invh.bizplace_name and
99
- batch_id = invh.batch_id and job_sheet = invh.job_sheet
100
- group by bizplace_name, batch_id, job_sheet, created_at::date
101
- order by created_at
102
- )
103
- as t
104
- )::varchar as json_date_movement
105
- from inventoryHistoriesByPallet invh
106
- where (invh.opening_balance > 0
107
- or invh.in_balance > 0
108
- or invh.out_balance > 0)
109
- order by invh.bizplace_name, invh.batch_id;
110
- `,
111
- [fromDate.value, toDate.value]
112
- )
113
-
114
- await tx.query(`drop table inventoryHistoryMovement, invHistory`)
115
-
116
- let items = result.map(item => {
117
- return {
118
- bizplace: { name: item.bizplace_name },
119
- jobSheet: item.job_sheet,
120
- batchId: item.batch_id,
121
- openingBalance: item.opening_balance,
122
- inBalance: item.in_balance,
123
- outBalance: item.out_balance,
124
- closingBalance: item.closing_balance,
125
- jsonDateMovement: item.json_date_movement,
126
- containerSize: item.container_size
127
- }
128
- })
129
-
130
- return items
131
- } catch (error) {
132
- throw error
133
- }
134
- }
135
- }