@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.
Files changed (206) hide show
  1. package/client/pages/bulk-operation/bulk-operation.js +96 -8
  2. package/client/pages/bulk-operation/validate-gan-popup.js +37 -27
  3. package/client/pages/bulk-operation/validate-ro-popup.js +40 -0
  4. package/client/pages/components/select-inventory-popup.js +633 -0
  5. package/client/pages/constants/order.js +2 -1
  6. package/client/pages/inbound/pallet-label-popup.js +2 -0
  7. package/client/pages/inbound/select-product-batch.js +7 -1
  8. package/client/pages/inbound/undo-unload-popup.js +37 -21
  9. package/client/pages/inbound/unload-product.js +147 -59
  10. package/client/pages/inbound/worksheet-putaway.js +1 -1
  11. package/client/pages/inbound/worksheet-unloading.js +11 -7
  12. package/client/pages/inventory/inventory-adjustment.js +261 -238
  13. package/client/pages/inventory/inventory-by-product-detail.js +99 -92
  14. package/client/pages/inventory/inventory-by-product.js +170 -68
  15. package/client/pages/inventory/onhand-inventory.js +10 -12
  16. package/client/pages/inventory/serial-number-list-popup.js +36 -5
  17. package/client/pages/inventory-check/inspecting-product.js +1 -1
  18. package/client/pages/manifest/create-loading-manifest.js +47 -22
  19. package/client/pages/manifest/dispatcher-verification-popup.js +24 -13
  20. package/client/pages/manifest/loading-manifest-detail.js +311 -46
  21. package/client/pages/manifest/loading-manifest-list.js +86 -13
  22. package/client/pages/order/arrival-notice/arrival-notice-detail.js +305 -52
  23. package/client/pages/order/arrival-notice/arrival-notice-list.js +20 -1
  24. package/client/pages/order/arrival-notice/create-arrival-notice.js +2 -2
  25. package/client/pages/order/goods-received-note/received-note-detail.js +187 -15
  26. package/client/pages/order/release-order/b2b/b2b-order-list.js +76 -80
  27. package/client/pages/order/release-order/b2c/b2c-order-requests.js +148 -123
  28. package/client/pages/order/release-order/batch-picking-popup.js +11 -0
  29. package/client/pages/order/release-order/create-release-order.js +762 -250
  30. package/client/pages/order/release-order/release-extra-product-popup.js +10 -3
  31. package/client/pages/order/release-order/release-order-detail.js +897 -215
  32. package/client/pages/order/transport-order/delivery-note-popup.js +1050 -107
  33. package/client/pages/order/transport-order/print-delivery-note.js +214 -33
  34. package/client/pages/order/transport-order/upload-delivery-note.js +6 -4
  35. package/client/pages/order/transport-order/view-delivery-note.js +0 -1
  36. package/client/pages/outbound/generate-worksheet-popup.js +374 -0
  37. package/client/pages/outbound/inventory-reassign-popup.js +1097 -0
  38. package/client/pages/outbound/loading-product.js +88 -78
  39. package/client/pages/outbound/merged-outbound-worksheet.js +1 -1
  40. package/client/pages/outbound/packing-product.js +193 -82
  41. package/client/pages/outbound/packing-worksheet-list.js +10 -9
  42. package/client/pages/outbound/picking-product.js +979 -905
  43. package/client/pages/outbound/route-label-popup.js +283 -191
  44. package/client/pages/outbound/serial-number-popup.js +1 -0
  45. package/client/pages/outbound/sorting-product.js +12 -12
  46. package/client/pages/outbound/worksheet-batch-picking.js +39 -5
  47. package/client/pages/outbound/worksheet-packing.js +17 -4
  48. package/client/pages/outbound/worksheet-picking.js +45 -6
  49. package/client/pages/report/inbound-serial-number-report.js +86 -9
  50. package/client/pages/report/inventory-report.js +10 -0
  51. package/client/pages/report/inventory-summary-report.js +28 -19
  52. package/client/pages/report/outbound-order-details-report.js +204 -43
  53. package/client/pages/report/outbound-serial-number-report.js +87 -9
  54. package/client/pages/report/release-inventory-report.js +503 -0
  55. package/client/route.js +5 -0
  56. package/client/util/index.js +2 -0
  57. package/client/util/page-settings.js +43 -0
  58. package/client/util/toast.js +10 -0
  59. package/dist-server/graphql/resolvers/board-setting/board-settings.js +3 -3
  60. package/dist-server/graphql/resolvers/board-setting/board-settings.js.map +1 -1
  61. package/dist-server/graphql/resolvers/custom/elccl/elccl-daily-collection-report.js +2 -2
  62. package/dist-server/graphql/resolvers/custom/elccl/elccl-daily-collection-report.js.map +1 -1
  63. package/dist-server/graphql/resolvers/custom/elccl/elccl-daily-order-inventory-report.js +1 -1
  64. package/dist-server/graphql/resolvers/custom/elccl/elccl-daily-order-inventory-report.js.map +1 -1
  65. package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-pallet-detail-report.js +2 -2
  66. package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-pallet-detail-report.js.map +1 -1
  67. package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-report.js +9 -10
  68. package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-report.js.map +1 -1
  69. package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-summary-report.js +2 -2
  70. package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-summary-report.js.map +1 -1
  71. package/dist-server/graphql/resolvers/custom/elccl/elccl-onhand-inventory-counter.js +6 -4
  72. package/dist-server/graphql/resolvers/custom/elccl/elccl-onhand-inventory-counter.js.map +1 -1
  73. package/dist-server/graphql/resolvers/custom/kimeda/kimeda-onhand-inventory-counter.js +6 -4
  74. package/dist-server/graphql/resolvers/custom/kimeda/kimeda-onhand-inventory-counter.js.map +1 -1
  75. package/dist-server/graphql/resolvers/dashboard/arrival-notices-by-status.js +21 -10
  76. package/dist-server/graphql/resolvers/dashboard/arrival-notices-by-status.js.map +1 -1
  77. package/dist-server/graphql/resolvers/dashboard/collection-orders-by-status.js +1 -2
  78. package/dist-server/graphql/resolvers/dashboard/collection-orders-by-status.js.map +1 -1
  79. package/dist-server/graphql/resolvers/dashboard/delivery-orders-by-status.js +1 -2
  80. package/dist-server/graphql/resolvers/dashboard/delivery-orders-by-status.js.map +1 -1
  81. package/dist-server/graphql/resolvers/dashboard/index.js +2 -1
  82. package/dist-server/graphql/resolvers/dashboard/index.js.map +1 -1
  83. package/dist-server/graphql/resolvers/dashboard/inventory-expiry-monitor.js +17 -1
  84. package/dist-server/graphql/resolvers/dashboard/inventory-expiry-monitor.js.map +1 -1
  85. package/dist-server/graphql/resolvers/dashboard/outbound-order-by-status.js +113 -75
  86. package/dist-server/graphql/resolvers/dashboard/outbound-order-by-status.js.map +1 -1
  87. package/dist-server/graphql/resolvers/dashboard/release-goods-by-status.js +21 -10
  88. package/dist-server/graphql/resolvers/dashboard/release-goods-by-status.js.map +1 -1
  89. package/dist-server/graphql/resolvers/dashboard/unit-inbounded-outbounded.js +56 -0
  90. package/dist-server/graphql/resolvers/dashboard/unit-inbounded-outbounded.js.map +1 -0
  91. package/dist-server/graphql/resolvers/index.js +5 -4
  92. package/dist-server/graphql/resolvers/index.js.map +1 -1
  93. package/dist-server/graphql/resolvers/inventory-comparison/inventory-comparison-list.js.map +1 -1
  94. package/dist-server/graphql/resolvers/opa-menu/opa-menus.js +8 -7
  95. package/dist-server/graphql/resolvers/opa-menu/opa-menus.js.map +1 -1
  96. package/dist-server/graphql/resolvers/{extra → other}/add-release-good-products.js +59 -8
  97. package/dist-server/graphql/resolvers/other/add-release-good-products.js.map +1 -0
  98. package/dist-server/graphql/resolvers/{extra → other}/index.js +3 -1
  99. package/dist-server/graphql/resolvers/other/index.js.map +1 -0
  100. package/dist-server/graphql/resolvers/other/page-settings.js +87 -0
  101. package/dist-server/graphql/resolvers/other/page-settings.js.map +1 -0
  102. package/dist-server/graphql/resolvers/reports/costing-report.js +4 -4
  103. package/dist-server/graphql/resolvers/reports/costing-report.js.map +1 -1
  104. package/dist-server/graphql/resolvers/reports/inbound-order-details-report.js +3 -3
  105. package/dist-server/graphql/resolvers/reports/inbound-order-details-report.js.map +1 -1
  106. package/dist-server/graphql/resolvers/reports/inbound-serial-number-report.js +36 -7
  107. package/dist-server/graphql/resolvers/reports/inbound-serial-number-report.js.map +1 -1
  108. package/dist-server/graphql/resolvers/reports/index.js +2 -1
  109. package/dist-server/graphql/resolvers/reports/index.js.map +1 -1
  110. package/dist-server/graphql/resolvers/reports/outbound-order-details-report.js +69 -30
  111. package/dist-server/graphql/resolvers/reports/outbound-order-details-report.js.map +1 -1
  112. package/dist-server/graphql/resolvers/reports/outbound-serial-number-report.js +36 -11
  113. package/dist-server/graphql/resolvers/reports/outbound-serial-number-report.js.map +1 -1
  114. package/dist-server/graphql/resolvers/reports/product-label-report.js +3 -3
  115. package/dist-server/graphql/resolvers/reports/product-label-report.js.map +1 -1
  116. package/dist-server/graphql/resolvers/reports/release-inventory-report.js +180 -0
  117. package/dist-server/graphql/resolvers/reports/release-inventory-report.js.map +1 -0
  118. package/dist-server/graphql/resolvers/shipping-provider/shipping-providers.js +2 -2
  119. package/dist-server/graphql/resolvers/shipping-provider/shipping-providers.js.map +1 -1
  120. package/dist-server/graphql/resolvers/warehouse-inventory-adjustment/warehouse-intentory-adjustment.js +1 -1
  121. package/dist-server/graphql/resolvers/warehouse-inventory-adjustment/warehouse-intentory-adjustment.js.map +1 -1
  122. package/dist-server/graphql/types/dashboard/index.js +1 -0
  123. package/dist-server/graphql/types/dashboard/index.js.map +1 -1
  124. package/dist-server/graphql/types/index.js +7 -2
  125. package/dist-server/graphql/types/index.js.map +1 -1
  126. package/dist-server/graphql/types/other/index.js +19 -0
  127. package/dist-server/graphql/types/other/index.js.map +1 -0
  128. package/dist-server/graphql/types/other/page-setting.js +34 -0
  129. package/dist-server/graphql/types/other/page-setting.js.map +1 -0
  130. package/dist-server/graphql/types/reports/index.js +6 -1
  131. package/dist-server/graphql/types/reports/index.js.map +1 -1
  132. package/dist-server/graphql/types/reports/outbound-order-details-report.js +17 -1
  133. package/dist-server/graphql/types/reports/outbound-order-details-report.js.map +1 -1
  134. package/dist-server/graphql/types/reports/release-inventory-report-list.js +12 -0
  135. package/dist-server/graphql/types/reports/release-inventory-report-list.js.map +1 -0
  136. package/dist-server/graphql/types/reports/release-inventory-report.js +27 -0
  137. package/dist-server/graphql/types/reports/release-inventory-report.js.map +1 -0
  138. package/dist-server/migrations/1568858861188-SeedSetting.js +5 -6
  139. package/dist-server/migrations/1568858861188-SeedSetting.js.map +1 -1
  140. package/dist-server/migrations/1623308919899-SeedLocationRecommendSetting.js +1 -1
  141. package/dist-server/migrations/1623308919899-SeedLocationRecommendSetting.js.map +1 -1
  142. package/dist-server/migrations/1623381200659-SeedStoringRule.js +1 -1
  143. package/dist-server/migrations/1623381200659-SeedStoringRule.js.map +1 -1
  144. package/dist-server/tsconfig.tsbuildinfo +1 -1
  145. package/dist-server/utils/report-query-util.js +5 -2
  146. package/dist-server/utils/report-query-util.js.map +1 -1
  147. package/helps/release-note.ko.md +8 -20
  148. package/helps/release-note.md +8 -20
  149. package/helps/release-note.ms.md +8 -20
  150. package/helps/release-note.zh.md +8 -20
  151. package/package.json +42 -42
  152. package/server/graphql/resolvers/board-setting/board-settings.ts +4 -6
  153. package/server/graphql/resolvers/custom/elccl/elccl-daily-collection-report.ts +4 -5
  154. package/server/graphql/resolvers/custom/elccl/elccl-daily-order-inventory-report.ts +9 -10
  155. package/server/graphql/resolvers/custom/elccl/elccl-inventory-history-pallet-detail-report.ts +4 -5
  156. package/server/graphql/resolvers/custom/elccl/elccl-inventory-history-report.ts +17 -19
  157. package/server/graphql/resolvers/custom/elccl/elccl-inventory-history-summary-report.ts +10 -8
  158. package/server/graphql/resolvers/custom/elccl/elccl-onhand-inventory-counter.ts +9 -9
  159. package/server/graphql/resolvers/custom/kimeda/kimeda-onhand-inventory-counter.ts +9 -9
  160. package/server/graphql/resolvers/dashboard/arrival-notices-by-status.ts +23 -14
  161. package/server/graphql/resolvers/dashboard/collection-orders-by-status.ts +4 -5
  162. package/server/graphql/resolvers/dashboard/delivery-orders-by-status.ts +4 -5
  163. package/server/graphql/resolvers/dashboard/index.ts +3 -1
  164. package/server/graphql/resolvers/dashboard/inventory-expiry-monitor.ts +18 -6
  165. package/server/graphql/resolvers/dashboard/outbound-order-by-status.ts +114 -81
  166. package/server/graphql/resolvers/dashboard/release-goods-by-status.ts +23 -14
  167. package/server/graphql/resolvers/dashboard/unit-inbounded-outbounded.ts +61 -0
  168. package/server/graphql/resolvers/index.ts +5 -4
  169. package/server/graphql/resolvers/inventory-comparison/inventory-comparison-list.ts +11 -9
  170. package/server/graphql/resolvers/opa-menu/opa-menus.ts +7 -6
  171. package/server/graphql/resolvers/{extra → other}/add-release-good-products.ts +73 -12
  172. package/server/graphql/resolvers/other/index.ts +10 -0
  173. package/server/graphql/resolvers/other/page-settings.ts +105 -0
  174. package/server/graphql/resolvers/reports/costing-report.ts +8 -10
  175. package/server/graphql/resolvers/reports/inbound-order-details-report.ts +7 -9
  176. package/server/graphql/resolvers/reports/inbound-serial-number-report.ts +41 -13
  177. package/server/graphql/resolvers/reports/index.ts +3 -1
  178. package/server/graphql/resolvers/reports/outbound-order-details-report.ts +76 -38
  179. package/server/graphql/resolvers/reports/outbound-serial-number-report.ts +42 -18
  180. package/server/graphql/resolvers/reports/product-label-report.ts +4 -6
  181. package/server/graphql/resolvers/reports/release-inventory-report.ts +201 -0
  182. package/server/graphql/resolvers/shipping-provider/shipping-providers.ts +3 -5
  183. package/server/graphql/resolvers/warehouse-inventory-adjustment/warehouse-intentory-adjustment.ts +10 -10
  184. package/server/graphql/types/dashboard/index.ts +1 -0
  185. package/server/graphql/types/index.ts +8 -2
  186. package/server/graphql/types/other/index.ts +19 -0
  187. package/server/graphql/types/other/page-setting.ts +33 -0
  188. package/server/graphql/types/reports/index.ts +6 -1
  189. package/server/graphql/types/reports/outbound-order-details-report.ts +17 -1
  190. package/server/graphql/types/reports/release-inventory-report-list.ts +8 -0
  191. package/server/graphql/types/reports/release-inventory-report.ts +23 -0
  192. package/server/migrations/1568858861188-SeedSetting.ts +4 -4
  193. package/server/migrations/1623308919899-SeedLocationRecommendSetting.ts +3 -2
  194. package/server/migrations/1623381200659-SeedStoringRule.ts +3 -2
  195. package/server/utils/report-query-util.ts +5 -2
  196. package/things-factory.config.js +4 -0
  197. package/translations/en.json +148 -27
  198. package/translations/ko.json +185 -105
  199. package/translations/ms.json +183 -98
  200. package/translations/zh.json +197 -112
  201. package/dist-server/graphql/resolvers/extra/add-release-good-products.js.map +0 -1
  202. package/dist-server/graphql/resolvers/extra/index.js.map +0 -1
  203. package/dist-server/graphql/types/extra/index.js +0 -11
  204. package/dist-server/graphql/types/extra/index.js.map +0 -1
  205. package/server/graphql/resolvers/extra/index.ts +0 -5
  206. package/server/graphql/types/extra/index.ts +0 -7
