@rytass/wms-module-core 0.1.0

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 (199) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +80 -0
  3. package/index.cjs.js +6479 -0
  4. package/index.d.ts +5 -0
  5. package/index.js +74 -0
  6. package/lib/constants/index.d.ts +1 -0
  7. package/lib/constants/stock-status.d.ts +30 -0
  8. package/lib/constants/stock-status.js +51 -0
  9. package/lib/core.module.d.ts +7 -0
  10. package/lib/core.module.js +102 -0
  11. package/lib/models/extensions/allocate-inventory-order/allocate-inventory-order-change.entity.d.ts +10 -0
  12. package/lib/models/extensions/allocate-inventory-order/allocate-inventory-order-change.entity.js +40 -0
  13. package/lib/models/extensions/allocate-inventory-order/allocate-inventory-order-item.entity.d.ts +20 -0
  14. package/lib/models/extensions/allocate-inventory-order/allocate-inventory-order-item.entity.js +103 -0
  15. package/lib/models/extensions/allocate-inventory-order/allocate-inventory-order.entity.d.ts +8 -0
  16. package/lib/models/extensions/allocate-inventory-order/allocate-inventory-order.entity.js +33 -0
  17. package/lib/models/extensions/hold-inventory-order/hold-inventory-order-change.entity.d.ts +10 -0
  18. package/lib/models/extensions/hold-inventory-order/hold-inventory-order-change.entity.js +40 -0
  19. package/lib/models/extensions/hold-inventory-order/hold-inventory-order-item.entity.d.ts +19 -0
  20. package/lib/models/extensions/hold-inventory-order/hold-inventory-order-item.entity.js +97 -0
  21. package/lib/models/extensions/hold-inventory-order/hold-inventory-order.entity.d.ts +10 -0
  22. package/lib/models/extensions/hold-inventory-order/hold-inventory-order.entity.js +43 -0
  23. package/lib/models/extensions/index.d.ts +37 -0
  24. package/lib/models/extensions/merge-batch-order/merge-batch-order-change.entity.d.ts +10 -0
  25. package/lib/models/extensions/merge-batch-order/merge-batch-order-change.entity.js +40 -0
  26. package/lib/models/extensions/merge-batch-order/merge-batch-order-item.entity.d.ts +15 -0
  27. package/lib/models/extensions/merge-batch-order/merge-batch-order-item.entity.js +74 -0
  28. package/lib/models/extensions/merge-batch-order/merge-batch-order.entity.d.ts +8 -0
  29. package/lib/models/extensions/merge-batch-order/merge-batch-order.entity.js +33 -0
  30. package/lib/models/extensions/quality-inspection-order/quality-inspection-order-change.entity.d.ts +11 -0
  31. package/lib/models/extensions/quality-inspection-order/quality-inspection-order-change.entity.js +45 -0
  32. package/lib/models/extensions/quality-inspection-order/quality-inspection-order-item.entity.d.ts +18 -0
  33. package/lib/models/extensions/quality-inspection-order/quality-inspection-order-item.entity.js +93 -0
  34. package/lib/models/extensions/quality-inspection-order/quality-inspection-order.entity.d.ts +9 -0
  35. package/lib/models/extensions/quality-inspection-order/quality-inspection-order.entity.js +38 -0
  36. package/lib/models/extensions/receive-inventory-order/receive-inventory-order-change.entity.d.ts +12 -0
  37. package/lib/models/extensions/receive-inventory-order/receive-inventory-order-change.entity.js +46 -0
  38. package/lib/models/extensions/receive-inventory-order/receive-inventory-order-item.entity.d.ts +19 -0
  39. package/lib/models/extensions/receive-inventory-order/receive-inventory-order-item.entity.js +89 -0
  40. package/lib/models/extensions/receive-inventory-order/receive-inventory-order.entity.d.ts +13 -0
  41. package/lib/models/extensions/receive-inventory-order/receive-inventory-order.entity.js +57 -0
  42. package/lib/models/extensions/reclassify-inventory-order/reclassify-inventory-order-change.entity.d.ts +10 -0
  43. package/lib/models/extensions/reclassify-inventory-order/reclassify-inventory-order-change.entity.js +40 -0
  44. package/lib/models/extensions/reclassify-inventory-order/reclassify-inventory-order-item.entity.d.ts +15 -0
  45. package/lib/models/extensions/reclassify-inventory-order/reclassify-inventory-order-item.entity.js +74 -0
  46. package/lib/models/extensions/reclassify-inventory-order/reclassify-inventory-order.entity.d.ts +8 -0
  47. package/lib/models/extensions/reclassify-inventory-order/reclassify-inventory-order.entity.js +33 -0
  48. package/lib/models/extensions/scrape-order/scrape-order-change.entity.d.ts +10 -0
  49. package/lib/models/extensions/scrape-order/scrape-order-change.entity.js +40 -0
  50. package/lib/models/extensions/scrape-order/scrape-order-item.entity.d.ts +18 -0
  51. package/lib/models/extensions/scrape-order/scrape-order-item.entity.js +93 -0
  52. package/lib/models/extensions/scrape-order/scrape-order.entity.d.ts +8 -0
  53. package/lib/models/extensions/scrape-order/scrape-order.entity.js +33 -0
  54. package/lib/models/extensions/ship-inventory-order/ship-inventory-order-change.entity.d.ts +12 -0
  55. package/lib/models/extensions/ship-inventory-order/ship-inventory-order-change.entity.js +46 -0
  56. package/lib/models/extensions/ship-inventory-order/ship-inventory-order-item.entity.d.ts +19 -0
  57. package/lib/models/extensions/ship-inventory-order/ship-inventory-order-item.entity.js +90 -0
  58. package/lib/models/extensions/ship-inventory-order/ship-inventory-order-reference.entity.d.ts +13 -0
  59. package/lib/models/extensions/ship-inventory-order/ship-inventory-order-reference.entity.js +65 -0
  60. package/lib/models/extensions/ship-inventory-order/ship-inventory-order.entity.d.ts +13 -0
  61. package/lib/models/extensions/ship-inventory-order/ship-inventory-order.entity.js +56 -0
  62. package/lib/models/extensions/split-batch-order/split-batch-order-change.entity.d.ts +10 -0
  63. package/lib/models/extensions/split-batch-order/split-batch-order-change.entity.js +40 -0
  64. package/lib/models/extensions/split-batch-order/split-batch-order-item.entity.d.ts +15 -0
  65. package/lib/models/extensions/split-batch-order/split-batch-order-item.entity.js +74 -0
  66. package/lib/models/extensions/split-batch-order/split-batch-order.entity.d.ts +8 -0
  67. package/lib/models/extensions/split-batch-order/split-batch-order.entity.js +33 -0
  68. package/lib/models/extensions/transfer-customer-order/transfer-customer-order-change.entity.d.ts +10 -0
  69. package/lib/models/extensions/transfer-customer-order/transfer-customer-order-change.entity.js +40 -0
  70. package/lib/models/extensions/transfer-customer-order/transfer-customer-order-item.entity.d.ts +19 -0
  71. package/lib/models/extensions/transfer-customer-order/transfer-customer-order-item.entity.js +98 -0
  72. package/lib/models/extensions/transfer-customer-order/transfer-customer-order.entity.d.ts +8 -0
  73. package/lib/models/extensions/transfer-customer-order/transfer-customer-order.entity.js +33 -0
  74. package/lib/models/extensions/transfer-order/transfer-order-change.entity.d.ts +10 -0
  75. package/lib/models/extensions/transfer-order/transfer-order-change.entity.js +40 -0
  76. package/lib/models/extensions/transfer-order/transfer-order-item.entity.d.ts +21 -0
  77. package/lib/models/extensions/transfer-order/transfer-order-item.entity.js +108 -0
  78. package/lib/models/extensions/transfer-order/transfer-order.entity.d.ts +12 -0
  79. package/lib/models/extensions/transfer-order/transfer-order.entity.js +53 -0
  80. package/lib/models/extensions/transfer-vendor-order/transfer-vendor-order-change.entity.d.ts +10 -0
  81. package/lib/models/extensions/transfer-vendor-order/transfer-vendor-order-change.entity.js +40 -0
  82. package/lib/models/extensions/transfer-vendor-order/transfer-vendor-order-item.entity.d.ts +19 -0
  83. package/lib/models/extensions/transfer-vendor-order/transfer-vendor-order-item.entity.js +98 -0
  84. package/lib/models/extensions/transfer-vendor-order/transfer-vendor-order.entity.d.ts +8 -0
  85. package/lib/models/extensions/transfer-vendor-order/transfer-vendor-order.entity.js +33 -0
  86. package/lib/models/index.d.ts +2 -0
  87. package/lib/models/metadata/batch-group.entity.d.ts +8 -0
  88. package/lib/models/metadata/batch-group.entity.js +31 -0
  89. package/lib/models/metadata/batch.entity.d.ts +15 -0
  90. package/lib/models/metadata/batch.entity.js +73 -0
  91. package/lib/models/metadata/index.d.ts +11 -0
  92. package/lib/models/metadata/loader-type.entity.d.ts +9 -0
  93. package/lib/models/metadata/loader-type.entity.js +43 -0
  94. package/lib/models/metadata/loader-unit.entity.d.ts +5 -0
  95. package/lib/models/metadata/loader-unit.entity.js +21 -0
  96. package/lib/models/metadata/loader.entity.d.ts +21 -0
  97. package/lib/models/metadata/loader.entity.js +98 -0
  98. package/lib/models/metadata/location.entity.d.ts +8 -0
  99. package/lib/models/metadata/location.entity.js +28 -0
  100. package/lib/models/metadata/material-unit.entity.d.ts +11 -0
  101. package/lib/models/metadata/material-unit.entity.js +51 -0
  102. package/lib/models/metadata/material.entity.d.ts +7 -0
  103. package/lib/models/metadata/material.entity.js +28 -0
  104. package/lib/models/metadata/sale-order.entity.d.ts +5 -0
  105. package/lib/models/metadata/sale-order.entity.js +21 -0
  106. package/lib/models/metadata/stock.entity.d.ts +8 -0
  107. package/lib/models/metadata/stock.entity.js +29 -0
  108. package/lib/models/metadata/unit.entity.d.ts +5 -0
  109. package/lib/models/metadata/unit.entity.js +21 -0
  110. package/lib/models/models.module.d.ts +6 -0
  111. package/lib/models/models.module.js +122 -0
  112. package/lib/services/allocate-inventory-order.service.d.ts +29 -0
  113. package/lib/services/allocate-inventory-order.service.js +299 -0
  114. package/lib/services/base-order.service.d.ts +41 -0
  115. package/lib/services/batch.service.d.ts +30 -0
  116. package/lib/services/batch.service.js +218 -0
  117. package/lib/services/helper.service.d.ts +6 -0
  118. package/lib/services/helper.service.js +28 -0
  119. package/lib/services/hold-inventory-order.service.d.ts +29 -0
  120. package/lib/services/hold-inventory-order.service.js +285 -0
  121. package/lib/services/index.d.ts +22 -0
  122. package/lib/services/loader.service.d.ts +43 -0
  123. package/lib/services/loader.service.js +282 -0
  124. package/lib/services/location.service.d.ts +13 -0
  125. package/lib/services/location.service.js +130 -0
  126. package/lib/services/material.service.d.ts +27 -0
  127. package/lib/services/material.service.js +172 -0
  128. package/lib/services/merge-batch-order.service.d.ts +19 -0
  129. package/lib/services/merge-batch-order.service.js +195 -0
  130. package/lib/services/quality-inspection-order.service.d.ts +19 -0
  131. package/lib/services/quality-inspection-order.service.js +135 -0
  132. package/lib/services/receive-inventory-order.service.d.ts +41 -0
  133. package/lib/services/receive-inventory-order.service.js +407 -0
  134. package/lib/services/reclassify-inventory-order.service.d.ts +19 -0
  135. package/lib/services/reclassify-inventory-order.service.js +181 -0
  136. package/lib/services/sale-order.service.d.ts +7 -0
  137. package/lib/services/sale-order.service.js +20 -0
  138. package/lib/services/scrape.service.d.ts +18 -0
  139. package/lib/services/scrape.service.js +139 -0
  140. package/lib/services/ship-inventory-order.service.d.ts +60 -0
  141. package/lib/services/ship-inventory-order.service.js +599 -0
  142. package/lib/services/split-batch-order.service.d.ts +19 -0
  143. package/lib/services/split-batch-order.service.js +161 -0
  144. package/lib/services/stock.service.d.ts +38 -0
  145. package/lib/services/stock.service.js +477 -0
  146. package/lib/services/transfer-customer-order.service.d.ts +35 -0
  147. package/lib/services/transfer-customer-order.service.js +279 -0
  148. package/lib/services/transfer-order.service.d.ts +44 -0
  149. package/lib/services/transfer-order.service.js +632 -0
  150. package/lib/services/transfer-vendor-order.service.d.ts +35 -0
  151. package/lib/services/transfer-vendor-order.service.js +279 -0
  152. package/lib/services/unit.service.d.ts +7 -0
  153. package/lib/services/unit.service.js +67 -0
  154. package/lib/services/warehouse-map.service.d.ts +10 -0
  155. package/lib/services/warehouse-map.service.js +38 -0
  156. package/lib/typings/aggregated-stock.d.ts +22 -0
  157. package/lib/typings/cancel-ship-inventory-order.input.d.ts +4 -0
  158. package/lib/typings/cancel-transfer-order.input.d.ts +4 -0
  159. package/lib/typings/core-module-options.d.ts +8 -0
  160. package/lib/typings/core-module-options.js +3 -0
  161. package/lib/typings/create-allocate-inventory-order.input.d.ts +25 -0
  162. package/lib/typings/create-hold-inventory-order.input.d.ts +21 -0
  163. package/lib/typings/create-inspection-order.input.d.ts +14 -0
  164. package/lib/typings/create-loader-type.input.d.ts +9 -0
  165. package/lib/typings/create-loader.input.d.ts +15 -0
  166. package/lib/typings/create-location.input.d.ts +12 -0
  167. package/lib/typings/create-material-unit.input.d.ts +5 -0
  168. package/lib/typings/create-material.input.d.ts +11 -0
  169. package/lib/typings/create-receive-inventory-order.input.d.ts +26 -0
  170. package/lib/typings/create-ship-inventory-order.input.d.ts +46 -0
  171. package/lib/typings/create-transfer-customer-order.input.d.ts +25 -0
  172. package/lib/typings/create-transfer-order.input.d.ts +25 -0
  173. package/lib/typings/create-transfer-vendor-order.input.d.ts +25 -0
  174. package/lib/typings/deallocate-inventory-order.d.ts +8 -0
  175. package/lib/typings/find-allocate-inventory-order.input.d.ts +13 -0
  176. package/lib/typings/find-batch.input.d.ts +8 -0
  177. package/lib/typings/find-hold-inventory-order.input.d.ts +13 -0
  178. package/lib/typings/find-loader.input.d.ts +33 -0
  179. package/lib/typings/find-location.input.d.ts +10 -0
  180. package/lib/typings/find-material.input.d.ts +10 -0
  181. package/lib/typings/find-receive-inventory-order.input.d.ts +26 -0
  182. package/lib/typings/find-receive-inventory-order.input.js +9 -0
  183. package/lib/typings/find-ship-inventory-order.input.d.ts +26 -0
  184. package/lib/typings/find-ship-inventory-order.input.js +9 -0
  185. package/lib/typings/find-stock.input.d.ts +21 -0
  186. package/lib/typings/find-transfer-order.input.d.ts +21 -0
  187. package/lib/typings/get-batch.input.d.ts +14 -0
  188. package/lib/typings/index.d.ts +18 -0
  189. package/lib/typings/merge-batch.input.d.ts +11 -0
  190. package/lib/typings/paginations.d.ts +4 -0
  191. package/lib/typings/receive-inventory-order.input.d.ts +8 -0
  192. package/lib/typings/reclassify-inventory-order.input.d.ts +11 -0
  193. package/lib/typings/release-inventory-order.input.d.ts +8 -0
  194. package/lib/typings/scrape.input.d.ts +8 -0
  195. package/lib/typings/ship-inventory-order.input.d.ts +4 -0
  196. package/lib/typings/split-batch.input.d.ts +10 -0
  197. package/lib/typings/transfer-order.input.d.ts +4 -0
  198. package/package.json +52 -0
  199. package/src/lib/models/extensions/README.md +219 -0
