@things-factory/operato-wms 6.2.102 → 6.2.104

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 (186) hide show
  1. package/dist-server/graphql/index.js +11 -0
  2. package/dist-server/graphql/index.js.map +1 -0
  3. package/dist-server/graphql/resolvers/board-setting/board-settings.js +76 -0
  4. package/dist-server/graphql/resolvers/board-setting/board-settings.js.map +1 -0
  5. package/dist-server/graphql/resolvers/board-setting/index.js +6 -0
  6. package/dist-server/graphql/resolvers/board-setting/index.js.map +1 -0
  7. package/dist-server/graphql/resolvers/custom/elccl/elccl-daily-collection-report.js +87 -0
  8. package/dist-server/graphql/resolvers/custom/elccl/elccl-daily-collection-report.js.map +1 -0
  9. package/dist-server/graphql/resolvers/custom/elccl/elccl-daily-order-inventory-report.js +138 -0
  10. package/dist-server/graphql/resolvers/custom/elccl/elccl-daily-order-inventory-report.js.map +1 -0
  11. package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-pallet-detail-report.js +124 -0
  12. package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-pallet-detail-report.js.map +1 -0
  13. package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-report.js +158 -0
  14. package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-report.js.map +1 -0
  15. package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-summary-report.js +90 -0
  16. package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-summary-report.js.map +1 -0
  17. package/dist-server/graphql/resolvers/custom/elccl/elccl-onhand-inventory-counter.js +36 -0
  18. package/dist-server/graphql/resolvers/custom/elccl/elccl-onhand-inventory-counter.js.map +1 -0
  19. package/dist-server/graphql/resolvers/custom/elccl/index.js +11 -0
  20. package/dist-server/graphql/resolvers/custom/elccl/index.js.map +1 -0
  21. package/dist-server/graphql/resolvers/custom/kimeda/index.js +6 -0
  22. package/dist-server/graphql/resolvers/custom/kimeda/index.js.map +1 -0
  23. package/dist-server/graphql/resolvers/custom/kimeda/kimeda-onhand-inventory-counter.js +42 -0
  24. package/dist-server/graphql/resolvers/custom/kimeda/kimeda-onhand-inventory-counter.js.map +1 -0
  25. package/dist-server/graphql/resolvers/dashboard/arrival-notices-by-status.js +35 -0
  26. package/dist-server/graphql/resolvers/dashboard/arrival-notices-by-status.js.map +1 -0
  27. package/dist-server/graphql/resolvers/dashboard/collection-orders-by-status.js +23 -0
  28. package/dist-server/graphql/resolvers/dashboard/collection-orders-by-status.js.map +1 -0
  29. package/dist-server/graphql/resolvers/dashboard/delivery-orders-by-status.js +23 -0
  30. package/dist-server/graphql/resolvers/dashboard/delivery-orders-by-status.js.map +1 -0
  31. package/dist-server/graphql/resolvers/dashboard/index.js +12 -0
  32. package/dist-server/graphql/resolvers/dashboard/index.js.map +1 -0
  33. package/dist-server/graphql/resolvers/dashboard/inventory-expiry-monitor.js +56 -0
  34. package/dist-server/graphql/resolvers/dashboard/inventory-expiry-monitor.js.map +1 -0
  35. package/dist-server/graphql/resolvers/dashboard/outbound-order-by-status.js +124 -0
  36. package/dist-server/graphql/resolvers/dashboard/outbound-order-by-status.js.map +1 -0
  37. package/dist-server/graphql/resolvers/dashboard/release-goods-by-status.js +35 -0
  38. package/dist-server/graphql/resolvers/dashboard/release-goods-by-status.js.map +1 -0
  39. package/dist-server/graphql/resolvers/dashboard/unit-inbounded-outbounded.js +56 -0
  40. package/dist-server/graphql/resolvers/dashboard/unit-inbounded-outbounded.js.map +1 -0
  41. package/dist-server/graphql/resolvers/index.js +27 -0
  42. package/dist-server/graphql/resolvers/index.js.map +1 -0
  43. package/dist-server/graphql/resolvers/inventory-comparison/index.js +6 -0
  44. package/dist-server/graphql/resolvers/inventory-comparison/index.js.map +1 -0
  45. package/dist-server/graphql/resolvers/inventory-comparison/inventory-comparison-list.js +78 -0
  46. package/dist-server/graphql/resolvers/inventory-comparison/inventory-comparison-list.js.map +1 -0
  47. package/dist-server/graphql/resolvers/opa-menu/index.js +6 -0
  48. package/dist-server/graphql/resolvers/opa-menu/index.js.map +1 -0
  49. package/dist-server/graphql/resolvers/opa-menu/opa-menus.js +71 -0
  50. package/dist-server/graphql/resolvers/opa-menu/opa-menus.js.map +1 -0
  51. package/dist-server/graphql/resolvers/other/add-release-good-products.js +291 -0
  52. package/dist-server/graphql/resolvers/other/add-release-good-products.js.map +1 -0
  53. package/dist-server/graphql/resolvers/other/index.js +8 -0
  54. package/dist-server/graphql/resolvers/other/index.js.map +1 -0
  55. package/dist-server/graphql/resolvers/other/page-settings.js +87 -0
  56. package/dist-server/graphql/resolvers/other/page-settings.js.map +1 -0
  57. package/dist-server/graphql/resolvers/reports/costing-report.js +172 -0
  58. package/dist-server/graphql/resolvers/reports/costing-report.js.map +1 -0
  59. package/dist-server/graphql/resolvers/reports/inbound-order-details-report.js +200 -0
  60. package/dist-server/graphql/resolvers/reports/inbound-order-details-report.js.map +1 -0
  61. package/dist-server/graphql/resolvers/reports/inbound-serial-number-report.js +140 -0
  62. package/dist-server/graphql/resolvers/reports/inbound-serial-number-report.js.map +1 -0
  63. package/dist-server/graphql/resolvers/reports/index.js +12 -0
  64. package/dist-server/graphql/resolvers/reports/index.js.map +1 -0
  65. package/dist-server/graphql/resolvers/reports/outbound-order-details-report.js +232 -0
  66. package/dist-server/graphql/resolvers/reports/outbound-order-details-report.js.map +1 -0
  67. package/dist-server/graphql/resolvers/reports/outbound-serial-number-report.js +143 -0
  68. package/dist-server/graphql/resolvers/reports/outbound-serial-number-report.js.map +1 -0
  69. package/dist-server/graphql/resolvers/reports/product-label-report.js +57 -0
  70. package/dist-server/graphql/resolvers/reports/product-label-report.js.map +1 -0
  71. package/dist-server/graphql/resolvers/reports/release-inventory-report.js +180 -0
  72. package/dist-server/graphql/resolvers/reports/release-inventory-report.js.map +1 -0
  73. package/dist-server/graphql/resolvers/shipping-provider/index.js +6 -0
  74. package/dist-server/graphql/resolvers/shipping-provider/index.js.map +1 -0
  75. package/dist-server/graphql/resolvers/shipping-provider/shipping-providers.js +20 -0
  76. package/dist-server/graphql/resolvers/shipping-provider/shipping-providers.js.map +1 -0
  77. package/dist-server/graphql/resolvers/warehouse-inventory-adjustment/index.js +6 -0
  78. package/dist-server/graphql/resolvers/warehouse-inventory-adjustment/index.js.map +1 -0
  79. package/dist-server/graphql/resolvers/warehouse-inventory-adjustment/warehouse-intentory-adjustment.js +65 -0
  80. package/dist-server/graphql/resolvers/warehouse-inventory-adjustment/warehouse-intentory-adjustment.js.map +1 -0
  81. package/dist-server/graphql/types/board-setting/board-setting.js +14 -0
  82. package/dist-server/graphql/types/board-setting/board-setting.js.map +1 -0
  83. package/dist-server/graphql/types/board-setting/index.js +9 -0
  84. package/dist-server/graphql/types/board-setting/index.js.map +1 -0
  85. package/dist-server/graphql/types/custom/elccl/elccl-daily-collection-report-list.js +12 -0
  86. package/dist-server/graphql/types/custom/elccl/elccl-daily-collection-report-list.js.map +1 -0
  87. package/dist-server/graphql/types/custom/elccl/elccl-daily-collection-report.js +28 -0
  88. package/dist-server/graphql/types/custom/elccl/elccl-daily-collection-report.js.map +1 -0
  89. package/dist-server/graphql/types/custom/elccl/elccl-daily-order-inventory-report-list.js +12 -0
  90. package/dist-server/graphql/types/custom/elccl/elccl-daily-order-inventory-report-list.js.map +1 -0
  91. package/dist-server/graphql/types/custom/elccl/elccl-daily-order-inventory-report.js +23 -0
  92. package/dist-server/graphql/types/custom/elccl/elccl-daily-order-inventory-report.js.map +1 -0
  93. package/dist-server/graphql/types/custom/elccl/elccl-inventory-report.js +20 -0
  94. package/dist-server/graphql/types/custom/elccl/elccl-inventory-report.js.map +1 -0
  95. package/dist-server/graphql/types/custom/elccl/elccl-inventory-summary-report-list.js +12 -0
  96. package/dist-server/graphql/types/custom/elccl/elccl-inventory-summary-report-list.js.map +1 -0
  97. package/dist-server/graphql/types/custom/elccl/elccl-inventory-summary-report.js +21 -0
  98. package/dist-server/graphql/types/custom/elccl/elccl-inventory-summary-report.js.map +1 -0
  99. package/dist-server/graphql/types/custom/elccl/elccl-pallet-detail-report.js +20 -0
  100. package/dist-server/graphql/types/custom/elccl/elccl-pallet-detail-report.js.map +1 -0
  101. package/dist-server/graphql/types/custom/elccl/index.js +30 -0
  102. package/dist-server/graphql/types/custom/elccl/index.js.map +1 -0
  103. package/dist-server/graphql/types/custom/kimeda/index.js +7 -0
  104. package/dist-server/graphql/types/custom/kimeda/index.js.map +1 -0
  105. package/dist-server/graphql/types/dashboard/index.js +17 -0
  106. package/dist-server/graphql/types/dashboard/index.js.map +1 -0
  107. package/dist-server/graphql/types/dashboard/inventory-expiry-counter.js +13 -0
  108. package/dist-server/graphql/types/dashboard/inventory-expiry-counter.js.map +1 -0
  109. package/dist-server/graphql/types/dashboard/inventory-expiry-status.js +12 -0
  110. package/dist-server/graphql/types/dashboard/inventory-expiry-status.js.map +1 -0
  111. package/dist-server/graphql/types/dashboard/order-status-counter.js +12 -0
  112. package/dist-server/graphql/types/dashboard/order-status-counter.js.map +1 -0
  113. package/dist-server/graphql/types/index.js +40 -0
  114. package/dist-server/graphql/types/index.js.map +1 -0
  115. package/dist-server/graphql/types/inventory-comparison/index.js +13 -0
  116. package/dist-server/graphql/types/inventory-comparison/index.js.map +1 -0
  117. package/dist-server/graphql/types/inventory-comparison/inventory-comparison-list.js +12 -0
  118. package/dist-server/graphql/types/inventory-comparison/inventory-comparison-list.js.map +1 -0
  119. package/dist-server/graphql/types/inventory-comparison/inventory-comparison.js +16 -0
  120. package/dist-server/graphql/types/inventory-comparison/inventory-comparison.js.map +1 -0
  121. package/dist-server/graphql/types/opa-menu/index.js +9 -0
  122. package/dist-server/graphql/types/opa-menu/index.js.map +1 -0
  123. package/dist-server/graphql/types/opa-menu/opa-menu.js +43 -0
  124. package/dist-server/graphql/types/opa-menu/opa-menu.js.map +1 -0
  125. package/dist-server/graphql/types/other/index.js +19 -0
  126. package/dist-server/graphql/types/other/index.js.map +1 -0
  127. package/dist-server/graphql/types/other/page-setting.js +34 -0
  128. package/dist-server/graphql/types/other/page-setting.js.map +1 -0
  129. package/dist-server/graphql/types/reports/costing-report-list.js +12 -0
  130. package/dist-server/graphql/types/reports/costing-report-list.js.map +1 -0
  131. package/dist-server/graphql/types/reports/costing-report.js +17 -0
  132. package/dist-server/graphql/types/reports/costing-report.js.map +1 -0
  133. package/dist-server/graphql/types/reports/inbound-order-details-report-list.js +12 -0
  134. package/dist-server/graphql/types/reports/inbound-order-details-report-list.js.map +1 -0
  135. package/dist-server/graphql/types/reports/inbound-order-details-report.js +57 -0
  136. package/dist-server/graphql/types/reports/inbound-order-details-report.js.map +1 -0
  137. package/dist-server/graphql/types/reports/inbound-serial-number-report-list.js +12 -0
  138. package/dist-server/graphql/types/reports/inbound-serial-number-report-list.js.map +1 -0
  139. package/dist-server/graphql/types/reports/inbound-serial-number-report.js +21 -0
  140. package/dist-server/graphql/types/reports/inbound-serial-number-report.js.map +1 -0
  141. package/dist-server/graphql/types/reports/index.js +43 -0
  142. package/dist-server/graphql/types/reports/index.js.map +1 -0
  143. package/dist-server/graphql/types/reports/outbound-order-details-report-list.js +12 -0
  144. package/dist-server/graphql/types/reports/outbound-order-details-report-list.js.map +1 -0
  145. package/dist-server/graphql/types/reports/outbound-order-details-report.js +74 -0
  146. package/dist-server/graphql/types/reports/outbound-order-details-report.js.map +1 -0
  147. package/dist-server/graphql/types/reports/outbound-serial-number-report-list.js +12 -0
  148. package/dist-server/graphql/types/reports/outbound-serial-number-report-list.js.map +1 -0
  149. package/dist-server/graphql/types/reports/outbound-serial-number-report.js +23 -0
  150. package/dist-server/graphql/types/reports/outbound-serial-number-report.js.map +1 -0
  151. package/dist-server/graphql/types/reports/product-label-report-list.js +12 -0
  152. package/dist-server/graphql/types/reports/product-label-report-list.js.map +1 -0
  153. package/dist-server/graphql/types/reports/product-label-report.js +14 -0
  154. package/dist-server/graphql/types/reports/product-label-report.js.map +1 -0
  155. package/dist-server/graphql/types/reports/release-inventory-report-list.js +12 -0
  156. package/dist-server/graphql/types/reports/release-inventory-report-list.js.map +1 -0
  157. package/dist-server/graphql/types/reports/release-inventory-report.js +27 -0
  158. package/dist-server/graphql/types/reports/release-inventory-report.js.map +1 -0
  159. package/dist-server/graphql/types/shipping-provider/index.js +10 -0
  160. package/dist-server/graphql/types/shipping-provider/index.js.map +1 -0
  161. package/dist-server/graphql/types/shipping-provider/shipping-provider-list.js +11 -0
  162. package/dist-server/graphql/types/shipping-provider/shipping-provider-list.js.map +1 -0
  163. package/dist-server/graphql/types/shipping-provider/shipping-provider.js +11 -0
  164. package/dist-server/graphql/types/shipping-provider/shipping-provider.js.map +1 -0
  165. package/dist-server/graphql/types/warehouse-inventory-adjustment/index.js +9 -0
  166. package/dist-server/graphql/types/warehouse-inventory-adjustment/index.js.map +1 -0
  167. package/dist-server/index.js +7 -0
  168. package/dist-server/index.js.map +1 -0
  169. package/dist-server/migrations/1568858861188-SeedSetting.js +51 -0
  170. package/dist-server/migrations/1568858861188-SeedSetting.js.map +1 -0
  171. package/dist-server/migrations/1623308919899-SeedLocationRecommendSetting.js +35 -0
  172. package/dist-server/migrations/1623308919899-SeedLocationRecommendSetting.js.map +1 -0
  173. package/dist-server/migrations/1623381200659-SeedStoringRule.js +33 -0
  174. package/dist-server/migrations/1623381200659-SeedStoringRule.js.map +1 -0
  175. package/dist-server/migrations/index.js +12 -0
  176. package/dist-server/migrations/index.js.map +1 -0
  177. package/dist-server/opa-app-setting-constants.js +13 -0
  178. package/dist-server/opa-app-setting-constants.js.map +1 -0
  179. package/dist-server/routes.js +2 -0
  180. package/dist-server/routes.js.map +1 -0
  181. package/dist-server/tsconfig.tsbuildinfo +1 -0
  182. package/dist-server/utils/index.js +5 -0
  183. package/dist-server/utils/index.js.map +1 -0
  184. package/dist-server/utils/report-query-util.js +42 -0
  185. package/dist-server/utils/report-query-util.js.map +1 -0
  186. package/package.json +39 -39