@@ -1,86 +1,124 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.outboundOrderByStatusResolver = void 0;
4
+ const biz_base_1 = require("@things-factory/biz-base");
4
5
  exports.outboundOrderByStatusResolver = {
5
6
  async outboundOrderByStatus(_, params, context) {
6
- const { domain, tx } = context.state;
7
+ var _a;
8
+ const { domain, user, tx } = context.state;
9
+ const bizplaceId = ((_a = params.filters.find((filter) => filter.name === 'bizplace')) === null || _a === void 0 ? void 0 : _a.value) || 'ALL';
10
+ const v4 = new RegExp(/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i);
11
+ let bizplaceIds;
12
+ if (bizplaceId && (bizplaceId == 'ALL' || bizplaceId.match(v4))) {
13
+ let bizplaces = bizplaceId && bizplaceId != 'ALL' ? [bizplaceId] : await (0, biz_base_1.getPermittedBizplaceIds)(domain, user);
14
+ bizplaceIds = bizplaces
15
+ .map(bizplace => {
16
+ return "'" + (bizplace === null || bizplace === void 0 ? void 0 : bizplace.trim()) + "'";
17
+ })
18
+ .join(',');
19
+ }
20
+ else
21
+ throw new Error('invalid bizplaceId');
7
22
  const orderStatus = await tx.query(`
8
- WITH cte_list ("status", "count") as (
9
- select 'DONE' as status, 0 as "count"
10
- union
11
- select 'CANCELLED' as status, 0 as "count"
12
- union
13
- select 'PICKING UNASSIGNED' as status, 0 as "count"
14
- union
15
- select 'PACKING' as status, 0 as "count"
16
- union
17
- select 'AWAITING DISPATCH' as status, 0 as "count"
18
- union
19
- select 'OUT FROM WAREHOUSE' as status, 0 as "count"
20
- union
21
- select 'PICKING ASSIGNED' as status, 0 as "count"
22
- union
23
- select 'OTHERS' as status, 0 as "count"
24
- ) select l."status", coalesce(src."count", l."count") as "count"
25
- from cte_list l
26
- left join (
27
- SELECT "status", COUNT(*) AS "count" FROM (
28
- SELECT
29
- CASE WHEN "status" = 'DONE' and rg.updated_at::date = CURRENT_DATE THEN 'DONE'
30
- WHEN "status" = 'CANCELLED' THEN 'CANCELLED'
31
- WHEN "status" IN('PENDING_RECEIVE', 'PENDING_WORKSHEET') THEN 'PICKING UNASSIGNED'
32
- END AS "status"
33
- FROM release_goods rg
34
- WHERE "domain_id" = $1
35
- AND rg."status" IN ('CANCELLED','PENDING', 'PENDING_RECEIVE', 'PENDING_WORKSHEET', 'READY_TO_PICK', 'PICKING', 'READY_TO_PACK', 'PACKING', 'DONE')
36
- ) AS foo
23
+ WITH cte_list ("status", "count") AS (
24
+ SELECT 'PICKING UNASSIGNED' AS status, 0 AS "count"
25
+ UNION
26
+ SELECT 'PICKING ASSIGNED' AS status, 0 AS "count"
27
+ UNION
28
+ SELECT 'BATCH PICKING ASSIGNED' AS status, 0 AS "count"
29
+ UNION
30
+ SELECT 'PACKING' AS status, 0 AS "count"
31
+ UNION
32
+ SELECT 'AWAITING DISPATCH' AS status, 0 AS "count"
33
+ UNION
34
+ SELECT 'OUT FROM WAREHOUSE' AS status, 0 AS "count"
35
+ UNION
36
+ SELECT 'PENDING MANIFEST CREATION' AS status, 0 AS "count"
37
+ UNION
38
+ SELECT 'DONE' AS status, 0 AS "count"
39
+ UNION
40
+ SELECT 'PENDING CANCEL' AS status, 0 AS "count"
41
+ UNION
42
+ SELECT 'CANCELLED' AS status, 0 AS "count"
43
+ UNION
44
+ SELECT 'OTHERS' AS status, 0 AS "count"
45
+ UNION
46
+ SELECT 'DRAFT' AS status, 0 AS "count"
47
+ ) SELECT l."status", coalesce(src."count", l."count") AS "count"
48
+ FROM cte_list l
49
+ LEFT JOIN (
50
+ SELECT "status", SUM("count") AS count FROM (
51
+ SELECT "status", COUNT(*) AS "count" FROM (
52
+ SELECT
53
+ CASE WHEN "status" = 'DONE' AND rg.updated_at::date = CURRENT_DATE THEN 'DONE'
54
+ WHEN "status" = 'PENDING_CANCEL' THEN 'PENDING CANCEL'
55
+ WHEN "status" = 'CANCELLED' AND rg.updated_at::date = CURRENT_DATE THEN 'CANCELLED'
56
+ WHEN "status" IN('PENDING_RECEIVE','PENDING_WORKSHEET') THEN 'PICKING UNASSIGNED'
57
+ END AS "status"
58
+ FROM release_goods rg
59
+ WHERE "domain_id" = $1
60
+ AND rg."bizplace_id" IN (${bizplaceIds})
61
+ AND rg."status" IN ('PENDING','PENDING_RECEIVE','PENDING_WORKSHEET','READY_TO_PICK','PICKING','READY_TO_PACK','PACKING','PENDING_CANCEL','CANCELLED','DONE')
62
+ ) AS foo
63
+ GROUP BY "status"
64
+ UNION ALL
65
+ SELECT "status", COUNT(*) AS "count" FROM (
66
+ SELECT
67
+ CASE WHEN "dispatchment_status" = 'DISPATCHED' AND rg.updated_at::date = CURRENT_DATE THEN 'OUT FROM WAREHOUSE'
68
+ END AS "status"
69
+ FROM release_goods rg
70
+ WHERE "domain_id" = $1
71
+ AND rg."bizplace_id" IN (${bizplaceIds})
72
+ AND rg."dispatchment_status" IN ('READY_TO_DISPATCH', 'DISPATCHED')
73
+ AND rg."tracking_no" NOTNULL
74
+ AND rg."type" = 'b2c'
75
+ ) AS foo
76
+ GROUP BY "status"
77
+ UNION ALL
78
+ SELECT 'AWAITING DISPATCH' AS "status", count(*) FROM manifests m
79
+ INNER JOIN release_goods rg ON rg.manifest_id = m.id
80
+ WHERE m."status" in ('OPEN', 'IN_QUEUE')
81
+ AND m."domain_id" = $1
82
+ AND rg."bizplace_id" IN (${bizplaceIds})
83
+ UNION ALL
84
+ SELECT 'PICKING ASSIGNED' AS "status", count(*) FROM worksheets w
85
+ WHERE w."domain_id" = $1
86
+ AND w."bizplace_id" IN (${bizplaceIds})
87
+ AND w."type" = 'PICKING'
88
+ AND w."status" IN ('DEACTIVATED','EXECUTING')
89
+ GROUP BY w."status"
90
+ UNION ALL
91
+ SELECT 'BATCH PICKING ASSIGNED' AS "status", count(*) FROM worksheets w
92
+ WHERE w."domain_id" = $1
93
+ AND w."bizplace_id" IN (${bizplaceIds})
94
+ AND w."type" = 'BATCH_PICKING'
95
+ AND w."status" IN ('DEACTIVATED','EXECUTING')
96
+ GROUP BY w."status"
97
+ UNION ALL
98
+ SELECT 'PACKING' AS "status", count(*) FROM worksheets w
99
+ WHERE w."domain_id" = $1 AND w."type" = 'PACKING'
100
+ AND w."bizplace_id" IN (${bizplaceIds})
101
+ AND w."status" IN ('DEACTIVATED','EXECUTING')
102
+ GROUP BY w."status"
103
+ UNION ALL
104
+ SELECT 'PENDING MANIFEST CREATION' AS "status", count(*) FROM release_goods rg
105
+ WHERE rg."domain_id" = $1
106
+ AND rg."bizplace_id" IN (${bizplaceIds})
107
+ AND rg."status" = 'DONE'
108
+ AND rg."manifest_id" ISNULL
109
+ AND rg."type" = 'b2c'
110
+ AND rg."updated_at" >= (CURRENT_DATE - 30)
111
+ UNION ALL
112
+ SELECT 'DRAFT' AS "status", count(*) FROM draft_release_goods drg
113
+ WHERE drg."domain_id" = $1
114
+ AND drg."bizplace_id" IN (${bizplaceIds})
115
+ AND drg."status" = 'DRAFT'
116
+ AND drg."type" = 'b2c'
117
+ ) AS src
37
118
  GROUP BY "status"
38
- UNION ALL
39
- SELECT "status", COUNT(*) AS "count" FROM (
40
- SELECT
41
- CASE WHEN "dispatchment_status" = 'DISPATCHED' THEN 'OUT FROM WAREHOUSE'
42
- END AS "status"
43
- FROM release_goods rg
44
- WHERE "domain_id" = $1
45
- AND rg."dispatchment_status" IN ('READY_TO_DISPATCH', 'DISPATCHED')
46
- AND rg."status" NOT IN ('CANCELLED', 'PENDING_CANCEL')
47
- AND rg."tracking_no" NOTNULL
48
- ) AS foo
49
- GROUP BY "status"
50
- union all
51
- select 'AWAITING DISPATCH' as "status", count(*) from manifests m
52
- inner join release_goods rg ON rg.manifest_id = m.id
53
- where m."status" = 'OPEN' and m."domain_id" = $1
54
- union all
55
- select 'PICKING ASSIGNED' as "status", count(*) from worksheets w
56
- where w."domain_id" = $1 and w."type" ='PICKING'
57
- and w."status" in ('DEACTIVATED','EXECUTING','PENDING_CANCEL')
58
- group by w."status"
59
- union all
60
- select 'PACKING' as "status", count(*) from worksheets w
61
- where w."domain_id" = $1 and w."type" ='PACKING'
62
- and w."status" in ('DEACTIVATED','EXECUTING','PENDING_CANCEL')
63
- group by w."status"
64
- ) src on src."status" = l."status"
119
+ ) src ON src."status" = l."status"
65
120
  `, [domain.id]);
66
- const statusList = [
67
- 'PICKING UNASSIGNED',
68
- 'PICKING ASSIGNED',
69
- 'PACKING',
70
- 'AWAITING DISPATCH',
71
- 'OUT FROM WAREHOUSE',
72
- 'CANCELLED',
73
- 'DONE',
74
- 'OUT OF STOCK'
75
- ];
76
- return statusList.reduce((statusCounts, status) => {
77
- let foundItem = orderStatus.find(order => order.status == status);
78
- if (foundItem)
79
- statusCounts.push({ status, count: foundItem.count });
80
- else
81
- statusCounts.push({ status, count: 0 });
82
- return statusCounts;
83
- }, []);
121
+ return orderStatus;
84
122
  }
85
123
  };
