Skip to content

Commit 8b6c056

Browse files
author
Gerald Baulig
committed
fix(fulfillments): map fulfillment eval and create together
1 parent dbe0e96 commit 8b6c056

File tree

1 file changed

+68
-54
lines changed

1 file changed

+68
-54
lines changed

src/service.ts

+68-54
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@ export class OrderingService
296296
protected readonly awaits_render_result = new ResourceAwaitQueue<string[]>;
297297
protected readonly default_setting: ResolvedSetting;
298298
protected readonly default_templates: Template[] = [];
299-
protected readonly kafka_timeout = 10000;
299+
protected readonly kafka_timeout = 15000;
300300
protected readonly contact_point_type_ids = {
301301
legal: 'legal',
302302
shipping: 'shipping',
@@ -1408,16 +1408,15 @@ export class OrderingService
14081408
try {
14091409
if (this.fulfillment_service) {
14101410
this.logger?.debug('Evaluate fulfillment on submit...');
1411-
response.fulfillments = await this._evaluateFulfillment(
1411+
response.fulfillments = [];
1412+
const fulfillment_map: Record<string, FulfillmentResponse> = {};
1413+
await this._evaluateFulfillment(
14121414
{
14131415
items: response.orders?.filter(
14141416
item => {
14151417
const setting = settings.get(item.payload?.id);
14161418
return item.status?.code === 200
1417-
&& (
1418-
setting?.shop_fulfillment_create_enabled
1419-
|| setting?.shop_fulfillment_evaluate_enabled
1420-
);
1419+
&& setting?.shop_fulfillment_evaluate_enabled
14211420
}
14221421
).map(item => ({
14231422
order_id: item.payload.id,
@@ -1437,13 +1436,13 @@ export class OrderingService
14371436
if (order && fulfillment.status?.code !== 200) {
14381437
order.status = fulfillment.status;
14391438
}
1439+
fulfillment_map[id] =fulfillment;
14401440
}
14411441
);
14421442

14431443
if (r.operation_status?.code !== 200) {
14441444
throw r.operation_status;
14451445
}
1446-
return r.items;
14471446
}
14481447
).catch(
14491448
error => {
@@ -1455,21 +1454,27 @@ export class OrderingService
14551454
}
14561455
throw error;
14571456
}
1457+
).finally(
1458+
() => response.fulfillments.push(...Object.values(fulfillment_map))
14581459
);
14591460

14601461
this.logger?.debug('Create fulfillment on submit...');
1461-
await this.fulfillment_service.create(
1462+
await this._createFulfillment(
14621463
{
1463-
items: response.fulfillments?.filter(
1464+
items: response.orders?.filter(
14641465
item => {
1465-
const setting = settings.get(item.payload?.references?.[0]?.instance_id);
1466+
const setting = settings.get(item.payload?.id);
14661467
return item.status?.code === 200
1467-
&& setting?.shop_fulfillment_create_enabled;
1468+
&& setting.shop_fulfillment_create_enabled;
14681469
}
1469-
).map(item => item.payload),
1470+
).map(item => ({
1471+
order_id: item.payload.id,
1472+
})),
14701473
subject: this.tech_user ?? request.subject,
14711474
},
14721475
context,
1476+
response_map,
1477+
aggregation,
14731478
).then(
14741479
r => {
14751480
r.items?.forEach(
@@ -1479,6 +1484,7 @@ export class OrderingService
14791484
if (order && fulfillment.status?.code !== 200) {
14801485
order.status = fulfillment.status;
14811486
}
1487+
fulfillment_map[id] = fulfillment;
14821488
}
14831489
);
14841490

@@ -1497,12 +1503,15 @@ export class OrderingService
14971503
}
14981504
throw error;
14991505
}
1506+
).finally(
1507+
() => response.fulfillments.push(...Object.values(fulfillment_map))
15001508
);
15011509
}
15021510

15031511
if (this.invoice_service) {
15041512
this.logger?.debug('Create invoices on submit...');
1505-
const created_invoices = await this._createInvoice(
1513+
response.invoices = [];
1514+
await this._createInvoice(
15061515
{
15071516
items: response.orders?.filter(
15081517
item => {
@@ -1530,21 +1539,24 @@ export class OrderingService
15301539
aggregation,
15311540
).then(
15321541
r => {
1533-
r.items?.forEach(
1534-
invoice => {
1535-
invoice.payload?.references?.forEach(
1536-
reference => {
1537-
const order = response_map[reference?.instance_id];
1538-
if (invoice.status?.code !== 200 && order) {
1539-
order.status = {
1540-
...invoice.status,
1541-
id: order.payload?.id ?? order.status?.id,
1542-
};
1542+
if (r.items) {
1543+
r.items.forEach(
1544+
invoice => {
1545+
invoice.payload?.references?.forEach(
1546+
reference => {
1547+
const order = response_map[reference?.instance_id];
1548+
if (invoice.status?.code !== 200 && order) {
1549+
order.status = {
1550+
...invoice.status,
1551+
id: order.payload?.id ?? order.status?.id,
1552+
};
1553+
}
15431554
}
1544-
}
1545-
);
1546-
}
1547-
);
1555+
);
1556+
}
1557+
);
1558+
response.invoices.push(...r.items);
1559+
}
15481560

15491561
if (r.operation_status?.code !== 200) {
15501562
throw r.operation_status;
@@ -1593,21 +1605,24 @@ export class OrderingService
15931605
aggregation,
15941606
).then(
15951607
r => {
1596-
r.items?.forEach(
1597-
invoice => {
1598-
invoice.payload?.references?.forEach(
1599-
reference => {
1600-
const order = response_map[reference?.instance_id];
1601-
if (invoice.status?.code !== 200 && order) {
1602-
order.status = {
1603-
...invoice.status,
1604-
id: order.payload?.id ?? order.status?.id,
1605-
};
1608+
if (r.items) {
1609+
r.items.forEach(
1610+
invoice => {
1611+
invoice.payload?.references?.forEach(
1612+
reference => {
1613+
const order = response_map[reference?.instance_id];
1614+
if (invoice.status?.code !== 200 && order) {
1615+
order.status = {
1616+
...invoice.status,
1617+
id: order.payload?.id ?? order.status?.id,
1618+
};
1619+
}
16061620
}
1607-
}
1608-
);
1609-
}
1610-
);
1621+
);
1622+
}
1623+
);
1624+
response.invoices.push(...r.items);
1625+
}
16111626

16121627
if (r.operation_status?.code !== 200) {
16131628
throw r.operation_status;
@@ -1626,15 +1641,6 @@ export class OrderingService
16261641
}
16271642
);
16281643

1629-
response.invoices = [
1630-
created_invoices,
1631-
rendered_invoices,
1632-
].flatMap(
1633-
list => list
1634-
).filter(
1635-
item => item
1636-
);
1637-
16381644
this.logger?.debug('Send invoices on submit...');
16391645
const invoices = response.invoices?.filter(
16401646
item => {
@@ -1741,10 +1747,10 @@ export class OrderingService
17411747
return setting?.shop_order_send_confirm_enabled;
17421748
}
17431749
).map(
1744-
async (item) => {
1750+
item => {
17451751
const render_id = `order/confirm/${item.payload.id}`;
17461752
try {
1747-
return await this.emitRenderRequest(
1753+
return this.emitRenderRequest(
17481754
item.payload,
17491755
aggregation,
17501756
render_id,
@@ -2117,7 +2123,11 @@ export class OrderingService
21172123
} as Packaging,
21182124
total_amounts: solution.solutions[0].amounts,
21192125
meta: {
2120-
owners: order.payload?.meta?.owners
2126+
created: new Date(),
2127+
modified: new Date(),
2128+
created_by: request.subject?.id,
2129+
modified_by: request.subject?.id,
2130+
owners: order.payload.meta.owners,
21212131
}
21222132
} : undefined,
21232133
status: {
@@ -2566,7 +2576,11 @@ export class OrderingService
25662576
),
25672577
sections,
25682578
meta: {
2569-
owners: master.payload.meta.owners
2579+
created: new Date(),
2580+
modified: new Date(),
2581+
created_by: request.subject?.id,
2582+
modified_by: request.subject?.id,
2583+
owners: master.payload.meta.owners,
25702584
}
25712585
},
25722586
status: createStatusCode(

0 commit comments

Comments
 (0)