@@ -0,0 +1,291 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.addReleaseGoodProducts = void 0;
4
+ const typeorm_1 = require("typeorm");
5
+ const product_base_1 = require("@things-factory/product-base");
6
+ const sales_base_1 = require("@things-factory/sales-base");
7
+ const warehouse_base_1 = require("@things-factory/warehouse-base");
8
+ const worksheet_base_1 = require("@things-factory/worksheet-base");
9
+ exports.addReleaseGoodProducts = {
10
+ async addReleaseGoodProducts(_, { name, orderInventories, existingOrderInventories }, context) {
11
+ var _a, _b;
12
+ try {
13
+ const { tx, user, domain } = context.state;
14
+ let releaseGood = await tx.getRepository(sales_base_1.ReleaseGood).findOne({
15
+ where: { domain: { id: domain.id }, name: name },
16
+ relations: ['bizplace', 'orderProducts']
17
+ });
18
+ const bizplace = releaseGood.bizplace;
19
+ let pickingWorksheet = await tx.getRepository(worksheet_base_1.Worksheet).findOne({
20
+ where: { releaseGood, type: worksheet_base_1.WORKSHEET_TYPE.PICKING }
21
+ });
22
+ let loadingWorksheet = await tx.getRepository(worksheet_base_1.Worksheet).findOne({
23
+ where: { releaseGood, type: worksheet_base_1.WORKSHEET_TYPE.LOADING }
24
+ });
25
+ if (existingOrderInventories) {
26
+ for (let oi of existingOrderInventories) {
27
+ // map input to OrderInventory Object
28
+ let curOrderInv = Object.assign({}, oi);
29
+ curOrderInv.domain = domain;
30
+ curOrderInv.bizplace = bizplace;
31
+ curOrderInv.releaseGood = releaseGood;
32
+ curOrderInv.product = await tx.getRepository(product_base_1.Product).findOneBy({ id: oi.product.id });
33
+ let existingOrderInv;
34
+ if ((_a = curOrderInv === null || curOrderInv === void 0 ? void 0 : curOrderInv.inventory) === null || _a === void 0 ? void 0 : _a.id) {
35
+ const foundInv = await tx.getRepository(warehouse_base_1.Inventory).findOneBy({ id: curOrderInv.inventory.id });
36
+ curOrderInv.inventory = foundInv;
37
+ existingOrderInv = await tx.getRepository(sales_base_1.OrderInventory).findOne({
38
+ where: {
39
+ releaseGood,
40
+ product: curOrderInv.product,
41
+ batchId: curOrderInv.batchId,
42
+ packingType: curOrderInv.packingType,
43
+ inventory: foundInv
44
+ }
45
+ });
46
+ if (foundInv && foundInv.lockedQty == 0) {
47
+ foundInv.qty += Number(existingOrderInv.releaseQty);
48
+ foundInv.uomValue += Number(existingOrderInv.releaseUomValue);
49
+ foundInv.lockedQty = Number(existingOrderInv.releaseQty);
50
+ foundInv.lockedUomValue = Number(existingOrderInv.releaseUomValue);
51
+ }
52
+ if (curOrderInv.releaseQty < existingOrderInv.pickedQty) {
53
+ throw new Error(`${curOrderInv.inventory.palletId} has already picked ${existingOrderInv.pickedQty}`);
54
+ }
55
+ if (curOrderInv.releaseQty === 0) {
56
+ foundInv.lockedQty = Number(foundInv.lockedQty) - Number(existingOrderInv.releaseQty);
57
+ foundInv.lockedUomValue = Number(foundInv.lockedUomValue) - Number(existingOrderInv.releaseUomValue);
58
+ await tx.getRepository(warehouse_base_1.Inventory).save(foundInv);
59
+ if (existingOrderInv) {
60
+ // if found existing OrderInventory and worksheetDetail then qty, uomValue, and status are updated
61
+ curOrderInv = Object.assign(Object.assign({}, existingOrderInv), { releaseQty: curOrderInv.releaseQty, releaseUomValue: curOrderInv.releaseUomValue, lockedUomValue: curOrderInv.lockedUomValue, status: sales_base_1.ORDER_INVENTORY_STATUS.CANCELLED });
62
+ let existingWorksheetDetail = await tx.getRepository(worksheet_base_1.WorksheetDetail).findOne({
63
+ where: {
64
+ worksheet: { id: pickingWorksheet.id },
65
+ type: worksheet_base_1.WORKSHEET_TYPE.PICKING,
66
+ targetInventory: { id: curOrderInv.id }
67
+ }
68
+ });
69
+ existingWorksheetDetail = Object.assign(Object.assign({}, existingWorksheetDetail), { status: worksheet_base_1.WORKSHEET_STATUS.CANCELLED });
70
+ await tx.getRepository(worksheet_base_1.WorksheetDetail).save(existingWorksheetDetail);
71
+ await tx.getRepository(sales_base_1.OrderInventory).save(curOrderInv);
72
+ }
73
+ }
74
+ else if (curOrderInv.releaseQty == existingOrderInv.pickedQty) {
75
+ curOrderInv = Object.assign(Object.assign({}, existingOrderInv), { releaseQty: curOrderInv.releaseQty, releaseUomValue: curOrderInv.releaseUomValue, lockedUomValue: curOrderInv.lockedUomValue, status: sales_base_1.ORDER_INVENTORY_STATUS.PICKED });
76
+ let existingWorksheetDetail = await tx.getRepository(worksheet_base_1.WorksheetDetail).findOne({
77
+ where: {
78
+ targetInventory: { id: curOrderInv.id }
79
+ }
80
+ });
81
+ existingWorksheetDetail = Object.assign(Object.assign({}, existingWorksheetDetail), { status: worksheet_base_1.WORKSHEET_STATUS.PICKED });
82
+ await tx.getRepository(worksheet_base_1.WorksheetDetail).save(existingWorksheetDetail);
83
+ await tx.getRepository(sales_base_1.OrderInventory).save(curOrderInv);
84
+ }
85
+ else {
86
+ foundInv.updater = user;
87
+ foundInv.lockedQty =
88
+ foundInv.lockedQty - Number(existingOrderInv.releaseQty) + Number(curOrderInv.releaseQty);
89
+ foundInv.lockedUomValue =
90
+ foundInv.lockedUomValue - Number(existingOrderInv.releaseUomValue) + Number(curOrderInv.releaseUomValue);
91
+ await tx.getRepository(warehouse_base_1.Inventory).save(foundInv);
92
+ if (existingOrderInv) {
93
+ // if found existing OrderInventory and worksheetDetail then qty, uomValue, and status are updated
94
+ curOrderInv = Object.assign(Object.assign({}, existingOrderInv), { releaseQty: curOrderInv.releaseQty, releaseUomValue: curOrderInv.releaseUomValue, status: sales_base_1.ORDER_INVENTORY_STATUS.PICKING });
95
+ let existingWorksheetDetail = await tx.getRepository(worksheet_base_1.WorksheetDetail).findOne({
96
+ where: {
97
+ worksheet: { id: pickingWorksheet.id },
98
+ type: worksheet_base_1.WORKSHEET_TYPE.PICKING,
99
+ targetInventory: { id: existingOrderInv.id }
100
+ }
101
+ });
102
+ if (existingWorksheetDetail) {
103
+ if (curOrderInv.releaseQty != existingOrderInv.releaseQty) {
104
+ existingWorksheetDetail = Object.assign(Object.assign({}, existingWorksheetDetail), { status: worksheet_base_1.WORKSHEET_STATUS.DEACTIVATED });
105
+ await tx.getRepository(worksheet_base_1.WorksheetDetail).save(existingWorksheetDetail);
106
+ }
107
+ }
108
+ await tx.getRepository(sales_base_1.OrderInventory).save(curOrderInv);
109
+ }
110
+ }
111
+ if (pickingWorksheet) {
112
+ // if has picking worksheet, status will be deactivated to prevent any action from warehouse operator until office admin has confirmation
113
+ pickingWorksheet = Object.assign(Object.assign({}, pickingWorksheet), { status: worksheet_base_1.WORKSHEET_STATUS.DEACTIVATED });
114
+ await tx.getRepository(worksheet_base_1.Worksheet).save(pickingWorksheet);
115
+ }
116
+ if (loadingWorksheet) {
117
+ // if has loading worksheet, status will be deactivated to prevent any action from warehouse operator until office admin has confirmation
118
+ loadingWorksheet = Object.assign(Object.assign({}, loadingWorksheet), { status: worksheet_base_1.WORKSHEET_STATUS.DEACTIVATED });
119
+ await tx.getRepository(worksheet_base_1.Worksheet).save(loadingWorksheet);
120
+ }
121
+ }
122
+ }
123
+ }
124
+ if (orderInventories) {
125
+ for (let oi of orderInventories) {
126
+ // map input to OrderInventory Object
127
+ let newOrderInv = Object.assign({}, oi);
128
+ newOrderInv.domain = domain;
129
+ newOrderInv.bizplace = bizplace;
130
+ newOrderInv.batchId = oi.batchId;
131
+ newOrderInv.packingType = oi.packingType;
132
+ newOrderInv.status = pickingWorksheet ? sales_base_1.ORDER_INVENTORY_STATUS.PICKING : sales_base_1.ORDER_INVENTORY_STATUS.PENDING;
133
+ newOrderInv.name = sales_base_1.OrderNoGenerator.orderInventory();
134
+ newOrderInv.releaseGood = releaseGood;
135
+ newOrderInv.product = await tx.getRepository(product_base_1.Product).findOneBy({ id: oi.product.id });
136
+ newOrderInv.creator = user;
137
+ newOrderInv.updater = user;
138
+ let existingOrderInv;
139
+ let existingOrderProduct = await tx.getRepository(sales_base_1.OrderProduct).findOne({
140
+ where: {
141
+ domain: { id: domain.id },
142
+ releaseGood: { id: releaseGood.id },
143
+ batchId: oi.batchId,
144
+ packingType: oi.packingType,
145
+ product: { id: newOrderInv.product.id }
146
+ }
147
+ });
148
+ // check if it is release by inventory (has inventory value) or product
149
+ if ((_b = newOrderInv.inventory) === null || _b === void 0 ? void 0 : _b.id) {
150
+ // if release by inventory, then quantity and uomValue values are updated
151
+ const foundInv = await tx.getRepository(warehouse_base_1.Inventory).findOneBy({ id: newOrderInv.inventory.id });
152
+ newOrderInv.inventory = foundInv;
153
+ newOrderInv.uom = (oi === null || oi === void 0 ? void 0 : oi.uom) || foundInv.uom;
154
+ newOrderInv.batchIdRef = (oi === null || oi === void 0 ? void 0 : oi.batchIdRef) || foundInv.batchIdRef;
155
+ // check for existing released OrderInventory specifying product, batchId, packingType, and inventory
156
+ existingOrderInv = await tx.getRepository(sales_base_1.OrderInventory).findOne({
157
+ where: {
158
+ releaseGood: { id: releaseGood.id },
159
+ product: { id: newOrderInv.product.id },
160
+ batchId: newOrderInv.batchId,
161
+ packingType: newOrderInv.packingType,
162
+ inventory: { id: foundInv.id }
163
+ }
164
+ });
165
+ foundInv.lockedQty = Number(foundInv.lockedQty) + newOrderInv.releaseQty;
166
+ foundInv.lockedUomValue = Number(foundInv.lockedUomValue) + newOrderInv.releaseUomValue;
167
+ foundInv.updater = user;
168
+ let newOrderProduct = Object.assign(new sales_base_1.OrderProduct(), newOrderInv);
169
+ newOrderProduct = Object.assign(Object.assign({}, newOrderProduct), { packQty: 0, actualPackQty: 0, palletQty: 0, actualPalletQty: 0, status: sales_base_1.ORDER_PRODUCT_STATUS.ASSIGNED });
170
+ if (!existingOrderProduct)
171
+ newOrderProduct = await tx.getRepository(sales_base_1.OrderProduct).save(newOrderProduct);
172
+ newOrderInv.orderProduct = existingOrderProduct ? existingOrderProduct : newOrderProduct;
173
+ await tx.getRepository(warehouse_base_1.Inventory).save(foundInv);
174
+ }
175
+ else {
176
+ // check for existing released OrderInventory specifying product, batchId and packingType
177
+ existingOrderInv = await tx.getRepository(sales_base_1.OrderInventory).findOne({
178
+ where: {
179
+ releaseGood: { id: releaseGood.id },
180
+ product: { id: newOrderInv.product.id },
181
+ batchId: newOrderInv.batchId,
182
+ packingType: newOrderInv.packingType
183
+ }
184
+ });
185
+ }
186
+ if (existingOrderInv) {
187
+ // if found existing OrderInventory and worksheetDetail then qty, uomValue, and status are updated
188
+ newOrderInv = Object.assign(Object.assign({}, existingOrderInv), { releaseQty: existingOrderInv.status === sales_base_1.ORDER_INVENTORY_STATUS.REPLACED
189
+ ? newOrderInv.releaseQty
190
+ : existingOrderInv.releaseQty + newOrderInv.releaseQty, releaseUomValue: sales_base_1.ORDER_INVENTORY_STATUS.REPLACED
191
+ ? newOrderInv.releaseUomValue
192
+ : existingOrderInv.releaseUomValue + newOrderInv.releaseUomValue, status: existingOrderInv.status === sales_base_1.ORDER_INVENTORY_STATUS.CANCELLED
193
+ ? pickingWorksheet
194
+ ? sales_base_1.ORDER_INVENTORY_STATUS.PICKING
195
+ : sales_base_1.ORDER_INVENTORY_STATUS.PENDING
196
+ : existingOrderInv.status });
197
+ let existingWorksheetDetail = await tx.getRepository(worksheet_base_1.WorksheetDetail).findOne({
198
+ where: {
199
+ worksheet: { id: pickingWorksheet.id },
200
+ type: worksheet_base_1.WORKSHEET_TYPE.PICKING,
201
+ targetInventory: { id: existingOrderInv.id }
202
+ }
203
+ });
204
+ if (existingWorksheetDetail) {
205
+ existingWorksheetDetail = Object.assign(Object.assign({}, existingWorksheetDetail), { targetProduct: newOrderInv.orderProduct, status: worksheet_base_1.WORKSHEET_STATUS.DEACTIVATED });
206
+ await tx.getRepository(worksheet_base_1.WorksheetDetail).save(existingWorksheetDetail);
207
+ }
208
+ }
209
+ if (pickingWorksheet) {
210
+ // if has picking worksheet, status will be deactivated to prevent any action from warehouse operator until office admin has confirmation
211
+ pickingWorksheet = Object.assign(Object.assign({}, pickingWorksheet), { status: worksheet_base_1.WORKSHEET_STATUS.DEACTIVATED });
212
+ let savedOrderInv = new sales_base_1.OrderInventory();
213
+ savedOrderInv.name = newOrderInv.name;
214
+ savedOrderInv.type = newOrderInv.type;
215
+ savedOrderInv.releaseQty = newOrderInv.releaseQty;
216
+ savedOrderInv.releaseUomValue = newOrderInv.releaseUomValue;
217
+ savedOrderInv.batchId = newOrderInv.batchId;
218
+ savedOrderInv.batchIdRef = newOrderInv.batchIdRef;
219
+ savedOrderInv.packingType = newOrderInv.packingType;
220
+ savedOrderInv.uom = newOrderInv.uom;
221
+ savedOrderInv.product = newOrderInv.product;
222
+ savedOrderInv.inventory = newOrderInv.inventory;
223
+ savedOrderInv.status = newOrderInv.status;
224
+ savedOrderInv.releaseGood = newOrderInv.releaseGood;
225
+ savedOrderInv.orderProduct = newOrderInv.orderProduct;
226
+ savedOrderInv.bizplace = newOrderInv.bizplace;
227
+ savedOrderInv.domain = domain;
228
+ savedOrderInv.creator = user;
229
+ savedOrderInv.updater = user;
230
+ if (newOrderInv === null || newOrderInv === void 0 ? void 0 : newOrderInv.id) {
231
+ // newOrderInv will have id if it was updated from existingOrderInv
232
+ // this solution will remove ix_order-inventory_0 unique error
233
+ // ** please revise this resolver in future. looks like there's few
234
+ // things that can refactor
235
+ savedOrderInv.id = newOrderInv.id;
236
+ }
237
+ savedOrderInv = await tx.getRepository(sales_base_1.OrderInventory).save(savedOrderInv);
238
+ if (!existingOrderInv && pickingWorksheet) {
239
+ // if this is a new orderInventory and has existing worksheet then generate a new worksheet detail for it
240
+ await (0, worksheet_base_1.generatePickingWorksheetDetail)(tx, domain, user, pickingWorksheet, savedOrderInv);
241
+ }
242
+ }
243
+ }
244
+ await tx.getRepository(worksheet_base_1.Worksheet).save(pickingWorksheet);
245
+ }
246
+ if (loadingWorksheet) {
247
+ // if has loading worksheet, status will be deactivated to prevent any action from warehouse operator until office admin has confirmation
248
+ loadingWorksheet = Object.assign(Object.assign({}, loadingWorksheet), { status: worksheet_base_1.WORKSHEET_STATUS.DEACTIVATED });
249
+ await tx.getRepository(worksheet_base_1.Worksheet).save(loadingWorksheet);
250
+ }
251
+ // Update Order Product Release Qty
252
+ let rgOrderProducts = await tx
253
+ .getRepository(sales_base_1.OrderProduct)
254
+ .find({ where: { domain: { id: domain.id }, releaseGood: { id: releaseGood.id } } });
255
+ await Promise.all(rgOrderProducts.map(async (op) => {
256
+ const orderInventories = await tx.getRepository(sales_base_1.OrderInventory).find({
257
+ where: {
258
+ domain: { id: domain.id },
259
+ releaseGood: { id: releaseGood.id },
260
+ orderProduct: { id: op.id },
261
+ status: (0, typeorm_1.Not)((0, typeorm_1.In)([
262
+ sales_base_1.ORDER_INVENTORY_STATUS.TERMINATED,
263
+ sales_base_1.ORDER_INVENTORY_STATUS.CANCELLED,
264
+ sales_base_1.ORDER_INVENTORY_STATUS.PENDING_CANCEL
265
+ ]))
266
+ }
267
+ });
268
+ let totalReleaseQty = orderInventories.reduce((total, currentValue) => {
269
+ total += currentValue.releaseQty;
270
+ return total;
271
+ }, 0);
272
+ let totalReleaseUomValue = orderInventories.reduce((total, currentValue) => {
273
+ total += currentValue.releaseUomValue;
274
+ return total;
275
+ }, 0);
276
+ let updateOPInfo = {
277
+ releaseQty: totalReleaseQty,
278
+ releaseUomValue: totalReleaseUomValue
279
+ };
280
+ if (totalReleaseQty <= 0) {
281
+ updateOPInfo.status = sales_base_1.ORDER_PRODUCT_STATUS.TERMINATED;
282
+ }
283
+ await tx.getRepository(sales_base_1.OrderProduct).update({ id: op.id }, updateOPInfo);
284
+ }));
285
+ }
286
+ catch (error) {
287
+ throw error;
288
+ }
289
+ }
290
+ };
291
+ //# sourceMappingURL=add-release-good-products.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-release-good-products.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/other/add-release-good-products.ts"],"names":[],"mappings":"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","sourcesContent":["import { In, Not } from 'typeorm'\n\nimport { Bizplace } from '@things-factory/biz-base'\nimport { Product } from '@things-factory/product-base'\nimport {\n ORDER_INVENTORY_STATUS,\n ORDER_PRODUCT_STATUS,\n OrderInventory,\n OrderNoGenerator,\n OrderProduct,\n ReleaseGood\n} from '@things-factory/sales-base'\nimport { Inventory } from '@things-factory/warehouse-base'\nimport {\n generatePickingWorksheetDetail,\n Worksheet,\n WORKSHEET_STATUS,\n WORKSHEET_TYPE,\n WorksheetDetail\n} from '@things-factory/worksheet-base'\n\nexport const addReleaseGoodProducts = {\n async addReleaseGoodProducts(_: any, { name, orderInventories, existingOrderInventories }, context: ResolverContext) {\n try {\n const { tx, user, domain } = context.state\n\n let releaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({\n where: { domain: { id: domain.id }, name: name },\n relations: ['bizplace', 'orderProducts']\n })\n\n const bizplace: Bizplace = releaseGood.bizplace\n\n let pickingWorksheet: Worksheet = await tx.getRepository(Worksheet).findOne({\n where: { releaseGood, type: WORKSHEET_TYPE.PICKING }\n })\n\n let loadingWorksheet: Worksheet = await tx.getRepository(Worksheet).findOne({\n where: { releaseGood, type: WORKSHEET_TYPE.LOADING }\n })\n\n if (existingOrderInventories) {\n for (let oi of existingOrderInventories) {\n // map input to OrderInventory Object\n let curOrderInv: OrderInventory = Object.assign({}, oi)\n curOrderInv.domain = domain\n curOrderInv.bizplace = bizplace\n curOrderInv.releaseGood = releaseGood\n curOrderInv.product = await tx.getRepository(Product).findOneBy({ id: oi.product.id })\n\n let existingOrderInv: OrderInventory\n\n if (curOrderInv?.inventory?.id) {\n const foundInv: Inventory = await tx.getRepository(Inventory).findOneBy({ id: curOrderInv.inventory.id })\n curOrderInv.inventory = foundInv\n\n existingOrderInv = await tx.getRepository(OrderInventory).findOne({\n where: {\n releaseGood,\n product: curOrderInv.product,\n batchId: curOrderInv.batchId,\n packingType: curOrderInv.packingType,\n inventory: foundInv\n }\n })\n\n if (foundInv && foundInv.lockedQty == 0) {\n foundInv.qty += Number(existingOrderInv.releaseQty)\n foundInv.uomValue += Number(existingOrderInv.releaseUomValue)\n foundInv.lockedQty = Number(existingOrderInv.releaseQty)\n foundInv.lockedUomValue = Number(existingOrderInv.releaseUomValue)\n }\n\n if (curOrderInv.releaseQty < existingOrderInv.pickedQty) {\n throw new Error(`${curOrderInv.inventory.palletId} has already picked ${existingOrderInv.pickedQty}`)\n }\n\n if (curOrderInv.releaseQty === 0) {\n foundInv.lockedQty = Number(foundInv.lockedQty) - Number(existingOrderInv.releaseQty)\n foundInv.lockedUomValue = Number(foundInv.lockedUomValue) - Number(existingOrderInv.releaseUomValue)\n\n await tx.getRepository(Inventory).save(foundInv)\n\n if (existingOrderInv) {\n // if found existing OrderInventory and worksheetDetail then qty, uomValue, and status are updated\n curOrderInv = {\n ...existingOrderInv,\n releaseQty: curOrderInv.releaseQty,\n releaseUomValue: curOrderInv.releaseUomValue,\n lockedUomValue: curOrderInv.lockedUomValue,\n status: ORDER_INVENTORY_STATUS.CANCELLED\n }\n\n let existingWorksheetDetail: WorksheetDetail = await tx.getRepository(WorksheetDetail).findOne({\n where: {\n worksheet: { id: pickingWorksheet.id },\n type: WORKSHEET_TYPE.PICKING,\n targetInventory: { id: curOrderInv.id }\n }\n })\n\n existingWorksheetDetail = {\n ...existingWorksheetDetail,\n status: WORKSHEET_STATUS.CANCELLED\n }\n await tx.getRepository(WorksheetDetail).save(existingWorksheetDetail)\n await tx.getRepository(OrderInventory).save(curOrderInv)\n }\n } else if (curOrderInv.releaseQty == existingOrderInv.pickedQty) {\n curOrderInv = {\n ...existingOrderInv,\n releaseQty: curOrderInv.releaseQty,\n releaseUomValue: curOrderInv.releaseUomValue,\n lockedUomValue: curOrderInv.lockedUomValue,\n status: ORDER_INVENTORY_STATUS.PICKED\n }\n\n let existingWorksheetDetail: WorksheetDetail = await tx.getRepository(WorksheetDetail).findOne({\n where: {\n targetInventory: { id: curOrderInv.id }\n }\n })\n\n existingWorksheetDetail = {\n ...existingWorksheetDetail,\n status: WORKSHEET_STATUS.PICKED\n }\n\n await tx.getRepository(WorksheetDetail).save(existingWorksheetDetail)\n await tx.getRepository(OrderInventory).save(curOrderInv)\n } else {\n foundInv.updater = user\n foundInv.lockedQty =\n foundInv.lockedQty - Number(existingOrderInv.releaseQty) + Number(curOrderInv.releaseQty)\n foundInv.lockedUomValue =\n foundInv.lockedUomValue - Number(existingOrderInv.releaseUomValue) + Number(curOrderInv.releaseUomValue)\n\n await tx.getRepository(Inventory).save(foundInv)\n\n if (existingOrderInv) {\n // if found existing OrderInventory and worksheetDetail then qty, uomValue, and status are updated\n curOrderInv = {\n ...existingOrderInv,\n releaseQty: curOrderInv.releaseQty,\n releaseUomValue: curOrderInv.releaseUomValue,\n status: ORDER_INVENTORY_STATUS.PICKING\n }\n\n let existingWorksheetDetail: WorksheetDetail = await tx.getRepository(WorksheetDetail).findOne({\n where: {\n worksheet: { id: pickingWorksheet.id },\n type: WORKSHEET_TYPE.PICKING,\n targetInventory: { id: existingOrderInv.id }\n }\n })\n\n if (existingWorksheetDetail) {\n if (curOrderInv.releaseQty != existingOrderInv.releaseQty) {\n existingWorksheetDetail = {\n ...existingWorksheetDetail,\n status: WORKSHEET_STATUS.DEACTIVATED\n }\n\n await tx.getRepository(WorksheetDetail).save(existingWorksheetDetail)\n }\n }\n\n await tx.getRepository(OrderInventory).save(curOrderInv)\n }\n }\n\n if (pickingWorksheet) {\n // if has picking worksheet, status will be deactivated to prevent any action from warehouse operator until office admin has confirmation\n pickingWorksheet = {\n ...pickingWorksheet,\n status: WORKSHEET_STATUS.DEACTIVATED\n }\n await tx.getRepository(Worksheet).save(pickingWorksheet)\n }\n\n if (loadingWorksheet) {\n // if has loading worksheet, status will be deactivated to prevent any action from warehouse operator until office admin has confirmation\n loadingWorksheet = {\n ...loadingWorksheet,\n status: WORKSHEET_STATUS.DEACTIVATED\n }\n\n await tx.getRepository(Worksheet).save(loadingWorksheet)\n }\n }\n }\n }\n\n if (orderInventories) {\n for (let oi of orderInventories) {\n // map input to OrderInventory Object\n let newOrderInv: OrderInventory = Object.assign({}, oi)\n newOrderInv.domain = domain\n newOrderInv.bizplace = bizplace\n newOrderInv.batchId = oi.batchId\n newOrderInv.packingType = oi.packingType\n newOrderInv.status = pickingWorksheet ? ORDER_INVENTORY_STATUS.PICKING : ORDER_INVENTORY_STATUS.PENDING\n newOrderInv.name = OrderNoGenerator.orderInventory()\n newOrderInv.releaseGood = releaseGood\n newOrderInv.product = await tx.getRepository(Product).findOneBy({ id: oi.product.id })\n newOrderInv.creator = user\n newOrderInv.updater = user\n\n let existingOrderInv: OrderInventory\n\n let existingOrderProduct: OrderProduct = await tx.getRepository(OrderProduct).findOne({\n where: {\n domain: { id: domain.id },\n releaseGood: { id: releaseGood.id },\n batchId: oi.batchId,\n packingType: oi.packingType,\n product: { id: newOrderInv.product.id }\n }\n })\n\n // check if it is release by inventory (has inventory value) or product\n if (newOrderInv.inventory?.id) {\n // if release by inventory, then quantity and uomValue values are updated\n const foundInv: Inventory = await tx.getRepository(Inventory).findOneBy({ id: newOrderInv.inventory.id })\n newOrderInv.inventory = foundInv\n newOrderInv.uom = oi?.uom || foundInv.uom\n newOrderInv.batchIdRef = oi?.batchIdRef || foundInv.batchIdRef\n\n // check for existing released OrderInventory specifying product, batchId, packingType, and inventory\n existingOrderInv = await tx.getRepository(OrderInventory).findOne({\n where: {\n releaseGood: { id: releaseGood.id },\n product: { id: newOrderInv.product.id },\n batchId: newOrderInv.batchId,\n packingType: newOrderInv.packingType,\n inventory: { id: foundInv.id }\n }\n })\n\n foundInv.lockedQty = Number(foundInv.lockedQty) + newOrderInv.releaseQty\n foundInv.lockedUomValue = Number(foundInv.lockedUomValue) + newOrderInv.releaseUomValue\n foundInv.updater = user\n\n let newOrderProduct: OrderProduct = Object.assign(new OrderProduct(), newOrderInv)\n newOrderProduct = {\n ...newOrderProduct,\n packQty: 0,\n actualPackQty: 0,\n palletQty: 0,\n actualPalletQty: 0,\n status: ORDER_PRODUCT_STATUS.ASSIGNED\n }\n\n if (!existingOrderProduct) newOrderProduct = await tx.getRepository(OrderProduct).save(newOrderProduct)\n\n newOrderInv.orderProduct = existingOrderProduct ? existingOrderProduct : newOrderProduct\n\n await tx.getRepository(Inventory).save(foundInv)\n } else {\n // check for existing released OrderInventory specifying product, batchId and packingType\n existingOrderInv = await tx.getRepository(OrderInventory).findOne({\n where: {\n releaseGood: { id: releaseGood.id },\n product: { id: newOrderInv.product.id },\n batchId: newOrderInv.batchId,\n packingType: newOrderInv.packingType\n }\n })\n }\n\n if (existingOrderInv) {\n // if found existing OrderInventory and worksheetDetail then qty, uomValue, and status are updated\n newOrderInv = {\n ...existingOrderInv,\n releaseQty:\n existingOrderInv.status === ORDER_INVENTORY_STATUS.REPLACED\n ? newOrderInv.releaseQty\n : existingOrderInv.releaseQty + newOrderInv.releaseQty,\n releaseUomValue: ORDER_INVENTORY_STATUS.REPLACED\n ? newOrderInv.releaseUomValue\n : existingOrderInv.releaseUomValue + newOrderInv.releaseUomValue,\n status:\n existingOrderInv.status === ORDER_INVENTORY_STATUS.CANCELLED\n ? pickingWorksheet\n ? ORDER_INVENTORY_STATUS.PICKING\n : ORDER_INVENTORY_STATUS.PENDING\n : existingOrderInv.status\n }\n\n let existingWorksheetDetail: WorksheetDetail = await tx.getRepository(WorksheetDetail).findOne({\n where: {\n worksheet: { id: pickingWorksheet.id },\n type: WORKSHEET_TYPE.PICKING,\n targetInventory: { id: existingOrderInv.id }\n }\n })\n\n if (existingWorksheetDetail) {\n existingWorksheetDetail = {\n ...existingWorksheetDetail,\n targetProduct: newOrderInv.orderProduct,\n status: WORKSHEET_STATUS.DEACTIVATED\n }\n\n await tx.getRepository(WorksheetDetail).save(existingWorksheetDetail)\n }\n }\n\n if (pickingWorksheet) {\n // if has picking worksheet, status will be deactivated to prevent any action from warehouse operator until office admin has confirmation\n pickingWorksheet = {\n ...pickingWorksheet,\n status: WORKSHEET_STATUS.DEACTIVATED\n }\n\n let savedOrderInv: OrderInventory = new OrderInventory()\n savedOrderInv.name = newOrderInv.name\n savedOrderInv.type = newOrderInv.type\n savedOrderInv.releaseQty = newOrderInv.releaseQty\n savedOrderInv.releaseUomValue = newOrderInv.releaseUomValue\n savedOrderInv.batchId = newOrderInv.batchId\n savedOrderInv.batchIdRef = newOrderInv.batchIdRef\n savedOrderInv.packingType = newOrderInv.packingType\n savedOrderInv.uom = newOrderInv.uom\n savedOrderInv.product = newOrderInv.product\n savedOrderInv.inventory = newOrderInv.inventory\n savedOrderInv.status = newOrderInv.status\n savedOrderInv.releaseGood = newOrderInv.releaseGood\n savedOrderInv.orderProduct = newOrderInv.orderProduct\n savedOrderInv.bizplace = newOrderInv.bizplace\n savedOrderInv.domain = domain\n savedOrderInv.creator = user\n savedOrderInv.updater = user\n\n if (newOrderInv?.id) {\n // newOrderInv will have id if it was updated from existingOrderInv\n // this solution will remove ix_order-inventory_0 unique error\n // ** please revise this resolver in future. looks like there's few\n // things that can refactor\n savedOrderInv.id = newOrderInv.id\n }\n\n savedOrderInv = await tx.getRepository(OrderInventory).save(savedOrderInv)\n\n if (!existingOrderInv && pickingWorksheet) {\n // if this is a new orderInventory and has existing worksheet then generate a new worksheet detail for it\n await generatePickingWorksheetDetail(tx, domain, user, pickingWorksheet, savedOrderInv)\n }\n }\n }\n\n await tx.getRepository(Worksheet).save(pickingWorksheet)\n }\n\n if (loadingWorksheet) {\n // if has loading worksheet, status will be deactivated to prevent any action from warehouse operator until office admin has confirmation\n loadingWorksheet = {\n ...loadingWorksheet,\n status: WORKSHEET_STATUS.DEACTIVATED\n }\n\n await tx.getRepository(Worksheet).save(loadingWorksheet)\n }\n\n // Update Order Product Release Qty\n let rgOrderProducts: OrderProduct[] = await tx\n .getRepository(OrderProduct)\n .find({ where: { domain: { id: domain.id }, releaseGood: { id: releaseGood.id } } })\n\n await Promise.all(\n rgOrderProducts.map(async op => {\n const orderInventories: OrderInventory[] = await tx.getRepository(OrderInventory).find({\n where: {\n domain: { id: domain.id },\n releaseGood: { id: releaseGood.id },\n orderProduct: { id: op.id },\n status: Not(\n In([\n ORDER_INVENTORY_STATUS.TERMINATED,\n ORDER_INVENTORY_STATUS.CANCELLED,\n ORDER_INVENTORY_STATUS.PENDING_CANCEL\n ])\n )\n }\n })\n\n let totalReleaseQty: number = orderInventories.reduce((total, currentValue) => {\n total += currentValue.releaseQty\n return total\n }, 0)\n\n let totalReleaseUomValue: number = orderInventories.reduce((total, currentValue) => {\n total += currentValue.releaseUomValue\n return total\n }, 0)\n\n let updateOPInfo: any = {\n releaseQty: totalReleaseQty,\n releaseUomValue: totalReleaseUomValue\n }\n\n if (totalReleaseQty <= 0) {\n updateOPInfo.status = ORDER_PRODUCT_STATUS.TERMINATED\n }\n\n await tx.getRepository(OrderProduct).update({ id: op.id }, updateOPInfo)\n })\n )\n } catch (error) {\n throw error\n }\n }\n}\n"]}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Mutation = exports.Query = void 0;
4
+ const add_release_good_products_1 = require("./add-release-good-products");
5
+ const page_settings_1 = require("./page-settings");
6
+ exports.Query = Object.assign({}, page_settings_1.pageSettings);
7
+ exports.Mutation = Object.assign({}, add_release_good_products_1.addReleaseGoodProducts);
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/other/index.ts"],"names":[],"mappings":";;;AAAA,2EAAoE;AACpE,mDAA8C;AAEjC,QAAA,KAAK,qBACX,4BAAY,EAClB;AAEY,QAAA,QAAQ,qBACd,kDAAsB,EAC5B","sourcesContent":["import { addReleaseGoodProducts } from './add-release-good-products'\nimport { pageSettings } from './page-settings'\n\nexport const Query = {\n ...pageSettings\n}\n\nexport const Mutation = {\n ...addReleaseGoodProducts\n}\n"]}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pageSettings = void 0;
4
+ const typeorm_1 = require("typeorm");
5
+ const shell_1 = require("@things-factory/shell");
6
+ const biz_base_1 = require("@things-factory/biz-base");
7
+ const code_base_1 = require("@things-factory/code-base");
8
+ exports.pageSettings = {
9
+ async pageSettings(_, { codes, partners }, context) {
10
+ const { domain, user, tx } = context.state;
11
+ try {
12
+ let promiseTask = [];
13
+ if (codes) {
14
+ promiseTask.push(queryCommonCode(codes, domain, tx, context));
15
+ }
16
+ if (partners) {
17
+ promiseTask.push(queryPartners(partners, domain, tx, context));
18
+ }
19
+ return await Promise.all(promiseTask);
20
+ }
21
+ catch (error) {
22
+ throw error;
23
+ }
24
+ }
25
+ };
26
+ async function queryCommonCode(codes, domain, tx, context) {
27
+ const codeQb = tx.getRepository(code_base_1.CommonCode).createQueryBuilder('cc');
28
+ (0, shell_1.buildQuery)(codeQb, { filters: codes }, context);
29
+ codes = (await codeQb
30
+ .leftJoinAndSelect('cc.details', 'ccdet')
31
+ .orderBy('cc.name')
32
+ .addOrderBy('ccdet.rank')
33
+ .addOrderBy('ccdet.name')
34
+ .getMany()).map((cc) => {
35
+ return {
36
+ id: cc.id,
37
+ name: cc.name,
38
+ description: cc.description,
39
+ settingDetails: cc.details.map(det => {
40
+ return {
41
+ id: det.id,
42
+ name: det.name,
43
+ description: det.description,
44
+ rank: det.rank
45
+ };
46
+ })
47
+ };
48
+ });
49
+ return {
50
+ type: 'code',
51
+ details: codes
52
+ };
53
+ }
54
+ async function queryPartners(partners, domain, tx, context) {
55
+ var _a;
56
+ let partnersBizplaceIds = [];
57
+ let bizplaceIndex = (_a = partners.filters) === null || _a === void 0 ? void 0 : _a.findIndex(x => x.name === 'bizplace');
58
+ if (bizplaceIndex && bizplaceIndex > -1) {
59
+ partnersBizplaceIds = partners.filters
60
+ .filter(x => x.name === 'bizplace')
61
+ .map(item => {
62
+ return item.value;
63
+ });
64
+ partners.filters.splice(bizplaceIndex, 1);
65
+ }
66
+ const convertedParams = (0, shell_1.convertListParams)({ filters: partners });
67
+ if (!(partnersBizplaceIds.length > 0)) {
68
+ const partnersBizplaces = await (0, biz_base_1.getPartnersBizplaces)(context.state.domain, context.state.user);
69
+ partnersBizplaceIds = partnersBizplaces.map((bizplace) => bizplace.id || null);
70
+ convertedParams.where.id = (0, typeorm_1.In)(partnersBizplaceIds);
71
+ }
72
+ else {
73
+ convertedParams.where.id = (0, typeorm_1.In)(partnersBizplaceIds);
74
+ }
75
+ partners = ((await tx.getRepository(biz_base_1.Bizplace).find(Object.assign(Object.assign({}, convertedParams), { relations: ['domain', 'company', 'users', 'creator', 'updater'] }))).map((biz) => {
76
+ return {
77
+ id: biz.id,
78
+ name: biz.name,
79
+ description: biz.description,
80
+ };
81
+ }));
82
+ return {
83
+ type: 'partner',
84
+ details: partners
85
+ };
86
+ }
87
+ //# sourceMappingURL=page-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-settings.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/other/page-settings.ts"],"names":[],"mappings":"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","sourcesContent":["import { getRepository, EntityManager, In } from 'typeorm'\n\nimport { Sequence, SEQUENCE_TYPE } from '@things-factory/id-rule-base'\nimport { buildQuery, Domain, ListParam, convertListParams } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport {\n getMyBizplace,\n getPartnerBizplaceIds,\n getPartnersBizplaces,\n getPartnersCompanyBizplaces,\n getPermittedBizplaceIds,\n Bizplace\n} from '@things-factory/biz-base'\n\nimport { CommonCode as CommonCodeEntity, CommonCodeDetail as CommonCodeDetailEntity } from '@things-factory/code-base'\n\nexport const pageSettings = {\n async pageSettings(_: any, { codes, partners }, context: any) {\n const { domain, user, tx }: { domain: Domain; user: User; tx: EntityManager } = context.state\n try {\n let promiseTask = []\n if (codes) {\n promiseTask.push(queryCommonCode(codes, domain, tx, context))\n }\n\n if (partners) {\n promiseTask.push(queryPartners(partners, domain, tx, context))\n }\n\n return await Promise.all(promiseTask)\n } catch (error) {\n throw error\n }\n }\n}\n\nasync function queryCommonCode(codes, domain, tx, context) {\n const codeQb = tx.getRepository(CommonCodeEntity).createQueryBuilder('cc')\n buildQuery(codeQb, { filters: codes }, context)\n\n codes = (await codeQb\n .leftJoinAndSelect('cc.details', 'ccdet')\n .orderBy('cc.name')\n .addOrderBy('ccdet.rank')\n .addOrderBy('ccdet.name')\n .getMany()).map((cc: CommonCodeEntity) => {\n return {\n id: cc.id,\n name: cc.name,\n description: cc.description,\n settingDetails: cc.details.map(det => {\n return {\n id: det.id,\n name: det.name,\n description: det.description,\n rank: det.rank\n }\n })\n }\n })\n\n return {\n type: 'code',\n details: codes\n }\n}\n\nasync function queryPartners(partners, domain, tx, context) {\n let partnersBizplaceIds = []\n let bizplaceIndex: any = partners.filters?.findIndex(x => x.name === 'bizplace')\n if (bizplaceIndex && bizplaceIndex > -1) {\n partnersBizplaceIds = partners.filters\n .filter(x => x.name === 'bizplace')\n .map(item => {\n return item.value\n })\n partners.filters.splice(bizplaceIndex, 1)\n }\n\n const convertedParams = convertListParams({ filters: partners })\n\n if (!(partnersBizplaceIds.length > 0)) {\n const partnersBizplaces: Bizplace[] = await getPartnersBizplaces(context.state.domain, context.state.user)\n partnersBizplaceIds = partnersBizplaces.map((bizplace: Bizplace) => bizplace.id || null)\n convertedParams.where.id = In(partnersBizplaceIds)\n } else {\n convertedParams.where.id = In(partnersBizplaceIds)\n }\n\n partners = ((await tx.getRepository(Bizplace).find({\n ...convertedParams,\n relations: ['domain', 'company', 'users', 'creator', 'updater']\n })).map((biz: Bizplace) => {\n return {\n id: biz.id,\n name: biz.name,\n description: biz.description,\n }\n }))\n\n return {\n type: 'partner',\n details: partners\n }\n}"]}