86
124
  //# sourceMappingURL=outbound-order-by-status.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"outbound-order-by-status.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/dashboard/outbound-order-by-status.ts"],"names":[],"mappings":";;;AAKa,QAAA,6BAA6B,GAAG;IAC3C,KAAK,CAAC,qBAAqB,CAAC,CAAM,EAAE,MAAiB,EAAE,OAAY;QACjE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,GAAsD,OAAO,CAAC,KAAK,CAAA;QAEvF,MAAM,WAAW,GAAwC,MAAM,EAAE,CAAC,KAAK,CACrE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA0DD,EACC,CAAC,MAAM,CAAC,EAAE,CAAC,CACZ,CAAA;QAED,MAAM,UAAU,GAAa;YAC3B,oBAAoB;YACpB,kBAAkB;YAClB,SAAS;YACT,mBAAmB;YACnB,oBAAoB;YACpB,WAAW;YACX,MAAM;YACN,cAAc;SACf,CAAA;QAED,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,YAAiD,EAAE,MAAc,EAAE,EAAE;YAC7F,IAAI,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,CAAA;YAEjE,IAAI,SAAS;gBAAE,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,CAAA;;gBAC/D,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;YAE5C,OAAO,YAAY,CAAA;QACrB,CAAC,EAAE,EAAE,CAAC,CAAA;IACR,CAAC;CACF,CAAA","sourcesContent":["import { EntityManager } from 'typeorm'\n\nimport { User } from '@things-factory/auth-base'\nimport { Domain, ListParam } from '@things-factory/shell'\n\nexport const outboundOrderByStatusResolver = {\n async outboundOrderByStatus(_: any, params: ListParam, context: any) {\n const { domain, tx }: { domain: Domain; user: User; tx: EntityManager } = context.state\n\n const orderStatus: { status: string; count: number }[] = await tx.query(\n `\n WITH cte_list (\"status\", \"count\") as (\n select 'DONE' as status, 0 as \"count\"\n union\n select 'CANCELLED' as status, 0 as \"count\"\n union\n select 'PICKING UNASSIGNED' as status, 0 as \"count\"\n union\n select 'PACKING' as status, 0 as \"count\"\n union\n select 'AWAITING DISPATCH' as status, 0 as \"count\"\n union\n select 'OUT FROM WAREHOUSE' as status, 0 as \"count\"\n union\n select 'PICKING ASSIGNED' as status, 0 as \"count\"\n union\n select 'OTHERS' as status, 0 as \"count\"\n ) select l.\"status\", coalesce(src.\"count\", l.\"count\") as \"count\" \n from cte_list l\n left join (\n SELECT \"status\", COUNT(*) AS \"count\" FROM (\n SELECT \n CASE WHEN \"status\" = 'DONE' and rg.updated_at::date = CURRENT_DATE THEN 'DONE' \n WHEN \"status\" = 'CANCELLED' THEN 'CANCELLED' \n WHEN \"status\" IN('PENDING_RECEIVE', 'PENDING_WORKSHEET') THEN 'PICKING UNASSIGNED'\n END AS \"status\" \n FROM release_goods rg\n WHERE \"domain_id\" = $1\n AND rg.\"status\" IN ('CANCELLED','PENDING', 'PENDING_RECEIVE', 'PENDING_WORKSHEET', 'READY_TO_PICK', 'PICKING', 'READY_TO_PACK', 'PACKING', 'DONE')\n ) AS foo \n GROUP BY \"status\"\n UNION ALL \n SELECT \"status\", COUNT(*) AS \"count\" FROM (\n SELECT \n CASE WHEN \"dispatchment_status\" = 'DISPATCHED' THEN 'OUT FROM WAREHOUSE' \n END AS \"status\" \n FROM release_goods rg\n WHERE \"domain_id\" = $1\n AND rg.\"dispatchment_status\" IN ('READY_TO_DISPATCH', 'DISPATCHED')\n AND rg.\"status\" NOT IN ('CANCELLED', 'PENDING_CANCEL')\n AND rg.\"tracking_no\" NOTNULL\n ) AS foo \n GROUP BY \"status\"\t\t\n union all \n select 'AWAITING DISPATCH' as \"status\", count(*) from manifests m \n inner join release_goods rg ON rg.manifest_id = m.id\n where m.\"status\" = 'OPEN' and m.\"domain_id\" = $1\n union all\n select 'PICKING ASSIGNED' as \"status\", count(*) from worksheets w \n where w.\"domain_id\" = $1 and w.\"type\" ='PICKING' \n and w.\"status\" in ('DEACTIVATED','EXECUTING','PENDING_CANCEL')\n group by w.\"status\"\n union all\n select 'PACKING' as \"status\", count(*) from worksheets w \n where w.\"domain_id\" = $1 and w.\"type\" ='PACKING' \n and w.\"status\" in ('DEACTIVATED','EXECUTING','PENDING_CANCEL')\n group by w.\"status\"\n ) src on src.\"status\" = l.\"status\"\n `,\n [domain.id]\n )\n\n const statusList: string[] = [\n 'PICKING UNASSIGNED',\n 'PICKING ASSIGNED',\n 'PACKING',\n 'AWAITING DISPATCH',\n 'OUT FROM WAREHOUSE',\n 'CANCELLED',\n 'DONE',\n 'OUT OF STOCK'\n ]\n\n return statusList.reduce((statusCounts: { status: string; count: number }[], status: string) => {\n let foundItem = orderStatus.find(order => order.status == status)\n\n if (foundItem) statusCounts.push({ status, count: foundItem.count })\n else statusCounts.push({ status, count: 0 })\n\n return statusCounts\n }, [])\n }\n}\n"]}