@@ -0,0 +1,285 @@
1
+ import { __decorate, __param, __metadata } from 'tslib';
2
+ import { Injectable, Inject } from '@nestjs/common';
3
+ import '../models/metadata/batch.entity.js';
4
+ import '../models/metadata/batch-group.entity.js';
5
+ import '../models/metadata/loader.entity.js';
6
+ import '../models/metadata/loader-type.entity.js';
7
+ import '../models/metadata/loader-unit.entity.js';
8
+ import '../models/metadata/location.entity.js';
9
+ import '../models/metadata/material.entity.js';
10
+ import '../models/metadata/material-unit.entity.js';
11
+ import '../models/metadata/sale-order.entity.js';
12
+ import { StockEntity } from '../models/metadata/stock.entity.js';
13
+ import '../models/metadata/unit.entity.js';
14
+ import '../models/extensions/receive-inventory-order/receive-inventory-order-item.entity.js';
15
+ import '../models/extensions/receive-inventory-order/receive-inventory-order.entity.js';
16
+ import '../models/extensions/receive-inventory-order/receive-inventory-order-change.entity.js';
17
+ import '../models/extensions/ship-inventory-order/ship-inventory-order-item.entity.js';
18
+ import '../models/extensions/ship-inventory-order/ship-inventory-order.entity.js';
19
+ import '../models/extensions/ship-inventory-order/ship-inventory-order-reference.entity.js';
20
+ import '../models/extensions/ship-inventory-order/ship-inventory-order-change.entity.js';
21
+ import '../models/extensions/transfer-order/transfer-order.entity.js';
22
+ import '../models/extensions/transfer-order/transfer-order-item.entity.js';
23
+ import '../models/extensions/transfer-order/transfer-order-change.entity.js';
24
+ import { HoldInventoryOrderEntity } from '../models/extensions/hold-inventory-order/hold-inventory-order.entity.js';
25
+ import { HoldInventoryOrderItemEntity } from '../models/extensions/hold-inventory-order/hold-inventory-order-item.entity.js';
26
+ import { HoldInventoryOrderChangeEntityClass } from '../models/extensions/hold-inventory-order/hold-inventory-order-change.entity.js';
27
+ import '../models/extensions/allocate-inventory-order/allocate-inventory-order.entity.js';
28
+ import '../models/extensions/allocate-inventory-order/allocate-inventory-order-item.entity.js';
29
+ import '../models/extensions/allocate-inventory-order/allocate-inventory-order-change.entity.js';
30
+ import '../models/extensions/split-batch-order/split-batch-order.entity.js';
31
+ import '../models/extensions/split-batch-order/split-batch-order-item.entity.js';
32
+ import '../models/extensions/split-batch-order/split-batch-order-change.entity.js';
33
+ import '../models/extensions/merge-batch-order/merge-batch-order.entity.js';
34
+ import '../models/extensions/merge-batch-order/merge-batch-order-item.entity.js';
35
+ import '../models/extensions/merge-batch-order/merge-batch-order-change.entity.js';
36
+ import '../models/extensions/reclassify-inventory-order/reclassify-inventory-order.entity.js';
37
+ import '../models/extensions/reclassify-inventory-order/reclassify-inventory-order-item.entity.js';
38
+ import '../models/extensions/reclassify-inventory-order/reclassify-inventory-order-change.entity.js';
39
+ import '../models/extensions/transfer-vendor-order/transfer-vendor-order.entity.js';
40
+ import '../models/extensions/transfer-vendor-order/transfer-vendor-order-item.entity.js';
41
+ import '../models/extensions/transfer-vendor-order/transfer-vendor-order-change.entity.js';
42
+ import '../models/extensions/quality-inspection-order/quality-inspection-order.entity.js';
43
+ import '../models/extensions/quality-inspection-order/quality-inspection-order-item.entity.js';
44
+ import '../models/extensions/quality-inspection-order/quality-inspection-order-change.entity.js';
45
+ import '../models/extensions/transfer-customer-order/transfer-customer-order.entity.js';
46
+ import '../models/extensions/transfer-customer-order/transfer-customer-order-item.entity.js';
47
+ import '../models/extensions/transfer-customer-order/transfer-customer-order-change.entity.js';
48
+ import '../models/extensions/scrape-order/scrape-order.entity.js';
49
+ import '../models/extensions/scrape-order/scrape-order-item.entity.js';
50
+ import '../models/extensions/scrape-order/scrape-order-change.entity.js';
51
+ import { DataSource } from 'typeorm';
52
+ import { HelperService } from './helper.service.js';
53
+ import { OrderEntity } from '@rytass/wms-base-nestjs-module';
54
+ import { MaterialService } from './material.service.js';
55
+ import { BatchService } from './batch.service.js';
56
+ import { StockService } from './stock.service.js';
57
+
58
+ let HoldInventoryOrderService = class HoldInventoryOrderService {
59
+ dataSource;
60
+ helperService;
61
+ materialService;
62
+ batchService;
63
+ stockService;
64
+ holdInventoryOrderEntity;
65
+ holdInventoryOrderItemEntity;
66
+ stockEntity;
67
+ seqPrefix = 'HIO';
68
+ constructor(dataSource, helperService, materialService, batchService, stockService, holdInventoryOrderEntity, holdInventoryOrderItemEntity, stockEntity) {
69
+ this.dataSource = dataSource;
70
+ this.helperService = helperService;
71
+ this.materialService = materialService;
72
+ this.batchService = batchService;
73
+ this.stockService = stockService;
74
+ this.holdInventoryOrderEntity = holdInventoryOrderEntity;
75
+ this.holdInventoryOrderItemEntity = holdInventoryOrderItemEntity;
76
+ this.stockEntity = stockEntity;
77
+ }
78
+ getRepositories(manager) {
79
+ return {
80
+ holdInventoryOrder: manager.getRepository(this.holdInventoryOrderEntity),
81
+ holdInventoryOrderItem: manager.getRepository(this.holdInventoryOrderItemEntity),
82
+ holdInventoryOrderChange: manager.getRepository(HoldInventoryOrderChangeEntityClass),
83
+ stock: manager.getRepository(this.stockEntity),
84
+ order: manager.getRepository(OrderEntity),
85
+ };
86
+ }
87
+ async processHoldInventoryOrderItems(items, repos, manager) {
88
+ await Promise.all(items.map(async (data) => {
89
+ // Ensure required fields are present
90
+ if (!data.batchId || !data.materialId)
91
+ return;
92
+ // Split batch first with held flag to track held state
93
+ const splittedBatch = await this.batchService.splitBatch({
94
+ id: data.batchId,
95
+ held: true,
96
+ manager,
97
+ });
98
+ // Save item with ORIGINAL batch id to maintain source state
99
+ const item = await repos.holdInventoryOrderItem.save(repos.holdInventoryOrderItem.create(data));
100
+ const base = await repos.order.save({});
101
+ const conversionFactor = await this.materialService.getConversionFactor(item.materialId, item.unitId || undefined);
102
+ await repos.holdInventoryOrderChange.save(repos.holdInventoryOrderChange.create({
103
+ itemId: item.id,
104
+ id: base.id,
105
+ quantityChanged: item.targetHeldQuantity * conversionFactor,
106
+ }));
107
+ // Stock movements track the hold through splitted batch
108
+ await this.stockService.validateStockAvailability({
109
+ materialId: item.materialId,
110
+ batchId: item.batchId,
111
+ locationId: this.stockService.resolveLocationId(item.locationId),
112
+ loaderId: this.stockService.resolveLoaderId(item.loaderId),
113
+ quantity: item.targetHeldQuantity * conversionFactor,
114
+ }, manager);
115
+ await repos.stock.save(repos.stock.create([
116
+ // deduct from original batch available stock
117
+ {
118
+ orderId: base.id,
119
+ materialId: item.materialId,
120
+ batchId: item.batchId, // original batch
121
+ locationId: this.stockService.resolveLocationId(item.locationId),
122
+ loaderId: this.stockService.resolveLoaderId(item.loaderId),
123
+ quantity: -1 * item.targetHeldQuantity * conversionFactor,
124
+ },
125
+ // add to splitted batch in held state
126
+ {
127
+ orderId: base.id,
128
+ materialId: item.materialId,
129
+ batchId: splittedBatch.id, // splitted batch marked held
130
+ locationId: this.stockService.resolveLocationId(item.locationId),
131
+ loaderId: this.stockService.resolveLoaderId(item.loaderId),
132
+ quantity: item.targetHeldQuantity * conversionFactor,
133
+ },
134
+ ]));
135
+ }));
136
+ }
137
+ async createHoldInventoryOrder(options, manager = this.dataSource.manager) {
138
+ const repos = this.getRepositories(manager);
139
+ const { items, ...orderOptions } = options;
140
+ const key = await this.helperService.getSeq(this.seqPrefix, manager);
141
+ const order = await repos.holdInventoryOrder.save(repos.holdInventoryOrder.create({ key, ...orderOptions }));
142
+ if (items?.length > 0) {
143
+ const processedItems = items.map((item) => ({
144
+ ...item,
145
+ orderId: order.id,
146
+ }));
147
+ await this.processHoldInventoryOrderItems(processedItems, repos, manager);
148
+ }
149
+ return order;
150
+ }
151
+ async updateHoldInventoryOrder({ id, manager = this.dataSource.manager, ...options }) {
152
+ const repos = this.getRepositories(manager);
153
+ const { items, ...orderOptions } = options;
154
+ const order = await repos.holdInventoryOrder.findOneBy({ id });
155
+ const updated = await repos.holdInventoryOrder.save({
156
+ ...order,
157
+ ...orderOptions,
158
+ });
159
+ if (items?.length) {
160
+ const existingItemIds = new Set((await repos.holdInventoryOrderItem.find({ where: { orderId: id } })).map((i) => i.id));
161
+ const newItems = [];
162
+ const existingItems = [];
163
+ items.forEach((item) => {
164
+ if (item.removedAt)
165
+ return;
166
+ if (!item.id)
167
+ newItems.push({ ...item, orderId: id });
168
+ else if (existingItemIds.has(item.id))
169
+ existingItems.push({ ...item, orderId: id });
170
+ });
171
+ if (newItems.length)
172
+ await this.processHoldInventoryOrderItems(newItems, repos, manager);
173
+ if (existingItems.length)
174
+ await repos.holdInventoryOrderItem.save(await Promise.all(existingItems.map((item) => repos.holdInventoryOrderItem.create(item))));
175
+ }
176
+ return updated;
177
+ }
178
+ findMany(options) {
179
+ const queryBuilder = this.dataSource
180
+ .getRepository(this.holdInventoryOrderEntity)
181
+ .createQueryBuilder('to');
182
+ if (options.key)
183
+ queryBuilder.andWhere('to.key ILIKE :key', { key: `%${options.key}%` });
184
+ if (options.dateRange)
185
+ queryBuilder.andWhere('to.createdAt BETWEEN :start AND :end', {
186
+ start: options.dateRange.from,
187
+ end: options.dateRange.to,
188
+ });
189
+ if (options.materialId)
190
+ queryBuilder.innerJoin('to.items', 'm_items', 'm_items.materialId = :materialId', {
191
+ materialId: options.materialId,
192
+ });
193
+ if (options.batchId)
194
+ queryBuilder.innerJoin('to.items', 'b_items', 'b_items.batchId = :batchId', {
195
+ batchId: options.batchId,
196
+ });
197
+ if (options.locationId)
198
+ queryBuilder.innerJoin('to.items', 'l_items', 'l_items.locationId = :locationId', {
199
+ locationId: options.locationId,
200
+ });
201
+ if (options.loaderId)
202
+ queryBuilder.innerJoin('to.items', 'ld_items', 'ld_items.loaderId = :loaderId', {
203
+ loaderId: options.loaderId,
204
+ });
205
+ if (options.offset !== undefined && options.offset >= 0)
206
+ queryBuilder.skip(options.offset);
207
+ if (options.limit !== undefined && options.limit > 0)
208
+ queryBuilder.take(options.limit);
209
+ return queryBuilder.getManyAndCount();
210
+ }
211
+ async release(options, manager = this.dataSource.manager) {
212
+ if (!Array.isArray(options))
213
+ options = [options];
214
+ const repos = this.getRepositories(manager);
215
+ const key = await this.helperService.getSeq(this.seqPrefix, manager);
216
+ const order = await repos.holdInventoryOrder.save(repos.holdInventoryOrder.create({ key }));
217
+ if (options.length > 0) {
218
+ await Promise.all(options.map(async (data) => {
219
+ // Ensure required fields are present
220
+ if (!data.batchId || !data.materialId)
221
+ return;
222
+ const splittedBatch = await this.batchService.splitBatch({
223
+ id: data.batchId,
224
+ held: false, // split to release the hold
225
+ manager,
226
+ });
227
+ // Save item with ORIGINAL batch id to maintain source state
228
+ const item = await repos.holdInventoryOrderItem.save(repos.holdInventoryOrderItem.create({
229
+ ...data,
230
+ targetHeldQuantity: -1 * data.quantity,
231
+ orderId: order.id,
232
+ }));
233
+ const base = await repos.order.save({});
234
+ const conversionFactor = await this.materialService.getConversionFactor(item.materialId, item.unitId || undefined);
235
+ const change = await repos.holdInventoryOrderChange.save(repos.holdInventoryOrderChange.create({
236
+ itemId: item.id,
237
+ id: base.id,
238
+ quantityChanged: -1 * item.targetHeldQuantity * conversionFactor,
239
+ }));
240
+ // Stock movements track the hold through splitted batch
241
+ await this.stockService.validateStockAvailability({
242
+ materialId: item.materialId,
243
+ batchId: item.batchId,
244
+ locationId: this.stockService.resolveLocationId(item.locationId),
245
+ loaderId: this.stockService.resolveLoaderId(item.loaderId),
246
+ quantity: change.quantityChanged,
247
+ }, manager);
248
+ await repos.stock.save(repos.stock.create([
249
+ // deduct from original batch available stock
250
+ {
251
+ orderId: base.id,
252
+ materialId: item.materialId,
253
+ batchId: item.batchId, // original batch
254
+ locationId: this.stockService.resolveLocationId(item.locationId),
255
+ loaderId: this.stockService.resolveLoaderId(item.loaderId),
256
+ quantity: -1 * change.quantityChanged,
257
+ },
258
+ // add to splitted batch in released state
259
+ {
260
+ orderId: base.id,
261
+ materialId: item.materialId,
262
+ batchId: splittedBatch.id, // splitted batch marked released
263
+ locationId: this.stockService.resolveLocationId(item.locationId),
264
+ loaderId: this.stockService.resolveLoaderId(item.loaderId),
265
+ quantity: change.quantityChanged,
266
+ },
267
+ ]));
268
+ }));
269
+ }
270
+ return order;
271
+ }
272
+ };
273
+ HoldInventoryOrderService = __decorate([
274
+ Injectable(),
275
+ __param(5, Inject(HoldInventoryOrderEntity)),
276
+ __param(6, Inject(HoldInventoryOrderItemEntity)),
277
+ __param(7, Inject(StockEntity)),
278
+ __metadata("design:paramtypes", [DataSource,
279
+ HelperService,
280
+ MaterialService,
281
+ BatchService,
282
+ StockService, Object, Object, Object])
283
+ ], HoldInventoryOrderService);
284
+
285
+ export { HoldInventoryOrderService };
@@ -0,0 +1,22 @@
1
+ export * from './stock.service';
2
+ export * from './loader.service';
3
+ export * from './material.service';
4
+ export * from './batch.service';
5
+ export * from './receive-inventory-order.service';
6
+ export * from './ship-inventory-order.service';
7
+ export * from './location.service';
8
+ export * from './unit.service';
9
+ export * from './transfer-order.service';
10
+ export * from './hold-inventory-order.service';
11
+ export * from './allocate-inventory-order.service';
12
+ export * from './split-batch-order.service';
13
+ export * from './merge-batch-order.service';
14
+ export * from './reclassify-inventory-order.service';
15
+ export * from './transfer-vendor-order.service';
16
+ export * from './quality-inspection-order.service';
17
+ export * from './transfer-customer-order.service';
18
+ export * from './hold-inventory-order.service';
19
+ export * from './sale-order.service';
20
+ export * from './scrape.service';
21
+ export * from './warehouse-map.service';
22
+ export * from './helper.service';
@@ -0,0 +1,43 @@
1
+ import { EntityManager, type EntityTarget, Repository, DataSource } from 'typeorm';
2
+ import { LoadersEntityClass } from '../models/metadata/loader.entity';
3
+ import { LoaderTypeEntityClass } from '../models/metadata/loader-type.entity';
4
+ import { CreateLoaderInput, UpdateLoaderInput } from '../typings/create-loader.input';
5
+ import { CreateLoaderTypeInput, UpdateLoaderTypeInput } from '../typings/create-loader-type.input';
6
+ import { FindLoaderInput, FindLoaderTypeInput } from '../typings/find-loader.input';
7
+ import { LoaderUnitEntityClass } from '../models';
8
+ /**
9
+ * Service for managing loaders and their types
10
+ * Supports dynamic entity injection for customization
11
+ * T - Loader entity type
12
+ * K - Loader Type entity type
13
+ */
14
+ export declare class LoaderService<T extends LoadersEntityClass = LoadersEntityClass, K extends LoaderTypeEntityClass = LoaderTypeEntityClass> {
15
+ private readonly dataSource;
16
+ readonly loaderEntity: EntityTarget<T>;
17
+ readonly loaderTypeEntity: EntityTarget<K>;
18
+ readonly loaderUnitEntity: EntityTarget<LoaderUnitEntityClass>;
19
+ readonly loaderRepository: Repository<T>;
20
+ readonly loaderTypeRepository: Repository<K>;
21
+ readonly loaderUnitRepository: Repository<LoaderUnitEntityClass>;
22
+ readonly loaderSerialMaxDigits = 4;
23
+ constructor(dataSource: DataSource, loaderEntity: EntityTarget<T>, loaderTypeEntity: EntityTarget<K>, loaderUnitEntity: EntityTarget<LoaderUnitEntityClass>);
24
+ createLoader({ manager, ...options }: CreateLoaderInput & {
25
+ manager?: EntityManager;
26
+ }): Promise<T[]>;
27
+ createBatchLoaders({ options, manager, }: {
28
+ options: CreateLoaderInput[];
29
+ manager?: EntityManager;
30
+ }): Promise<T[]>;
31
+ updateLoader({ id, manager, ...options }: UpdateLoaderInput & {
32
+ manager?: EntityManager;
33
+ }): Promise<T>;
34
+ createLoaderType({ manager, ...options }: CreateLoaderTypeInput & {
35
+ manager?: EntityManager;
36
+ }): Promise<K>;
37
+ updateLoaderType({ id, manager, ...options }: UpdateLoaderTypeInput & {
38
+ manager?: EntityManager;
39
+ }): Promise<K>;
40
+ getSeq(prefix: string, count: number, manager?: EntityManager, maxDigits?: number): Promise<number>;
41
+ findManyLoaders(options: FindLoaderInput<T>): Promise<[T[], number]>;
42
+ findManyLoaderTypes(options: FindLoaderTypeInput<K>): Promise<[K[], number]>;
43
+ }
@@ -0,0 +1,282 @@
1
+ import { __decorate, __param, __metadata } from 'tslib';
2
+ import { Injectable, Inject } from '@nestjs/common';
3
+ import { DataSource, In } from 'typeorm';
4
+ import { LoadersEntity } from '../models/metadata/loader.entity.js';
5
+ import { LoaderTypeEntity } from '../models/metadata/loader-type.entity.js';
6
+ import '../models/metadata/batch.entity.js';
7
+ import '../models/metadata/batch-group.entity.js';
8
+ import { LoaderUnitEntity } from '../models/metadata/loader-unit.entity.js';
9
+ import '../models/metadata/location.entity.js';
10
+ import '../models/metadata/material.entity.js';
11
+ import '../models/metadata/material-unit.entity.js';
12
+ import '../models/metadata/sale-order.entity.js';
13
+ import '../models/metadata/stock.entity.js';
14
+ import '../models/metadata/unit.entity.js';
15
+ import '../models/extensions/receive-inventory-order/receive-inventory-order-item.entity.js';
16
+ import '../models/extensions/receive-inventory-order/receive-inventory-order.entity.js';
17
+ import '../models/extensions/receive-inventory-order/receive-inventory-order-change.entity.js';
18
+ import '../models/extensions/ship-inventory-order/ship-inventory-order-item.entity.js';
19
+ import '../models/extensions/ship-inventory-order/ship-inventory-order.entity.js';
20
+ import '../models/extensions/ship-inventory-order/ship-inventory-order-reference.entity.js';
21
+ import '../models/extensions/ship-inventory-order/ship-inventory-order-change.entity.js';
22
+ import '../models/extensions/transfer-order/transfer-order.entity.js';
23
+ import '../models/extensions/transfer-order/transfer-order-item.entity.js';
24
+ import '../models/extensions/transfer-order/transfer-order-change.entity.js';
25
+ import '../models/extensions/hold-inventory-order/hold-inventory-order.entity.js';
26
+ import '../models/extensions/hold-inventory-order/hold-inventory-order-item.entity.js';
27
+ import '../models/extensions/hold-inventory-order/hold-inventory-order-change.entity.js';
28
+ import '../models/extensions/allocate-inventory-order/allocate-inventory-order.entity.js';
29
+ import '../models/extensions/allocate-inventory-order/allocate-inventory-order-item.entity.js';
30
+ import '../models/extensions/allocate-inventory-order/allocate-inventory-order-change.entity.js';
31
+ import '../models/extensions/split-batch-order/split-batch-order.entity.js';
32
+ import '../models/extensions/split-batch-order/split-batch-order-item.entity.js';
33
+ import '../models/extensions/split-batch-order/split-batch-order-change.entity.js';
34
+ import '../models/extensions/merge-batch-order/merge-batch-order.entity.js';
35
+ import '../models/extensions/merge-batch-order/merge-batch-order-item.entity.js';
36
+ import '../models/extensions/merge-batch-order/merge-batch-order-change.entity.js';
37
+ import '../models/extensions/reclassify-inventory-order/reclassify-inventory-order.entity.js';
38
+ import '../models/extensions/reclassify-inventory-order/reclassify-inventory-order-item.entity.js';
39
+ import '../models/extensions/reclassify-inventory-order/reclassify-inventory-order-change.entity.js';
40
+ import '../models/extensions/transfer-vendor-order/transfer-vendor-order.entity.js';
41
+ import '../models/extensions/transfer-vendor-order/transfer-vendor-order-item.entity.js';
42
+ import '../models/extensions/transfer-vendor-order/transfer-vendor-order-change.entity.js';
43
+ import '../models/extensions/quality-inspection-order/quality-inspection-order.entity.js';
44
+ import '../models/extensions/quality-inspection-order/quality-inspection-order-item.entity.js';
45
+ import '../models/extensions/quality-inspection-order/quality-inspection-order-change.entity.js';
46
+ import '../models/extensions/transfer-customer-order/transfer-customer-order.entity.js';
47
+ import '../models/extensions/transfer-customer-order/transfer-customer-order-item.entity.js';
48
+ import '../models/extensions/transfer-customer-order/transfer-customer-order-change.entity.js';
49
+ import '../models/extensions/scrape-order/scrape-order.entity.js';
50
+ import '../models/extensions/scrape-order/scrape-order-item.entity.js';
51
+ import '../models/extensions/scrape-order/scrape-order-change.entity.js';
52
+
53
+ /**
54
+ * Service for managing loaders and their types
55
+ * Supports dynamic entity injection for customization
56
+ * T - Loader entity type
57
+ * K - Loader Type entity type
58
+ */
59
+ let LoaderService = class LoaderService {
60
+ dataSource;
61
+ loaderEntity;
62
+ loaderTypeEntity;
63
+ loaderUnitEntity;
64
+ loaderRepository;
65
+ loaderTypeRepository;
66
+ loaderUnitRepository;
67
+ loaderSerialMaxDigits = 4;
68
+ constructor(dataSource, loaderEntity, loaderTypeEntity, loaderUnitEntity) {
69
+ this.dataSource = dataSource;
70
+ this.loaderEntity = loaderEntity;
71
+ this.loaderTypeEntity = loaderTypeEntity;
72
+ this.loaderUnitEntity = loaderUnitEntity;
73
+ this.loaderRepository = this.dataSource.getRepository(this.loaderEntity);
74
+ this.loaderTypeRepository = this.dataSource.getRepository(this.loaderTypeEntity);
75
+ this.loaderUnitRepository =
76
+ this.dataSource.getRepository(this.loaderUnitEntity);
77
+ }
78
+ async createLoader({ manager = this.dataSource.manager, ...options }) {
79
+ const loaderRepository = manager.getRepository(this.loaderEntity);
80
+ const loaderTypeRepository = manager.getRepository(this.loaderTypeEntity);
81
+ const { key } = await loaderTypeRepository.findOneByOrFail({
82
+ id: options.typeId,
83
+ });
84
+ const startSeq = await this.getSeq(key, options.quantity, manager);
85
+ const loaders = [];
86
+ for (let i = 0; i < options.quantity; i++) {
87
+ const seqNum = startSeq + i;
88
+ const paddedSeq = seqNum
89
+ .toString()
90
+ .padStart(this.loaderSerialMaxDigits, '0');
91
+ const loader = loaderRepository.create({
92
+ ...options,
93
+ serialId: `${key}${paddedSeq}`,
94
+ });
95
+ loaders.push(loader);
96
+ }
97
+ return loaderRepository.save(loaders, { chunk: 1000 });
98
+ }
99
+ async createBatchLoaders({ options, manager = this.dataSource.manager, }) {
100
+ if (options.length === 0)
101
+ return [];
102
+ const loaderRepository = manager.getRepository(this.loaderEntity);
103
+ const loaderTypeRepository = manager.getRepository(this.loaderTypeEntity);
104
+ const typeMap = await loaderTypeRepository
105
+ .findBy({ id: In(options.map(({ typeId }) => typeId)) })
106
+ .then((types) => new Map(types.map((t) => [t.id, t])));
107
+ const loaders = [];
108
+ await Promise.all(options.map(async (option) => {
109
+ const loaderType = typeMap.get(option.typeId);
110
+ if (loaderType) {
111
+ const { key } = loaderType;
112
+ const startSeq = await this.getSeq(key, option.quantity, manager);
113
+ for (let i = 0; i < option.quantity; i++) {
114
+ console.log({ startSeq });
115
+ const seqNum = startSeq + i;
116
+ const paddedSeq = seqNum
117
+ .toString()
118
+ .padStart(this.loaderSerialMaxDigits, '0');
119
+ const loader = loaderRepository.create({
120
+ ...option,
121
+ serialId: `${key}${paddedSeq}`,
122
+ });
123
+ loaders.push(loader);
124
+ }
125
+ }
126
+ else
127
+ return;
128
+ }));
129
+ return loaderRepository.save(loaders, { chunk: 1000 });
130
+ }
131
+ async updateLoader({ id, manager = this.dataSource.manager, ...options }) {
132
+ const loadersRepository = manager.getRepository(this.loaderEntity);
133
+ const loader = await loadersRepository.findOneByOrFail({ id });
134
+ return loadersRepository.save(loadersRepository.create({
135
+ ...loader,
136
+ ...options,
137
+ }));
138
+ }
139
+ createLoaderType({ manager = this.dataSource.manager, ...options }) {
140
+ const loaderTypeRepository = manager.getRepository(this.loaderTypeEntity);
141
+ const loaderType = loaderTypeRepository.create(options);
142
+ return loaderTypeRepository.save(loaderType);
143
+ }
144
+ async updateLoaderType({ id, manager = this.dataSource.manager, ...options }) {
145
+ const loaderTypeRepository = manager.getRepository(this.loaderTypeEntity);
146
+ const loaderType = await loaderTypeRepository.findOneByOrFail({ id });
147
+ return loaderTypeRepository.save(loaderTypeRepository.create({
148
+ ...loaderType,
149
+ ...options,
150
+ }));
151
+ }
152
+ async getSeq(prefix, count, manager = this.dataSource.manager, maxDigits = this.loaderSerialMaxDigits) {
153
+ const seqName = `${prefix}_SEQ`;
154
+ const maxValue = 10 ** maxDigits - 1;
155
+ let startVal;
156
+ try {
157
+ const [{ val }] = await manager.query(`SELECT CURRVAL('"${seqName}"') + 1 AS val`);
158
+ startVal = parseInt(val, 10);
159
+ }
160
+ catch (ex) {
161
+ const msg = ex.message;
162
+ if (/does\snot\sexist/.test(msg)) {
163
+ await manager.query(`CREATE SEQUENCE "${seqName}"`);
164
+ }
165
+ else if (!/not\syet\sdefined/.test(msg)) {
166
+ throw ex;
167
+ }
168
+ // Initialize with NEXTVAL
169
+ const [{ nextval }] = await manager.query(`SELECT NEXTVAL('"${seqName}"') AS nextval`);
170
+ startVal = parseInt(nextval, 10);
171
+ }
172
+ const endVal = startVal + count - 1;
173
+ if (endVal > maxValue) {
174
+ throw new Error(`SEQUENCE_OUT_OF_RANGE: ${prefix} exceeds ${maxDigits} digits (max: ${maxValue}, end: ${endVal})`);
175
+ }
176
+ await manager.query(`SELECT SETVAL('"${seqName}"', $1)`, [endVal]);
177
+ return startVal;
178
+ }
179
+ findManyLoaders(options) {
180
+ const queryBuilder = this.dataSource
181
+ .getRepository(this.loaderEntity)
182
+ .createQueryBuilder('loader');
183
+ if (options.typeId)
184
+ queryBuilder.andWhere('loader."typeId" = :typeId', {
185
+ typeId: options.typeId,
186
+ });
187
+ if (options.typeIds?.length)
188
+ queryBuilder.andWhere('loader."typeId" IN (:...typeIds)', {
189
+ typeIds: options.typeIds,
190
+ });
191
+ if (options.locationId)
192
+ queryBuilder.andWhere('loader."locationId" = :locationId', {
193
+ locationId: options.locationId,
194
+ });
195
+ if (options.locationIds?.length)
196
+ queryBuilder.andWhere('loader."locationId" IN (:...locationIds)', {
197
+ locationIds: options.locationIds,
198
+ });
199
+ if (options.serialId)
200
+ queryBuilder.andWhere('loader."serialId" = :serialId', {
201
+ serialId: options.serialId,
202
+ });
203
+ if (options.serialIds?.length)
204
+ queryBuilder.andWhere('loader."serialId" IN (:...serialIds)', {
205
+ serialIds: options.serialIds,
206
+ });
207
+ if (options.isActive !== undefined)
208
+ queryBuilder.andWhere('loader."isActive" = :isActive', {
209
+ isActive: options.isActive,
210
+ });
211
+ if (options.dateRange)
212
+ queryBuilder.andWhere('loader."createdAt" BETWEEN :from AND :to', {
213
+ from: options.dateRange.from,
214
+ to: options.dateRange.to,
215
+ });
216
+ if (options.note)
217
+ queryBuilder.andWhere('loader.note LIKE :note', {
218
+ note: `%${options.note}%`,
219
+ });
220
+ if (options.locationKey)
221
+ queryBuilder.andWhere(`EXISTS (
222
+ SELECT 1 FROM locations ldr_loc
223
+ WHERE ldr_loc.id = loader."locationId"
224
+ AND ldr_loc.key ILIKE :locationKey
225
+ )`, { locationKey: `%${options.locationKey}%` });
226
+ if (options.loaderTypeKey)
227
+ queryBuilder.andWhere(`EXISTS (
228
+ SELECT 1 FROM loader_types ldr_type
229
+ WHERE ldr_type.id = loader."typeId"
230
+ AND ldr_type.key ILIKE :loaderTypeKey
231
+ )`, { loaderTypeKey: `%${options.loaderTypeKey}%` });
232
+ if (options.wildcard) {
233
+ const { key, value } = options.wildcard;
234
+ queryBuilder.andWhere(`loader."${String(key)}" ILIKE :value`, {
235
+ value: `%${value}%`,
236
+ });
237
+ }
238
+ if (options.offset !== undefined && options.offset >= 0)
239
+ queryBuilder.skip(options.offset);
240
+ if (options.limit !== undefined && options.limit > 0)
241
+ queryBuilder.take(options.limit);
242
+ return queryBuilder.getManyAndCount();
243
+ }
244
+ findManyLoaderTypes(options) {
245
+ const queryBuilder = this.dataSource
246
+ .getRepository(this.loaderTypeEntity)
247
+ .createQueryBuilder('loader_type');
248
+ if (options.description)
249
+ queryBuilder.andWhere('loader_type.description ILIKE :description', {
250
+ description: `%${options.description}%`,
251
+ });
252
+ if (options.isActive !== undefined)
253
+ queryBuilder.andWhere('loader_type."isActive" = :isActive', {
254
+ isActive: options.isActive,
255
+ });
256
+ if (options.dateRange)
257
+ queryBuilder.andWhere('loader_type."createdAt" BETWEEN :from AND :to', {
258
+ from: options.dateRange.from,
259
+ to: options.dateRange.to,
260
+ });
261
+ if (options.wildcard) {
262
+ const { key, value } = options.wildcard;
263
+ queryBuilder.andWhere(`loader_type."${String(key)}" ILIKE :value`, {
264
+ value: `%${value}%`,
265
+ });
266
+ }
267
+ if (options.offset !== undefined && options.offset >= 0)
268
+ queryBuilder.skip(options.offset);
269
+ if (options.limit !== undefined && options.limit > 0)
270
+ queryBuilder.take(options.limit);
271
+ return queryBuilder.getManyAndCount();
272
+ }
273
+ };
274
+ LoaderService = __decorate([
275
+ Injectable(),
276
+ __param(1, Inject(LoadersEntity)),
277
+ __param(2, Inject(LoaderTypeEntity)),
278
+ __param(3, Inject(LoaderUnitEntity)),
279
+ __metadata("design:paramtypes", [DataSource, Object, Object, Object])
280
+ ], LoaderService);
281
+
282
+ export { LoaderService };
@@ -0,0 +1,13 @@
1
+ import { DataSource, EntityTarget, Repository } from 'typeorm';
2
+ import { LocationEntityClass } from '../models';
3
+ import { CreateLocationInput, UpdateLocationInput } from '../typings/create-location.input';
4
+ import { FindLocationInput } from '../typings/find-location.input';
5
+ export declare class LocationService<T extends LocationEntityClass = LocationEntityClass> {
6
+ private readonly dataSource;
7
+ readonly locationEntity: EntityTarget<T>;
8
+ readonly locationReposistory: Repository<T>;
9
+ constructor(dataSource: DataSource, locationEntity: EntityTarget<T>);
10
+ createLocation({ parentId, ...options }: CreateLocationInput): Promise<T>;
11
+ updateLocation({ id, parentId, ...options }: UpdateLocationInput): Promise<T>;
12
+ findMany(options: FindLocationInput<T>): Promise<[T[], number]>;
13
+ }