@things-factory/sales-base 6.2.94 → 6.2.97
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.
|
@@ -124,9 +124,7 @@ let ArrivalNoticeMutation = class ArrivalNoticeMutation {
|
|
|
124
124
|
}
|
|
125
125
|
async updateArrivalNoticeDetails(context, arrivalNotice) {
|
|
126
126
|
const { domain, tx } = context.state;
|
|
127
|
-
let existingArrivalNotice = await tx
|
|
128
|
-
.getRepository(arrival_notice_1.ArrivalNotice)
|
|
129
|
-
.findOne({ where: { name: arrivalNotice.name, domain: { id: domain.id } } });
|
|
127
|
+
let existingArrivalNotice = await tx.getRepository(arrival_notice_1.ArrivalNotice).findOne({ where: { name: arrivalNotice.name, domain: { id: domain.id } } });
|
|
130
128
|
if (!existingArrivalNotice) {
|
|
131
129
|
throw new Error('Existing Arrival Notice not found.');
|
|
132
130
|
}
|
|
@@ -138,9 +136,7 @@ let ArrivalNoticeMutation = class ArrivalNoticeMutation {
|
|
|
138
136
|
let createdArrivalNoticeIds = [], createdOrderProductIds = [], errorsCaught = [], finalArrivalNoticeList = [];
|
|
139
137
|
let opStatus = constants_1.ORDER_PRODUCT_STATUS.PENDING_RECEIVE;
|
|
140
138
|
let anStatus = constants_1.ORDER_STATUS.PENDING_RECEIVE;
|
|
141
|
-
const foundBizplace = await tx
|
|
142
|
-
.getRepository(biz_base_1.Bizplace)
|
|
143
|
-
.findOne({ where: { id: bizplaceId }, relations: ['domain'] });
|
|
139
|
+
const foundBizplace = await tx.getRepository(biz_base_1.Bizplace).findOne({ where: { id: bizplaceId }, relations: ['domain'] });
|
|
144
140
|
if (!foundBizplace)
|
|
145
141
|
throw new Error('company not found');
|
|
146
142
|
// to check whether the raw data are valid
|
|
@@ -164,9 +160,7 @@ let ArrivalNoticeMutation = class ArrivalNoticeMutation {
|
|
|
164
160
|
});
|
|
165
161
|
// If status of GAN is PENDING_RECEIVE then directly to assign warehouse
|
|
166
162
|
if (ganProcessingSetting) {
|
|
167
|
-
let setting = !isNaN(partnerGanProcessingSetting === null || partnerGanProcessingSetting === void 0 ? void 0 : partnerGanProcessingSetting.value)
|
|
168
|
-
? partnerGanProcessingSetting === null || partnerGanProcessingSetting === void 0 ? void 0 : partnerGanProcessingSetting.value
|
|
169
|
-
: ganProcessingSetting.value;
|
|
163
|
+
let setting = !isNaN(partnerGanProcessingSetting === null || partnerGanProcessingSetting === void 0 ? void 0 : partnerGanProcessingSetting.value) ? partnerGanProcessingSetting === null || partnerGanProcessingSetting === void 0 ? void 0 : partnerGanProcessingSetting.value : ganProcessingSetting.value;
|
|
170
164
|
// CONFIRM to assign if setting value is 1
|
|
171
165
|
if (setting == 1) {
|
|
172
166
|
opStatus = constants_1.ORDER_PRODUCT_STATUS.ARRIVED;
|
|
@@ -196,9 +190,7 @@ let ArrivalNoticeMutation = class ArrivalNoticeMutation {
|
|
|
196
190
|
throw new Error(`duplicated with ${duplicatedArrivalNotice.name}`);
|
|
197
191
|
}
|
|
198
192
|
// save new arrival notice
|
|
199
|
-
const createdArrivalNotice = await childTx.getRepository(arrival_notice_1.ArrivalNotice).save(Object.assign(Object.assign({}, arrivalNotices[i]), { name: ganNoSetting
|
|
200
|
-
? await (0, id_rule_base_1.generateId)({ domain, type: constants_1.ORDER_NUMBER_RULE_TYPE.GAN_NUMBER, seed: {} })
|
|
201
|
-
: order_no_generator_1.OrderNoGenerator.arrivalNotice(), domain, bizplace: foundBizplace, status: constants_1.ORDER_STATUS.PENDING, creator: user, updater: user }));
|
|
193
|
+
const createdArrivalNotice = await childTx.getRepository(arrival_notice_1.ArrivalNotice).save(Object.assign(Object.assign({}, arrivalNotices[i]), { name: ganNoSetting ? await (0, id_rule_base_1.generateId)({ domain, type: constants_1.ORDER_NUMBER_RULE_TYPE.GAN_NUMBER, seed: {} }) : order_no_generator_1.OrderNoGenerator.arrivalNotice(), domain, bizplace: foundBizplace, status: constants_1.ORDER_STATUS.PENDING, creator: user, updater: user }));
|
|
202
194
|
// save new order products
|
|
203
195
|
let createdOrderProducts = await Promise.all(arrivalNotices[i].orderProducts.map(async (op) => {
|
|
204
196
|
return Object.assign(Object.assign({}, op), { domain, bizplace: foundBizplace, name: order_no_generator_1.OrderNoGenerator.orderProduct(),
|
|
@@ -222,13 +214,9 @@ let ArrivalNoticeMutation = class ArrivalNoticeMutation {
|
|
|
222
214
|
if (createdArrivalNoticeIds.length && createdOrderProductIds.length) {
|
|
223
215
|
await (0, typeorm_1.getConnection)().transaction(async (childTx) => {
|
|
224
216
|
// update arrivalNotices status to PENDING_RECEIVE
|
|
225
|
-
await childTx
|
|
226
|
-
.getRepository(arrival_notice_1.ArrivalNotice)
|
|
227
|
-
.update({ id: (0, typeorm_1.In)(createdArrivalNoticeIds) }, { status: anStatus, updater: user });
|
|
217
|
+
await childTx.getRepository(arrival_notice_1.ArrivalNotice).update({ id: (0, typeorm_1.In)(createdArrivalNoticeIds) }, { status: anStatus, updater: user });
|
|
228
218
|
// update orderProducts status to PENDING_RECEIVE
|
|
229
|
-
await childTx
|
|
230
|
-
.getRepository(order_product_1.OrderProduct)
|
|
231
|
-
.update({ id: (0, typeorm_1.In)(createdOrderProductIds) }, { status: opStatus, updater: user });
|
|
219
|
+
await childTx.getRepository(order_product_1.OrderProduct).update({ id: (0, typeorm_1.In)(createdOrderProductIds) }, { status: opStatus, updater: user });
|
|
232
220
|
finalArrivalNoticeList = await childTx.getRepository(arrival_notice_1.ArrivalNotice).find({
|
|
233
221
|
where: { id: (0, typeorm_1.In)(createdArrivalNoticeIds) },
|
|
234
222
|
relations: ['orderProducts', 'orderProducts.product', 'bizplace']
|
|
@@ -427,7 +415,7 @@ async function generateArrivalNoticeFunction(_, arrivalNotice, fromPo, files, co
|
|
|
427
415
|
myBizplace = await (0, biz_base_1.getMyBizplace)(domain, user);
|
|
428
416
|
if (arrivalNotice.supplier) {
|
|
429
417
|
const supplier = await tx.getRepository(biz_base_1.ContactPoint).findOne({
|
|
430
|
-
where: {
|
|
418
|
+
where: { id: arrivalNotice.supplier, domain: { id: domain.id } },
|
|
431
419
|
relations: ['bizplace']
|
|
432
420
|
});
|
|
433
421
|
if (!supplier)
|
|
@@ -483,17 +471,7 @@ async function confirmArrivalNoticeFunction(name, context, tx) {
|
|
|
483
471
|
const { user, domain } = context.state;
|
|
484
472
|
const foundArrivalNotice = await tx.getRepository(arrival_notice_1.ArrivalNotice).findOne({
|
|
485
473
|
where: { domain: { id: domain.id }, name, status: constants_1.ORDER_STATUS.PENDING },
|
|
486
|
-
relations: [
|
|
487
|
-
'bizplace',
|
|
488
|
-
'bizplace.domain',
|
|
489
|
-
'releaseGood',
|
|
490
|
-
'orderProducts',
|
|
491
|
-
'orderProducts.product',
|
|
492
|
-
'orderVass',
|
|
493
|
-
'orderVass.vas',
|
|
494
|
-
'creator',
|
|
495
|
-
'updater'
|
|
496
|
-
]
|
|
474
|
+
relations: ['bizplace', 'bizplace.domain', 'releaseGood', 'orderProducts', 'orderProducts.product', 'orderVass', 'orderVass.vas', 'creator', 'updater']
|
|
497
475
|
});
|
|
498
476
|
let foundOPs = foundArrivalNotice.orderProducts;
|
|
499
477
|
let foundOVs = foundArrivalNotice.orderVass;
|
|
@@ -515,9 +493,7 @@ async function confirmArrivalNoticeFunction(name, context, tx) {
|
|
|
515
493
|
partnerDomain: { id: (_a = customerBizplace === null || customerBizplace === void 0 ? void 0 : customerBizplace.domain) === null || _a === void 0 ? void 0 : _a.id }
|
|
516
494
|
}
|
|
517
495
|
});
|
|
518
|
-
let setting = !isNaN(partnerGanProcessingSetting === null || partnerGanProcessingSetting === void 0 ? void 0 : partnerGanProcessingSetting.value)
|
|
519
|
-
? partnerGanProcessingSetting === null || partnerGanProcessingSetting === void 0 ? void 0 : partnerGanProcessingSetting.value
|
|
520
|
-
: ganProcessingSetting.value;
|
|
496
|
+
let setting = !isNaN(partnerGanProcessingSetting === null || partnerGanProcessingSetting === void 0 ? void 0 : partnerGanProcessingSetting.value) ? partnerGanProcessingSetting === null || partnerGanProcessingSetting === void 0 ? void 0 : partnerGanProcessingSetting.value : ganProcessingSetting.value;
|
|
521
497
|
// CONFIRM to assign if setting value is 1
|
|
522
498
|
if (setting == 1) {
|
|
523
499
|
opStatus = constants_1.ORDER_PRODUCT_STATUS.ARRIVED;
|
|
@@ -611,9 +587,7 @@ async function receiveArrivalNoticeFunction(_, name, context) {
|
|
|
611
587
|
partnerDomain: { id: (_a = customerBizplace === null || customerBizplace === void 0 ? void 0 : customerBizplace.domain) === null || _a === void 0 ? void 0 : _a.id }
|
|
612
588
|
}
|
|
613
589
|
});
|
|
614
|
-
let setting = !isNaN(partnerGanProcessingSetting === null || partnerGanProcessingSetting === void 0 ? void 0 : partnerGanProcessingSetting.value)
|
|
615
|
-
? partnerGanProcessingSetting === null || partnerGanProcessingSetting === void 0 ? void 0 : partnerGanProcessingSetting.value
|
|
616
|
-
: ganProcessingSetting.value;
|
|
590
|
+
let setting = !isNaN(partnerGanProcessingSetting === null || partnerGanProcessingSetting === void 0 ? void 0 : partnerGanProcessingSetting.value) ? partnerGanProcessingSetting === null || partnerGanProcessingSetting === void 0 ? void 0 : partnerGanProcessingSetting.value : ganProcessingSetting.value;
|
|
617
591
|
// RECEIVE to assign if setting value is 2
|
|
618
592
|
if (setting == 2) {
|
|
619
593
|
opStatus = constants_1.ORDER_PRODUCT_STATUS.ARRIVED;
|
|
@@ -829,17 +803,7 @@ function extractArrivalNotices(rawArrivalNotices) {
|
|
|
829
803
|
return;
|
|
830
804
|
const idx = arrivalNotices.findIndex(an => {
|
|
831
805
|
// consider these attributes if they are exist in "item"
|
|
832
|
-
const comparison = [
|
|
833
|
-
'refNo2',
|
|
834
|
-
'refNo3',
|
|
835
|
-
'truckNo',
|
|
836
|
-
'ownTransport',
|
|
837
|
-
'container',
|
|
838
|
-
'containerNo',
|
|
839
|
-
'containerSize',
|
|
840
|
-
'looseItem',
|
|
841
|
-
'importCargo'
|
|
842
|
-
];
|
|
806
|
+
const comparison = ['refNo2', 'refNo3', 'truckNo', 'ownTransport', 'container', 'containerNo', 'containerSize', 'looseItem', 'importCargo'];
|
|
843
807
|
let a = {}, b = {};
|
|
844
808
|
comparison.forEach(cc => {
|
|
845
809
|
if (raw[cc] !== null) {
|
|
@@ -867,10 +831,7 @@ function extractArrivalNotices(rawArrivalNotices) {
|
|
|
867
831
|
manufactureDate: raw.manufactureDate
|
|
868
832
|
};
|
|
869
833
|
if (idx >= 0) {
|
|
870
|
-
const duplicateSkuIdx = arrivalNotices[idx].orderProducts.findIndex(op => op.sku === raw.sku &&
|
|
871
|
-
op.packingType === raw.packingType &&
|
|
872
|
-
op.packingSize === raw.packingSize &&
|
|
873
|
-
op.batchId === raw.batchId);
|
|
834
|
+
const duplicateSkuIdx = arrivalNotices[idx].orderProducts.findIndex(op => op.sku === raw.sku && op.packingType === raw.packingType && op.packingSize === raw.packingSize && op.batchId === raw.batchId);
|
|
874
835
|
if (duplicateSkuIdx >= 0)
|
|
875
836
|
arrivalNotices[idx].orderProducts[duplicateSkuIdx].packQty += raw.packQty;
|
|
876
837
|
else
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arrival-notice-mutation.js","sourceRoot":"","sources":["../../../server/service/arrival-notice/arrival-notice-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FileUpload } from 'graphql-upload/GraphQLUpload.js'\nimport GraphQLUpload from 'graphql-upload/GraphQLUpload.js'\nimport { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'\nimport { EntityManager, getConnection, In, Repository } from 'typeorm'\n\nimport { Attachment, createAttachments } from '@things-factory/attachment-base'\nimport { Role, User } from '@things-factory/auth-base'\nimport {\n Bizplace,\n ContactPoint,\n getDomainUsers,\n getMyBizplace,\n getOutletBizplace,\n getPermittedBizplaces\n} from '@things-factory/biz-base'\nimport { generateId } from '@things-factory/id-rule-base'\nimport { Product } from '@things-factory/product-base'\nimport { PartnerSetting, Setting } from '@things-factory/setting-base'\nimport { Domain, getRepository } from '@things-factory/shell'\n\nimport {\n ORDER_NUMBER_RULE_TYPE,\n ORDER_NUMBER_SETTING_KEY,\n ORDER_PRODUCT_STATUS,\n ORDER_STATUS,\n ORDER_TYPES,\n ORDER_VAS_STATUS\n} from '../../constants'\nimport { ATTACHMENT_TYPE } from '../../constants/attachment-type'\nimport { ValidationError } from '../../errors'\nimport { OrderNoGenerator } from '../../utils/order-no-generator'\nimport { CollectionOrder } from '../collection-order/collection-order'\nimport { JobSheet } from '../job-sheet/job-sheet'\nimport { generateJobSheet } from '../job-sheet/job-sheet-mutation'\nimport { OrderProduct } from '../order-product/order-product'\nimport { NewOrderProduct, OrderProductPatch } from '../order-product/order-product-types'\nimport { OrderVas } from '../order-vas/order-vas'\nimport { ReleaseGood } from '../release-good/release-good'\nimport { confirmReleaseGood, deleteReleaseGood, rejectReleaseGood } from '../release-good/release-good-mutation'\nimport { Vas } from '../vas/vas'\nimport { validateBulkArrivalNoticesFunction } from './'\nimport { ArrivalNotice } from './arrival-notice'\nimport { ArrivalNoticeList, ArrivalNoticePatch, NewArrivalNotice, RawArrivalNotice } from './arrival-notice-types'\n\nconst debug = require('debug')('things-factory:operato-wms:addArrivalNotice')\n\n@Resolver(ArrivalNotice)\nexport class ArrivalNoticeMutation {\n @Directive('@privilege(category: \"order_customer\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => Boolean)\n async deleteArrivalNotice(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<Boolean> {\n const { tx, user, domain } = context.state\n\n return await deleteArrivalNotice(tx, name, user, domain)\n }\n\n @Directive('@privilege(category: \"order_customer\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => ArrivalNotice)\n async generateArrivalNotice(\n @Ctx() context: ResolverContext,\n @Arg('arrivalNotice', type => NewArrivalNotice) arrivalNotice: NewArrivalNotice,\n @Arg('files', type => [GraphQLUpload], { nullable: true }) files?: FileUpload[]\n ): Promise<ArrivalNotice> {\n const { tx } = context.state\n const createdArrivalNotice: ArrivalNotice = await generateArrivalNoticeFunction(\n null,\n arrivalNotice,\n false,\n files,\n context,\n tx\n )\n\n return createdArrivalNotice\n }\n\n @Directive('@privilege(category: \"order_customer\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => ArrivalNotice)\n async confirmArrivalNotice(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<ArrivalNotice> {\n const { tx } = context.state\n const arrivalNotice: ArrivalNotice = await confirmArrivalNoticeFunction(name, context, tx)\n\n // If current GAN has cross docking\n if (arrivalNotice.crossDocking) {\n const { releaseGood } = await tx.getRepository(ArrivalNotice).findOne({\n where: { id: arrivalNotice.id },\n relations: ['releaseGood']\n })\n\n // If status of related RO is not equal to PENDING_RECEIVE (i.e. Wasn't confirmed yet.)\n if (releaseGood.status !== ORDER_STATUS.PENDING_RECEIVE) {\n await confirmReleaseGood(releaseGood.name, context)\n }\n }\n\n return arrivalNotice\n }\n\n @Directive('@privilege(category: \"order_warehouse\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => ArrivalNotice)\n async receiveArrivalNotice(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<ArrivalNotice> {\n const receiveArrivalNotice: ArrivalNotice = await receiveArrivalNoticeFunction(null, name, context)\n\n return receiveArrivalNotice\n }\n\n @Directive('@privilege(category: \"order_warehouse\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => ArrivalNotice)\n async checkArrivedNotice(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<ArrivalNotice> {\n const { tx } = context.state\n\n return await checkArrivedNoticeFunction(name, context, tx)\n }\n\n @Directive('@privilege(category: \"order_warehouse\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => ArrivalNotice)\n async rejectArrivalNotice(\n @Arg('name') name: string,\n @Arg('patch', type => ArrivalNoticePatch) patch: ArrivalNoticePatch,\n @Ctx() context: ResolverContext\n ): Promise<ArrivalNotice> {\n const { tx } = context.state\n\n const arrivalNotice: ArrivalNotice = await rejectArrivalNotice(tx, name, patch.remark, context)\n\n if (arrivalNotice.crossDocking) {\n const { releaseGood }: { releaseGood: ReleaseGood } = await tx.getRepository(ArrivalNotice).findOne({\n where: { id: arrivalNotice.id },\n relations: ['releaseGood']\n })\n\n if (releaseGood.status !== ORDER_STATUS.REJECTED) {\n await rejectReleaseGood(tx, context, releaseGood.name, patch.remark)\n }\n }\n\n return arrivalNotice\n }\n\n @Directive('@privilege(category: \"order_warehouse\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => Boolean)\n async addEditArrivalNoticeProducts(\n @Ctx() context: ResolverContext,\n @Arg('ganNo') ganNo: string,\n @Arg('newOrderProducts', type => [NewOrderProduct], { nullable: true }) newOrderProducts?: NewOrderProduct[],\n @Arg('existingOrderProducts', type => [OrderProductPatch], { nullable: true })\n existingOrderProducts?: OrderProductPatch[]\n ): Promise<Boolean> {\n const { user, domain, tx } = context.state\n\n let arrivalNotice: ArrivalNotice = await tx.getRepository(ArrivalNotice).findOne({\n where: { name: ganNo },\n relations: ['bizplace', 'orderProducts']\n })\n\n arrivalNotice.status = ORDER_STATUS.PENDING_APPROVAL\n arrivalNotice.updater = user\n arrivalNotice = await tx.getRepository(ArrivalNotice).save(arrivalNotice)\n\n debug('gan-new-order-products', ganNo, newOrderProducts)\n if (newOrderProducts?.length > 0) await addArrivalNoticeProducts(domain, arrivalNotice, newOrderProducts, user, tx)\n\n debug('gan-existing-order-products', ganNo, existingOrderProducts)\n if (existingOrderProducts?.length > 0) await editArrivalNoticeProducts(existingOrderProducts, user, tx)\n\n // notification logics\n const users: any[] = await getDomainUsers(arrivalNotice?.bizplace, tx)\n debug('users', users)\n\n if (users?.length && context.header?.referer) {\n const receivers: any[] = users.map(user => user.id)\n const msg = {\n title: `Products are added/edited for ${arrivalNotice.name}`,\n body: `Warehouse need your review for changes to be approved`,\n url: context.header.referer,\n data: { url: context.header.referer }\n }\n /**\n * @notes Temporary off sendNotification due to suspect of causing wms down\n */\n\n // await sendNotification({\n // receivers,\n // message: { ...msg }\n // })\n }\n\n return true\n }\n\n @Directive('@privilege(category: \"order_customer\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => ArrivalNotice)\n async addArrivalNotice(\n @Ctx() context: ResolverContext,\n @Arg('arrivalNotice', type => NewArrivalNotice) arrivalNotice: NewArrivalNotice,\n @Arg('file', type => GraphQLUpload, { nullable: true }) file?: FileUpload\n ): Promise<ArrivalNotice> {\n const { tx } = context.state\n const createdGAN: ArrivalNotice = await generateArrivalNoticeFunction(null, arrivalNotice, false, file, context, tx)\n\n debug('createdGAN', createdGAN)\n\n const confirmedGAN: ArrivalNotice = await confirmArrivalNoticeFunction(createdGAN.name, context, tx)\n\n debug('confirmedGAN', confirmedGAN)\n\n return confirmedGAN\n }\n\n @Directive('@privilege(category: \"order_customer\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => ArrivalNotice)\n async updateArrivalNoticeDetails(\n @Ctx() context: ResolverContext,\n @Arg('arrivalNotice', type => ArrivalNoticePatch) arrivalNotice: ArrivalNoticePatch\n ): Promise<ArrivalNotice> {\n const { domain, tx } = context.state\n let existingArrivalNotice = await tx\n .getRepository(ArrivalNotice)\n .findOne({ where: { name: arrivalNotice.name, domain: { id: domain.id } } })\n\n if (!existingArrivalNotice) {\n throw new Error('Existing Arrival Notice not found.')\n }\n\n await tx.getRepository(ArrivalNotice).update(existingArrivalNotice.id, arrivalNotice)\n return await tx.getRepository(ArrivalNotice).findOneBy({ id: existingArrivalNotice.id })\n }\n\n @Directive('@privilege(category: \"order_customer\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => ArrivalNoticeList)\n async bulkGenerateArrivalNotices(\n @Ctx() context: ResolverContext,\n @Arg('rawArrivalNotices', type => [NewArrivalNotice], { nullable: true }) rawArrivalNotices: NewArrivalNotice[],\n @Arg('bizplaceId', type => String) bizplaceId: string,\n @Arg('bufferLocation', type => String, { nullable: true }) bufferLocation: string\n ): Promise<ArrivalNoticeList> {\n const { domain, user, tx } = context.state\n let createdArrivalNoticeIds: string[] = [],\n createdOrderProductIds: string[] = [],\n errorsCaught: any[] = [],\n finalArrivalNoticeList: ArrivalNotice[] = []\n let opStatus = ORDER_PRODUCT_STATUS.PENDING_RECEIVE\n let anStatus = ORDER_STATUS.PENDING_RECEIVE\n\n const foundBizplace: Bizplace = await tx\n .getRepository(Bizplace)\n .findOne({ where: { id: bizplaceId }, relations: ['domain'] })\n\n if (!foundBizplace) throw new Error('company not found')\n\n // to check whether the raw data are valid\n const validatedArrivalNotices: RawArrivalNotice[] = await validateBulkArrivalNoticesFunction(\n rawArrivalNotices,\n bizplaceId,\n tx\n )\n\n // check for custom GAN order no setting\n const ganNoSetting: Setting = await tx.getRepository(Setting).findOne({\n where: {\n domain: { id: domain.id },\n name: ORDER_NUMBER_SETTING_KEY.GAN_NUMBER_RULE\n }\n })\n\n const ganProcessingSetting: Setting = await tx.getRepository(Setting).findOne({\n where: { domain: { id: domain.id }, category: 'id-rule', name: 'gan-order-processing' }\n })\n\n const partnerGanProcessingSetting: PartnerSetting = await tx.getRepository(PartnerSetting).findOne({\n where: {\n setting: { id: ganProcessingSetting.id },\n domain: { id: domain.id },\n partnerDomain: { id: foundBizplace.domain.id }\n }\n })\n\n // If status of GAN is PENDING_RECEIVE then directly to assign warehouse\n if (ganProcessingSetting) {\n let setting = !isNaN(partnerGanProcessingSetting?.value)\n ? partnerGanProcessingSetting?.value\n : ganProcessingSetting.value\n\n // CONFIRM to assign if setting value is 1\n if (setting == 1) {\n opStatus = ORDER_PRODUCT_STATUS.ARRIVED\n anStatus = ORDER_STATUS.ARRIVED\n }\n }\n\n // extract rawArrivalNotices data into normal ArrivalNotice format\n let arrivalNotices: Partial<ArrivalNotice[]> = extractArrivalNotices(validatedArrivalNotices)\n\n for (let i = 0, l = arrivalNotices.length; i < l; i++) {\n try {\n await getConnection().transaction(async childTx => {\n // check for duplication\n const duplicatedArrivalNotice: ArrivalNotice = await childTx.getRepository(ArrivalNotice).findOne({\n where: {\n refNo: arrivalNotices[i].refNo,\n refNo2: arrivalNotices[i].refNo2,\n refNo3: arrivalNotices[i].refNo3,\n etaDate: arrivalNotices[i].etaDate,\n truckNo: arrivalNotices[i].truckNo,\n containerNo: arrivalNotices[i].containerNo,\n containerSize: arrivalNotices[i].containerSize,\n looseItem: arrivalNotices[i].looseItem,\n importCargo: arrivalNotices[i].importCargo\n }\n })\n\n if (duplicatedArrivalNotice) {\n throw new Error(`duplicated with ${duplicatedArrivalNotice.name}`)\n }\n\n // save new arrival notice\n const createdArrivalNotice: ArrivalNotice = await childTx.getRepository(ArrivalNotice).save({\n ...arrivalNotices[i],\n name: ganNoSetting\n ? await generateId({ domain, type: ORDER_NUMBER_RULE_TYPE.GAN_NUMBER, seed: {} })\n : OrderNoGenerator.arrivalNotice(),\n domain,\n bizplace: foundBizplace,\n status: ORDER_STATUS.PENDING,\n creator: user,\n updater: user\n })\n\n // save new order products\n let createdOrderProducts: OrderProduct[] = await Promise.all(\n arrivalNotices[i].orderProducts.map(async (op: OrderProduct) => {\n return {\n ...op,\n domain,\n bizplace: foundBizplace,\n name: OrderNoGenerator.orderProduct(),\n // product: await childTx.getRepository(Product).findOneBy({ id: op.product.id }),\n status: ORDER_PRODUCT_STATUS.PENDING,\n arrivalNotice: createdArrivalNotice,\n creator: user\n }\n })\n )\n createdOrderProducts = await childTx.getRepository(OrderProduct).save(createdOrderProducts)\n\n // generate new jobsheet\n await generateJobSheet(domain, user, createdArrivalNotice, childTx)\n\n // push arrivalNotice and orderProducts IDs if successfully saved\n createdArrivalNoticeIds.push(createdArrivalNotice.id)\n createdOrderProductIds.push(...createdOrderProducts.map(op => op.id))\n })\n } catch (error) {\n // collect the arrivalNotice details and its error\n let rawArrivalNotices: RawArrivalNotice[] = formRawArrivalNotices(arrivalNotices[i], error.message)\n errorsCaught.push(...rawArrivalNotices)\n }\n }\n\n if (createdArrivalNoticeIds.length && createdOrderProductIds.length) {\n await getConnection().transaction(async childTx => {\n // update arrivalNotices status to PENDING_RECEIVE\n await childTx\n .getRepository(ArrivalNotice)\n .update({ id: In(createdArrivalNoticeIds) }, { status: anStatus, updater: user })\n\n // update orderProducts status to PENDING_RECEIVE\n await childTx\n .getRepository(OrderProduct)\n .update({ id: In(createdOrderProductIds) }, { status: opStatus, updater: user })\n\n finalArrivalNoticeList = await childTx.getRepository(ArrivalNotice).find({\n where: { id: In(createdArrivalNoticeIds) },\n relations: ['orderProducts', 'orderProducts.product', 'bizplace']\n })\n })\n }\n\n if (errorsCaught.length) {\n // should return this error list in the grist so that user know which gan need to amend\n throw new ValidationError({\n ...ValidationError.ERROR_CODES.INVALID_DATA_FOUND,\n detail: { data: JSON.stringify(errorsCaught) }\n })\n }\n\n // return arrivalNotices with its orderProducts list\n return { items: finalArrivalNoticeList, total: 0 }\n }\n}\n\nexport async function deleteArrivalNotice(\n tx: EntityManager,\n name: string,\n user: User,\n domain: Domain\n): Promise<boolean> {\n let foundArrivalNotice: ArrivalNotice = await tx.getRepository(ArrivalNotice).findOne({\n where: { domain: { id: domain.id }, name },\n relations: ['bizplace', 'releaseGood', 'orderProducts', 'orderVass', 'collectionOrders', 'creator', 'updater']\n })\n\n if (!foundArrivalNotice) throw new Error(`Arrival notice doesn't exists.`)\n\n const foundJS: JobSheet = await tx.getRepository(JobSheet).findOne({\n where: {\n bizplace: { id: foundArrivalNotice.bizplace.id },\n arrivalNoticeRefNo: foundArrivalNotice.name\n }\n })\n\n if (foundJS) await tx.getRepository(JobSheet).delete({ arrivalNoticeRefNo: foundArrivalNotice.name })\n\n const foundOPs: OrderProduct[] = foundArrivalNotice.orderProducts\n const foundOVs: OrderVas[] = foundArrivalNotice.orderVass\n\n // 1. delete order products\n const productIds = foundOPs.map((product: OrderProduct) => product.id)\n if (productIds.length) {\n await tx.getRepository(OrderProduct).delete({ id: In(productIds) })\n }\n\n // 2. delete order vass\n const vasIds = foundOVs.map((vas: OrderVas) => vas.id)\n if (vasIds.length) {\n await tx.getRepository(OrderVas).delete({ id: In(vasIds) })\n }\n\n await tx.getRepository(ArrivalNotice).save({\n ...foundArrivalNotice,\n updater: user\n })\n\n // 4. Remove relation with RO if it's cross docking\n if (foundArrivalNotice.crossDocking && foundArrivalNotice.releaseGood?.id) {\n let releaseGood: ReleaseGood = foundArrivalNotice.releaseGood\n releaseGood.arrivalNotice = null\n releaseGood = await tx.getRepository(ReleaseGood).save(releaseGood)\n\n await tx.getRepository(ArrivalNotice).delete({ domain: { id: domain.id }, name })\n await deleteReleaseGood(tx, releaseGood.name, user, domain)\n } else {\n // 5. delete GAN\n await tx.getRepository(ArrivalNotice).delete({ domain: { id: domain.id }, name })\n }\n return true\n}\n\nexport async function generateArrivalNoticeFunction(\n _: any,\n arrivalNotice: any,\n fromPo: Boolean,\n files: FileUpload[],\n context: any,\n tx?: EntityManager\n): Promise<ArrivalNotice> {\n const { domain, user } = context.state\n let orderProducts: OrderProduct[] = arrivalNotice.orderProducts\n let orderVass: OrderVas[] = arrivalNotice.orderVass\n let myBizplace: Bizplace\n let orderNo: string = ''\n\n const settingRepo: Repository<Setting> = tx?.getRepository(Setting) || getRepository(Setting)\n\n if (arrivalNotice.bizplace) myBizplace = arrivalNotice.bizplace\n else if (arrivalNotice.customerBizplaceId) {\n const permittedBizplaces: Bizplace[] = await getPermittedBizplaces(domain, user)\n let foundPermittedBizplace: Bizplace = permittedBizplaces.find(biz => biz.id == arrivalNotice.customerBizplaceId)\n\n if (!foundPermittedBizplace) throw new Error(`This user does not permitted for this company`)\n\n myBizplace = arrivalNotice.customerBizplaceId\n } else if (arrivalNotice.partnerBizplaceId) {\n const permittedBizplaces: Bizplace[] = await getPermittedBizplaces(domain, user)\n let foundPermittedBizplace: Bizplace = permittedBizplaces.find(biz => biz.id == arrivalNotice.partnerBizplaceId)\n\n if (!foundPermittedBizplace) throw new Error(`This user does not permitted for this company`)\n\n myBizplace = arrivalNotice.partnerBizplaceId\n } else if (arrivalNotice.warehouseId) myBizplace = await getOutletBizplace(arrivalNotice.warehouseId)\n else myBizplace = await getMyBizplace(domain, user)\n\n if (arrivalNotice.supplier) {\n const supplier: ContactPoint = await tx.getRepository(ContactPoint).findOne({\n where: { bizplace: { id: arrivalNotice.supplier.id }, domain: { id: domain.id } },\n relations: ['bizplace']\n })\n\n if (!supplier) throw new Error('contact point does not exist')\n\n arrivalNotice.supplier = supplier\n }\n // find GAN number rule setting\n const ganNoSetting: Setting = await settingRepo.findOne({\n where: {\n domain: { id: domain.id },\n name: ORDER_NUMBER_SETTING_KEY.GAN_NUMBER_RULE\n }\n })\n\n if (ganNoSetting) {\n orderNo = await generateId({ domain, type: ORDER_NUMBER_RULE_TYPE.GAN_NUMBER, seed: {} })\n } else {\n orderNo = OrderNoGenerator.arrivalNotice()\n }\n\n // 1. Create arrival notice\n const createdArrivalNotice: ArrivalNotice = await tx.getRepository(ArrivalNotice).save({\n ...arrivalNotice,\n name: orderNo,\n domain,\n bizplace: myBizplace,\n looseItem: arrivalNotice?.looseItem ? arrivalNotice.looseItem : false,\n status: fromPo ? ORDER_STATUS.INTRANSIT : ORDER_STATUS.PENDING,\n creator: user,\n updater: user\n })\n\n // 2. Create arrival notice product\n await addArrivalNoticeProducts(\n domain,\n createdArrivalNotice,\n orderProducts.map((op: OrderProduct) => {\n return { ...op, status: fromPo ? ORDER_PRODUCT_STATUS.INTRANSIT : ORDER_PRODUCT_STATUS.PENDING }\n }),\n user,\n tx\n )\n\n await generateJobSheet(domain, user, createdArrivalNotice, tx)\n\n // 3. Create arrival notice vas\n if (orderVass?.length) {\n orderVass = await Promise.all(\n orderVass.map(async (ov: OrderVas) => {\n if (ov.targetProduct) {\n ov.targetProduct = await tx.getRepository(Product).findOneBy({ id: ov.targetProduct.id })\n }\n\n return {\n ...ov,\n domain,\n bizplace: myBizplace,\n name: OrderNoGenerator.orderVas(),\n vas: await tx.getRepository(Vas).findOneBy({ domain: { id: domain.id }, id: ov.vas.id }),\n type: ORDER_TYPES.ARRIVAL_NOTICE,\n arrivalNotice: createdArrivalNotice,\n status: fromPo ? ORDER_VAS_STATUS.INTRANSIT : ORDER_VAS_STATUS.PENDING,\n creator: user,\n updater: user\n }\n })\n )\n await tx.getRepository(OrderVas).save(orderVass)\n }\n\n if (files?.length) {\n const attachments: Attachment[] = files.map(attachment => {\n return {\n file: attachment,\n refType: ATTACHMENT_TYPE.GAN,\n refBy: createdArrivalNotice.id,\n category: ATTACHMENT_TYPE.GAN /* TODO use refType */\n }\n })\n await createAttachments(_, { attachments }, context)\n }\n\n return createdArrivalNotice\n}\n\nexport async function confirmArrivalNoticeFunction(\n name: string,\n context: any,\n tx?: EntityManager\n): Promise<ArrivalNotice> {\n const { user, domain } = context.state\n\n const foundArrivalNotice: ArrivalNotice = await tx.getRepository(ArrivalNotice).findOne({\n where: { domain: { id: domain.id }, name, status: ORDER_STATUS.PENDING },\n relations: [\n 'bizplace',\n 'bizplace.domain',\n 'releaseGood',\n 'orderProducts',\n 'orderProducts.product',\n 'orderVass',\n 'orderVass.vas',\n 'creator',\n 'updater'\n ]\n })\n\n let foundOPs: OrderProduct[] = foundArrivalNotice.orderProducts\n let foundOVs: OrderVas[] = foundArrivalNotice.orderVass\n let customerBizplace: Bizplace = foundArrivalNotice.bizplace\n let opStatus = ORDER_PRODUCT_STATUS.PENDING_RECEIVE\n let anStatus = ORDER_STATUS.PENDING_RECEIVE\n let ovStatus = ORDER_VAS_STATUS.PENDING_RECEIVE\n let acceptedByUser = null\n let acceptedTime = null\n\n const ganProcessingSetting: Setting = await tx.getRepository(Setting).findOne({\n where: { domain: { id: domain.id }, category: 'id-rule', name: 'gan-order-processing' }\n })\n\n // If status of GAN is PENDING_RECEIVE then directly to assign warehouse\n if (ganProcessingSetting) {\n const partnerGanProcessingSetting: PartnerSetting = await tx.getRepository(PartnerSetting).findOne({\n where: {\n setting: { id: ganProcessingSetting.id },\n domain: { id: domain.id },\n partnerDomain: { id: customerBizplace?.domain?.id }\n }\n })\n\n let setting = !isNaN(partnerGanProcessingSetting?.value)\n ? partnerGanProcessingSetting?.value\n : ganProcessingSetting.value\n\n // CONFIRM to assign if setting value is 1\n if (setting == 1) {\n opStatus = ORDER_PRODUCT_STATUS.ARRIVED\n anStatus = ORDER_STATUS.ARRIVED\n ovStatus = ORDER_VAS_STATUS.ARRIVED\n acceptedByUser = user\n acceptedTime = new Date()\n }\n }\n\n if (!foundArrivalNotice) throw new Error(`Arrival notice doesn't exists.`)\n\n // 1. GAN Status change (PENDING => PENDING_RECEIVE)\n let arrivalNotice: ArrivalNotice = await tx.getRepository(ArrivalNotice).save({\n ...foundArrivalNotice,\n status: anStatus,\n updater: user,\n acceptedBy: acceptedByUser,\n acceptedAt: acceptedTime\n })\n\n foundOPs = foundOPs.map((op: OrderProduct) => {\n return { ...op, status: opStatus }\n })\n await tx.getRepository(OrderProduct).save(foundOPs)\n\n // 2. Update order vas status if it exists.\n if (foundOVs && foundOVs.length) {\n foundOVs = foundOVs.map((ov: OrderVas) => {\n return { ...ov, status: ovStatus }\n })\n\n await tx.getRepository(OrderVas).save(foundOVs)\n }\n\n // notification logics\n // get Office Admin Users\n if (context?.state?.type != 'api') {\n const users: any[] = await tx\n .getRepository('users_roles')\n .createQueryBuilder('ur')\n .select('ur.users_id', 'id')\n .where(qb => {\n const subQuery = qb\n .subQuery()\n .select('role.id')\n .from(Role, 'role')\n .where(\"role.name = 'Office Admin'\")\n .andWhere('role.domain_id = :domain', { domain: domain.id })\n .getQuery()\n return 'ur.roles_id IN ' + subQuery\n })\n .getRawMany()\n\n // send notification to Office Admin Users\n if (users?.length && context.header?.referer) {\n const receivers: any[] = users.map(user => user.id)\n const msg = {\n title: `New Arrival Notice from ${customerBizplace.name}`,\n body: `New incoming order, ${foundArrivalNotice.name} is pending for receiving`,\n url: context.header.referer,\n data: { url: context.header.referer }\n }\n\n /**\n * @notes Temporary off sendNotification due to suspect of causing wms down\n */\n\n // await sendNotification({\n // receivers,\n // message: { ...msg }\n // })\n }\n }\n\n return arrivalNotice\n}\n\nexport async function receiveArrivalNoticeFunction(\n _: any,\n name: string,\n context: ResolverContext\n): Promise<ArrivalNotice> {\n const { user, domain, tx } = context.state\n try {\n const foundArrivalNotice: ArrivalNotice = await tx.getRepository(ArrivalNotice).findOne({\n where: { domain: { id: domain.id }, name, status: ORDER_STATUS.PENDING_RECEIVE },\n relations: ['bizplace', 'bizplace.domain', 'collectionOrders', 'orderProducts', 'orderVass']\n })\n\n let foundOPs: OrderProduct[] = foundArrivalNotice.orderProducts\n let foundOVs: OrderVas[] = foundArrivalNotice.orderVass\n let foundCOs: CollectionOrder[] = await tx.getRepository(CollectionOrder).find({\n where: { domain: { id: domain.id }, refNo: foundArrivalNotice.name }\n })\n let customerBizplace: Bizplace = foundArrivalNotice.bizplace\n let opStatus = ORDER_PRODUCT_STATUS.INTRANSIT\n let anStatus = ORDER_STATUS.INTRANSIT\n let ovStatus = ORDER_VAS_STATUS.INTRANSIT\n let coStatus = ORDER_STATUS.READY_TO_DISPATCH\n\n const ganProcessingSetting: Setting = await tx.getRepository(Setting).findOne({\n where: { domain: { id: domain.id }, category: 'id-rule', name: 'gan-order-processing' }\n })\n\n // If status of GAN is INTRANSIT then directly to assign warehouse\n if (ganProcessingSetting) {\n const partnerGanProcessingSetting: PartnerSetting = await tx.getRepository(PartnerSetting).findOne({\n where: {\n setting: { id: ganProcessingSetting.id },\n domain: { id: domain.id },\n partnerDomain: { id: customerBizplace?.domain?.id }\n }\n })\n\n let setting = !isNaN(partnerGanProcessingSetting?.value)\n ? partnerGanProcessingSetting?.value\n : ganProcessingSetting.value\n\n // RECEIVE to assign if setting value is 2\n if (setting == 2) {\n opStatus = ORDER_PRODUCT_STATUS.ARRIVED\n anStatus = ORDER_STATUS.ARRIVED\n ovStatus = ORDER_VAS_STATUS.ARRIVED\n coStatus = ORDER_STATUS.READY_TO_DISPATCH\n }\n }\n\n if (!foundArrivalNotice) throw new Error(`Arrival notice doesn't exists.`)\n\n // 1. Update status of order products (PENDING_RECEIVE => INTRANSIT)\n foundOPs = foundOPs.map((op: OrderProduct) => {\n return {\n ...op,\n status: opStatus,\n updater: user\n }\n })\n await tx.getRepository(OrderProduct).save(foundOPs)\n\n // 2. Update status of order vass if it exists (PENDING_RECEIVE => INTRANSIT)\n if (foundOVs && foundOVs.length) {\n foundOVs = foundOVs.map((ov: OrderVas) => {\n return {\n ...ov,\n status: ovStatus,\n updater: user\n }\n })\n await tx.getRepository(OrderVas).save(foundOVs)\n }\n\n // 3. If there's collection order, update status of collection order (PENDING_RECEIVE => READY_TO_DISPATCH)\n if (foundCOs) {\n foundCOs = foundCOs.map((co: CollectionOrder) => {\n return {\n ...co,\n status: coStatus,\n updater: user\n }\n })\n }\n\n // notification logics\n const users: any[] = await getDomainUsers(foundArrivalNotice?.bizplace, tx)\n\n // send notification to Customer Users\n if (users?.length && context.header?.referer) {\n const receivers: any[] = users.map(user => user.id)\n const msg = {\n title: `Latest status for ${foundArrivalNotice.name}`,\n body: `Your GAN has been received and processed by ${domain.name}`,\n url: context.header.referer,\n data: { url: context.header.referer }\n }\n\n /**\n * @notes Temporary off sendNotification due to suspect of causing wms down\n */\n\n // await sendNotification({\n // receivers,\n // message: { ...msg }\n // })\n }\n\n // 4. Update status of arrival notice (PENDING_RECEIVE => INTRANSIT)\n let rcvArrivalNotice = await tx.getRepository(ArrivalNotice).save({\n ...foundArrivalNotice,\n status: anStatus,\n acceptedBy: user,\n acceptedAt: new Date(),\n updater: user\n })\n\n return foundArrivalNotice\n } catch (e) {\n throw e\n }\n}\n\nexport async function checkArrivedNoticeFunction(\n name: string,\n context: any,\n tx?: EntityManager\n): Promise<ArrivalNotice> {\n const { user, domain } = context.state\n try {\n const foundArrivalNotice: ArrivalNotice = await tx.getRepository(ArrivalNotice).findOne({\n where: { domain: { id: domain.id }, name, status: ORDER_STATUS.INTRANSIT },\n relations: ['bizplace', 'collectionOrders', 'orderProducts', 'orderVass']\n })\n\n debug('ganNo', name, foundArrivalNotice)\n\n if (!foundArrivalNotice) throw new Error(`Arrival notice doesn't exists.`)\n\n // 1. Check wheter related collection order is done or not\n const foundCOs: CollectionOrder[] = foundArrivalNotice.collectionOrders\n if (foundCOs && foundCOs.length) {\n foundCOs.map((co: CollectionOrder) => {\n if (co.status !== ORDER_STATUS.DONE) {\n throw new Error(`Collection Order: ${co.name} is not finished yet.`)\n }\n })\n }\n\n let foundOPs: OrderProduct[] = foundArrivalNotice.orderProducts\n let foundOVs: OrderVas[] = foundArrivalNotice.orderVass\n\n // 2. Update status of order products (INTRANSIT => ARRIVED)\n foundOPs = foundOPs.map((op: OrderProduct) => {\n return {\n ...op,\n status: ORDER_PRODUCT_STATUS.ARRIVED,\n updater: user\n }\n })\n await tx.getRepository(OrderProduct).save(foundOPs)\n\n // 3. Update status of order vass if it exists (INTRANSIT => ARRIVED)\n if (foundOVs && foundOVs.length) {\n foundOVs = foundOVs.map((ov: OrderVas) => {\n return {\n ...ov,\n status: ORDER_VAS_STATUS.ARRIVED,\n updater: user\n }\n })\n await tx.getRepository(OrderVas).save(foundOVs)\n }\n\n // 4. Update status of arrival notice (INTRANSIT => ARRIVED)\n await tx.getRepository(ArrivalNotice).save({\n ...foundArrivalNotice,\n status: ORDER_STATUS.ARRIVED,\n updater: user\n })\n\n // notification logics\n const users: any[] = await getDomainUsers(foundArrivalNotice?.bizplace, tx)\n\n if (users?.length && context.header?.referer) {\n const receivers: any[] = users.map(user => user.id)\n const msg = {\n title: `Latest status for ${foundArrivalNotice.name}`,\n body: `Your goods has safely arrived at ${domain.name}`,\n url: context.header.referer,\n data: { url: context.header.referer }\n }\n\n /**\n * @notes Temporary off sendNotification due to suspect of causing wms down\n */\n\n // await sendNotification({\n // receivers,\n // message: { ...msg }\n // })\n }\n\n return foundArrivalNotice\n } catch (e) {\n throw e\n }\n}\n\nexport async function rejectArrivalNotice(\n tx: EntityManager,\n name: string,\n remark: string,\n context: any\n): Promise<ArrivalNotice> {\n const { user, domain } = context.state\n\n const foundArrivalNotice: ArrivalNotice = await tx.getRepository(ArrivalNotice).findOne({\n where: { domain: { id: domain.id }, name, status: ORDER_STATUS.PENDING_RECEIVE },\n relations: ['bizplace', 'orderProducts', 'orderVass', 'collectionOrders']\n })\n\n if (!foundArrivalNotice) throw new Error(`Arrival notice doesn't exists.`)\n if (!remark) throw new Error('Remark is not exist.')\n\n let foundOPs: OrderProduct[] = foundArrivalNotice.orderProducts\n let foundOVs: OrderVas[] = foundArrivalNotice.orderVass\n let foundCOs: CollectionOrder[] = foundArrivalNotice.collectionOrders\n\n // 1. Update status of order products (PENDING_RECEIVE => REJECTED)\n foundOPs = foundOPs.map((op: OrderProduct) => {\n op.status = ORDER_PRODUCT_STATUS.REJECTED\n op.updater = user\n return op\n })\n await tx.getRepository(OrderProduct).save(foundOPs)\n\n // 2. Update status of order vass if it exists (PENDING_RECEIVE => REJECTED)\n if (foundOVs && foundOVs.length) {\n foundOVs = foundOVs.map((ov: OrderVas) => {\n ov.status = ORDER_VAS_STATUS.REJECTED\n ov.updater = user\n return ov\n })\n await tx.getRepository(OrderVas).save(foundOVs)\n }\n\n // 3. If there's collection order, update status of collection order (PENDING_RECEIVE => REJECTED)\n if (foundCOs) {\n foundCOs = foundCOs.map((co: CollectionOrder) => {\n co.status = ORDER_STATUS.REJECTED\n co.updater = user\n return co\n })\n await tx.getRepository(CollectionOrder).save(foundCOs)\n }\n\n foundArrivalNotice.remark = remark\n foundArrivalNotice.status = ORDER_STATUS.REJECTED\n foundArrivalNotice.updater = user\n await tx.getRepository(ArrivalNotice).save(foundArrivalNotice)\n\n // notification logics\n const users: any[] = await getDomainUsers(foundArrivalNotice?.bizplace, tx)\n\n // send notification to Customer Users\n if (users?.length && context.header?.referer) {\n const receivers: any[] = users.map(user => user.id)\n const msg = {\n title: `Latest status for ${foundArrivalNotice.name}`,\n body: `Your GAN has been rejected.`,\n url: context.header.referer,\n data: { url: context.header.referer }\n }\n\n /**\n * @notes Temporary off sendNotification due to suspect of causing wms down\n */\n\n // await sendNotification({\n // receivers,\n // message: { ...msg }\n // })\n }\n\n return foundArrivalNotice\n}\n\nexport async function addArrivalNoticeProducts(\n domain: Domain,\n arrivalNotice: ArrivalNotice,\n newOrderProducts: any[],\n user: User,\n tx?: EntityManager\n): Promise<void> {\n const productRepo: Repository<Product> = tx?.getRepository(Product) || getRepository(Product)\n const orderProductRepo: Repository<OrderProduct> = tx?.getRepository(OrderProduct) || getRepository(OrderProduct)\n\n if (!arrivalNotice?.bizplace || !arrivalNotice?.orderProducts?.length) {\n arrivalNotice = await tx.getRepository(ArrivalNotice).findOne({\n where: { domain: { id: domain.id }, name: arrivalNotice.name },\n relations: ['bizplace', 'orderProducts']\n })\n }\n\n const createdOrderProducts: OrderProduct[] = await Promise.all(\n newOrderProducts.map(async (op: OrderProduct) => {\n return {\n ...op,\n domain,\n bizplace: arrivalNotice.bizplace,\n name: OrderNoGenerator.orderProduct(),\n product: await productRepo.findOneBy({ id: op.product.id }),\n arrivalNotice,\n creator: user\n }\n })\n )\n\n debug('gan-created-order-products', createdOrderProducts)\n await orderProductRepo.save(createdOrderProducts)\n}\n\nexport async function editArrivalNoticeProducts(\n existingOrderProducts: (OrderProduct | OrderProductPatch)[],\n user: User,\n tx?: EntityManager\n): Promise<void> {\n const orderProductRepo: Repository<OrderProduct> = tx?.getRepository(OrderProduct) || getRepository(OrderProduct)\n\n const updatedOrderProducts: OrderProduct[] = await Promise.all(\n existingOrderProducts.map(async (op: OrderProduct) => {\n return {\n ...op,\n status: ORDER_PRODUCT_STATUS.EDITED,\n updater: user\n }\n })\n )\n\n debug('gan-updated-order-products', updatedOrderProducts)\n await orderProductRepo.save(updatedOrderProducts)\n}\n\nfunction extractArrivalNotices(rawArrivalNotices): Partial<ArrivalNotice[]> {\n return rawArrivalNotices.reduce((arrivalNotices, raw) => {\n // discard the item that has no productId or productDetailId\n if (!raw.productId || !raw.productDetailId) return\n\n const idx: number = arrivalNotices.findIndex(an => {\n // consider these attributes if they are exist in \"item\"\n const comparison = [\n 'refNo2',\n 'refNo3',\n 'truckNo',\n 'ownTransport',\n 'container',\n 'containerNo',\n 'containerSize',\n 'looseItem',\n 'importCargo'\n ]\n\n let a: any = {},\n b: any = {}\n\n comparison.forEach(cc => {\n if (raw[cc] !== null) {\n a[cc] = raw[cc]\n b[cc] = an[cc]\n }\n })\n\n a = JSON.stringify(Object.fromEntries(Object.entries(a).sort()))\n b = JSON.stringify(Object.fromEntries(Object.entries(b).sort()))\n\n return an.refNo == raw.refNo && an.etaDate == raw.etaDate && a === b\n })\n\n const product: Product = Object.assign(new Product(), { id: raw.productId, sku: raw.sku })\n const orderProduct: Partial<OrderProduct> = {\n product,\n batchId: raw.batchId,\n batchIdRef: raw.batchIdRef,\n packingType: raw.packingType,\n packingSize: raw.packingSize,\n packQty: raw.packQty,\n uomValue: raw.uomValue,\n uom: raw.uom,\n totalUomValue: raw.totalUomValue,\n palletQty: raw.palletQty,\n unitPrice: raw.unitPrice,\n manufactureDate: raw.manufactureDate\n }\n\n if (idx >= 0) {\n const duplicateSkuIdx: number = arrivalNotices[idx].orderProducts.findIndex(\n op =>\n op.sku === raw.sku &&\n op.packingType === raw.packingType &&\n op.packingSize === raw.packingSize &&\n op.batchId === raw.batchId\n )\n\n if (duplicateSkuIdx >= 0) arrivalNotices[idx].orderProducts[duplicateSkuIdx].packQty += raw.packQty\n else arrivalNotices[idx].orderProducts.push(orderProduct)\n } else {\n arrivalNotices.push({\n refNo: raw.refNo,\n refNo2: raw.refNo2,\n refNo3: raw.refNo3,\n etaDate: raw.etaDate,\n truckNo: raw.truckNo,\n ownTransport: raw.ownTransport,\n container: raw.container,\n containerNo: raw.containerNo,\n containerSize: raw.containerSize,\n importCargo: raw.importCargo,\n looseItem: raw.looseItem,\n orderProducts: [orderProduct]\n })\n }\n\n return arrivalNotices\n }, [])\n}\n\nfunction formRawArrivalNotices(arrivalNotice, errorMsg) {\n let rawArrivalNotices = []\n for (let i = 0, l = arrivalNotice.orderProducts.length; i < l; i++) {\n let rawArrivalNotice = {\n ...arrivalNotice,\n ...arrivalNotice.orderProducts[i],\n sku: arrivalNotice.orderProducts[i].product.sku,\n errorMsg\n }\n\n delete rawArrivalNotice.orderProducts\n delete rawArrivalNotice.product\n\n rawArrivalNotices.push(rawArrivalNotice)\n }\n return rawArrivalNotices\n}\n"]}
|
|
1
|
+
{"version":3,"file":"arrival-notice-mutation.js","sourceRoot":"","sources":["../../../server/service/arrival-notice/arrival-notice-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FileUpload } from 'graphql-upload/GraphQLUpload.js'\nimport GraphQLUpload from 'graphql-upload/GraphQLUpload.js'\nimport { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'\nimport { EntityManager, getConnection, In, Repository } from 'typeorm'\n\nimport { Attachment, createAttachments } from '@things-factory/attachment-base'\nimport { Role, User } from '@things-factory/auth-base'\nimport { Bizplace, ContactPoint, getDomainUsers, getMyBizplace, getOutletBizplace, getPermittedBizplaces } from '@things-factory/biz-base'\nimport { generateId } from '@things-factory/id-rule-base'\nimport { Product } from '@things-factory/product-base'\nimport { PartnerSetting, Setting } from '@things-factory/setting-base'\nimport { Domain, getRepository } from '@things-factory/shell'\n\nimport { ORDER_NUMBER_RULE_TYPE, ORDER_NUMBER_SETTING_KEY, ORDER_PRODUCT_STATUS, ORDER_STATUS, ORDER_TYPES, ORDER_VAS_STATUS } from '../../constants'\nimport { ATTACHMENT_TYPE } from '../../constants/attachment-type'\nimport { ValidationError } from '../../errors'\nimport { OrderNoGenerator } from '../../utils/order-no-generator'\nimport { CollectionOrder } from '../collection-order/collection-order'\nimport { JobSheet } from '../job-sheet/job-sheet'\nimport { generateJobSheet } from '../job-sheet/job-sheet-mutation'\nimport { OrderProduct } from '../order-product/order-product'\nimport { NewOrderProduct, OrderProductPatch } from '../order-product/order-product-types'\nimport { OrderVas } from '../order-vas/order-vas'\nimport { ReleaseGood } from '../release-good/release-good'\nimport { confirmReleaseGood, deleteReleaseGood, rejectReleaseGood } from '../release-good/release-good-mutation'\nimport { Vas } from '../vas/vas'\nimport { validateBulkArrivalNoticesFunction } from './'\nimport { ArrivalNotice } from './arrival-notice'\nimport { ArrivalNoticeList, ArrivalNoticePatch, NewArrivalNotice, RawArrivalNotice } from './arrival-notice-types'\n\nconst debug = require('debug')('things-factory:operato-wms:addArrivalNotice')\n\n@Resolver(ArrivalNotice)\nexport class ArrivalNoticeMutation {\n @Directive('@privilege(category: \"order_customer\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => Boolean)\n async deleteArrivalNotice(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<Boolean> {\n const { tx, user, domain } = context.state\n\n return await deleteArrivalNotice(tx, name, user, domain)\n }\n\n @Directive('@privilege(category: \"order_customer\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => ArrivalNotice)\n async generateArrivalNotice(\n @Ctx() context: ResolverContext,\n @Arg('arrivalNotice', type => NewArrivalNotice) arrivalNotice: NewArrivalNotice,\n @Arg('files', type => [GraphQLUpload], { nullable: true }) files?: FileUpload[]\n ): Promise<ArrivalNotice> {\n const { tx } = context.state\n const createdArrivalNotice: ArrivalNotice = await generateArrivalNoticeFunction(null, arrivalNotice, false, files, context, tx)\n\n return createdArrivalNotice\n }\n\n @Directive('@privilege(category: \"order_customer\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => ArrivalNotice)\n async confirmArrivalNotice(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<ArrivalNotice> {\n const { tx } = context.state\n const arrivalNotice: ArrivalNotice = await confirmArrivalNoticeFunction(name, context, tx)\n\n // If current GAN has cross docking\n if (arrivalNotice.crossDocking) {\n const { releaseGood } = await tx.getRepository(ArrivalNotice).findOne({\n where: { id: arrivalNotice.id },\n relations: ['releaseGood']\n })\n\n // If status of related RO is not equal to PENDING_RECEIVE (i.e. Wasn't confirmed yet.)\n if (releaseGood.status !== ORDER_STATUS.PENDING_RECEIVE) {\n await confirmReleaseGood(releaseGood.name, context)\n }\n }\n\n return arrivalNotice\n }\n\n @Directive('@privilege(category: \"order_warehouse\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => ArrivalNotice)\n async receiveArrivalNotice(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<ArrivalNotice> {\n const receiveArrivalNotice: ArrivalNotice = await receiveArrivalNoticeFunction(null, name, context)\n\n return receiveArrivalNotice\n }\n\n @Directive('@privilege(category: \"order_warehouse\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => ArrivalNotice)\n async checkArrivedNotice(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<ArrivalNotice> {\n const { tx } = context.state\n\n return await checkArrivedNoticeFunction(name, context, tx)\n }\n\n @Directive('@privilege(category: \"order_warehouse\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => ArrivalNotice)\n async rejectArrivalNotice(\n @Arg('name') name: string,\n @Arg('patch', type => ArrivalNoticePatch) patch: ArrivalNoticePatch,\n @Ctx() context: ResolverContext\n ): Promise<ArrivalNotice> {\n const { tx } = context.state\n\n const arrivalNotice: ArrivalNotice = await rejectArrivalNotice(tx, name, patch.remark, context)\n\n if (arrivalNotice.crossDocking) {\n const { releaseGood }: { releaseGood: ReleaseGood } = await tx.getRepository(ArrivalNotice).findOne({\n where: { id: arrivalNotice.id },\n relations: ['releaseGood']\n })\n\n if (releaseGood.status !== ORDER_STATUS.REJECTED) {\n await rejectReleaseGood(tx, context, releaseGood.name, patch.remark)\n }\n }\n\n return arrivalNotice\n }\n\n @Directive('@privilege(category: \"order_warehouse\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => Boolean)\n async addEditArrivalNoticeProducts(\n @Ctx() context: ResolverContext,\n @Arg('ganNo') ganNo: string,\n @Arg('newOrderProducts', type => [NewOrderProduct], { nullable: true }) newOrderProducts?: NewOrderProduct[],\n @Arg('existingOrderProducts', type => [OrderProductPatch], { nullable: true })\n existingOrderProducts?: OrderProductPatch[]\n ): Promise<Boolean> {\n const { user, domain, tx } = context.state\n\n let arrivalNotice: ArrivalNotice = await tx.getRepository(ArrivalNotice).findOne({\n where: { name: ganNo },\n relations: ['bizplace', 'orderProducts']\n })\n\n arrivalNotice.status = ORDER_STATUS.PENDING_APPROVAL\n arrivalNotice.updater = user\n arrivalNotice = await tx.getRepository(ArrivalNotice).save(arrivalNotice)\n\n debug('gan-new-order-products', ganNo, newOrderProducts)\n if (newOrderProducts?.length > 0) await addArrivalNoticeProducts(domain, arrivalNotice, newOrderProducts, user, tx)\n\n debug('gan-existing-order-products', ganNo, existingOrderProducts)\n if (existingOrderProducts?.length > 0) await editArrivalNoticeProducts(existingOrderProducts, user, tx)\n\n // notification logics\n const users: any[] = await getDomainUsers(arrivalNotice?.bizplace, tx)\n debug('users', users)\n\n if (users?.length && context.header?.referer) {\n const receivers: any[] = users.map(user => user.id)\n const msg = {\n title: `Products are added/edited for ${arrivalNotice.name}`,\n body: `Warehouse need your review for changes to be approved`,\n url: context.header.referer,\n data: { url: context.header.referer }\n }\n /**\n * @notes Temporary off sendNotification due to suspect of causing wms down\n */\n\n // await sendNotification({\n // receivers,\n // message: { ...msg }\n // })\n }\n\n return true\n }\n\n @Directive('@privilege(category: \"order_customer\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => ArrivalNotice)\n async addArrivalNotice(\n @Ctx() context: ResolverContext,\n @Arg('arrivalNotice', type => NewArrivalNotice) arrivalNotice: NewArrivalNotice,\n @Arg('file', type => GraphQLUpload, { nullable: true }) file?: FileUpload\n ): Promise<ArrivalNotice> {\n const { tx } = context.state\n const createdGAN: ArrivalNotice = await generateArrivalNoticeFunction(null, arrivalNotice, false, file, context, tx)\n\n debug('createdGAN', createdGAN)\n\n const confirmedGAN: ArrivalNotice = await confirmArrivalNoticeFunction(createdGAN.name, context, tx)\n\n debug('confirmedGAN', confirmedGAN)\n\n return confirmedGAN\n }\n\n @Directive('@privilege(category: \"order_customer\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => ArrivalNotice)\n async updateArrivalNoticeDetails(\n @Ctx() context: ResolverContext,\n @Arg('arrivalNotice', type => ArrivalNoticePatch) arrivalNotice: ArrivalNoticePatch\n ): Promise<ArrivalNotice> {\n const { domain, tx } = context.state\n let existingArrivalNotice = await tx.getRepository(ArrivalNotice).findOne({ where: { name: arrivalNotice.name, domain: { id: domain.id } } })\n\n if (!existingArrivalNotice) {\n throw new Error('Existing Arrival Notice not found.')\n }\n\n await tx.getRepository(ArrivalNotice).update(existingArrivalNotice.id, arrivalNotice)\n return await tx.getRepository(ArrivalNotice).findOneBy({ id: existingArrivalNotice.id })\n }\n\n @Directive('@privilege(category: \"order_customer\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => ArrivalNoticeList)\n async bulkGenerateArrivalNotices(\n @Ctx() context: ResolverContext,\n @Arg('rawArrivalNotices', type => [NewArrivalNotice], { nullable: true }) rawArrivalNotices: NewArrivalNotice[],\n @Arg('bizplaceId', type => String) bizplaceId: string,\n @Arg('bufferLocation', type => String, { nullable: true }) bufferLocation: string\n ): Promise<ArrivalNoticeList> {\n const { domain, user, tx } = context.state\n let createdArrivalNoticeIds: string[] = [],\n createdOrderProductIds: string[] = [],\n errorsCaught: any[] = [],\n finalArrivalNoticeList: ArrivalNotice[] = []\n let opStatus = ORDER_PRODUCT_STATUS.PENDING_RECEIVE\n let anStatus = ORDER_STATUS.PENDING_RECEIVE\n\n const foundBizplace: Bizplace = await tx.getRepository(Bizplace).findOne({ where: { id: bizplaceId }, relations: ['domain'] })\n\n if (!foundBizplace) throw new Error('company not found')\n\n // to check whether the raw data are valid\n const validatedArrivalNotices: RawArrivalNotice[] = await validateBulkArrivalNoticesFunction(rawArrivalNotices, bizplaceId, tx)\n\n // check for custom GAN order no setting\n const ganNoSetting: Setting = await tx.getRepository(Setting).findOne({\n where: {\n domain: { id: domain.id },\n name: ORDER_NUMBER_SETTING_KEY.GAN_NUMBER_RULE\n }\n })\n\n const ganProcessingSetting: Setting = await tx.getRepository(Setting).findOne({\n where: { domain: { id: domain.id }, category: 'id-rule', name: 'gan-order-processing' }\n })\n\n const partnerGanProcessingSetting: PartnerSetting = await tx.getRepository(PartnerSetting).findOne({\n where: {\n setting: { id: ganProcessingSetting.id },\n domain: { id: domain.id },\n partnerDomain: { id: foundBizplace.domain.id }\n }\n })\n\n // If status of GAN is PENDING_RECEIVE then directly to assign warehouse\n if (ganProcessingSetting) {\n let setting = !isNaN(partnerGanProcessingSetting?.value) ? partnerGanProcessingSetting?.value : ganProcessingSetting.value\n\n // CONFIRM to assign if setting value is 1\n if (setting == 1) {\n opStatus = ORDER_PRODUCT_STATUS.ARRIVED\n anStatus = ORDER_STATUS.ARRIVED\n }\n }\n\n // extract rawArrivalNotices data into normal ArrivalNotice format\n let arrivalNotices: Partial<ArrivalNotice[]> = extractArrivalNotices(validatedArrivalNotices)\n\n for (let i = 0, l = arrivalNotices.length; i < l; i++) {\n try {\n await getConnection().transaction(async childTx => {\n // check for duplication\n const duplicatedArrivalNotice: ArrivalNotice = await childTx.getRepository(ArrivalNotice).findOne({\n where: {\n refNo: arrivalNotices[i].refNo,\n refNo2: arrivalNotices[i].refNo2,\n refNo3: arrivalNotices[i].refNo3,\n etaDate: arrivalNotices[i].etaDate,\n truckNo: arrivalNotices[i].truckNo,\n containerNo: arrivalNotices[i].containerNo,\n containerSize: arrivalNotices[i].containerSize,\n looseItem: arrivalNotices[i].looseItem,\n importCargo: arrivalNotices[i].importCargo\n }\n })\n\n if (duplicatedArrivalNotice) {\n throw new Error(`duplicated with ${duplicatedArrivalNotice.name}`)\n }\n\n // save new arrival notice\n const createdArrivalNotice: ArrivalNotice = await childTx.getRepository(ArrivalNotice).save({\n ...arrivalNotices[i],\n name: ganNoSetting ? await generateId({ domain, type: ORDER_NUMBER_RULE_TYPE.GAN_NUMBER, seed: {} }) : OrderNoGenerator.arrivalNotice(),\n domain,\n bizplace: foundBizplace,\n status: ORDER_STATUS.PENDING,\n creator: user,\n updater: user\n })\n\n // save new order products\n let createdOrderProducts: OrderProduct[] = await Promise.all(\n arrivalNotices[i].orderProducts.map(async (op: OrderProduct) => {\n return {\n ...op,\n domain,\n bizplace: foundBizplace,\n name: OrderNoGenerator.orderProduct(),\n // product: await childTx.getRepository(Product).findOneBy({ id: op.product.id }),\n status: ORDER_PRODUCT_STATUS.PENDING,\n arrivalNotice: createdArrivalNotice,\n creator: user\n }\n })\n )\n createdOrderProducts = await childTx.getRepository(OrderProduct).save(createdOrderProducts)\n\n // generate new jobsheet\n await generateJobSheet(domain, user, createdArrivalNotice, childTx)\n\n // push arrivalNotice and orderProducts IDs if successfully saved\n createdArrivalNoticeIds.push(createdArrivalNotice.id)\n createdOrderProductIds.push(...createdOrderProducts.map(op => op.id))\n })\n } catch (error) {\n // collect the arrivalNotice details and its error\n let rawArrivalNotices: RawArrivalNotice[] = formRawArrivalNotices(arrivalNotices[i], error.message)\n errorsCaught.push(...rawArrivalNotices)\n }\n }\n\n if (createdArrivalNoticeIds.length && createdOrderProductIds.length) {\n await getConnection().transaction(async childTx => {\n // update arrivalNotices status to PENDING_RECEIVE\n await childTx.getRepository(ArrivalNotice).update({ id: In(createdArrivalNoticeIds) }, { status: anStatus, updater: user })\n\n // update orderProducts status to PENDING_RECEIVE\n await childTx.getRepository(OrderProduct).update({ id: In(createdOrderProductIds) }, { status: opStatus, updater: user })\n\n finalArrivalNoticeList = await childTx.getRepository(ArrivalNotice).find({\n where: { id: In(createdArrivalNoticeIds) },\n relations: ['orderProducts', 'orderProducts.product', 'bizplace']\n })\n })\n }\n\n if (errorsCaught.length) {\n // should return this error list in the grist so that user know which gan need to amend\n throw new ValidationError({\n ...ValidationError.ERROR_CODES.INVALID_DATA_FOUND,\n detail: { data: JSON.stringify(errorsCaught) }\n })\n }\n\n // return arrivalNotices with its orderProducts list\n return { items: finalArrivalNoticeList, total: 0 }\n }\n}\n\nexport async function deleteArrivalNotice(tx: EntityManager, name: string, user: User, domain: Domain): Promise<boolean> {\n let foundArrivalNotice: ArrivalNotice = await tx.getRepository(ArrivalNotice).findOne({\n where: { domain: { id: domain.id }, name },\n relations: ['bizplace', 'releaseGood', 'orderProducts', 'orderVass', 'collectionOrders', 'creator', 'updater']\n })\n\n if (!foundArrivalNotice) throw new Error(`Arrival notice doesn't exists.`)\n\n const foundJS: JobSheet = await tx.getRepository(JobSheet).findOne({\n where: {\n bizplace: { id: foundArrivalNotice.bizplace.id },\n arrivalNoticeRefNo: foundArrivalNotice.name\n }\n })\n\n if (foundJS) await tx.getRepository(JobSheet).delete({ arrivalNoticeRefNo: foundArrivalNotice.name })\n\n const foundOPs: OrderProduct[] = foundArrivalNotice.orderProducts\n const foundOVs: OrderVas[] = foundArrivalNotice.orderVass\n\n // 1. delete order products\n const productIds = foundOPs.map((product: OrderProduct) => product.id)\n if (productIds.length) {\n await tx.getRepository(OrderProduct).delete({ id: In(productIds) })\n }\n\n // 2. delete order vass\n const vasIds = foundOVs.map((vas: OrderVas) => vas.id)\n if (vasIds.length) {\n await tx.getRepository(OrderVas).delete({ id: In(vasIds) })\n }\n\n await tx.getRepository(ArrivalNotice).save({\n ...foundArrivalNotice,\n updater: user\n })\n\n // 4. Remove relation with RO if it's cross docking\n if (foundArrivalNotice.crossDocking && foundArrivalNotice.releaseGood?.id) {\n let releaseGood: ReleaseGood = foundArrivalNotice.releaseGood\n releaseGood.arrivalNotice = null\n releaseGood = await tx.getRepository(ReleaseGood).save(releaseGood)\n\n await tx.getRepository(ArrivalNotice).delete({ domain: { id: domain.id }, name })\n await deleteReleaseGood(tx, releaseGood.name, user, domain)\n } else {\n // 5. delete GAN\n await tx.getRepository(ArrivalNotice).delete({ domain: { id: domain.id }, name })\n }\n return true\n}\n\nexport async function generateArrivalNoticeFunction(\n _: any,\n arrivalNotice: any,\n fromPo: Boolean,\n files: FileUpload[],\n context: any,\n tx?: EntityManager\n): Promise<ArrivalNotice> {\n const { domain, user } = context.state\n let orderProducts: OrderProduct[] = arrivalNotice.orderProducts\n let orderVass: OrderVas[] = arrivalNotice.orderVass\n let myBizplace: Bizplace\n let orderNo: string = ''\n\n const settingRepo: Repository<Setting> = tx?.getRepository(Setting) || getRepository(Setting)\n\n if (arrivalNotice.bizplace) myBizplace = arrivalNotice.bizplace\n else if (arrivalNotice.customerBizplaceId) {\n const permittedBizplaces: Bizplace[] = await getPermittedBizplaces(domain, user)\n let foundPermittedBizplace: Bizplace = permittedBizplaces.find(biz => biz.id == arrivalNotice.customerBizplaceId)\n\n if (!foundPermittedBizplace) throw new Error(`This user does not permitted for this company`)\n\n myBizplace = arrivalNotice.customerBizplaceId\n } else if (arrivalNotice.partnerBizplaceId) {\n const permittedBizplaces: Bizplace[] = await getPermittedBizplaces(domain, user)\n let foundPermittedBizplace: Bizplace = permittedBizplaces.find(biz => biz.id == arrivalNotice.partnerBizplaceId)\n\n if (!foundPermittedBizplace) throw new Error(`This user does not permitted for this company`)\n\n myBizplace = arrivalNotice.partnerBizplaceId\n } else if (arrivalNotice.warehouseId) myBizplace = await getOutletBizplace(arrivalNotice.warehouseId)\n else myBizplace = await getMyBizplace(domain, user)\n\n if (arrivalNotice.supplier) {\n const supplier: ContactPoint = await tx.getRepository(ContactPoint).findOne({\n where: { id: arrivalNotice.supplier, domain: { id: domain.id } },\n relations: ['bizplace']\n })\n\n if (!supplier) throw new Error('contact point does not exist')\n\n arrivalNotice.supplier = supplier\n }\n // find GAN number rule setting\n const ganNoSetting: Setting = await settingRepo.findOne({\n where: {\n domain: { id: domain.id },\n name: ORDER_NUMBER_SETTING_KEY.GAN_NUMBER_RULE\n }\n })\n\n if (ganNoSetting) {\n orderNo = await generateId({ domain, type: ORDER_NUMBER_RULE_TYPE.GAN_NUMBER, seed: {} })\n } else {\n orderNo = OrderNoGenerator.arrivalNotice()\n }\n\n // 1. Create arrival notice\n const createdArrivalNotice: ArrivalNotice = await tx.getRepository(ArrivalNotice).save({\n ...arrivalNotice,\n name: orderNo,\n domain,\n bizplace: myBizplace,\n looseItem: arrivalNotice?.looseItem ? arrivalNotice.looseItem : false,\n status: fromPo ? ORDER_STATUS.INTRANSIT : ORDER_STATUS.PENDING,\n creator: user,\n updater: user\n })\n\n // 2. Create arrival notice product\n await addArrivalNoticeProducts(\n domain,\n createdArrivalNotice,\n orderProducts.map((op: OrderProduct) => {\n return { ...op, status: fromPo ? ORDER_PRODUCT_STATUS.INTRANSIT : ORDER_PRODUCT_STATUS.PENDING }\n }),\n user,\n tx\n )\n\n await generateJobSheet(domain, user, createdArrivalNotice, tx)\n\n // 3. Create arrival notice vas\n if (orderVass?.length) {\n orderVass = await Promise.all(\n orderVass.map(async (ov: OrderVas) => {\n if (ov.targetProduct) {\n ov.targetProduct = await tx.getRepository(Product).findOneBy({ id: ov.targetProduct.id })\n }\n\n return {\n ...ov,\n domain,\n bizplace: myBizplace,\n name: OrderNoGenerator.orderVas(),\n vas: await tx.getRepository(Vas).findOneBy({ domain: { id: domain.id }, id: ov.vas.id }),\n type: ORDER_TYPES.ARRIVAL_NOTICE,\n arrivalNotice: createdArrivalNotice,\n status: fromPo ? ORDER_VAS_STATUS.INTRANSIT : ORDER_VAS_STATUS.PENDING,\n creator: user,\n updater: user\n }\n })\n )\n await tx.getRepository(OrderVas).save(orderVass)\n }\n\n if (files?.length) {\n const attachments: Attachment[] = files.map(attachment => {\n return {\n file: attachment,\n refType: ATTACHMENT_TYPE.GAN,\n refBy: createdArrivalNotice.id,\n category: ATTACHMENT_TYPE.GAN /* TODO use refType */\n }\n })\n await createAttachments(_, { attachments }, context)\n }\n\n return createdArrivalNotice\n}\n\nexport async function confirmArrivalNoticeFunction(name: string, context: any, tx?: EntityManager): Promise<ArrivalNotice> {\n const { user, domain } = context.state\n\n const foundArrivalNotice: ArrivalNotice = await tx.getRepository(ArrivalNotice).findOne({\n where: { domain: { id: domain.id }, name, status: ORDER_STATUS.PENDING },\n relations: ['bizplace', 'bizplace.domain', 'releaseGood', 'orderProducts', 'orderProducts.product', 'orderVass', 'orderVass.vas', 'creator', 'updater']\n })\n\n let foundOPs: OrderProduct[] = foundArrivalNotice.orderProducts\n let foundOVs: OrderVas[] = foundArrivalNotice.orderVass\n let customerBizplace: Bizplace = foundArrivalNotice.bizplace\n let opStatus = ORDER_PRODUCT_STATUS.PENDING_RECEIVE\n let anStatus = ORDER_STATUS.PENDING_RECEIVE\n let ovStatus = ORDER_VAS_STATUS.PENDING_RECEIVE\n let acceptedByUser = null\n let acceptedTime = null\n\n const ganProcessingSetting: Setting = await tx.getRepository(Setting).findOne({\n where: { domain: { id: domain.id }, category: 'id-rule', name: 'gan-order-processing' }\n })\n\n // If status of GAN is PENDING_RECEIVE then directly to assign warehouse\n if (ganProcessingSetting) {\n const partnerGanProcessingSetting: PartnerSetting = await tx.getRepository(PartnerSetting).findOne({\n where: {\n setting: { id: ganProcessingSetting.id },\n domain: { id: domain.id },\n partnerDomain: { id: customerBizplace?.domain?.id }\n }\n })\n\n let setting = !isNaN(partnerGanProcessingSetting?.value) ? partnerGanProcessingSetting?.value : ganProcessingSetting.value\n\n // CONFIRM to assign if setting value is 1\n if (setting == 1) {\n opStatus = ORDER_PRODUCT_STATUS.ARRIVED\n anStatus = ORDER_STATUS.ARRIVED\n ovStatus = ORDER_VAS_STATUS.ARRIVED\n acceptedByUser = user\n acceptedTime = new Date()\n }\n }\n\n if (!foundArrivalNotice) throw new Error(`Arrival notice doesn't exists.`)\n\n // 1. GAN Status change (PENDING => PENDING_RECEIVE)\n let arrivalNotice: ArrivalNotice = await tx.getRepository(ArrivalNotice).save({\n ...foundArrivalNotice,\n status: anStatus,\n updater: user,\n acceptedBy: acceptedByUser,\n acceptedAt: acceptedTime\n })\n\n foundOPs = foundOPs.map((op: OrderProduct) => {\n return { ...op, status: opStatus }\n })\n await tx.getRepository(OrderProduct).save(foundOPs)\n\n // 2. Update order vas status if it exists.\n if (foundOVs && foundOVs.length) {\n foundOVs = foundOVs.map((ov: OrderVas) => {\n return { ...ov, status: ovStatus }\n })\n\n await tx.getRepository(OrderVas).save(foundOVs)\n }\n\n // notification logics\n // get Office Admin Users\n if (context?.state?.type != 'api') {\n const users: any[] = await tx\n .getRepository('users_roles')\n .createQueryBuilder('ur')\n .select('ur.users_id', 'id')\n .where(qb => {\n const subQuery = qb\n .subQuery()\n .select('role.id')\n .from(Role, 'role')\n .where(\"role.name = 'Office Admin'\")\n .andWhere('role.domain_id = :domain', { domain: domain.id })\n .getQuery()\n return 'ur.roles_id IN ' + subQuery\n })\n .getRawMany()\n\n // send notification to Office Admin Users\n if (users?.length && context.header?.referer) {\n const receivers: any[] = users.map(user => user.id)\n const msg = {\n title: `New Arrival Notice from ${customerBizplace.name}`,\n body: `New incoming order, ${foundArrivalNotice.name} is pending for receiving`,\n url: context.header.referer,\n data: { url: context.header.referer }\n }\n\n /**\n * @notes Temporary off sendNotification due to suspect of causing wms down\n */\n\n // await sendNotification({\n // receivers,\n // message: { ...msg }\n // })\n }\n }\n\n return arrivalNotice\n}\n\nexport async function receiveArrivalNoticeFunction(_: any, name: string, context: ResolverContext): Promise<ArrivalNotice> {\n const { user, domain, tx } = context.state\n try {\n const foundArrivalNotice: ArrivalNotice = await tx.getRepository(ArrivalNotice).findOne({\n where: { domain: { id: domain.id }, name, status: ORDER_STATUS.PENDING_RECEIVE },\n relations: ['bizplace', 'bizplace.domain', 'collectionOrders', 'orderProducts', 'orderVass']\n })\n\n let foundOPs: OrderProduct[] = foundArrivalNotice.orderProducts\n let foundOVs: OrderVas[] = foundArrivalNotice.orderVass\n let foundCOs: CollectionOrder[] = await tx.getRepository(CollectionOrder).find({\n where: { domain: { id: domain.id }, refNo: foundArrivalNotice.name }\n })\n let customerBizplace: Bizplace = foundArrivalNotice.bizplace\n let opStatus = ORDER_PRODUCT_STATUS.INTRANSIT\n let anStatus = ORDER_STATUS.INTRANSIT\n let ovStatus = ORDER_VAS_STATUS.INTRANSIT\n let coStatus = ORDER_STATUS.READY_TO_DISPATCH\n\n const ganProcessingSetting: Setting = await tx.getRepository(Setting).findOne({\n where: { domain: { id: domain.id }, category: 'id-rule', name: 'gan-order-processing' }\n })\n\n // If status of GAN is INTRANSIT then directly to assign warehouse\n if (ganProcessingSetting) {\n const partnerGanProcessingSetting: PartnerSetting = await tx.getRepository(PartnerSetting).findOne({\n where: {\n setting: { id: ganProcessingSetting.id },\n domain: { id: domain.id },\n partnerDomain: { id: customerBizplace?.domain?.id }\n }\n })\n\n let setting = !isNaN(partnerGanProcessingSetting?.value) ? partnerGanProcessingSetting?.value : ganProcessingSetting.value\n\n // RECEIVE to assign if setting value is 2\n if (setting == 2) {\n opStatus = ORDER_PRODUCT_STATUS.ARRIVED\n anStatus = ORDER_STATUS.ARRIVED\n ovStatus = ORDER_VAS_STATUS.ARRIVED\n coStatus = ORDER_STATUS.READY_TO_DISPATCH\n }\n }\n\n if (!foundArrivalNotice) throw new Error(`Arrival notice doesn't exists.`)\n\n // 1. Update status of order products (PENDING_RECEIVE => INTRANSIT)\n foundOPs = foundOPs.map((op: OrderProduct) => {\n return {\n ...op,\n status: opStatus,\n updater: user\n }\n })\n await tx.getRepository(OrderProduct).save(foundOPs)\n\n // 2. Update status of order vass if it exists (PENDING_RECEIVE => INTRANSIT)\n if (foundOVs && foundOVs.length) {\n foundOVs = foundOVs.map((ov: OrderVas) => {\n return {\n ...ov,\n status: ovStatus,\n updater: user\n }\n })\n await tx.getRepository(OrderVas).save(foundOVs)\n }\n\n // 3. If there's collection order, update status of collection order (PENDING_RECEIVE => READY_TO_DISPATCH)\n if (foundCOs) {\n foundCOs = foundCOs.map((co: CollectionOrder) => {\n return {\n ...co,\n status: coStatus,\n updater: user\n }\n })\n }\n\n // notification logics\n const users: any[] = await getDomainUsers(foundArrivalNotice?.bizplace, tx)\n\n // send notification to Customer Users\n if (users?.length && context.header?.referer) {\n const receivers: any[] = users.map(user => user.id)\n const msg = {\n title: `Latest status for ${foundArrivalNotice.name}`,\n body: `Your GAN has been received and processed by ${domain.name}`,\n url: context.header.referer,\n data: { url: context.header.referer }\n }\n\n /**\n * @notes Temporary off sendNotification due to suspect of causing wms down\n */\n\n // await sendNotification({\n // receivers,\n // message: { ...msg }\n // })\n }\n\n // 4. Update status of arrival notice (PENDING_RECEIVE => INTRANSIT)\n let rcvArrivalNotice = await tx.getRepository(ArrivalNotice).save({\n ...foundArrivalNotice,\n status: anStatus,\n acceptedBy: user,\n acceptedAt: new Date(),\n updater: user\n })\n\n return foundArrivalNotice\n } catch (e) {\n throw e\n }\n}\n\nexport async function checkArrivedNoticeFunction(name: string, context: any, tx?: EntityManager): Promise<ArrivalNotice> {\n const { user, domain } = context.state\n try {\n const foundArrivalNotice: ArrivalNotice = await tx.getRepository(ArrivalNotice).findOne({\n where: { domain: { id: domain.id }, name, status: ORDER_STATUS.INTRANSIT },\n relations: ['bizplace', 'collectionOrders', 'orderProducts', 'orderVass']\n })\n\n debug('ganNo', name, foundArrivalNotice)\n\n if (!foundArrivalNotice) throw new Error(`Arrival notice doesn't exists.`)\n\n // 1. Check wheter related collection order is done or not\n const foundCOs: CollectionOrder[] = foundArrivalNotice.collectionOrders\n if (foundCOs && foundCOs.length) {\n foundCOs.map((co: CollectionOrder) => {\n if (co.status !== ORDER_STATUS.DONE) {\n throw new Error(`Collection Order: ${co.name} is not finished yet.`)\n }\n })\n }\n\n let foundOPs: OrderProduct[] = foundArrivalNotice.orderProducts\n let foundOVs: OrderVas[] = foundArrivalNotice.orderVass\n\n // 2. Update status of order products (INTRANSIT => ARRIVED)\n foundOPs = foundOPs.map((op: OrderProduct) => {\n return {\n ...op,\n status: ORDER_PRODUCT_STATUS.ARRIVED,\n updater: user\n }\n })\n await tx.getRepository(OrderProduct).save(foundOPs)\n\n // 3. Update status of order vass if it exists (INTRANSIT => ARRIVED)\n if (foundOVs && foundOVs.length) {\n foundOVs = foundOVs.map((ov: OrderVas) => {\n return {\n ...ov,\n status: ORDER_VAS_STATUS.ARRIVED,\n updater: user\n }\n })\n await tx.getRepository(OrderVas).save(foundOVs)\n }\n\n // 4. Update status of arrival notice (INTRANSIT => ARRIVED)\n await tx.getRepository(ArrivalNotice).save({\n ...foundArrivalNotice,\n status: ORDER_STATUS.ARRIVED,\n updater: user\n })\n\n // notification logics\n const users: any[] = await getDomainUsers(foundArrivalNotice?.bizplace, tx)\n\n if (users?.length && context.header?.referer) {\n const receivers: any[] = users.map(user => user.id)\n const msg = {\n title: `Latest status for ${foundArrivalNotice.name}`,\n body: `Your goods has safely arrived at ${domain.name}`,\n url: context.header.referer,\n data: { url: context.header.referer }\n }\n\n /**\n * @notes Temporary off sendNotification due to suspect of causing wms down\n */\n\n // await sendNotification({\n // receivers,\n // message: { ...msg }\n // })\n }\n\n return foundArrivalNotice\n } catch (e) {\n throw e\n }\n}\n\nexport async function rejectArrivalNotice(tx: EntityManager, name: string, remark: string, context: any): Promise<ArrivalNotice> {\n const { user, domain } = context.state\n\n const foundArrivalNotice: ArrivalNotice = await tx.getRepository(ArrivalNotice).findOne({\n where: { domain: { id: domain.id }, name, status: ORDER_STATUS.PENDING_RECEIVE },\n relations: ['bizplace', 'orderProducts', 'orderVass', 'collectionOrders']\n })\n\n if (!foundArrivalNotice) throw new Error(`Arrival notice doesn't exists.`)\n if (!remark) throw new Error('Remark is not exist.')\n\n let foundOPs: OrderProduct[] = foundArrivalNotice.orderProducts\n let foundOVs: OrderVas[] = foundArrivalNotice.orderVass\n let foundCOs: CollectionOrder[] = foundArrivalNotice.collectionOrders\n\n // 1. Update status of order products (PENDING_RECEIVE => REJECTED)\n foundOPs = foundOPs.map((op: OrderProduct) => {\n op.status = ORDER_PRODUCT_STATUS.REJECTED\n op.updater = user\n return op\n })\n await tx.getRepository(OrderProduct).save(foundOPs)\n\n // 2. Update status of order vass if it exists (PENDING_RECEIVE => REJECTED)\n if (foundOVs && foundOVs.length) {\n foundOVs = foundOVs.map((ov: OrderVas) => {\n ov.status = ORDER_VAS_STATUS.REJECTED\n ov.updater = user\n return ov\n })\n await tx.getRepository(OrderVas).save(foundOVs)\n }\n\n // 3. If there's collection order, update status of collection order (PENDING_RECEIVE => REJECTED)\n if (foundCOs) {\n foundCOs = foundCOs.map((co: CollectionOrder) => {\n co.status = ORDER_STATUS.REJECTED\n co.updater = user\n return co\n })\n await tx.getRepository(CollectionOrder).save(foundCOs)\n }\n\n foundArrivalNotice.remark = remark\n foundArrivalNotice.status = ORDER_STATUS.REJECTED\n foundArrivalNotice.updater = user\n await tx.getRepository(ArrivalNotice).save(foundArrivalNotice)\n\n // notification logics\n const users: any[] = await getDomainUsers(foundArrivalNotice?.bizplace, tx)\n\n // send notification to Customer Users\n if (users?.length && context.header?.referer) {\n const receivers: any[] = users.map(user => user.id)\n const msg = {\n title: `Latest status for ${foundArrivalNotice.name}`,\n body: `Your GAN has been rejected.`,\n url: context.header.referer,\n data: { url: context.header.referer }\n }\n\n /**\n * @notes Temporary off sendNotification due to suspect of causing wms down\n */\n\n // await sendNotification({\n // receivers,\n // message: { ...msg }\n // })\n }\n\n return foundArrivalNotice\n}\n\nexport async function addArrivalNoticeProducts(domain: Domain, arrivalNotice: ArrivalNotice, newOrderProducts: any[], user: User, tx?: EntityManager): Promise<void> {\n const productRepo: Repository<Product> = tx?.getRepository(Product) || getRepository(Product)\n const orderProductRepo: Repository<OrderProduct> = tx?.getRepository(OrderProduct) || getRepository(OrderProduct)\n\n if (!arrivalNotice?.bizplace || !arrivalNotice?.orderProducts?.length) {\n arrivalNotice = await tx.getRepository(ArrivalNotice).findOne({\n where: { domain: { id: domain.id }, name: arrivalNotice.name },\n relations: ['bizplace', 'orderProducts']\n })\n }\n\n const createdOrderProducts: OrderProduct[] = await Promise.all(\n newOrderProducts.map(async (op: OrderProduct) => {\n return {\n ...op,\n domain,\n bizplace: arrivalNotice.bizplace,\n name: OrderNoGenerator.orderProduct(),\n product: await productRepo.findOneBy({ id: op.product.id }),\n arrivalNotice,\n creator: user\n }\n })\n )\n\n debug('gan-created-order-products', createdOrderProducts)\n await orderProductRepo.save(createdOrderProducts)\n}\n\nexport async function editArrivalNoticeProducts(existingOrderProducts: (OrderProduct | OrderProductPatch)[], user: User, tx?: EntityManager): Promise<void> {\n const orderProductRepo: Repository<OrderProduct> = tx?.getRepository(OrderProduct) || getRepository(OrderProduct)\n\n const updatedOrderProducts: OrderProduct[] = await Promise.all(\n existingOrderProducts.map(async (op: OrderProduct) => {\n return {\n ...op,\n status: ORDER_PRODUCT_STATUS.EDITED,\n updater: user\n }\n })\n )\n\n debug('gan-updated-order-products', updatedOrderProducts)\n await orderProductRepo.save(updatedOrderProducts)\n}\n\nfunction extractArrivalNotices(rawArrivalNotices): Partial<ArrivalNotice[]> {\n return rawArrivalNotices.reduce((arrivalNotices, raw) => {\n // discard the item that has no productId or productDetailId\n if (!raw.productId || !raw.productDetailId) return\n\n const idx: number = arrivalNotices.findIndex(an => {\n // consider these attributes if they are exist in \"item\"\n const comparison = ['refNo2', 'refNo3', 'truckNo', 'ownTransport', 'container', 'containerNo', 'containerSize', 'looseItem', 'importCargo']\n\n let a: any = {},\n b: any = {}\n\n comparison.forEach(cc => {\n if (raw[cc] !== null) {\n a[cc] = raw[cc]\n b[cc] = an[cc]\n }\n })\n\n a = JSON.stringify(Object.fromEntries(Object.entries(a).sort()))\n b = JSON.stringify(Object.fromEntries(Object.entries(b).sort()))\n\n return an.refNo == raw.refNo && an.etaDate == raw.etaDate && a === b\n })\n\n const product: Product = Object.assign(new Product(), { id: raw.productId, sku: raw.sku })\n const orderProduct: Partial<OrderProduct> = {\n product,\n batchId: raw.batchId,\n batchIdRef: raw.batchIdRef,\n packingType: raw.packingType,\n packingSize: raw.packingSize,\n packQty: raw.packQty,\n uomValue: raw.uomValue,\n uom: raw.uom,\n totalUomValue: raw.totalUomValue,\n palletQty: raw.palletQty,\n unitPrice: raw.unitPrice,\n manufactureDate: raw.manufactureDate\n }\n\n if (idx >= 0) {\n const duplicateSkuIdx: number = arrivalNotices[idx].orderProducts.findIndex(\n op => op.sku === raw.sku && op.packingType === raw.packingType && op.packingSize === raw.packingSize && op.batchId === raw.batchId\n )\n\n if (duplicateSkuIdx >= 0) arrivalNotices[idx].orderProducts[duplicateSkuIdx].packQty += raw.packQty\n else arrivalNotices[idx].orderProducts.push(orderProduct)\n } else {\n arrivalNotices.push({\n refNo: raw.refNo,\n refNo2: raw.refNo2,\n refNo3: raw.refNo3,\n etaDate: raw.etaDate,\n truckNo: raw.truckNo,\n ownTransport: raw.ownTransport,\n container: raw.container,\n containerNo: raw.containerNo,\n containerSize: raw.containerSize,\n importCargo: raw.importCargo,\n looseItem: raw.looseItem,\n orderProducts: [orderProduct]\n })\n }\n\n return arrivalNotices\n }, [])\n}\n\nfunction formRawArrivalNotices(arrivalNotice, errorMsg) {\n let rawArrivalNotices = []\n for (let i = 0, l = arrivalNotice.orderProducts.length; i < l; i++) {\n let rawArrivalNotice = {\n ...arrivalNotice,\n ...arrivalNotice.orderProducts[i],\n sku: arrivalNotice.orderProducts[i].product.sku,\n errorMsg\n }\n\n delete rawArrivalNotice.orderProducts\n delete rawArrivalNotice.product\n\n rawArrivalNotices.push(rawArrivalNotice)\n }\n return rawArrivalNotices\n}\n"]}
|