1
+ {"version":3,"file":"outbound-order-by-status.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/dashboard/outbound-order-by-status.ts"],"names":[],"mappings":";;;AAAA,uDAAkE;AAGrD,QAAA,6BAA6B,GAAG;IAC3C,KAAK,CAAC,qBAAqB,CAAC,CAAM,EAAE,MAAiB,EAAE,OAAwB;;QAC7E,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAC1C,MAAM,UAAU,GAAW,CAAA,MAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAW,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,0CAAE,KAAK,KAAI,KAAK,CAAA;QAC3G,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,wEAAwE,CAAC,CAAA;QAC/F,IAAI,WAAmB,CAAA;QAEvB,IAAI,UAAU,IAAI,CAAC,UAAU,IAAI,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE;YAC/D,IAAI,SAAS,GACX,UAAU,IAAI,UAAU,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,IAAA,kCAAuB,EAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YAChG,WAAW,GAAG,SAAS;iBACpB,GAAG,CAAC,QAAQ,CAAC,EAAE;gBACd,OAAO,GAAG,IAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,EAAE,CAAA,GAAG,GAAG,CAAA;YACrC,CAAC,CAAC;iBACD,IAAI,CAAC,GAAG,CAAC,CAAA;SACb;;YAAM,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;QAE5C,MAAM,WAAW,GAAwC,MAAM,EAAE,CAAC,KAAK,CACrE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uCAsCiC,WAAW;;;;;;;;;;;uCAWX,WAAW;;;;;;;;;;;qCAWb,WAAW;;;;oCAIZ,WAAW;;;;;;;oCAOX,WAAW;;;;;;;oCAOX,WAAW;;;;;;qCAMV,WAAW;;;;;;;;sCAQV,WAAW;;;;;;KAM5C,EACC,CAAC,MAAM,CAAC,EAAE,CAAC,CACZ,CAAA;QAED,OAAO,WAAW,CAAA;IACpB,CAAC;CACF,CAAA","sourcesContent":["import { getPermittedBizplaceIds } from '@things-factory/biz-base'\nimport { ListParam } from '@things-factory/shell'\n\nexport const outboundOrderByStatusResolver = {\n async outboundOrderByStatus(_: any, params: ListParam, context: ResolverContext) {\n const { domain, user, tx } = context.state\n const bizplaceId: string = params.filters.find((filter: any) => filter.name === 'bizplace')?.value || 'ALL'\n const v4 = new RegExp(/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i)\n let bizplaceIds: string\n\n if (bizplaceId && (bizplaceId == 'ALL' || bizplaceId.match(v4))) {\n let bizplaces: string[] =\n bizplaceId && bizplaceId != 'ALL' ? [bizplaceId] : await getPermittedBizplaceIds(domain, user)\n bizplaceIds = bizplaces\n .map(bizplace => {\n return \"'\" + bizplace?.trim() + \"'\"\n })\n .join(',')\n } else throw new Error('invalid bizplaceId')\n\n const orderStatus: { status: string; count: number }[] = await tx.query(\n `\n WITH cte_list (\"status\", \"count\") AS (\n SELECT 'PICKING UNASSIGNED' AS status, 0 AS \"count\"\n UNION\n SELECT 'PICKING ASSIGNED' AS status, 0 AS \"count\"\n UNION\n SELECT 'BATCH PICKING ASSIGNED' AS status, 0 AS \"count\"\n UNION\n SELECT 'PACKING' AS status, 0 AS \"count\"\n UNION\n SELECT 'AWAITING DISPATCH' AS status, 0 AS \"count\"\n UNION\n SELECT 'OUT FROM WAREHOUSE' AS status, 0 AS \"count\"\n UNION\n SELECT 'PENDING MANIFEST CREATION' AS status, 0 AS \"count\"\n UNION\n SELECT 'DONE' AS status, 0 AS \"count\"\n UNION\n SELECT 'PENDING CANCEL' AS status, 0 AS \"count\"\n UNION\n SELECT 'CANCELLED' AS status, 0 AS \"count\"\n UNION\n SELECT 'OTHERS' AS status, 0 AS \"count\"\n UNION\n SELECT 'DRAFT' AS status, 0 AS \"count\"\n ) SELECT l.\"status\", coalesce(src.\"count\", l.\"count\") AS \"count\" \n FROM cte_list l\n LEFT JOIN (\n SELECT \"status\", SUM(\"count\") AS count FROM (\n SELECT \"status\", COUNT(*) AS \"count\" FROM (\n SELECT \n CASE WHEN \"status\" = 'DONE' AND rg.updated_at::date = CURRENT_DATE THEN 'DONE' \n WHEN \"status\" = 'PENDING_CANCEL' THEN 'PENDING CANCEL' \n WHEN \"status\" = 'CANCELLED' AND rg.updated_at::date = CURRENT_DATE THEN 'CANCELLED'\n WHEN \"status\" IN('PENDING_RECEIVE','PENDING_WORKSHEET') THEN 'PICKING UNASSIGNED'\n END AS \"status\" \n FROM release_goods rg\n WHERE \"domain_id\" = $1\n AND rg.\"bizplace_id\" IN (${bizplaceIds})\n AND rg.\"status\" IN ('PENDING','PENDING_RECEIVE','PENDING_WORKSHEET','READY_TO_PICK','PICKING','READY_TO_PACK','PACKING','PENDING_CANCEL','CANCELLED','DONE')\n ) AS foo \n GROUP BY \"status\"\n UNION ALL \n SELECT \"status\", COUNT(*) AS \"count\" FROM (\n SELECT \n CASE WHEN \"dispatchment_status\" = 'DISPATCHED' AND rg.updated_at::date = CURRENT_DATE THEN 'OUT FROM WAREHOUSE' \n END AS \"status\" \n FROM release_goods rg\n WHERE \"domain_id\" = $1\n AND rg.\"bizplace_id\" IN (${bizplaceIds})\n AND rg.\"dispatchment_status\" IN ('READY_TO_DISPATCH', 'DISPATCHED')\n AND rg.\"tracking_no\" NOTNULL\n AND rg.\"type\" = 'b2c'\n ) AS foo \n GROUP BY \"status\"\t\t\n UNION ALL \n SELECT 'AWAITING DISPATCH' AS \"status\", count(*) FROM manifests m \n INNER JOIN release_goods rg ON rg.manifest_id = m.id\n WHERE m.\"status\" in ('OPEN', 'IN_QUEUE') \n AND m.\"domain_id\" = $1\n AND rg.\"bizplace_id\" IN (${bizplaceIds})\n UNION ALL\n SELECT 'PICKING ASSIGNED' AS \"status\", count(*) FROM worksheets w \n WHERE w.\"domain_id\" = $1 \n AND w.\"bizplace_id\" IN (${bizplaceIds})\n AND w.\"type\" = 'PICKING' \n AND w.\"status\" IN ('DEACTIVATED','EXECUTING')\n GROUP BY w.\"status\"\n UNION ALL\n SELECT 'BATCH PICKING ASSIGNED' AS \"status\", count(*) FROM worksheets w \n WHERE w.\"domain_id\" = $1 \n AND w.\"bizplace_id\" IN (${bizplaceIds})\n AND w.\"type\" = 'BATCH_PICKING' \n AND w.\"status\" IN ('DEACTIVATED','EXECUTING')\n GROUP BY w.\"status\"\n UNION ALL\n SELECT 'PACKING' AS \"status\", count(*) FROM worksheets w \n WHERE w.\"domain_id\" = $1 AND w.\"type\" = 'PACKING' \n AND w.\"bizplace_id\" IN (${bizplaceIds})\n AND w.\"status\" IN ('DEACTIVATED','EXECUTING')\n GROUP BY w.\"status\"\n UNION ALL \n SELECT 'PENDING MANIFEST CREATION' AS \"status\", count(*) FROM release_goods rg\n WHERE rg.\"domain_id\" = $1\n AND rg.\"bizplace_id\" IN (${bizplaceIds})\n AND rg.\"status\" = 'DONE'\n AND rg.\"manifest_id\" ISNULL\n AND rg.\"type\" = 'b2c'\n AND rg.\"updated_at\" >= (CURRENT_DATE - 30)\n UNION ALL\n SELECT 'DRAFT' AS \"status\", count(*) FROM draft_release_goods drg \n WHERE drg.\"domain_id\" = $1\n AND drg.\"bizplace_id\" IN (${bizplaceIds})\n AND drg.\"status\" = 'DRAFT'\n AND drg.\"type\" = 'b2c'\n ) AS src\n GROUP BY \"status\"\n ) src ON src.\"status\" = l.\"status\"\n `,\n [domain.id]\n )\n\n return orderStatus\n }\n}\n"]}
@@ -1,24 +1,35 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.releaseGoodsByStatusResolver = void 0;
4
- const typeorm_1 = require("typeorm");
5
4
  const biz_base_1 = require("@things-factory/biz-base");
6
5
  const sales_base_1 = require("@things-factory/sales-base");
7
6
  const shell_1 = require("@things-factory/shell");
