feat: carry over promotions toggle on exchanges (#14128)

* feat: carry over promotions toggle on exchanges

* fix: inital flag value, return the flag on preview

* fix: validation of allocation type

* fix: revert client changes

* fix: invert condition

* feat: recompute adjustments when outbound item is updated

* fix: condition again

* fix: display more accurate inbound/outbound totals for exchanges

* fix: make exchanges specs green

* feat: more testing cases

* wip: pr feedback

* fix: use plural for the flag on Admin

* fix: schema test, route refactor

* feat: tooltip

* feat: refactor to use update workflow

* feat: display applied promotion per item on order details, show copy sku on hover

* feat: refactor edits and exchanges to have common flag toggle flow

* fix: delete empty file

* fix: exchange_id param query
This commit is contained in:
Frane Polić
2025-11-30 19:31:31 +01:00
committed by GitHub
parent 9d1f09ac7b
commit 5da51064d7
40 changed files with 1367 additions and 214 deletions

View File

@@ -721,6 +721,15 @@
"length": 6,
"mappedType": "datetime"
},
"carry_over_promotions": {
"name": "carry_over_promotions",
"type": "boolean",
"unsigned": false,
"autoincrement": false,
"primary": false,
"nullable": true,
"mappedType": "boolean"
},
"order_id": {
"name": "order_id",
"type": "text",
@@ -1978,15 +1987,6 @@
"unique": false,
"expression": "CREATE INDEX IF NOT EXISTS \"IDX_order_item_order_id_version\" ON \"order_item\" (\"order_id\", \"version\") WHERE deleted_at IS NULL"
},
{
"keyName": "IDX_order_item_version",
"columnNames": [],
"composite": false,
"constraint": false,
"primary": false,
"unique": false,
"expression": "CREATE INDEX IF NOT EXISTS \"IDX_order_item_version\" ON \"order_item\" (version) WHERE deleted_at IS NULL"
},
{
"keyName": "IDX_order_item_item_id",
"columnNames": [],

View File

@@ -0,0 +1,15 @@
import { Migration } from "@mikro-orm/migrations"
export class Migration20251125164002 extends Migration {
override async up(): Promise<void> {
this.addSql(
`alter table if exists "order_change" add column if not exists "carry_over_promotions" boolean null;`
)
}
override async down(): Promise<void> {
this.addSql(
`alter table if exists "order_change" drop column if exists "carry_over_promotions";`
)
}
}

View File

@@ -27,6 +27,7 @@ const _OrderChange = model
declined_at: model.dateTime().nullable(),
canceled_by: model.text().nullable(),
canceled_at: model.dateTime().nullable(),
carry_over_promotions: model.boolean().nullable(),
order: model.belongsTo<() => typeof Order>(() => Order, {
mappedBy: "changes",
}),

View File

@@ -3336,6 +3336,7 @@ export default class OrderModuleService
"status",
"description",
"internal_note",
"carry_over_promotions",
],
relations: [] as string[],
order: {},