@things-factory/warehouse-base 6.2.126 → 6.2.128

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.
@@ -1,8 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.approveInventoryChanges = exports.updateWarehouse = exports.deleteWarehouses = exports.deleteWarehouse = exports.createWarehouse = exports.updateLocation = exports.deleteLocations = exports.deleteLocation = exports.createLocation = void 0;
3
+ exports.approveInventoryChanges = exports.updateWarehouse = exports.deleteWarehouses = exports.deleteWarehouse = exports.createWarehouse = exports.updateLocation = exports.deleteLocations = exports.deleteLocation = exports.createLocation = exports.updateMultipleInventory = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  tslib_1.__exportStar(require("./constants"), exports);
6
+ var inventory_mutation_1 = require("./service/inventory/inventory-mutation");
7
+ Object.defineProperty(exports, "updateMultipleInventory", { enumerable: true, get: function () { return inventory_mutation_1.updateMultipleInventory; } });
6
8
  var location_mutation_1 = require("./service/location/location-mutation");
7
9
  Object.defineProperty(exports, "createLocation", { enumerable: true, get: function () { return location_mutation_1.createLocation; } });
8
10
  Object.defineProperty(exports, "deleteLocation", { enumerable: true, get: function () { return location_mutation_1.deleteLocation; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../server/index.ts"],"names":[],"mappings":";;;;AAAA,sDAA2B;AAC3B,0EAAsH;AAA7G,mHAAA,cAAc,OAAA;AAAE,mHAAA,cAAc,OAAA;AAAE,oHAAA,eAAe,OAAA;AAAE,mHAAA,cAAc,OAAA;AACxE,6EAK+C;AAJ7C,qHAAA,eAAe,OAAA;AACf,qHAAA,eAAe,OAAA;AACf,sHAAA,gBAAgB,OAAA;AAChB,qHAAA,eAAe,OAAA;AAEjB,uDAA4B;AAC5B,kDAAuB;AACvB,oDAAyB;AACzB,8EAAmD;AAEnD,kGAA8F;AAArF,oIAAA,uBAAuB,OAAA","sourcesContent":["export * from './constants'\nexport { createLocation, deleteLocation, deleteLocations, updateLocation } from './service/location/location-mutation'\nexport {\n createWarehouse,\n deleteWarehouse,\n deleteWarehouses,\n updateWarehouse\n} from './service/warehouse/warehouse-mutation'\nexport * from './migrations'\nexport * from './utils'\nexport * from './service'\nexport * from './service/inventory/inventory-query'\n\nexport { approveInventoryChanges } from './service/inventory-change/inventory-change-mutation'\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../server/index.ts"],"names":[],"mappings":";;;;AAAA,sDAA2B;AAC3B,6EAAgF;AAAvE,6HAAA,uBAAuB,OAAA;AAChC,0EAAsH;AAA7G,mHAAA,cAAc,OAAA;AAAE,mHAAA,cAAc,OAAA;AAAE,oHAAA,eAAe,OAAA;AAAE,mHAAA,cAAc,OAAA;AACxE,6EAA4H;AAAnH,qHAAA,eAAe,OAAA;AAAE,qHAAA,eAAe,OAAA;AAAE,sHAAA,gBAAgB,OAAA;AAAE,qHAAA,eAAe,OAAA;AAC5E,uDAA4B;AAC5B,kDAAuB;AACvB,oDAAyB;AACzB,8EAAmD;AAEnD,kGAA8F;AAArF,oIAAA,uBAAuB,OAAA","sourcesContent":["export * from './constants'\nexport { updateMultipleInventory } from './service/inventory/inventory-mutation'\nexport { createLocation, deleteLocation, deleteLocations, updateLocation } from './service/location/location-mutation'\nexport { createWarehouse, deleteWarehouse, deleteWarehouses, updateWarehouse } from './service/warehouse/warehouse-mutation'\nexport * from './migrations'\nexport * from './utils'\nexport * from './service'\nexport * from './service/inventory/inventory-query'\n\nexport { approveInventoryChanges } from './service/inventory-change/inventory-change-mutation'\n"]}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.InventoryMutation = void 0;
3
+ exports.updateMultipleInventory = exports.InventoryMutation = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const type_graphql_1 = require("type-graphql");
6
6
  const typeorm_1 = require("typeorm");
@@ -50,141 +50,7 @@ let InventoryMutation = class InventoryMutation {
50
50
  return true;
51
51
  }
52
52
  async updateMultipleInventory(patches, context) {
53
- const { domain, user, tx } = context.state;
54
- let results = [];
55
- const _createRecords = patches.filter((patch) => !patch.id);
56
- const _updateRecords = patches.filter((patch) => patch.id);
57
- const inventoryRepo = tx.getRepository(inventory_1.Inventory);
58
- if (_createRecords.length > 0) {
59
- let today = new Date();
60
- let year = today.getFullYear();
61
- let month = today.getMonth();
62
- let date = today.getDate();
63
- for (let i = 0; i < _createRecords.length; i++) {
64
- const total = await tx.getRepository(inventory_1.Inventory).countBy({
65
- createdAt: (0, typeorm_1.MoreThan)(new Date(year, month, date))
66
- });
67
- const newRecord = _createRecords[i];
68
- if (newRecord.location && newRecord.location.id) {
69
- var location = await tx.getRepository(location_1.Location).findOne({
70
- where: { id: newRecord.location.id },
71
- relations: ['warehouse']
72
- });
73
- newRecord.location = location;
74
- newRecord.zone = location.zone;
75
- newRecord.warehouse = location.warehouse;
76
- }
77
- if (newRecord.bizplace && newRecord.bizplace.id) {
78
- newRecord.bizplace = (await tx.getRepository(biz_base_1.Bizplace).findOneBy({ id: newRecord.bizplace.id }));
79
- }
80
- if (newRecord.product && newRecord.product.id) {
81
- var product = (await tx.getRepository(product_base_1.Product).findOneBy({ id: newRecord.product.id }));
82
- newRecord.product = product;
83
- }
84
- let palletId = 'P' +
85
- year.toString().substr(year.toString().length - 2) +
86
- ('0' + (month + 1).toString()).substr(('0' + (month + 1).toString()).toString().length - 2) +
87
- ('0' + date.toString()).substr(('0' + date.toString()).length - 2) +
88
- ('0000' + (total + 1).toString()).substr(('0000' + (total + 1).toString()).length - 4);
89
- newRecord.name = palletId;
90
- newRecord.status = newRecord.qty < 1 ? 'TERMINATED' : 'STORED';
91
- newRecord.palletId = palletId;
92
- const result = await inventoryRepo.save(Object.assign({ domain: domain, creator: user, updater: user, lastSeq: 0 }, newRecord));
93
- await tx.getRepository(inventory_history_1.InventoryHistory).save(Object.assign(Object.assign({}, newRecord), { domain: domain, creator: user, updater: user, name: utils_1.InventoryNoGenerator.inventoryHistoryName(), seq: 0, transactionType: 'NEW', productId: newRecord.product.id, warehouseId: newRecord.warehouse.id, locationId: newRecord.location.id }));
94
- results.push(Object.assign(Object.assign({}, result), { cuFlag: '+' }));
95
- }
96
- }
97
- if (_updateRecords.length > 0) {
98
- for (let i = 0; i < _updateRecords.length; i++) {
99
- const newRecord = _updateRecords[i];
100
- const newHistoryRecord = JSON.parse(JSON.stringify(_updateRecords[i]));
101
- let transactionType = '';
102
- let inventory = await inventoryRepo.findOne({
103
- where: { id: newRecord.id },
104
- relations: ['warehouse', 'location', 'product', 'bizplace']
105
- });
106
- newHistoryRecord.openingQty = inventory.qty;
107
- newHistoryRecord.openingUomValue = inventory.uomValue;
108
- // Get last sequence from InventoryHistory
109
- let latestEntry = await tx.getRepository(inventory_history_1.InventoryHistory).find({
110
- where: { palletId: inventory.palletId },
111
- order: { seq: 'DESC' },
112
- take: 1
113
- });
114
- let lastSeq = latestEntry[0].seq;
115
- // Condition 1: Change location (RELOCATE)
116
- if (newRecord.location && newRecord.location.id) {
117
- var location = await tx.getRepository(location_1.Location).findOne({
118
- where: { id: newRecord.location.id },
119
- relations: ['warehouse']
120
- });
121
- newRecord.location = location;
122
- newRecord.zone = location.zone;
123
- newRecord.warehouse = location.warehouse;
124
- newHistoryRecord.location = location;
125
- newHistoryRecord.zone = location.zone;
126
- newHistoryRecord.warehouse = location.warehouse;
127
- transactionType = 'RELOCATE';
128
- }
129
- // Condition 2: Change of qty or uomValue.
130
- // Set qty movement for inventory history
131
- if (typeof newRecord.qty != 'undefined') {
132
- transactionType = 'ADJUSTMENT';
133
- newHistoryRecord.qty = newRecord.qty - inventory.qty;
134
- if (newRecord.qty < 1) {
135
- newRecord.status = 'TERMINATED';
136
- newRecord.qty = 0;
137
- newRecord.uomValue = 0;
138
- }
139
- }
140
- else {
141
- newHistoryRecord.qty = 0;
142
- }
143
- // Set uomValue movement for inventory history
144
- if (typeof newRecord.uomValue != 'undefined') {
145
- transactionType = 'ADJUSTMENT';
146
- newHistoryRecord.uomValue = newRecord.uomValue - inventory.uomValue;
147
- if (newRecord.uomValue < 1) {
148
- newRecord.uomValue = 0;
149
- }
150
- }
151
- else {
152
- newHistoryRecord.uomValue = 0;
153
- }
154
- // Condition 3: Change of bizplace or product or batch id or packing type
155
- if (newRecord.bizplace && newRecord.bizplace.id) {
156
- newRecord.bizplace = (await tx.getRepository(biz_base_1.Bizplace).findOneBy({ id: newRecord.bizplace.id }));
157
- }
158
- if (newRecord.product && newRecord.product.id) {
159
- newRecord.product = (await tx.getRepository(product_base_1.Product).findOneBy({ id: newRecord.product.id }));
160
- }
161
- if ((newRecord.product && newRecord.product.id) || (newRecord.bizplace && newRecord.bizplace.id) || newRecord.batchId || newRecord.packingType) {
162
- if (inventory.bizplace.id !== (newRecord.bizplace ? newRecord.bizplace.id : '') ||
163
- inventory.product.id !== (newRecord.product ? newRecord.product.id : '') ||
164
- inventory.batchId !== newRecord.batchId ||
165
- inventory.packingType !== newRecord.packingType) {
166
- transactionType = 'ADJUSTMENT';
167
- lastSeq = lastSeq + 1;
168
- let inventoryHistory = Object.assign(Object.assign({}, inventory), { domain: domain, bizplace: inventory.bizplace.id, openingQty: inventory.qty, openingUomValue: inventory.uomValue, qty: -inventory.qty || 0, uomValue: -inventory.uomValue || 0, name: utils_1.InventoryNoGenerator.inventoryHistoryName(), seq: lastSeq, inventory, transactionType: transactionType, status: constants_1.INVENTORY_STATUS.TERMINATED, productId: inventory.product.id, warehouseId: inventory.warehouse.id, locationId: inventory.location.id, creator: user, updater: user });
169
- delete inventoryHistory.id;
170
- await tx.getRepository(inventory_history_1.InventoryHistory).save(inventoryHistory);
171
- newHistoryRecord.qty = newRecord.qty || inventory.qty;
172
- newHistoryRecord.uomValue = newRecord.uomValue || inventory.uomValue || 0;
173
- newHistoryRecord.openingQty = 0;
174
- newHistoryRecord.openingUomValue = 0;
175
- newHistoryRecord.batchId = newRecord.batchId || inventory.batchId || '-';
176
- }
177
- }
178
- //Transaction type will be RELOCATE if there is only location change. Any other changes will be considered Adjustment.
179
- lastSeq = lastSeq + 1;
180
- let inventoryHistory = Object.assign(Object.assign(Object.assign({}, inventory), newHistoryRecord), { domain: domain, creator: user, updater: user, name: utils_1.InventoryNoGenerator.inventoryHistoryName(), seq: lastSeq, inventory, transactionType: transactionType == '' ? 'ADJUSTMENT' : transactionType, productId: newHistoryRecord.product ? newHistoryRecord.product.id : inventory.product.id, warehouseId: newHistoryRecord.warehouse ? newHistoryRecord.warehouse.id : inventory.warehouse.id, locationId: newHistoryRecord.location ? newHistoryRecord.location.id : inventory.location.id });
181
- delete inventoryHistory.id;
182
- await tx.getRepository(inventory_history_1.InventoryHistory).save(inventoryHistory);
183
- const result = await inventoryRepo.save(Object.assign(Object.assign(Object.assign({}, inventory), newRecord), { updater: user, lastSeq: lastSeq }));
184
- results.push(Object.assign(Object.assign({}, result), { cuFlag: 'M' }));
185
- }
186
- }
187
- return results;
53
+ return await updateMultipleInventory(patches, context);
188
54
  }
189
55
  async deleteInventories(ids, context) {
190
56
  const { tx } = context.state;
@@ -390,4 +256,142 @@ InventoryMutation = tslib_1.__decorate([
390
256
  (0, type_graphql_1.Resolver)(inventory_1.Inventory)
391
257
  ], InventoryMutation);
392
258
  exports.InventoryMutation = InventoryMutation;
259
+ async function updateMultipleInventory(patches, context) {
260
+ const { domain, user, tx } = context.state;
261
+ let results = [];
262
+ const _createRecords = patches.filter((patch) => !patch.id);
263
+ const _updateRecords = patches.filter((patch) => patch.id);
264
+ const inventoryRepo = tx.getRepository(inventory_1.Inventory);
265
+ if (_createRecords.length > 0) {
266
+ let today = new Date();
267
+ let year = today.getFullYear();
268
+ let month = today.getMonth();
269
+ let date = today.getDate();
270
+ for (let i = 0; i < _createRecords.length; i++) {
271
+ const total = await tx.getRepository(inventory_1.Inventory).countBy({
272
+ createdAt: (0, typeorm_1.MoreThan)(new Date(year, month, date))
273
+ });
274
+ const newRecord = _createRecords[i];
275
+ if (newRecord.location && newRecord.location.id) {
276
+ var location = await tx.getRepository(location_1.Location).findOne({
277
+ where: { id: newRecord.location.id },
278
+ relations: ['warehouse']
279
+ });
280
+ newRecord.location = location;
281
+ newRecord.zone = location.zone;
282
+ newRecord.warehouse = location.warehouse;
283
+ }
284
+ if (newRecord.bizplace && newRecord.bizplace.id) {
285
+ newRecord.bizplace = (await tx.getRepository(biz_base_1.Bizplace).findOneBy({ id: newRecord.bizplace.id }));
286
+ }
287
+ if (newRecord.product && newRecord.product.id) {
288
+ var product = (await tx.getRepository(product_base_1.Product).findOneBy({ id: newRecord.product.id }));
289
+ newRecord.product = product;
290
+ }
291
+ let palletId = 'P' +
292
+ year.toString().substr(year.toString().length - 2) +
293
+ ('0' + (month + 1).toString()).substr(('0' + (month + 1).toString()).toString().length - 2) +
294
+ ('0' + date.toString()).substr(('0' + date.toString()).length - 2) +
295
+ ('0000' + (total + 1).toString()).substr(('0000' + (total + 1).toString()).length - 4);
296
+ newRecord.name = palletId;
297
+ newRecord.status = newRecord.qty < 1 ? 'TERMINATED' : 'STORED';
298
+ newRecord.palletId = palletId;
299
+ const result = await inventoryRepo.save(Object.assign({ domain: domain, creator: user, updater: user, lastSeq: 0 }, newRecord));
300
+ await tx.getRepository(inventory_history_1.InventoryHistory).save(Object.assign(Object.assign({}, newRecord), { domain: domain, creator: user, updater: user, name: utils_1.InventoryNoGenerator.inventoryHistoryName(), seq: 0, transactionType: 'NEW', productId: newRecord.product.id, warehouseId: newRecord.warehouse.id, locationId: newRecord.location.id }));
301
+ results.push(Object.assign(Object.assign({}, result), { cuFlag: '+' }));
302
+ }
303
+ }
304
+ if (_updateRecords.length > 0) {
305
+ for (let i = 0; i < _updateRecords.length; i++) {
306
+ const newRecord = _updateRecords[i];
307
+ const newHistoryRecord = JSON.parse(JSON.stringify(_updateRecords[i]));
308
+ let transactionType = '';
309
+ let inventory = await inventoryRepo.findOne({
310
+ where: { id: newRecord.id },
311
+ relations: ['warehouse', 'location', 'product', 'bizplace']
312
+ });
313
+ newHistoryRecord.openingQty = inventory.qty;
314
+ newHistoryRecord.openingUomValue = inventory.uomValue;
315
+ // Get last sequence from InventoryHistory
316
+ let latestEntry = await tx.getRepository(inventory_history_1.InventoryHistory).find({
317
+ where: { palletId: inventory.palletId },
318
+ order: { seq: 'DESC' },
319
+ take: 1
320
+ });
321
+ let lastSeq = latestEntry[0].seq;
322
+ // Condition 1: Change location (RELOCATE)
323
+ if (newRecord.location && newRecord.location.id) {
324
+ var location = await tx.getRepository(location_1.Location).findOne({
325
+ where: { id: newRecord.location.id },
326
+ relations: ['warehouse']
327
+ });
328
+ newRecord.location = location;
329
+ newRecord.zone = location.zone;
330
+ newRecord.warehouse = location.warehouse;
331
+ newHistoryRecord.location = location;
332
+ newHistoryRecord.zone = location.zone;
333
+ newHistoryRecord.warehouse = location.warehouse;
334
+ transactionType = 'RELOCATE';
335
+ }
336
+ // Condition 2: Change of qty or uomValue.
337
+ // Set qty movement for inventory history
338
+ if (typeof newRecord.qty != 'undefined') {
339
+ transactionType = 'ADJUSTMENT';
340
+ newHistoryRecord.qty = newRecord.qty - inventory.qty;
341
+ if (newRecord.qty < 1) {
342
+ newRecord.status = 'TERMINATED';
343
+ newRecord.qty = 0;
344
+ newRecord.uomValue = 0;
345
+ }
346
+ }
347
+ else {
348
+ newHistoryRecord.qty = 0;
349
+ }
350
+ // Set uomValue movement for inventory history
351
+ if (typeof newRecord.uomValue != 'undefined') {
352
+ transactionType = 'ADJUSTMENT';
353
+ newHistoryRecord.uomValue = newRecord.uomValue - inventory.uomValue;
354
+ if (newRecord.uomValue < 1) {
355
+ newRecord.uomValue = 0;
356
+ }
357
+ }
358
+ else {
359
+ newHistoryRecord.uomValue = 0;
360
+ }
361
+ // Condition 3: Change of bizplace or product or batch id or packing type
362
+ if (newRecord.bizplace && newRecord.bizplace.id) {
363
+ newRecord.bizplace = (await tx.getRepository(biz_base_1.Bizplace).findOneBy({ id: newRecord.bizplace.id }));
364
+ }
365
+ if (newRecord.product && newRecord.product.id) {
366
+ newRecord.product = (await tx.getRepository(product_base_1.Product).findOneBy({ id: newRecord.product.id }));
367
+ }
368
+ if ((newRecord.product && newRecord.product.id) || (newRecord.bizplace && newRecord.bizplace.id) || newRecord.batchId || newRecord.packingType) {
369
+ if (inventory.bizplace.id !== (newRecord.bizplace ? newRecord.bizplace.id : '') ||
370
+ inventory.product.id !== (newRecord.product ? newRecord.product.id : '') ||
371
+ inventory.batchId !== newRecord.batchId ||
372
+ inventory.packingType !== newRecord.packingType) {
373
+ transactionType = 'ADJUSTMENT';
374
+ lastSeq = lastSeq + 1;
375
+ let inventoryHistory = Object.assign(Object.assign({}, inventory), { domain: domain, bizplace: inventory.bizplace.id, openingQty: inventory.qty, openingUomValue: inventory.uomValue, qty: -inventory.qty || 0, uomValue: -inventory.uomValue || 0, name: utils_1.InventoryNoGenerator.inventoryHistoryName(), seq: lastSeq, inventory, transactionType: transactionType, status: constants_1.INVENTORY_STATUS.TERMINATED, productId: inventory.product.id, warehouseId: inventory.warehouse.id, locationId: inventory.location.id, creator: user, updater: user });
376
+ delete inventoryHistory.id;
377
+ await tx.getRepository(inventory_history_1.InventoryHistory).save(inventoryHistory);
378
+ newHistoryRecord.qty = newRecord.qty || inventory.qty;
379
+ newHistoryRecord.uomValue = newRecord.uomValue || inventory.uomValue || 0;
380
+ newHistoryRecord.openingQty = 0;
381
+ newHistoryRecord.openingUomValue = 0;
382
+ newHistoryRecord.batchId = newRecord.batchId || inventory.batchId || '-';
383
+ }
384
+ }
385
+ //Transaction type will be RELOCATE if there is only location change. Any other changes will be considered Adjustment.
386
+ lastSeq = lastSeq + 1;
387
+ let inventoryHistory = Object.assign(Object.assign(Object.assign({}, inventory), newHistoryRecord), { domain: domain, creator: user, updater: user, name: utils_1.InventoryNoGenerator.inventoryHistoryName(), seq: lastSeq, inventory, transactionType: transactionType == '' ? 'ADJUSTMENT' : transactionType, productId: newHistoryRecord.product ? newHistoryRecord.product.id : inventory.product.id, warehouseId: newHistoryRecord.warehouse ? newHistoryRecord.warehouse.id : inventory.warehouse.id, locationId: newHistoryRecord.location ? newHistoryRecord.location.id : inventory.location.id });
388
+ delete inventoryHistory.id;
389
+ await tx.getRepository(inventory_history_1.InventoryHistory).save(inventoryHistory);
390
+ const result = await inventoryRepo.save(Object.assign(Object.assign(Object.assign({}, inventory), newRecord), { updater: user, lastSeq: lastSeq }));
391
+ results.push(Object.assign(Object.assign({}, result), { cuFlag: 'M' }));
392
+ }
393
+ }
394
+ return results;
395
+ }
396
+ exports.updateMultipleInventory = updateMultipleInventory;
393
397
  //# sourceMappingURL=inventory-mutation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"inventory-mutation.js","sourceRoot":"","sources":["../../../server/service/inventory/inventory-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'\nimport { In, MoreThan, SelectQueryBuilder } from 'typeorm'\n\nimport { Bizplace } from '@things-factory/biz-base'\nimport { generateId } from '@things-factory/id-rule-base'\nimport { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'\nimport { Product } from '@things-factory/product-base'\n\nimport { INVENTORY_STATUS, INVENTORY_TRANSACTION_TYPE, LOCATION_STATUS, RULE_TYPE } from '../../constants'\nimport { SellercraftController } from '../../controllers'\nimport { DateGenerator, InventoryNoGenerator, InventoryUtil } from '../../utils'\nimport { InventoryHistory } from '../inventory-history/inventory-history'\nimport { Location } from '../location/location'\nimport { Inventory } from './inventory'\nimport { InventoryPatch, NewInventory } from './inventory-types'\n\n@Resolver(Inventory)\nexport class InventoryMutation {\n @Directive('@privilege(category: \"inventory\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => Inventory)\n async createInventory(@Arg('inventory') inventory: NewInventory, @Ctx() context: ResolverContext): Promise<Inventory> {\n const { tx } = context.state\n\n return await tx.getRepository(Inventory).save({\n domain: context.state.domain,\n creator: context.state.user,\n updater: context.state.user,\n ...inventory\n })\n }\n\n @Directive('@privilege(category: \"inventory\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => Inventory)\n async updateInventory(@Arg('patch') patch: InventoryPatch, @Ctx() context: ResolverContext): Promise<Inventory> {\n const { domain, user, tx } = context.state\n\n const invQb: SelectQueryBuilder<Inventory> = await tx\n .getRepository(Inventory)\n .createQueryBuilder('INV')\n .where('INV.domain_id = :domainId', { domainId: domain.id })\n .andWhere('INV.bizplace_id = :bizplaceId', { bizplaceId: patch.bizplace.id })\n .andWhere('INV.batch_id = :batchId', { batchId: patch.batchId })\n .andWhere('INV.product_id = :productId', { productId: patch.product.id })\n .andWhere('INV.packing_type = :packingType', { packingType: patch.packingType })\n .andWhere('INV.packing_size = :packingSize', { packingSize: patch.packingSize })\n\n if (patch?.cartonId) invQb.andWhere('INV.carton_id = :cartonId', { cartonId: patch.cartonId })\n else invQb.andWhere('INV.pallet_id = :palletId', { palletId: patch.palletId })\n\n const inventory = await invQb.getOne()\n\n return await tx.getRepository(Inventory).save({\n ...inventory,\n ...patch,\n updater: user\n })\n }\n\n @Directive('@privilege(category: \"inventory\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => Inventory)\n async updateInventoryRemark(@Arg('id') id: string, @Arg('remark') remark: string, @Ctx() context: ResolverContext): Promise<Inventory> {\n const { domain, user, tx } = context.state\n\n const repository = tx.getRepository(Inventory)\n const inventory = await repository.findOne({ where: { domain: { id: domain.id }, id } })\n\n return await repository.save({\n ...inventory,\n remark,\n updater: user\n })\n }\n\n @Directive('@privilege(category: \"inventory\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => Boolean)\n async deleteInventory(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<Boolean> {\n const { tx } = context.state\n\n await tx.getRepository(Inventory).delete({ domain: { id: context.state.domain.id }, name })\n return true\n }\n\n @Directive('@privilege(category: \"inventory\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => [Inventory])\n async updateMultipleInventory(@Arg('patches', type => [InventoryPatch]) patches: InventoryPatch[], @Ctx() context: ResolverContext): Promise<Inventory[]> {\n const { domain, user, tx } = context.state\n\n let results = []\n const _createRecords = patches.filter((patch: any) => !patch.id)\n const _updateRecords = patches.filter((patch: any) => patch.id)\n\n const inventoryRepo = tx.getRepository(Inventory)\n if (_createRecords.length > 0) {\n let today = new Date()\n let year = today.getFullYear()\n let month = today.getMonth()\n let date = today.getDate()\n\n for (let i = 0; i < _createRecords.length; i++) {\n const total = await tx.getRepository(Inventory).countBy({\n createdAt: MoreThan(new Date(year, month, date))\n })\n\n const newRecord = _createRecords[i]\n\n if (newRecord.location && newRecord.location.id) {\n var location = await tx.getRepository(Location).findOne({\n where: { id: newRecord.location.id },\n relations: ['warehouse']\n })\n newRecord.location = location\n newRecord.zone = location.zone\n newRecord.warehouse = location.warehouse\n }\n\n if (newRecord.bizplace && newRecord.bizplace.id) {\n newRecord.bizplace = (await tx.getRepository(Bizplace).findOneBy({ id: newRecord.bizplace.id })) as any\n }\n\n if (newRecord.product && newRecord.product.id) {\n var product = (await tx.getRepository(Product).findOneBy({ id: newRecord.product.id })) as any\n newRecord.product = product\n }\n\n let palletId =\n 'P' +\n year.toString().substr(year.toString().length - 2) +\n ('0' + (month + 1).toString()).substr(('0' + (month + 1).toString()).toString().length - 2) +\n ('0' + date.toString()).substr(('0' + date.toString()).length - 2) +\n ('0000' + (total + 1).toString()).substr(('0000' + (total + 1).toString()).length - 4)\n\n newRecord.name = palletId\n newRecord.status = newRecord.qty < 1 ? 'TERMINATED' : 'STORED'\n newRecord.palletId = palletId\n\n const result = await inventoryRepo.save({\n domain: domain,\n creator: user,\n updater: user,\n lastSeq: 0,\n ...newRecord\n } as any)\n\n await tx.getRepository(InventoryHistory).save({\n ...newRecord,\n domain: domain,\n creator: user,\n updater: user,\n name: InventoryNoGenerator.inventoryHistoryName(),\n seq: 0,\n transactionType: 'NEW',\n productId: newRecord.product.id,\n warehouseId: newRecord.warehouse.id,\n locationId: newRecord.location.id\n })\n\n results.push({ ...result, cuFlag: '+' })\n }\n }\n\n if (_updateRecords.length > 0) {\n for (let i = 0; i < _updateRecords.length; i++) {\n const newRecord = _updateRecords[i]\n const newHistoryRecord = JSON.parse(JSON.stringify(_updateRecords[i]))\n let transactionType = ''\n\n let inventory = await inventoryRepo.findOne({\n where: { id: newRecord.id },\n relations: ['warehouse', 'location', 'product', 'bizplace']\n })\n newHistoryRecord.openingQty = inventory.qty\n newHistoryRecord.openingUomValue = inventory.uomValue\n\n // Get last sequence from InventoryHistory\n let latestEntry = await tx.getRepository(InventoryHistory).find({\n where: { palletId: inventory.palletId },\n order: { seq: 'DESC' },\n take: 1\n })\n let lastSeq = latestEntry[0].seq\n\n // Condition 1: Change location (RELOCATE)\n if (newRecord.location && newRecord.location.id) {\n var location = await tx.getRepository(Location).findOne({\n where: { id: newRecord.location.id },\n relations: ['warehouse']\n })\n newRecord.location = location\n newRecord.zone = location.zone\n newRecord.warehouse = location.warehouse\n\n newHistoryRecord.location = location\n newHistoryRecord.zone = location.zone\n newHistoryRecord.warehouse = location.warehouse\n\n transactionType = 'RELOCATE'\n }\n\n // Condition 2: Change of qty or uomValue.\n // Set qty movement for inventory history\n if (typeof newRecord.qty != 'undefined') {\n transactionType = 'ADJUSTMENT'\n newHistoryRecord.qty = newRecord.qty - inventory.qty\n if (newRecord.qty < 1) {\n newRecord.status = 'TERMINATED'\n newRecord.qty = 0\n newRecord.uomValue = 0\n }\n } else {\n newHistoryRecord.qty = 0\n }\n // Set uomValue movement for inventory history\n if (typeof newRecord.uomValue != 'undefined') {\n transactionType = 'ADJUSTMENT'\n newHistoryRecord.uomValue = newRecord.uomValue - inventory.uomValue\n if (newRecord.uomValue < 1) {\n newRecord.uomValue = 0\n }\n } else {\n newHistoryRecord.uomValue = 0\n }\n\n // Condition 3: Change of bizplace or product or batch id or packing type\n if (newRecord.bizplace && newRecord.bizplace.id) {\n newRecord.bizplace = (await tx.getRepository(Bizplace).findOneBy({ id: newRecord.bizplace.id })) as any\n }\n\n if (newRecord.product && newRecord.product.id) {\n newRecord.product = (await tx.getRepository(Product).findOneBy({ id: newRecord.product.id })) as any\n }\n\n if ((newRecord.product && newRecord.product.id) || (newRecord.bizplace && newRecord.bizplace.id) || newRecord.batchId || newRecord.packingType) {\n if (\n inventory.bizplace.id !== (newRecord.bizplace ? newRecord.bizplace.id : '') ||\n inventory.product.id !== (newRecord.product ? newRecord.product.id : '') ||\n inventory.batchId !== newRecord.batchId ||\n inventory.packingType !== newRecord.packingType\n ) {\n transactionType = 'ADJUSTMENT'\n lastSeq = lastSeq + 1\n let inventoryHistory = {\n ...inventory,\n domain: domain,\n bizplace: inventory.bizplace.id,\n openingQty: inventory.qty,\n openingUomValue: inventory.uomValue,\n qty: -inventory.qty || 0,\n uomValue: -inventory.uomValue || 0,\n name: InventoryNoGenerator.inventoryHistoryName(),\n seq: lastSeq,\n inventory,\n transactionType: transactionType,\n status: INVENTORY_STATUS.TERMINATED,\n productId: inventory.product.id,\n warehouseId: inventory.warehouse.id,\n locationId: inventory.location.id,\n creator: user,\n updater: user\n }\n\n delete inventoryHistory.id\n await tx.getRepository(InventoryHistory).save(inventoryHistory as any)\n\n newHistoryRecord.qty = newRecord.qty || inventory.qty\n newHistoryRecord.uomValue = newRecord.uomValue || inventory.uomValue || 0\n newHistoryRecord.openingQty = 0\n newHistoryRecord.openingUomValue = 0\n newHistoryRecord.batchId = newRecord.batchId || inventory.batchId || '-'\n }\n }\n\n //Transaction type will be RELOCATE if there is only location change. Any other changes will be considered Adjustment.\n lastSeq = lastSeq + 1\n let inventoryHistory = {\n ...inventory,\n ...newHistoryRecord,\n domain: domain,\n creator: user,\n updater: user,\n name: InventoryNoGenerator.inventoryHistoryName(),\n seq: lastSeq,\n inventory,\n transactionType: transactionType == '' ? 'ADJUSTMENT' : transactionType,\n productId: newHistoryRecord.product ? newHistoryRecord.product.id : inventory.product.id,\n warehouseId: newHistoryRecord.warehouse ? newHistoryRecord.warehouse.id : inventory.warehouse.id,\n locationId: newHistoryRecord.location ? newHistoryRecord.location.id : inventory.location.id\n }\n\n delete inventoryHistory.id\n await tx.getRepository(InventoryHistory).save(inventoryHistory)\n\n const result = await inventoryRepo.save({\n ...inventory,\n ...newRecord,\n updater: user,\n lastSeq: lastSeq\n })\n\n results.push({ ...result, cuFlag: 'M' })\n }\n }\n\n return results\n }\n\n @Directive('@privilege(category: \"inventory\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => Boolean)\n async deleteInventories(@Arg('ids', type => [String]) ids: string[], @Ctx() context: ResolverContext): Promise<Boolean> {\n const { tx } = context.state\n\n await tx.getRepository(Inventory).delete({\n id: In(ids)\n })\n\n return true\n }\n\n @Directive('@privilege(category: \"inventory\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => Boolean)\n async inventoryTransfer(\n @Arg('originPalletId') originPalletId: string,\n @Arg('palletId', { nullable: true }) palletId: string,\n @Arg('cartonId', { nullable: true }) cartonId: string,\n @Arg('fromLocationName') fromLocationName: string,\n @Arg('toLocationName') toLocationName: string,\n @Arg('qty') qty: number,\n @Arg('reason', { nullable: true }) reason: string,\n @Ctx() context: ResolverContext\n ): Promise<Boolean> {\n const { domain, user, tx } = context.state\n\n const fromLocation: Location = await tx.getRepository(Location).findOne({\n where: { domain: { id: domain.id }, name: fromLocationName },\n relations: ['domain', 'warehouse']\n })\n // 1. check toLocation exist\n const toLocation: Location = await tx.getRepository(Location).findOne({\n where: { domain: { id: domain.id }, name: toLocationName },\n relations: ['domain', 'warehouse']\n })\n if (!toLocation) throw new Error(context.t(`error.To_location_does_not_exists`))\n\n if (qty < 0) throw new Error(`Invalid quantity`)\n\n // 2. search for related inventory\n const invQb: SelectQueryBuilder<Inventory> = await tx\n .getRepository(Inventory)\n .createQueryBuilder('INV')\n .innerJoinAndSelect('INV.location', 'loc')\n .innerJoinAndSelect('INV.product', 'product')\n .innerJoinAndSelect('INV.bizplace', 'bizplace')\n .leftJoinAndSelect('INV.refInventory', 'refInventory')\n .leftJoinAndSelect('INV.reusablePallet', 'reusablePallet')\n .leftJoinAndSelect('INV.productDetail', 'productDetail')\n .leftJoinAndSelect('bizplace.domain', 'domain')\n .leftJoinAndSelect('product.productDetails', 'productDetails')\n .leftJoinAndSelect('INV.originInventory', 'originInventory')\n .where('INV.domain_id = :domainId', { domainId: domain.id })\n .andWhere('INV.pallet_id = :palletId', { palletId: originPalletId })\n\n let inventory: Inventory = await invQb.getOne()\n if (!inventory) throw new Error('Inventory not found')\n\n if (qty > inventory.qty - (inventory?.lockedQty > 0 ? inventory.lockedQty : 0)) throw new Error('Transfer quantity exceeded inventory quantity')\n\n if (toLocation.name == inventory.location.name) throw new Error('Inventory is in current location')\n\n let transactionInventory = new InventoryUtil(tx, domain, user)\n\n const sellercraft: Sellercraft = await tx.getRepository(Sellercraft).findOne({\n where: { domain: { id: inventory.bizplace.domain.id }, status: SellercraftStatus.ACTIVE },\n relations: ['domain']\n })\n\n const partialTransferFunc = async function (inventory, qty, fromLocation, toLocation, cartonId, palletId, context) {\n const { user, tx } = context.state\n\n if (qty < inventory.qty - (inventory?.lockedQty > 0 ? inventory.lockedQty : 0)) {\n if (!palletId || palletId.trim() == '') throw new Error('Require new lot id for partial transfer')\n\n let transferQty = qty\n let transferUomValue = (inventory.uomValue / inventory.qty) * qty\n let newInventory = {\n ...inventory,\n palletId,\n location: toLocation,\n warehouse: toLocation.warehouse,\n zone: toLocation.zone,\n creator: user,\n updater: user\n }\n\n delete newInventory.id\n delete newInventory.updatedAt\n\n newInventory.cartonId = cartonId\n newInventory.qty = transferQty\n newInventory.lockedQty = 0\n newInventory.uomValue = transferUomValue\n newInventory.lockedUomValue = 0\n if (inventory.originInventory?.id) {\n newInventory.originInventory = { id: inventory.originInventory.id }\n } else {\n newInventory.originInventory = { id: inventory.id }\n }\n\n await transactionInventory.transactionInventory(\n { ...inventory, qty: inventory.qty - transferQty, uomValue: inventory.uomValue - transferUomValue },\n null,\n -transferQty,\n -transferUomValue,\n INVENTORY_TRANSACTION_TYPE.RELOCATE,\n reason || null\n )\n\n await transactionInventory.transactionInventory(newInventory, null, transferQty, transferUomValue, INVENTORY_TRANSACTION_TYPE.RELOCATE, reason || null)\n\n if (sellercraft) {\n const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)\n await sellercraftCtrl.updateSellercraftStock(sellercraft, inventory)\n await sellercraftCtrl.updateSellercraftStock(sellercraft, newInventory)\n }\n } else {\n inventory.warehouse = toLocation.warehouse\n inventory.location = toLocation\n inventory.zone = toLocation.zone\n inventory.updater = user\n inventory.cartonId = cartonId\n\n let isEmptyLocation = await tx.getRepository(Inventory).find({\n where: { location: { id: fromLocation.id } }\n })\n\n if ((isEmptyLocation.length = 1)) {\n await tx.getRepository(Location).save({\n ...fromLocation,\n status: LOCATION_STATUS.EMPTY\n })\n }\n\n await transactionInventory.transactionInventory(inventory, null, 0, 0, INVENTORY_TRANSACTION_TYPE.RELOCATE, reason || null)\n\n if (sellercraft) {\n const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)\n await sellercraftCtrl.updateSellercraftStock(sellercraft, inventory)\n }\n }\n }\n\n if (inventory.cartonId && inventory.cartonId != '') {\n if (!cartonId) throw new Error('Require carton id')\n\n if (qty < inventory.qty - (inventory?.lockedQty > 0 ? inventory.lockedQty : 0)) {\n palletId = await generateId({\n domain: domain,\n type: RULE_TYPE.LOT_NUMBER_ID,\n seed: { date: DateGenerator.generateDate() }\n })\n }\n\n await partialTransferFunc(inventory, qty, fromLocation, toLocation, cartonId, palletId, context)\n } else {\n if (!palletId) {\n palletId = await generateId({\n domain: domain,\n type: RULE_TYPE.LOT_NUMBER_ID,\n seed: { date: DateGenerator.generateDate() }\n })\n }\n await partialTransferFunc(inventory, qty, fromLocation, toLocation, null, palletId, context)\n }\n\n return true\n }\n}\n"]}
1
+ {"version":3,"file":"inventory-mutation.js","sourceRoot":"","sources":["../../../server/service/inventory/inventory-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'\nimport { In, MoreThan, SelectQueryBuilder } from 'typeorm'\n\nimport { Bizplace } from '@things-factory/biz-base'\nimport { generateId } from '@things-factory/id-rule-base'\nimport { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'\nimport { Product } from '@things-factory/product-base'\n\nimport { INVENTORY_STATUS, INVENTORY_TRANSACTION_TYPE, LOCATION_STATUS, RULE_TYPE } from '../../constants'\nimport { SellercraftController } from '../../controllers'\nimport { DateGenerator, InventoryNoGenerator, InventoryUtil } from '../../utils'\nimport { InventoryHistory } from '../inventory-history/inventory-history'\nimport { Location } from '../location/location'\nimport { Inventory } from './inventory'\nimport { InventoryPatch, NewInventory } from './inventory-types'\n\n@Resolver(Inventory)\nexport class InventoryMutation {\n @Directive('@privilege(category: \"inventory\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => Inventory)\n async createInventory(@Arg('inventory') inventory: NewInventory, @Ctx() context: ResolverContext): Promise<Inventory> {\n const { tx } = context.state\n\n return await tx.getRepository(Inventory).save({\n domain: context.state.domain,\n creator: context.state.user,\n updater: context.state.user,\n ...inventory\n })\n }\n\n @Directive('@privilege(category: \"inventory\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => Inventory)\n async updateInventory(@Arg('patch') patch: InventoryPatch, @Ctx() context: ResolverContext): Promise<Inventory> {\n const { domain, user, tx } = context.state\n\n const invQb: SelectQueryBuilder<Inventory> = await tx\n .getRepository(Inventory)\n .createQueryBuilder('INV')\n .where('INV.domain_id = :domainId', { domainId: domain.id })\n .andWhere('INV.bizplace_id = :bizplaceId', { bizplaceId: patch.bizplace.id })\n .andWhere('INV.batch_id = :batchId', { batchId: patch.batchId })\n .andWhere('INV.product_id = :productId', { productId: patch.product.id })\n .andWhere('INV.packing_type = :packingType', { packingType: patch.packingType })\n .andWhere('INV.packing_size = :packingSize', { packingSize: patch.packingSize })\n\n if (patch?.cartonId) invQb.andWhere('INV.carton_id = :cartonId', { cartonId: patch.cartonId })\n else invQb.andWhere('INV.pallet_id = :palletId', { palletId: patch.palletId })\n\n const inventory = await invQb.getOne()\n\n return await tx.getRepository(Inventory).save({\n ...inventory,\n ...patch,\n updater: user\n })\n }\n\n @Directive('@privilege(category: \"inventory\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => Inventory)\n async updateInventoryRemark(@Arg('id') id: string, @Arg('remark') remark: string, @Ctx() context: ResolverContext): Promise<Inventory> {\n const { domain, user, tx } = context.state\n\n const repository = tx.getRepository(Inventory)\n const inventory = await repository.findOne({ where: { domain: { id: domain.id }, id } })\n\n return await repository.save({\n ...inventory,\n remark,\n updater: user\n })\n }\n\n @Directive('@privilege(category: \"inventory\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => Boolean)\n async deleteInventory(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<Boolean> {\n const { tx } = context.state\n\n await tx.getRepository(Inventory).delete({ domain: { id: context.state.domain.id }, name })\n return true\n }\n\n @Directive('@privilege(category: \"inventory\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => [Inventory])\n async updateMultipleInventory(@Arg('patches', type => [InventoryPatch]) patches: InventoryPatch[], @Ctx() context: ResolverContext): Promise<Inventory[]> {\n return await updateMultipleInventory(patches, context)\n }\n\n @Directive('@privilege(category: \"inventory\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => Boolean)\n async deleteInventories(@Arg('ids', type => [String]) ids: string[], @Ctx() context: ResolverContext): Promise<Boolean> {\n const { tx } = context.state\n\n await tx.getRepository(Inventory).delete({\n id: In(ids)\n })\n\n return true\n }\n\n @Directive('@privilege(category: \"inventory\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => Boolean)\n async inventoryTransfer(\n @Arg('originPalletId') originPalletId: string,\n @Arg('palletId', { nullable: true }) palletId: string,\n @Arg('cartonId', { nullable: true }) cartonId: string,\n @Arg('fromLocationName') fromLocationName: string,\n @Arg('toLocationName') toLocationName: string,\n @Arg('qty') qty: number,\n @Arg('reason', { nullable: true }) reason: string,\n @Ctx() context: ResolverContext\n ): Promise<Boolean> {\n const { domain, user, tx } = context.state\n\n const fromLocation: Location = await tx.getRepository(Location).findOne({\n where: { domain: { id: domain.id }, name: fromLocationName },\n relations: ['domain', 'warehouse']\n })\n // 1. check toLocation exist\n const toLocation: Location = await tx.getRepository(Location).findOne({\n where: { domain: { id: domain.id }, name: toLocationName },\n relations: ['domain', 'warehouse']\n })\n if (!toLocation) throw new Error(context.t(`error.To_location_does_not_exists`))\n\n if (qty < 0) throw new Error(`Invalid quantity`)\n\n // 2. search for related inventory\n const invQb: SelectQueryBuilder<Inventory> = await tx\n .getRepository(Inventory)\n .createQueryBuilder('INV')\n .innerJoinAndSelect('INV.location', 'loc')\n .innerJoinAndSelect('INV.product', 'product')\n .innerJoinAndSelect('INV.bizplace', 'bizplace')\n .leftJoinAndSelect('INV.refInventory', 'refInventory')\n .leftJoinAndSelect('INV.reusablePallet', 'reusablePallet')\n .leftJoinAndSelect('INV.productDetail', 'productDetail')\n .leftJoinAndSelect('bizplace.domain', 'domain')\n .leftJoinAndSelect('product.productDetails', 'productDetails')\n .leftJoinAndSelect('INV.originInventory', 'originInventory')\n .where('INV.domain_id = :domainId', { domainId: domain.id })\n .andWhere('INV.pallet_id = :palletId', { palletId: originPalletId })\n\n let inventory: Inventory = await invQb.getOne()\n if (!inventory) throw new Error('Inventory not found')\n\n if (qty > inventory.qty - (inventory?.lockedQty > 0 ? inventory.lockedQty : 0)) throw new Error('Transfer quantity exceeded inventory quantity')\n\n if (toLocation.name == inventory.location.name) throw new Error('Inventory is in current location')\n\n let transactionInventory = new InventoryUtil(tx, domain, user)\n\n const sellercraft: Sellercraft = await tx.getRepository(Sellercraft).findOne({\n where: { domain: { id: inventory.bizplace.domain.id }, status: SellercraftStatus.ACTIVE },\n relations: ['domain']\n })\n\n const partialTransferFunc = async function (inventory, qty, fromLocation, toLocation, cartonId, palletId, context) {\n const { user, tx } = context.state\n\n if (qty < inventory.qty - (inventory?.lockedQty > 0 ? inventory.lockedQty : 0)) {\n if (!palletId || palletId.trim() == '') throw new Error('Require new lot id for partial transfer')\n\n let transferQty = qty\n let transferUomValue = (inventory.uomValue / inventory.qty) * qty\n let newInventory = {\n ...inventory,\n palletId,\n location: toLocation,\n warehouse: toLocation.warehouse,\n zone: toLocation.zone,\n creator: user,\n updater: user\n }\n\n delete newInventory.id\n delete newInventory.updatedAt\n\n newInventory.cartonId = cartonId\n newInventory.qty = transferQty\n newInventory.lockedQty = 0\n newInventory.uomValue = transferUomValue\n newInventory.lockedUomValue = 0\n if (inventory.originInventory?.id) {\n newInventory.originInventory = { id: inventory.originInventory.id }\n } else {\n newInventory.originInventory = { id: inventory.id }\n }\n\n await transactionInventory.transactionInventory(\n { ...inventory, qty: inventory.qty - transferQty, uomValue: inventory.uomValue - transferUomValue },\n null,\n -transferQty,\n -transferUomValue,\n INVENTORY_TRANSACTION_TYPE.RELOCATE,\n reason || null\n )\n\n await transactionInventory.transactionInventory(newInventory, null, transferQty, transferUomValue, INVENTORY_TRANSACTION_TYPE.RELOCATE, reason || null)\n\n if (sellercraft) {\n const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)\n await sellercraftCtrl.updateSellercraftStock(sellercraft, inventory)\n await sellercraftCtrl.updateSellercraftStock(sellercraft, newInventory)\n }\n } else {\n inventory.warehouse = toLocation.warehouse\n inventory.location = toLocation\n inventory.zone = toLocation.zone\n inventory.updater = user\n inventory.cartonId = cartonId\n\n let isEmptyLocation = await tx.getRepository(Inventory).find({\n where: { location: { id: fromLocation.id } }\n })\n\n if ((isEmptyLocation.length = 1)) {\n await tx.getRepository(Location).save({\n ...fromLocation,\n status: LOCATION_STATUS.EMPTY\n })\n }\n\n await transactionInventory.transactionInventory(inventory, null, 0, 0, INVENTORY_TRANSACTION_TYPE.RELOCATE, reason || null)\n\n if (sellercraft) {\n const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)\n await sellercraftCtrl.updateSellercraftStock(sellercraft, inventory)\n }\n }\n }\n\n if (inventory.cartonId && inventory.cartonId != '') {\n if (!cartonId) throw new Error('Require carton id')\n\n if (qty < inventory.qty - (inventory?.lockedQty > 0 ? inventory.lockedQty : 0)) {\n palletId = await generateId({\n domain: domain,\n type: RULE_TYPE.LOT_NUMBER_ID,\n seed: { date: DateGenerator.generateDate() }\n })\n }\n\n await partialTransferFunc(inventory, qty, fromLocation, toLocation, cartonId, palletId, context)\n } else {\n if (!palletId) {\n palletId = await generateId({\n domain: domain,\n type: RULE_TYPE.LOT_NUMBER_ID,\n seed: { date: DateGenerator.generateDate() }\n })\n }\n await partialTransferFunc(inventory, qty, fromLocation, toLocation, null, palletId, context)\n }\n\n return true\n }\n}\n\nexport async function updateMultipleInventory(patches: InventoryPatch[], context: ResolverContext): Promise<Inventory[]> {\n const { domain, user, tx } = context.state\n\n let results = []\n const _createRecords = patches.filter((patch: any) => !patch.id)\n const _updateRecords = patches.filter((patch: any) => patch.id)\n\n const inventoryRepo = tx.getRepository(Inventory)\n if (_createRecords.length > 0) {\n let today = new Date()\n let year = today.getFullYear()\n let month = today.getMonth()\n let date = today.getDate()\n\n for (let i = 0; i < _createRecords.length; i++) {\n const total = await tx.getRepository(Inventory).countBy({\n createdAt: MoreThan(new Date(year, month, date))\n })\n\n const newRecord = _createRecords[i]\n\n if (newRecord.location && newRecord.location.id) {\n var location = await tx.getRepository(Location).findOne({\n where: { id: newRecord.location.id },\n relations: ['warehouse']\n })\n newRecord.location = location\n newRecord.zone = location.zone\n newRecord.warehouse = location.warehouse\n }\n\n if (newRecord.bizplace && newRecord.bizplace.id) {\n newRecord.bizplace = (await tx.getRepository(Bizplace).findOneBy({ id: newRecord.bizplace.id })) as any\n }\n\n if (newRecord.product && newRecord.product.id) {\n var product = (await tx.getRepository(Product).findOneBy({ id: newRecord.product.id })) as any\n newRecord.product = product\n }\n\n let palletId =\n 'P' +\n year.toString().substr(year.toString().length - 2) +\n ('0' + (month + 1).toString()).substr(('0' + (month + 1).toString()).toString().length - 2) +\n ('0' + date.toString()).substr(('0' + date.toString()).length - 2) +\n ('0000' + (total + 1).toString()).substr(('0000' + (total + 1).toString()).length - 4)\n\n newRecord.name = palletId\n newRecord.status = newRecord.qty < 1 ? 'TERMINATED' : 'STORED'\n newRecord.palletId = palletId\n\n const result = await inventoryRepo.save({\n domain: domain,\n creator: user,\n updater: user,\n lastSeq: 0,\n ...newRecord\n } as any)\n\n await tx.getRepository(InventoryHistory).save({\n ...newRecord,\n domain: domain,\n creator: user,\n updater: user,\n name: InventoryNoGenerator.inventoryHistoryName(),\n seq: 0,\n transactionType: 'NEW',\n productId: newRecord.product.id,\n warehouseId: newRecord.warehouse.id,\n locationId: newRecord.location.id\n })\n\n results.push({ ...result, cuFlag: '+' })\n }\n }\n\n if (_updateRecords.length > 0) {\n for (let i = 0; i < _updateRecords.length; i++) {\n const newRecord = _updateRecords[i]\n const newHistoryRecord = JSON.parse(JSON.stringify(_updateRecords[i]))\n let transactionType = ''\n\n let inventory = await inventoryRepo.findOne({\n where: { id: newRecord.id },\n relations: ['warehouse', 'location', 'product', 'bizplace']\n })\n newHistoryRecord.openingQty = inventory.qty\n newHistoryRecord.openingUomValue = inventory.uomValue\n\n // Get last sequence from InventoryHistory\n let latestEntry = await tx.getRepository(InventoryHistory).find({\n where: { palletId: inventory.palletId },\n order: { seq: 'DESC' },\n take: 1\n })\n let lastSeq = latestEntry[0].seq\n\n // Condition 1: Change location (RELOCATE)\n if (newRecord.location && newRecord.location.id) {\n var location = await tx.getRepository(Location).findOne({\n where: { id: newRecord.location.id },\n relations: ['warehouse']\n })\n newRecord.location = location\n newRecord.zone = location.zone\n newRecord.warehouse = location.warehouse\n\n newHistoryRecord.location = location\n newHistoryRecord.zone = location.zone\n newHistoryRecord.warehouse = location.warehouse\n\n transactionType = 'RELOCATE'\n }\n\n // Condition 2: Change of qty or uomValue.\n // Set qty movement for inventory history\n if (typeof newRecord.qty != 'undefined') {\n transactionType = 'ADJUSTMENT'\n newHistoryRecord.qty = newRecord.qty - inventory.qty\n if (newRecord.qty < 1) {\n newRecord.status = 'TERMINATED'\n newRecord.qty = 0\n newRecord.uomValue = 0\n }\n } else {\n newHistoryRecord.qty = 0\n }\n // Set uomValue movement for inventory history\n if (typeof newRecord.uomValue != 'undefined') {\n transactionType = 'ADJUSTMENT'\n newHistoryRecord.uomValue = newRecord.uomValue - inventory.uomValue\n if (newRecord.uomValue < 1) {\n newRecord.uomValue = 0\n }\n } else {\n newHistoryRecord.uomValue = 0\n }\n\n // Condition 3: Change of bizplace or product or batch id or packing type\n if (newRecord.bizplace && newRecord.bizplace.id) {\n newRecord.bizplace = (await tx.getRepository(Bizplace).findOneBy({ id: newRecord.bizplace.id })) as any\n }\n\n if (newRecord.product && newRecord.product.id) {\n newRecord.product = (await tx.getRepository(Product).findOneBy({ id: newRecord.product.id })) as any\n }\n\n if ((newRecord.product && newRecord.product.id) || (newRecord.bizplace && newRecord.bizplace.id) || newRecord.batchId || newRecord.packingType) {\n if (\n inventory.bizplace.id !== (newRecord.bizplace ? newRecord.bizplace.id : '') ||\n inventory.product.id !== (newRecord.product ? newRecord.product.id : '') ||\n inventory.batchId !== newRecord.batchId ||\n inventory.packingType !== newRecord.packingType\n ) {\n transactionType = 'ADJUSTMENT'\n lastSeq = lastSeq + 1\n let inventoryHistory: any = {\n ...inventory,\n domain: domain,\n bizplace: inventory.bizplace.id,\n openingQty: inventory.qty,\n openingUomValue: inventory.uomValue,\n qty: -inventory.qty || 0,\n uomValue: -inventory.uomValue || 0,\n name: InventoryNoGenerator.inventoryHistoryName(),\n seq: lastSeq,\n inventory,\n transactionType: transactionType,\n status: INVENTORY_STATUS.TERMINATED,\n productId: inventory.product.id,\n warehouseId: inventory.warehouse.id,\n locationId: inventory.location.id,\n creator: user,\n updater: user\n }\n\n delete inventoryHistory.id\n await tx.getRepository(InventoryHistory).save(inventoryHistory as any)\n\n newHistoryRecord.qty = newRecord.qty || inventory.qty\n newHistoryRecord.uomValue = newRecord.uomValue || inventory.uomValue || 0\n newHistoryRecord.openingQty = 0\n newHistoryRecord.openingUomValue = 0\n newHistoryRecord.batchId = newRecord.batchId || inventory.batchId || '-'\n }\n }\n\n //Transaction type will be RELOCATE if there is only location change. Any other changes will be considered Adjustment.\n lastSeq = lastSeq + 1\n let inventoryHistory = {\n ...inventory,\n ...newHistoryRecord,\n domain: domain,\n creator: user,\n updater: user,\n name: InventoryNoGenerator.inventoryHistoryName(),\n seq: lastSeq,\n inventory,\n transactionType: transactionType == '' ? 'ADJUSTMENT' : transactionType,\n productId: newHistoryRecord.product ? newHistoryRecord.product.id : inventory.product.id,\n warehouseId: newHistoryRecord.warehouse ? newHistoryRecord.warehouse.id : inventory.warehouse.id,\n locationId: newHistoryRecord.location ? newHistoryRecord.location.id : inventory.location.id\n }\n\n delete inventoryHistory.id\n await tx.getRepository(InventoryHistory).save(inventoryHistory)\n\n const result = await inventoryRepo.save({\n ...inventory,\n ...newRecord,\n updater: user,\n lastSeq: lastSeq\n })\n\n results.push({ ...result, cuFlag: 'M' })\n }\n }\n\n return results\n}\n"]}
@@ -95,9 +95,7 @@ let InventoryQuery = class InventoryQuery {
95
95
  // Apply sorting based on child data
96
96
  if ((sortings === null || sortings === void 0 ? void 0 : sortings.length) !== 0) {
97
97
  const arrChildSortData = ['bizplace', 'product', 'location', 'warehouse', 'zone'];
98
- const sort = (sortings || []).reduce((acc, sort) => (Object.assign(Object.assign({}, acc), { [arrChildSortData.indexOf(sort.name) >= 0 ? sort.name + '.name' : 'inventory.' + sort.name]: sort.desc
99
- ? 'DESC'
100
- : 'ASC' })), {});
98
+ const sort = (sortings || []).reduce((acc, sort) => (Object.assign(Object.assign({}, acc), { [arrChildSortData.indexOf(sort.name) >= 0 ? sort.name + '.name' : 'inventory.' + sort.name]: sort.desc ? 'DESC' : 'ASC' })), {});
101
99
  qb.orderBy(sort);
102
100
  }
103
101
  if ((locationSortingRules === null || locationSortingRules === void 0 ? void 0 : locationSortingRules.length) > 0) {
@@ -179,7 +177,7 @@ let InventoryQuery = class InventoryQuery {
179
177
  .addSelect('COALESCE(SUM(i.locked_qty), 0)', 'lockedQty')
180
178
  .addSelect('COALESCE(SUM(i.uom_value), 0)', 'uomValue')
181
179
  .addSelect('COALESCE(SUM(i.locked_uom_value), 0)', 'lockedUomValue')
182
- .innerJoin('i.product', 'product', 'i.product_id = product.id')
180
+ .innerJoin('i.product', 'product', 'product.deleted_at IS NULL')
183
181
  .andWhere('i.status = :status', { status: constants_1.INVENTORY_STATUS.STORED })
184
182
  .andWhere('i.expiration_date >= now()')
185
183
  .andWhere('product.domain_id = :domain', { domain: domain.id })
@@ -469,9 +467,7 @@ let InventoryQuery = class InventoryQuery {
469
467
  where: { domain: { id: context.state.domain.id }, palletId: palletB, status: constants_1.INVENTORY_STATUS.STORED },
470
468
  relations: ['product']
471
469
  });
472
- return ((invA === null || invA === void 0 ? void 0 : invA.batchId) === (invB === null || invB === void 0 ? void 0 : invB.batchId) &&
473
- ((_a = invA === null || invA === void 0 ? void 0 : invA.product) === null || _a === void 0 ? void 0 : _a.id) === ((_b = invB === null || invB === void 0 ? void 0 : invB.product) === null || _b === void 0 ? void 0 : _b.id) &&
474
- (invA === null || invA === void 0 ? void 0 : invA.packingType) === (invB === null || invB === void 0 ? void 0 : invB.packingType));
470
+ return (invA === null || invA === void 0 ? void 0 : invA.batchId) === (invB === null || invB === void 0 ? void 0 : invB.batchId) && ((_a = invA === null || invA === void 0 ? void 0 : invA.product) === null || _a === void 0 ? void 0 : _a.id) === ((_b = invB === null || invB === void 0 ? void 0 : invB.product) === null || _b === void 0 ? void 0 : _b.id) && (invA === null || invA === void 0 ? void 0 : invA.packingType) === (invB === null || invB === void 0 ? void 0 : invB.packingType);
475
471
  }
476
472
  async checkCartonIdenticality(cartonA, palletA, cartonB, context) {
477
473
  var _a, _b;
@@ -1120,9 +1116,7 @@ async function inventoriesByStrategy({ worksheetId, batchId, bizplaceId, product
1120
1116
  case 'LOCATION':
1121
1117
  if ((locationSortingRules === null || locationSortingRules === void 0 ? void 0 : locationSortingRules.length) > 0) {
1122
1118
  locationSortingRules.forEach((rule, idx) => {
1123
- idx === 0
1124
- ? qb.orderBy(`LOC.${rule.name}`, rule.desc ? 'DESC' : 'ASC')
1125
- : qb.addOrderBy(`LOC.${rule.name}`, rule.desc ? 'DESC' : 'ASC');
1119
+ idx === 0 ? qb.orderBy(`LOC.${rule.name}`, rule.desc ? 'DESC' : 'ASC') : qb.addOrderBy(`LOC.${rule.name}`, rule.desc ? 'DESC' : 'ASC');
1126
1120
  });
1127
1121
  }
1128
1122
  else