8
7
  exports.releaseGoodsByStatusResolver = {
9
8
  async releaseGoodsByStatus(_, params, context) {
9
+ var _a;
10
10
  const { domain, user } = context.state;
11
- if (!params.filters.find((filter) => filter.name === 'bizplace')) {
12
- params.filters.push({
13
- name: 'bizplaceId',
14
- operator: 'in',
15
- value: await (0, biz_base_1.getPermittedBizplaceIds)(domain, user),
16
- relation: false
17
- });
11
+ const bizplaceId = ((_a = params.filters.find((filter) => filter.name === 'bizplace')) === null || _a === void 0 ? void 0 : _a.value) || 'ALL';
12
+ params.filters = params.filters.filter(filter => filter.name !== 'bizplace');
13
+ const v4 = new RegExp(/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i);
14
+ let bizplaceIds;
15
+ if (bizplaceId && (bizplaceId == 'ALL' || bizplaceId.match(v4))) {
16
+ let bizplaces = bizplaceId && bizplaceId != 'ALL' ? [bizplaceId] : await (0, biz_base_1.getPermittedBizplaceIds)(domain, user);
17
+ bizplaceIds = bizplaces
18
+ .map(bizplace => {
19
+ return "'" + (bizplace === null || bizplace === void 0 ? void 0 : bizplace.trim()) + "'";
20
+ })
21
+ .join(',');
18
22
  }
19
- const qb = (0, typeorm_1.getRepository)(sales_base_1.ReleaseGood).createQueryBuilder('rg');
23
+ else
24
+ throw new Error('invalid bizplaceId');
25
+ const qb = (0, shell_1.getRepository)(sales_base_1.ReleaseGood).createQueryBuilder('rg');
20
26
  (0, shell_1.buildQuery)(qb, params, context);
21
- return qb.select('rg.status', 'status').addSelect('COUNT(*) AS count').groupBy('rg.status').getRawMany();
27
+ return qb
28
+ .select('rg.status', 'status')
29
+ .addSelect('COUNT(*) AS count')
30
+ .andWhere(`rg.bizplace_id IN (${bizplaceIds})`)
31
+ .groupBy('rg.status')
32
+ .getRawMany();
22
33
  }
23
34
  };
24
35
  //# sourceMappingURL=release-goods-by-status.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"release-goods-by-status.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/dashboard/release-goods-by-status.ts"],"names":[],"mappings":";;;AAAA,qCAA2D;AAG3D,uDAAkE;AAClE,2DAAwD;AACxD,iDAAqE;AAExD,QAAA,4BAA4B,GAAG;IAC1C,KAAK,CAAC,oBAAoB,CAAC,CAAM,EAAE,MAAiB,EAAE,OAAY;QAChE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAmC,OAAO,CAAC,KAAK,CAAA;QAEtE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAW,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,EAAE;YACrE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;gBAClB,IAAI,EAAE,YAAY;gBAClB,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,MAAM,IAAA,kCAAuB,EAAC,MAAM,EAAE,IAAI,CAAC;gBAClD,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAA;SACH;QAED,MAAM,EAAE,GAAoC,IAAA,uBAAa,EAAC,wBAAW,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAA;QAC/F,IAAA,kBAAU,EAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;QAC/B,OAAO,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,UAAU,EAAE,CAAA;IAC1G,CAAC;CACF,CAAA","sourcesContent":["import { getRepository, SelectQueryBuilder } from 'typeorm'\n\nimport { User } from '@things-factory/auth-base'\nimport { getPermittedBizplaceIds } from '@things-factory/biz-base'\nimport { ReleaseGood } from '@things-factory/sales-base'\nimport { buildQuery, Domain, ListParam } from '@things-factory/shell'\n\nexport const releaseGoodsByStatusResolver = {\n async releaseGoodsByStatus(_: any, params: ListParam, context: any) {\n const { domain, user }: { domain: Domain; user: User } = context.state\n\n if (!params.filters.find((filter: any) => filter.name === 'bizplace')) {\n params.filters.push({\n name: 'bizplaceId',\n operator: 'in',\n value: await getPermittedBizplaceIds(domain, user),\n relation: false\n })\n }\n\n const qb: SelectQueryBuilder<ReleaseGood> = getRepository(ReleaseGood).createQueryBuilder('rg')\n buildQuery(qb, params, context)\n return qb.select('rg.status', 'status').addSelect('COUNT(*) AS count').groupBy('rg.status').getRawMany()\n }\n}\n"]}
1
+ {"version":3,"file":"release-goods-by-status.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/dashboard/release-goods-by-status.ts"],"names":[],"mappings":";;;AAEA,uDAAkE;AAClE,2DAAwD;AACxD,iDAA4E;AAE/D,QAAA,4BAA4B,GAAG;IAC1C,KAAK,CAAC,oBAAoB,CAAC,CAAM,EAAE,MAAiB,EAAE,OAAwB;;QAC5E,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QACtC,MAAM,UAAU,GAAW,CAAA,MAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAW,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,0CAAE,KAAK,KAAI,KAAK,CAAA;QAC3G,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,CAAA;QAC5E,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,wEAAwE,CAAC,CAAA;QAC/F,IAAI,WAAmB,CAAA;QAEvB,IAAI,UAAU,IAAI,CAAC,UAAU,IAAI,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE;YAC/D,IAAI,SAAS,GACX,UAAU,IAAI,UAAU,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,IAAA,kCAAuB,EAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YAChG,WAAW,GAAG,SAAS;iBACpB,GAAG,CAAC,QAAQ,CAAC,EAAE;gBACd,OAAO,GAAG,IAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,EAAE,CAAA,GAAG,GAAG,CAAA;YACrC,CAAC,CAAC;iBACD,IAAI,CAAC,GAAG,CAAC,CAAA;SACb;;YAAM,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;QAE5C,MAAM,EAAE,GAAoC,IAAA,qBAAa,EAAC,wBAAW,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAA;QAC/F,IAAA,kBAAU,EAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;QAC/B,OAAO,EAAE;aACN,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC;aAC7B,SAAS,CAAC,mBAAmB,CAAC;aAC9B,QAAQ,CAAC,sBAAsB,WAAW,GAAG,CAAC;aAC9C,OAAO,CAAC,WAAW,CAAC;aACpB,UAAU,EAAE,CAAA;IACjB,CAAC;CACF,CAAA","sourcesContent":["import { SelectQueryBuilder } from 'typeorm'\n\nimport { getPermittedBizplaceIds } from '@things-factory/biz-base'\nimport { ReleaseGood } from '@things-factory/sales-base'\nimport { buildQuery, getRepository, ListParam } from '@things-factory/shell'\n\nexport const releaseGoodsByStatusResolver = {\n async releaseGoodsByStatus(_: any, params: ListParam, context: ResolverContext) {\n const { domain, user } = context.state\n const bizplaceId: string = params.filters.find((filter: any) => filter.name === 'bizplace')?.value || 'ALL'\n params.filters = params.filters.filter(filter => filter.name !== 'bizplace')\n const v4 = new RegExp(/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i)\n let bizplaceIds: string\n\n if (bizplaceId && (bizplaceId == 'ALL' || bizplaceId.match(v4))) {\n let bizplaces: string[] =\n bizplaceId && bizplaceId != 'ALL' ? [bizplaceId] : await getPermittedBizplaceIds(domain, user)\n bizplaceIds = bizplaces\n .map(bizplace => {\n return \"'\" + bizplace?.trim() + \"'\"\n })\n .join(',')\n } else throw new Error('invalid bizplaceId')\n\n const qb: SelectQueryBuilder<ReleaseGood> = getRepository(ReleaseGood).createQueryBuilder('rg')\n buildQuery(qb, params, context)\n return qb\n .select('rg.status', 'status')\n .addSelect('COUNT(*) AS count')\n .andWhere(`rg.bizplace_id IN (${bizplaceIds})`)\n .groupBy('rg.status')\n .getRawMany()\n }\n}\n"]}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.unitInboundedOutboundedResolver = void 0;
4
+ const biz_base_1 = require("@things-factory/biz-base");
5
+ exports.unitInboundedOutboundedResolver = {
6
+ async unitInboundedOutbounded(_, params, context) {
7
+ var _a, _b, _c;
8
+ const { domain, user, tx } = context.state;
9
+ const bizplaceId = ((_a = params.filters.find((filter) => filter.name === 'bizplace')) === null || _a === void 0 ? void 0 : _a.value) || 'ALL';
10
+ const fromDate = (_b = params.filters.find((filter) => filter.name === 'createdAt1')) === null || _b === void 0 ? void 0 : _b.value;
11
+ const toDate = (_c = params.filters.find((filter) => filter.name === 'createdAt2')) === null || _c === void 0 ? void 0 : _c.value;
12
+ const v4 = new RegExp(/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i);
13
+ let bizplaceIds;
14
+ if (bizplaceId && (bizplaceId == 'ALL' || bizplaceId.match(v4))) {
15
+ let bizplaces = bizplaceId && bizplaceId != 'ALL' ? [bizplaceId] : await (0, biz_base_1.getPermittedBizplaceIds)(domain, user);
16
+ bizplaceIds = bizplaces
17
+ .map(bizplace => {
18
+ return "'" + (bizplace === null || bizplace === void 0 ? void 0 : bizplace.trim()) + "'";
19
+ })
20
+ .join(',');
21
+ }
22
+ else
23
+ throw new Error('invalid bizplaceId');
24
+ const orderStatus = await tx.query(`
25
+ WITH cte_unit ("status", "count", "type") AS (
26
+ SELECT 'INBOUNDED' AS status, 0 AS "count", 'inbound' AS "type"
27
+ UNION
28
+ SELECT 'OUTBOUNDED' AS status, 0 AS "count", 'outbound' AS "type"
29
+ ) SELECT u."status", coalesce(src."count", u."count") AS "count", u."type"
30
+ FROM cte_unit u
31
+ LEFT JOIN (
32
+ SELECT "status", SUM("count") AS count, "type" FROM (
33
+ SELECT 'INBOUNDED' AS "status", SUM(coalesce(op.actual_pack_qty, op.pack_qty)) as "count", 'inbound' as "type" FROM order_products op
34
+ INNER JOIN arrival_notices an ON an.id = op.arrival_notice_id
35
+ WHERE an."status" in ('PUTTING_AWAY','DONE')
36
+ AND an."domain_id" = $1
37
+ AND an."bizplace_id" IN (${bizplaceIds})
38
+ AND an.created_at BETWEEN '${fromDate}' AND '${toDate}'
39
+ GROUP BY an."status"
40
+ UNION ALL
41
+ SELECT 'OUTBOUNDED' AS "status", SUM(coalesce(oi.release_qty , oi.picked_qty)) as "count", 'outbound' as "type" FROM order_inventories oi
42
+ INNER JOIN release_goods rg on rg.id = oi.release_good_id
43
+ WHERE rg."status" in ('DONE')
44
+ AND rg."domain_id" = $1
45
+ AND rg."bizplace_id" IN (${bizplaceIds})
46
+ AND rg.created_at BETWEEN '${fromDate}' AND '${toDate}'
47
+ GROUP BY rg."status"
48
+ ) AS src
49
+ GROUP BY "status", "type"
50
+ ) src ON src."status" = u."status"
51
+ order by "type", "status"
52
+ `, [domain.id]);
53
+ return orderStatus;
54
+ }
55
+ };
56
+ //# sourceMappingURL=unit-inbounded-outbounded.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unit-inbounded-outbounded.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/dashboard/unit-inbounded-outbounded.ts"],"names":[],"mappings":";;;AAGA,uDAAkE;AAGrD,QAAA,+BAA+B,GAAG;IAC7C,KAAK,CAAC,uBAAuB,CAAC,CAAM,EAAE,MAAiB,EAAE,OAAY;;QACnE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAsD,OAAO,CAAC,KAAK,CAAA;QAC7F,MAAM,UAAU,GAAW,CAAA,MAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAW,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,0CAAE,KAAK,KAAI,KAAK,CAAA;QAC3G,MAAM,QAAQ,GAAW,MAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAW,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC,0CAAE,KAAK,CAAA;QAClG,MAAM,MAAM,GAAW,MAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAW,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC,0CAAE,KAAK,CAAA;QAChG,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,wEAAwE,CAAC,CAAA;QAC/F,IAAI,WAAmB,CAAA;QAEvB,IAAI,UAAU,IAAI,CAAC,UAAU,IAAI,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE;YAC/D,IAAI,SAAS,GACX,UAAU,IAAI,UAAU,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,IAAA,kCAAuB,EAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YAChG,WAAW,GAAG,SAAS;iBACpB,GAAG,CAAC,QAAQ,CAAC,EAAE;gBACd,OAAO,GAAG,IAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,EAAE,CAAA,GAAG,GAAG,CAAA;YACrC,CAAC,CAAC;iBACD,IAAI,CAAC,GAAG,CAAC,CAAA;SACb;;YAAM,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;QAE5C,MAAM,WAAW,GAAwC,MAAM,EAAE,CAAC,KAAK,CACrE;;;;;;;;;;;;;uCAaiC,WAAW;yCACT,QAAQ,UAAU,MAAM;;;;;;;uCAO1B,WAAW;yCACT,QAAQ,UAAU,MAAM;;;;;;OAM1D,EACD,CAAC,MAAM,CAAC,EAAE,CAAC,CACZ,CAAA;QAED,OAAO,WAAW,CAAA;IACpB,CAAC;CACF,CAAA","sourcesContent":["import { getRepository, SelectQueryBuilder, EntityManager } from 'typeorm'\n\nimport { User } from '@things-factory/auth-base'\nimport { getPermittedBizplaceIds } from '@things-factory/biz-base'\nimport { buildQuery, Domain, ListParam } from '@things-factory/shell'\n\nexport const unitInboundedOutboundedResolver = {\n async unitInboundedOutbounded(_: any, params: ListParam, context: any) {\n const { domain, user, tx }: { domain: Domain; user: User; tx: EntityManager } = context.state\n const bizplaceId: string = params.filters.find((filter: any) => filter.name === 'bizplace')?.value || 'ALL'\n const fromDate: string = params.filters.find((filter: any) => filter.name === 'createdAt1')?.value\n const toDate: string = params.filters.find((filter: any) => filter.name === 'createdAt2')?.value\n const v4 = new RegExp(/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i)\n let bizplaceIds: string\n\n if (bizplaceId && (bizplaceId == 'ALL' || bizplaceId.match(v4))) {\n let bizplaces: string[] =\n bizplaceId && bizplaceId != 'ALL' ? [bizplaceId] : await getPermittedBizplaceIds(domain, user)\n bizplaceIds = bizplaces\n .map(bizplace => {\n return \"'\" + bizplace?.trim() + \"'\"\n })\n .join(',')\n } else throw new Error('invalid bizplaceId')\n\n const orderStatus: { status: string; count: number }[] = await tx.query(\n `\n WITH cte_unit (\"status\", \"count\", \"type\") AS (\n SELECT 'INBOUNDED' AS status, 0 AS \"count\", 'inbound' AS \"type\"\n UNION\n SELECT 'OUTBOUNDED' AS status, 0 AS \"count\", 'outbound' AS \"type\"\n ) SELECT u.\"status\", coalesce(src.\"count\", u.\"count\") AS \"count\", u.\"type\"\n FROM cte_unit u\n LEFT JOIN (\n SELECT \"status\", SUM(\"count\") AS count, \"type\" FROM (\n SELECT 'INBOUNDED' AS \"status\", SUM(coalesce(op.actual_pack_qty, op.pack_qty)) as \"count\", 'inbound' as \"type\" FROM order_products op\n INNER JOIN arrival_notices an ON an.id = op.arrival_notice_id\n WHERE an.\"status\" in ('PUTTING_AWAY','DONE')\n AND an.\"domain_id\" = $1\n AND an.\"bizplace_id\" IN (${bizplaceIds})\n AND an.created_at BETWEEN '${fromDate}' AND '${toDate}'\n GROUP BY an.\"status\"\n UNION ALL\n SELECT 'OUTBOUNDED' AS \"status\", SUM(coalesce(oi.release_qty , oi.picked_qty)) as \"count\", 'outbound' as \"type\" FROM order_inventories oi\n INNER JOIN release_goods rg on rg.id = oi.release_good_id\n WHERE rg.\"status\" in ('DONE')\n AND rg.\"domain_id\" = $1\n AND rg.\"bizplace_id\" IN (${bizplaceIds})\n AND rg.created_at BETWEEN '${fromDate}' AND '${toDate}'\n GROUP BY rg.\"status\"\n ) AS src\n GROUP BY \"status\", \"type\"\n ) src ON src.\"status\" = u.\"status\"\n order by \"type\", \"status\"\n `,\n [domain.id]\n )\n\n return orderStatus\n }\n}\n"]}
@@ -6,7 +6,7 @@ const BoardSetting = tslib_1.__importStar(require("./board-setting"));
6
6
  const CustomElccl = tslib_1.__importStar(require("./custom/elccl"));
7
7
  const CustomKimeda = tslib_1.__importStar(require("./custom/kimeda"));
8
8
  const Dashboard = tslib_1.__importStar(require("./dashboard"));
9
- const Extra = tslib_1.__importStar(require("./extra"));
9
+ const Other = tslib_1.__importStar(require("./other"));
10
10
  const OpaMenu = tslib_1.__importStar(require("./opa-menu"));
11
11
  const Reports = tslib_1.__importStar(require("./reports"));
12
12
  const InventoryComparison = tslib_1.__importStar(require("./inventory-comparison"));
@@ -17,10 +17,11 @@ exports.queries = [
17
17
  CustomElccl.Query,
18
18
  CustomKimeda.Query,
19
19
  Dashboard.Query,
20
+ InventoryComparison.Query,
20
21
  OpaMenu.Query,
22
+ Other.Query,
21
23
  Reports.Query,
22
- InventoryComparison.Query,
23
- ShippingProviders.Query,
24
+ ShippingProviders.Query
24
25
  ];
25
- exports.mutations = [Extra.Mutation, WarehouseInventoryAdjustment.Mutation];
26
+ exports.mutations = [Other.Mutation, WarehouseInventoryAdjustment.Mutation];
26
27
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/graphql/resolvers/index.ts"],"names":[],"mappings":";;;;AAAA,sEAA+C;AAC/C,oEAA6C;AAC7C,sEAA+C;AAC/C,+DAAwC;AACxC,uDAAgC;AAChC,4DAAqC;AACrC,2DAAoC;AACpC,oFAA6D;AAC7D,+EAAwD;AACxD,uGAAgF;AAEnE,QAAA,OAAO,GAAG;IACrB,YAAY,CAAC,KAAK;IAClB,WAAW,CAAC,KAAK;IACjB,YAAY,CAAC,KAAK;IAClB,SAAS,CAAC,KAAK;IACf,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,KAAK;IACb,mBAAmB,CAAC,KAAK;IACzB,iBAAiB,CAAC,KAAK;CACxB,CAAA;AAEY,QAAA,SAAS,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAC,4BAA4B,CAAC,QAAQ,CAAC,CAAA","sourcesContent":["import * as BoardSetting from './board-setting'\nimport * as CustomElccl from './custom/elccl'\nimport * as CustomKimeda from './custom/kimeda'\nimport * as Dashboard from './dashboard'\nimport * as Extra from './extra'\nimport * as OpaMenu from './opa-menu'\nimport * as Reports from './reports'\nimport * as InventoryComparison from './inventory-comparison'\nimport * as ShippingProviders from './shipping-provider'\nimport * as WarehouseInventoryAdjustment from './warehouse-inventory-adjustment'\n\nexport const queries = [\n BoardSetting.Query,\n CustomElccl.Query,\n CustomKimeda.Query,\n Dashboard.Query,\n OpaMenu.Query,\n Reports.Query,\n InventoryComparison.Query,\n ShippingProviders.Query,\n]\n\nexport const mutations = [Extra.Mutation,WarehouseInventoryAdjustment.Mutation]\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/graphql/resolvers/index.ts"],"names":[],"mappings":";;;;AAAA,sEAA+C;AAC/C,oEAA6C;AAC7C,sEAA+C;AAC/C,+DAAwC;AACxC,uDAAgC;AAChC,4DAAqC;AACrC,2DAAoC;AACpC,oFAA6D;AAC7D,+EAAwD;AACxD,uGAAgF;AAEnE,QAAA,OAAO,GAAG;IACrB,YAAY,CAAC,KAAK;IAClB,WAAW,CAAC,KAAK;IACjB,YAAY,CAAC,KAAK;IAClB,SAAS,CAAC,KAAK;IACf,mBAAmB,CAAC,KAAK;IACzB,OAAO,CAAC,KAAK;IACb,KAAK,CAAC,KAAK;IACX,OAAO,CAAC,KAAK;IACb,iBAAiB,CAAC,KAAK;CACxB,CAAA;AAEY,QAAA,SAAS,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,4BAA4B,CAAC,QAAQ,CAAC,CAAA","sourcesContent":["import * as BoardSetting from './board-setting'\nimport * as CustomElccl from './custom/elccl'\nimport * as CustomKimeda from './custom/kimeda'\nimport * as Dashboard from './dashboard'\nimport * as Other from './other'\nimport * as OpaMenu from './opa-menu'\nimport * as Reports from './reports'\nimport * as InventoryComparison from './inventory-comparison'\nimport * as ShippingProviders from './shipping-provider'\nimport * as WarehouseInventoryAdjustment from './warehouse-inventory-adjustment'\n\nexport const queries = [\n BoardSetting.Query,\n CustomElccl.Query,\n CustomKimeda.Query,\n Dashboard.Query,\n InventoryComparison.Query,\n OpaMenu.Query,\n Other.Query,\n Reports.Query,\n ShippingProviders.Query\n]\n\nexport const mutations = [Other.Mutation, WarehouseInventoryAdjustment.Mutation]\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"inventory-comparison-list.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/inventory-comparison/inventory-comparison-list.ts"],"names":[],"mappings":"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","sourcesContent":["import { onhandInventories } from '@things-factory/warehouse-base'\nimport { ListParam } from '@things-factory/shell'\nimport { EntityManager } from 'typeorm'\nimport { inventoryHistorySummaryReportQuery } from '../custom/elccl/elccl-inventory-history-summary-report'\n\nexport const inventoryComparisonList = {\n async inventoryComparisonList(_: any, params: ListParam, context: any) {\n try {\n const { tx }: { tx: EntityManager } = context.state\n\n let bizplaceFilter = params.filters.find(data => data.name === 'bizplace')\n\n if (!bizplaceFilter) {\n return\n }\n\n let toDateFilter = params.filters.find(data => data.name === 'toDate')\n let toDateDate = new Date(toDateFilter.value)\n let fromDate = toDateDate.setDate(toDateDate.getDate() - 1)\n let fromDateISO = new Date(fromDate).toISOString()\n let nonTallyFilter = params.filters.find(data => data.name === 'nonTally').value\n let productFilter = params.filters.find(data => data.name === 'product')\n\n params.filters.push({\n name: 'fromDate',\n operator: 'eq',\n value: fromDateISO\n })\n\n params.filters.push(\n { name: 'status', operator: 'notin', value: ['INTRANSIT', 'TERMINATED', 'DELETED'] },\n { name: 'remainOnly', operator: 'eq', value: true },\n { name: 'unlockOnly', operator: 'eq', value: true },\n { name: 'created_at', operator: 'eq', value: toDateFilter.value },\n { name: 'timezoneOffset', operator: 'eq', value: new Date().getTimezoneOffset() },\n { name: 'expiration', operator: 'eq', value: false }\n )\n\n let productQueryFilter = ``\n\n if (productFilter) {\n let products = productFilter.value\n .toLowerCase()\n .split(',')\n .map(prod => {\n return \"'%\" + prod.trim().replace(/'/g, \"''\") + \"%'\"\n })\n .join(',')\n\n productQueryFilter =\n productQueryFilter +\n `\n ${nonTallyFilter ? 'and' : 'where'} (lower(summ.product_name) like any(array[${products}])\n or lower(summ.product_sku) like any(array[${products}]))`\n }\n\n await Promise.all([\n inventoryHistorySummaryReportQuery(_, params, context),\n onhandInventories(params.filters, params.pagination, params.sortings, [], context, false)\n ])\n \n await tx.query(`\n create temp table tmp_inv_comp on commit drop as (\n select summ.\"batch_id\", summ.product_id, summ.product_name, summ.product_sku, summ.packing_type, summ.closing_qty, coalesce(oh.qty, 0) as \"onhand_qty\" from temp_inventory_summary summ \n left join (\t\n select \"batch_id\" as \"batch_id\", product_id, sum(\"qty\") as qty from tmp_data group by \"batch_id\", product_id\n ) oh on oh.batch_id = summ.batch_id and oh.product_id = summ.product_id\n ${nonTallyFilter ? 'where coalesce(oh.qty, 0) <> summ.closing_qty' : ''}\n ${productQueryFilter}\n );\n `)\n\n let sumData = await tx.query(`\n select * from tmp_inv_comp\n offset $1 limit $2\n `, [(params.pagination.page - 1) * params.pagination.limit, params.pagination.limit])\n\n const totalQuery: number = await tx.query(`select count(*) from tmp_inv_comp `)\n \n const total = parseInt(totalQuery[0].count)\n\n const items: any[] = sumData.map(item => {\n return {\n productName: item.product_name,\n productSku: item.product_sku,\n packingType: item.packing_type,\n closingQty: item.closing_qty,\n remainQty: item.onhand_qty,\n batchId: item.batch_id\n }\n })\n\n return { items, total }\n\n } catch (error) {\n throw error\n }\n }\n}\n"]}
1
+ {"version":3,"file":"inventory-comparison-list.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/inventory-comparison/inventory-comparison-list.ts"],"names":[],"mappings":"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","sourcesContent":["import { ListParam } from '@things-factory/shell'\nimport { onhandInventories } from '@things-factory/warehouse-base'\n\nimport { inventoryHistorySummaryReportQuery } from '../custom/elccl/elccl-inventory-history-summary-report'\n\nexport const inventoryComparisonList = {\n async inventoryComparisonList(_: any, params: ListParam, context: ResolverContext) {\n try {\n const { tx } = context.state\n\n let bizplaceFilter = params.filters.find(data => data.name === 'bizplace')\n\n if (!bizplaceFilter) {\n return\n }\n\n let toDateFilter = params.filters.find(data => data.name === 'toDate')\n let toDateDate = new Date(toDateFilter.value)\n let fromDate = toDateDate.setDate(toDateDate.getDate() - 1)\n let fromDateISO = new Date(fromDate).toISOString()\n let nonTallyFilter = params.filters.find(data => data.name === 'nonTally').value\n let productFilter = params.filters.find(data => data.name === 'product')\n\n params.filters.push({\n name: 'fromDate',\n operator: 'eq',\n value: fromDateISO\n })\n\n params.filters.push(\n { name: 'status', operator: 'notin', value: ['INTRANSIT', 'TERMINATED', 'DELETED'] },\n { name: 'remainOnly', operator: 'eq', value: true },\n { name: 'unlockOnly', operator: 'eq', value: true },\n { name: 'created_at', operator: 'eq', value: toDateFilter.value },\n { name: 'timezoneOffset', operator: 'eq', value: new Date().getTimezoneOffset() },\n { name: 'expiration', operator: 'eq', value: false }\n )\n\n let productQueryFilter = ``\n\n if (productFilter) {\n let products = productFilter.value\n .toLowerCase()\n .split(',')\n .map(prod => {\n return \"'%\" + prod.trim().replace(/'/g, \"''\") + \"%'\"\n })\n .join(',')\n\n productQueryFilter =\n productQueryFilter +\n `\n ${nonTallyFilter ? 'and' : 'where'} (lower(summ.product_name) like any(array[${products}])\n or lower(summ.product_sku) like any(array[${products}]))`\n }\n\n await Promise.all([\n inventoryHistorySummaryReportQuery(_, params, context),\n onhandInventories(params.filters, params.pagination, params.sortings, [], context, false)\n ])\n\n await tx.query(`\n create temp table tmp_inv_comp on commit drop as (\n select summ.\"batch_id\", summ.product_id, summ.product_name, summ.product_sku, summ.packing_type, summ.closing_qty, coalesce(oh.qty, 0) as \"onhand_qty\" from temp_inventory_summary summ \n left join (\t\n select \"batch_id\" as \"batch_id\", product_id, sum(\"qty\") as qty from tmp_data group by \"batch_id\", product_id\n ) oh on oh.batch_id = summ.batch_id and oh.product_id = summ.product_id\n ${nonTallyFilter ? 'where coalesce(oh.qty, 0) <> summ.closing_qty' : ''}\n ${productQueryFilter}\n );\n `)\n\n let sumData = await tx.query(\n `\n select * from tmp_inv_comp\n offset $1 limit $2\n `,\n [(params.pagination.page - 1) * params.pagination.limit, params.pagination.limit]\n )\n\n const totalQuery: number = await tx.query(`select count(*) from tmp_inv_comp `)\n\n const total = parseInt(totalQuery[0].count)\n\n const items: any[] = sumData.map(item => {\n return {\n productName: item.product_name,\n productSku: item.product_sku,\n packingType: item.packing_type,\n closingQty: item.closing_qty,\n remainQty: item.onhand_qty,\n batchId: item.batch_id\n }\n })\n\n return { items, total }\n } catch (error) {\n throw error\n }\n }\n}\n"]}
@@ -1,16 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.opaMenusResolver = void 0;
4
+ const typeorm_1 = require("typeorm");
4
5
  const auth_base_1 = require("@things-factory/auth-base");
5
6
  const menu_base_1 = require("@things-factory/menu-base");
6
- const typeorm_1 = require("typeorm");
7
+ const shell_1 = require("@things-factory/shell");
7
8
  exports.opaMenusResolver = {
8
9
  async opaMenus(_, _params, context) {
9
10
  var _a, _b, _c, _d;
10
11
  let menus = [];
11
12
  if (((_b = (_a = context === null || context === void 0 ? void 0 : context.state) === null || _a === void 0 ? void 0 : _a.domain) === null || _b === void 0 ? void 0 : _b.id) && ((_d = (_c = context === null || context === void 0 ? void 0 : context.state) === null || _c === void 0 ? void 0 : _c.user) === null || _d === void 0 ? void 0 : _d.id)) {
12
13
  try {
13
- const qb = (0, typeorm_1.getRepository)(auth_base_1.User).createQueryBuilder('USER');
14
+ const qb = (0, shell_1.getRepository)(auth_base_1.User).createQueryBuilder('USER');
14
15
  const user = await qb
15
16
  .leftJoinAndSelect('USER.roles', 'ROLES')
16
17
  .leftJoinAndSelect('ROLES.domain', 'ROLES_DOMAIN')
@@ -41,8 +42,8 @@ exports.opaMenusResolver = {
41
42
  }
42
43
  };
43
44
  async function getNonRestrictedMenus(domain) {
44
- const menus = await (0, typeorm_1.getRepository)(menu_base_1.Menu).find({
45
- where: { domain, hiddenFlag: false, menuType: 'MENU' },
45
+ const menus = await (0, shell_1.getRepository)(menu_base_1.Menu).find({
46
+ where: { domain: { id: domain.id }, hiddenFlag: false, menuType: 'MENU' },
46
47
  relations: ['parent', 'children', 'children.roles'],
47
48
  order: { rank: 'ASC' }
48
49
  });
@@ -52,12 +53,12 @@ async function getNonRestrictedMenus(domain) {
52
53
  return menus;
53
54
  }
54
55
  async function getRestrictedMenus(roleIds, domain) {
55
- const menus = await (0, typeorm_1.getRepository)(menu_base_1.Menu).find({
56
- where: { domain, hiddenFlag: false, menuType: 'MENU' },
56
+ const menus = await (0, shell_1.getRepository)(menu_base_1.Menu).find({
57
+ where: { domain: { id: domain.id }, hiddenFlag: false, menuType: 'MENU' },
57
58
  relations: ['parent', 'children', 'children.roles'],
58
59
  order: { rank: 'ASC' }
59
60
  });
60
- const userRoles = await (0, typeorm_1.getRepository)(auth_base_1.Role).find({ where: { domain, id: (0, typeorm_1.In)(roleIds) } });
61
+ const userRoles = await (0, shell_1.getRepository)(auth_base_1.Role).find({ where: { domain: { id: domain.id }, id: (0, typeorm_1.In)(roleIds) } });
61
62
  menus.forEach(menu => {
62
63
  menu.children = menu.children.filter(child => {
63
64
  var _a;
@@ -1 +1 @@
1
- {"version":3,"file":"opa-menus.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/opa-menu/opa-menus.ts"],"names":[],"mappings":";;;AAAA,yDAAsD;AAEtD,yDAAgD;AAChD,qCAA+D;AAElD,QAAA,gBAAgB,GAAG;IAC9B,KAAK,CAAC,QAAQ,CAAC,CAAM,EAAE,OAAY,EAAE,OAAY;;QAC/C,IAAI,KAAK,GAAW,EAAE,CAAA;QACtB,IAAI,CAAA,MAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,0CAAE,MAAM,0CAAE,EAAE,MAAI,MAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,0CAAE,IAAI,0CAAE,EAAE,CAAA,EAAE;YAC1D,IAAI;gBACF,MAAM,EAAE,GAA6B,IAAA,uBAAa,EAAC,gBAAI,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;gBACnF,MAAM,IAAI,GAAS,MAAM,EAAE;qBACxB,iBAAiB,CAAC,YAAY,EAAE,OAAO,CAAC;qBACxC,iBAAiB,CAAC,cAAc,EAAE,cAAc,CAAC;qBACjD,KAAK,CAAC,mBAAmB,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;qBAC7D,QAAQ,CAAC,6BAA6B,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;qBAC9E,MAAM,EAAE,CAAA;gBAEX,kDAAkD;gBAClD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;gBAElE,MAAM,WAAW,GAAa,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAU,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBACrE,IAAI,eAAe,GAAW,EAAE,CAAA;gBAChC,IAAI,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,MAAM,EAAE;oBACvB,4CAA4C;oBAC5C,eAAe,GAAG,CAAC,GAAG,CAAC,MAAM,kBAAkB,CAAC,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;iBACrF;gBAED,MAAM,iBAAiB,GAAa,eAAe,CAAC,GAAG,CAAC,CAAC,cAAoB,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,CAAA;gBACpG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;oBACnB,MAAM,GAAG,GAAG,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;oBAC9C,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE;wBACd,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;qBAC1F;gBACH,CAAC,CAAC,CAAA;gBAEF,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,SAAe,EAAE,EAAE,WAAC,OAAA,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,QAAQ,0CAAE,MAAM,CAAA,EAAA,CAAC,CAAA;aACtE;YAAC,OAAO,CAAC,EAAE;gBACV,MAAM,CAAC,CAAA;aACR;SACF;IACH,CAAC;CACF,CAAA;AAED,KAAK,UAAU,qBAAqB,CAAC,MAAc;IACjD,MAAM,KAAK,GAAW,MAAM,IAAA,uBAAa,EAAC,gBAAI,CAAC,CAAC,IAAI,CAAC;QACnD,KAAK,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE;QACtD,SAAS,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,gBAAgB,CAAC;QACnD,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;KACvB,CAAC,CAAA;IAEF,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,WAAC,OAAA,CAAC,CAAA,MAAA,KAAK,CAAC,KAAK,0CAAE,MAAM,CAAA,CAAA,EAAA,CAAC,CAAA;IACrE,CAAC,CAAC,CAAA;IAEF,OAAO,KAAK,CAAA;AACd,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,OAAiB,EAAE,MAAc;IACjE,MAAM,KAAK,GAAW,MAAM,IAAA,uBAAa,EAAC,gBAAI,CAAC,CAAC,IAAI,CAAC;QACnD,KAAK,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE;QACtD,SAAS,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,gBAAgB,CAAC;QACnD,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;KACvB,CAAC,CAAA;IACF,MAAM,SAAS,GAAW,MAAM,IAAA,uBAAa,EAAC,gBAAI,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAA,YAAE,EAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAA;IAEhG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;;YAC3C,MAAM,YAAY,GAAG,CAAA,MAAA,KAAK,CAAC,KAAK,0CAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,KAAI,EAAE,CAAA;YAE5D,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAA;QACxE,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,OAAO,KAAK,CAAA;AACd,CAAC","sourcesContent":["import { Role, User } from '@things-factory/auth-base'\nimport { Domain } from '@things-factory/shell'\nimport { Menu } from '@things-factory/menu-base'\nimport { getRepository, SelectQueryBuilder, In } from 'typeorm'\n\nexport const opaMenusResolver = {\n async opaMenus(_: any, _params: any, context: any) {\n let menus: Menu[] = []\n if (context?.state?.domain?.id && context?.state?.user?.id) {\n try {\n const qb: SelectQueryBuilder<User> = getRepository(User).createQueryBuilder('USER')\n const user: User = await qb\n .leftJoinAndSelect('USER.roles', 'ROLES')\n .leftJoinAndSelect('ROLES.domain', 'ROLES_DOMAIN')\n .where('USER.id = :userId', { userId: context.state.user.id })\n .andWhere('ROLES_DOMAIN.id = :domainId', { domainId: context.state.domain.id })\n .getOne()\n\n // get menus which are non-restricted by any role.\n menus.push(...(await getNonRestrictedMenus(context.state.domain)))\n\n const userRoleIds: string[] = user.roles.map((role: Role) => role.id)\n let restrictedMenus: Menu[] = []\n if (userRoleIds?.length) {\n // get menus which are restricted by role ()\n restrictedMenus = [...(await getRestrictedMenus(userRoleIds, context.state.domain))]\n }\n\n const restrictedMenuIds: string[] = restrictedMenus.map((restrictedMenu: Menu) => restrictedMenu.id)\n menus.forEach(menu => {\n const idx = restrictedMenuIds.indexOf(menu.id)\n if (idx !== -1) {\n menu.children = Array.from(new Set([...restrictedMenus[idx].children, ...menu.children]))\n }\n })\n\n return menus.filter((groupMenu: Menu) => groupMenu?.children?.length)\n } catch (e) {\n throw e\n }\n }\n }\n}\n\nasync function getNonRestrictedMenus(domain: Domain): Promise<Menu[]> {\n const menus: Menu[] = await getRepository(Menu).find({\n where: { domain, hiddenFlag: false, menuType: 'MENU' },\n relations: ['parent', 'children', 'children.roles'],\n order: { rank: 'ASC' }\n })\n\n menus.forEach(menu => {\n menu.children = menu.children.filter(child => !child.roles?.length)\n })\n\n return menus\n}\n\nasync function getRestrictedMenus(roleIds: string[], domain: Domain): Promise<Menu[]> {\n const menus: Menu[] = await getRepository(Menu).find({\n where: { domain, hiddenFlag: false, menuType: 'MENU' },\n relations: ['parent', 'children', 'children.roles'],\n order: { rank: 'ASC' }\n })\n const userRoles: Role[] = await getRepository(Role).find({ where: { domain, id: In(roleIds) } })\n\n menus.forEach(menu => {\n menu.children = menu.children.filter(child => {\n const childRoleIds = child.roles?.map(role => role.id) || []\n\n return userRoles.find(role => childRoleIds.includes(role.id)) || false\n })\n })\n\n return menus\n}\n"]}
1
+ {"version":3,"file":"opa-menus.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/opa-menu/opa-menus.ts"],"names":[],"mappings":"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","sourcesContent":["import { In, SelectQueryBuilder } from 'typeorm'\n\nimport { Role, User } from '@things-factory/auth-base'\nimport { Menu } from '@things-factory/menu-base'\nimport { Domain, getRepository } from '@things-factory/shell'\n\nexport const opaMenusResolver = {\n async opaMenus(_: any, _params: any, context: ResolverContext) {\n let menus: Menu[] = []\n if (context?.state?.domain?.id && context?.state?.user?.id) {\n try {\n const qb: SelectQueryBuilder<User> = getRepository(User).createQueryBuilder('USER')\n const user: User = await qb\n .leftJoinAndSelect('USER.roles', 'ROLES')\n .leftJoinAndSelect('ROLES.domain', 'ROLES_DOMAIN')\n .where('USER.id = :userId', { userId: context.state.user.id })\n .andWhere('ROLES_DOMAIN.id = :domainId', { domainId: context.state.domain.id })\n .getOne()\n\n // get menus which are non-restricted by any role.\n menus.push(...(await getNonRestrictedMenus(context.state.domain)))\n\n const userRoleIds: string[] = user.roles.map((role: Role) => role.id)\n let restrictedMenus: Menu[] = []\n if (userRoleIds?.length) {\n // get menus which are restricted by role ()\n restrictedMenus = [...(await getRestrictedMenus(userRoleIds, context.state.domain))]\n }\n\n const restrictedMenuIds: string[] = restrictedMenus.map((restrictedMenu: Menu) => restrictedMenu.id)\n menus.forEach(menu => {\n const idx = restrictedMenuIds.indexOf(menu.id)\n if (idx !== -1) {\n menu.children = Array.from(new Set([...restrictedMenus[idx].children, ...menu.children]))\n }\n })\n\n return menus.filter((groupMenu: Menu) => groupMenu?.children?.length)\n } catch (e) {\n throw e\n }\n }\n }\n}\n\nasync function getNonRestrictedMenus(domain: Domain): Promise<Menu[]> {\n const menus: Menu[] = await getRepository(Menu).find({\n where: { domain: { id: domain.id }, hiddenFlag: false, menuType: 'MENU' },\n relations: ['parent', 'children', 'children.roles'],\n order: { rank: 'ASC' }\n })\n\n menus.forEach(menu => {\n menu.children = menu.children.filter(child => !child.roles?.length)\n })\n\n return menus\n}\n\nasync function getRestrictedMenus(roleIds: string[], domain: Domain): Promise<Menu[]> {\n const menus: Menu[] = await getRepository(Menu).find({\n where: { domain: { id: domain.id }, hiddenFlag: false, menuType: 'MENU' },\n relations: ['parent', 'children', 'children.roles'],\n order: { rank: 'ASC' }\n })\n const userRoles: Role[] = await getRepository(Role).find({ where: { domain: { id: domain.id }, id: In(roleIds) } })\n\n menus.forEach(menu => {\n menu.children = menu.children.filter(child => {\n const childRoleIds = child.roles?.map(role => role.id) || []\n\n return userRoles.find(role => childRoleIds.includes(role.id)) || false\n })\n })\n\n return menus\n}\n"]}