feat(order,dashboard): version order credit lines (#13766)
* feat(): version order credit lines * undo last change * adjust where * remove date on ui * Create five-donuts-obey.md * add test * nit comment * woops
This commit is contained in:
@@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
"@medusajs/order": patch
|
||||||
|
"@medusajs/dashboard": patch
|
||||||
|
---
|
||||||
|
|
||||||
|
feat(order,dashboard): version order credit lines
|
||||||
-21
@@ -38,7 +38,6 @@ import {
|
|||||||
} from "@medusajs/ui"
|
} from "@medusajs/ui"
|
||||||
|
|
||||||
import { AdminReservation } from "@medusajs/types/src/http"
|
import { AdminReservation } from "@medusajs/types/src/http"
|
||||||
import { format } from "date-fns"
|
|
||||||
import { ActionMenu } from "../../../../../components/common/action-menu"
|
import { ActionMenu } from "../../../../../components/common/action-menu"
|
||||||
import DisplayId from "../../../../../components/common/display-id/display-id"
|
import DisplayId from "../../../../../components/common/display-id/display-id"
|
||||||
import { Thumbnail } from "../../../../../components/common/thumbnail"
|
import { Thumbnail } from "../../../../../components/common/thumbnail"
|
||||||
@@ -872,26 +871,6 @@ const DiscountAndTotalBreakdown = ({
|
|||||||
<span className="txt-small text-ui-fg-subtle mx-1">
|
<span className="txt-small text-ui-fg-subtle mx-1">
|
||||||
-
|
-
|
||||||
</span>
|
</span>
|
||||||
<Tooltip
|
|
||||||
content={format(
|
|
||||||
new Date(creditLine.created_at),
|
|
||||||
"dd MMM, yyyy, HH:mm:ss"
|
|
||||||
)}
|
|
||||||
>
|
|
||||||
<Text
|
|
||||||
size="small"
|
|
||||||
leading="compact"
|
|
||||||
className="txt-small text-ui-fg-subtle"
|
|
||||||
>
|
|
||||||
{format(
|
|
||||||
new Date(creditLine.created_at),
|
|
||||||
"dd MMM, yyyy"
|
|
||||||
)}
|
|
||||||
</Text>
|
|
||||||
</Tooltip>
|
|
||||||
<span className="txt-small text-ui-fg-subtle mx-1">
|
|
||||||
-
|
|
||||||
</span>
|
|
||||||
<Text
|
<Text
|
||||||
size="small"
|
size="small"
|
||||||
leading="compact"
|
leading="compact"
|
||||||
|
|||||||
@@ -608,6 +608,14 @@ moduleIntegrationTestRunner<IOrderModuleService>({
|
|||||||
quantity: 1,
|
quantity: 1,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
action: ChangeActionType.CREDIT_LINE_ADD,
|
||||||
|
order_id: createdOrder.id,
|
||||||
|
version: createdOrder.version,
|
||||||
|
reference: "gesture_of_goodwill",
|
||||||
|
reference_id: "refr_123",
|
||||||
|
amount: 10,
|
||||||
|
},
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -627,9 +635,15 @@ moduleIntegrationTestRunner<IOrderModuleService>({
|
|||||||
"items.detail",
|
"items.detail",
|
||||||
"summary",
|
"summary",
|
||||||
"shipping_methods",
|
"shipping_methods",
|
||||||
|
"credit_lines",
|
||||||
|
"transactions",
|
||||||
|
],
|
||||||
|
relations: [
|
||||||
|
"items",
|
||||||
|
"shipping_methods",
|
||||||
|
"credit_lines",
|
||||||
"transactions",
|
"transactions",
|
||||||
],
|
],
|
||||||
relations: ["items", "shipping_methods", "transactions"],
|
|
||||||
})
|
})
|
||||||
|
|
||||||
const serializedModifiedOrder = JSON.parse(JSON.stringify(modified))
|
const serializedModifiedOrder = JSON.parse(JSON.stringify(modified))
|
||||||
@@ -643,6 +657,10 @@ moduleIntegrationTestRunner<IOrderModuleService>({
|
|||||||
expect(serializedModifiedOrder.shipping_methods).toHaveLength(1)
|
expect(serializedModifiedOrder.shipping_methods).toHaveLength(1)
|
||||||
expect(serializedModifiedOrder.shipping_methods[0].amount).toEqual(10)
|
expect(serializedModifiedOrder.shipping_methods[0].amount).toEqual(10)
|
||||||
|
|
||||||
|
expect(serializedModifiedOrder.credit_lines).toHaveLength(1)
|
||||||
|
expect(serializedModifiedOrder.credit_lines[0].amount).toEqual(10)
|
||||||
|
expect(serializedModifiedOrder.credit_lines[0].version).toEqual(2)
|
||||||
|
|
||||||
expect(serializedModifiedOrder.items).toEqual(
|
expect(serializedModifiedOrder.items).toEqual(
|
||||||
expect.arrayContaining([
|
expect.arrayContaining([
|
||||||
expect.objectContaining({
|
expect.objectContaining({
|
||||||
@@ -694,8 +712,9 @@ moduleIntegrationTestRunner<IOrderModuleService>({
|
|||||||
"items.detail",
|
"items.detail",
|
||||||
"summary",
|
"summary",
|
||||||
"shipping_methods",
|
"shipping_methods",
|
||||||
|
"credit_lines",
|
||||||
],
|
],
|
||||||
relations: ["items"],
|
relations: ["items", "credit_lines"],
|
||||||
})
|
})
|
||||||
|
|
||||||
const serializedRevertedOrder = JSON.parse(
|
const serializedRevertedOrder = JSON.parse(
|
||||||
@@ -710,6 +729,8 @@ moduleIntegrationTestRunner<IOrderModuleService>({
|
|||||||
expect(serializedRevertedOrder.shipping_methods).toHaveLength(1)
|
expect(serializedRevertedOrder.shipping_methods).toHaveLength(1)
|
||||||
expect(serializedRevertedOrder.shipping_methods[0].amount).toEqual(10)
|
expect(serializedRevertedOrder.shipping_methods[0].amount).toEqual(10)
|
||||||
|
|
||||||
|
expect(serializedRevertedOrder.credit_lines).toHaveLength(0)
|
||||||
|
|
||||||
expect(serializedRevertedOrder.items).toEqual(
|
expect(serializedRevertedOrder.items).toEqual(
|
||||||
expect.arrayContaining([
|
expect.arrayContaining([
|
||||||
expect.objectContaining({
|
expect.objectContaining({
|
||||||
|
|||||||
@@ -490,6 +490,7 @@
|
|||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"referencedTableName": "public.order_address",
|
"referencedTableName": "public.order_address",
|
||||||
|
"createForeignKeyConstraint": true,
|
||||||
"deleteRule": "set null",
|
"deleteRule": "set null",
|
||||||
"updateRule": "cascade"
|
"updateRule": "cascade"
|
||||||
},
|
},
|
||||||
@@ -503,6 +504,7 @@
|
|||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"referencedTableName": "public.order_address",
|
"referencedTableName": "public.order_address",
|
||||||
|
"createForeignKeyConstraint": true,
|
||||||
"deleteRule": "set null",
|
"deleteRule": "set null",
|
||||||
"updateRule": "cascade"
|
"updateRule": "cascade"
|
||||||
}
|
}
|
||||||
@@ -843,6 +845,7 @@
|
|||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"referencedTableName": "public.order",
|
"referencedTableName": "public.order",
|
||||||
|
"createForeignKeyConstraint": true,
|
||||||
"updateRule": "cascade"
|
"updateRule": "cascade"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -1127,6 +1130,7 @@
|
|||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"referencedTableName": "public.order_change",
|
"referencedTableName": "public.order_change",
|
||||||
|
"createForeignKeyConstraint": true,
|
||||||
"deleteRule": "cascade",
|
"deleteRule": "cascade",
|
||||||
"updateRule": "cascade"
|
"updateRule": "cascade"
|
||||||
}
|
}
|
||||||
@@ -1144,14 +1148,15 @@
|
|||||||
"nullable": false,
|
"nullable": false,
|
||||||
"mappedType": "text"
|
"mappedType": "text"
|
||||||
},
|
},
|
||||||
"order_id": {
|
"version": {
|
||||||
"name": "order_id",
|
"name": "version",
|
||||||
"type": "text",
|
"type": "integer",
|
||||||
"unsigned": false,
|
"unsigned": false,
|
||||||
"autoincrement": false,
|
"autoincrement": false,
|
||||||
"primary": false,
|
"primary": false,
|
||||||
"nullable": false,
|
"nullable": false,
|
||||||
"mappedType": "text"
|
"default": "1",
|
||||||
|
"mappedType": "integer"
|
||||||
},
|
},
|
||||||
"reference": {
|
"reference": {
|
||||||
"name": "reference",
|
"name": "reference",
|
||||||
@@ -1198,6 +1203,15 @@
|
|||||||
"nullable": true,
|
"nullable": true,
|
||||||
"mappedType": "json"
|
"mappedType": "json"
|
||||||
},
|
},
|
||||||
|
"order_id": {
|
||||||
|
"name": "order_id",
|
||||||
|
"type": "text",
|
||||||
|
"unsigned": false,
|
||||||
|
"autoincrement": false,
|
||||||
|
"primary": false,
|
||||||
|
"nullable": false,
|
||||||
|
"mappedType": "text"
|
||||||
|
},
|
||||||
"created_at": {
|
"created_at": {
|
||||||
"name": "created_at",
|
"name": "created_at",
|
||||||
"type": "timestamptz",
|
"type": "timestamptz",
|
||||||
@@ -1252,6 +1266,15 @@
|
|||||||
"unique": false,
|
"unique": false,
|
||||||
"expression": "CREATE INDEX IF NOT EXISTS \"IDX_order_credit_line_deleted_at\" ON \"order_credit_line\" (deleted_at) WHERE deleted_at IS NULL"
|
"expression": "CREATE INDEX IF NOT EXISTS \"IDX_order_credit_line_deleted_at\" ON \"order_credit_line\" (deleted_at) WHERE deleted_at IS NULL"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"keyName": "IDX_order_credit_line_order_id_version",
|
||||||
|
"columnNames": [],
|
||||||
|
"composite": false,
|
||||||
|
"constraint": false,
|
||||||
|
"primary": false,
|
||||||
|
"unique": false,
|
||||||
|
"expression": "CREATE INDEX IF NOT EXISTS \"IDX_order_credit_line_order_id_version\" ON \"order_credit_line\" (order_id, version) WHERE deleted_at IS NULL"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"keyName": "IDX_order_credit_line_deleted_at",
|
"keyName": "IDX_order_credit_line_deleted_at",
|
||||||
"columnNames": [],
|
"columnNames": [],
|
||||||
@@ -1284,6 +1307,7 @@
|
|||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"referencedTableName": "public.order",
|
"referencedTableName": "public.order",
|
||||||
|
"createForeignKeyConstraint": true,
|
||||||
"deleteRule": "cascade",
|
"deleteRule": "cascade",
|
||||||
"updateRule": "cascade"
|
"updateRule": "cascade"
|
||||||
}
|
}
|
||||||
@@ -1975,6 +1999,7 @@
|
|||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"referencedTableName": "public.order",
|
"referencedTableName": "public.order",
|
||||||
|
"createForeignKeyConstraint": true,
|
||||||
"deleteRule": "cascade",
|
"deleteRule": "cascade",
|
||||||
"updateRule": "cascade"
|
"updateRule": "cascade"
|
||||||
},
|
},
|
||||||
@@ -1988,6 +2013,7 @@
|
|||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"referencedTableName": "public.order_line_item",
|
"referencedTableName": "public.order_line_item",
|
||||||
|
"createForeignKeyConstraint": true,
|
||||||
"updateRule": "cascade"
|
"updateRule": "cascade"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -2163,6 +2189,7 @@
|
|||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"referencedTableName": "public.order_line_item",
|
"referencedTableName": "public.order_line_item",
|
||||||
|
"createForeignKeyConstraint": true,
|
||||||
"deleteRule": "cascade",
|
"deleteRule": "cascade",
|
||||||
"updateRule": "cascade"
|
"updateRule": "cascade"
|
||||||
}
|
}
|
||||||
@@ -2320,6 +2347,7 @@
|
|||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"referencedTableName": "public.order_line_item",
|
"referencedTableName": "public.order_line_item",
|
||||||
|
"createForeignKeyConstraint": true,
|
||||||
"deleteRule": "cascade",
|
"deleteRule": "cascade",
|
||||||
"updateRule": "cascade"
|
"updateRule": "cascade"
|
||||||
}
|
}
|
||||||
@@ -2640,6 +2668,7 @@
|
|||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"referencedTableName": "public.order_shipping_method",
|
"referencedTableName": "public.order_shipping_method",
|
||||||
|
"createForeignKeyConstraint": true,
|
||||||
"deleteRule": "cascade",
|
"deleteRule": "cascade",
|
||||||
"updateRule": "cascade"
|
"updateRule": "cascade"
|
||||||
}
|
}
|
||||||
@@ -2797,6 +2826,7 @@
|
|||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"referencedTableName": "public.order_shipping_method",
|
"referencedTableName": "public.order_shipping_method",
|
||||||
|
"createForeignKeyConstraint": true,
|
||||||
"deleteRule": "cascade",
|
"deleteRule": "cascade",
|
||||||
"updateRule": "cascade"
|
"updateRule": "cascade"
|
||||||
}
|
}
|
||||||
@@ -2937,6 +2967,7 @@
|
|||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"referencedTableName": "public.order",
|
"referencedTableName": "public.order",
|
||||||
|
"createForeignKeyConstraint": true,
|
||||||
"deleteRule": "cascade",
|
"deleteRule": "cascade",
|
||||||
"updateRule": "cascade"
|
"updateRule": "cascade"
|
||||||
}
|
}
|
||||||
@@ -3213,6 +3244,7 @@
|
|||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"referencedTableName": "public.order",
|
"referencedTableName": "public.order",
|
||||||
|
"createForeignKeyConstraint": true,
|
||||||
"updateRule": "cascade"
|
"updateRule": "cascade"
|
||||||
},
|
},
|
||||||
"return_exchange_id_foreign": {
|
"return_exchange_id_foreign": {
|
||||||
@@ -3225,6 +3257,7 @@
|
|||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"referencedTableName": "public.order_exchange",
|
"referencedTableName": "public.order_exchange",
|
||||||
|
"createForeignKeyConstraint": true,
|
||||||
"deleteRule": "set null",
|
"deleteRule": "set null",
|
||||||
"updateRule": "cascade"
|
"updateRule": "cascade"
|
||||||
},
|
},
|
||||||
@@ -3238,6 +3271,7 @@
|
|||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"referencedTableName": "public.order_claim",
|
"referencedTableName": "public.order_claim",
|
||||||
|
"createForeignKeyConstraint": true,
|
||||||
"deleteRule": "set null",
|
"deleteRule": "set null",
|
||||||
"updateRule": "cascade"
|
"updateRule": "cascade"
|
||||||
}
|
}
|
||||||
@@ -3460,6 +3494,7 @@
|
|||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"referencedTableName": "public.order",
|
"referencedTableName": "public.order",
|
||||||
|
"createForeignKeyConstraint": true,
|
||||||
"updateRule": "cascade"
|
"updateRule": "cascade"
|
||||||
},
|
},
|
||||||
"order_exchange_return_id_foreign": {
|
"order_exchange_return_id_foreign": {
|
||||||
@@ -3472,6 +3507,7 @@
|
|||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"referencedTableName": "public.return",
|
"referencedTableName": "public.return",
|
||||||
|
"createForeignKeyConstraint": true,
|
||||||
"deleteRule": "set null",
|
"deleteRule": "set null",
|
||||||
"updateRule": "cascade"
|
"updateRule": "cascade"
|
||||||
}
|
}
|
||||||
@@ -3638,6 +3674,7 @@
|
|||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"referencedTableName": "public.order_exchange",
|
"referencedTableName": "public.order_exchange",
|
||||||
|
"createForeignKeyConstraint": true,
|
||||||
"deleteRule": "cascade",
|
"deleteRule": "cascade",
|
||||||
"updateRule": "cascade"
|
"updateRule": "cascade"
|
||||||
},
|
},
|
||||||
@@ -3651,6 +3688,7 @@
|
|||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"referencedTableName": "public.order_line_item",
|
"referencedTableName": "public.order_line_item",
|
||||||
|
"createForeignKeyConstraint": true,
|
||||||
"updateRule": "cascade"
|
"updateRule": "cascade"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -3875,6 +3913,7 @@
|
|||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"referencedTableName": "public.order",
|
"referencedTableName": "public.order",
|
||||||
|
"createForeignKeyConstraint": true,
|
||||||
"updateRule": "cascade"
|
"updateRule": "cascade"
|
||||||
},
|
},
|
||||||
"order_claim_return_id_foreign": {
|
"order_claim_return_id_foreign": {
|
||||||
@@ -3887,6 +3926,7 @@
|
|||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"referencedTableName": "public.return",
|
"referencedTableName": "public.return",
|
||||||
|
"createForeignKeyConstraint": true,
|
||||||
"deleteRule": "set null",
|
"deleteRule": "set null",
|
||||||
"updateRule": "cascade"
|
"updateRule": "cascade"
|
||||||
}
|
}
|
||||||
@@ -4162,6 +4202,7 @@
|
|||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"referencedTableName": "public.order",
|
"referencedTableName": "public.order",
|
||||||
|
"createForeignKeyConstraint": true,
|
||||||
"deleteRule": "cascade",
|
"deleteRule": "cascade",
|
||||||
"updateRule": "cascade"
|
"updateRule": "cascade"
|
||||||
},
|
},
|
||||||
@@ -4175,6 +4216,7 @@
|
|||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"referencedTableName": "public.return",
|
"referencedTableName": "public.return",
|
||||||
|
"createForeignKeyConstraint": true,
|
||||||
"deleteRule": "cascade",
|
"deleteRule": "cascade",
|
||||||
"updateRule": "cascade"
|
"updateRule": "cascade"
|
||||||
},
|
},
|
||||||
@@ -4188,6 +4230,7 @@
|
|||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"referencedTableName": "public.order_exchange",
|
"referencedTableName": "public.order_exchange",
|
||||||
|
"createForeignKeyConstraint": true,
|
||||||
"deleteRule": "cascade",
|
"deleteRule": "cascade",
|
||||||
"updateRule": "cascade"
|
"updateRule": "cascade"
|
||||||
},
|
},
|
||||||
@@ -4201,6 +4244,7 @@
|
|||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"referencedTableName": "public.order_claim",
|
"referencedTableName": "public.order_claim",
|
||||||
|
"createForeignKeyConstraint": true,
|
||||||
"deleteRule": "cascade",
|
"deleteRule": "cascade",
|
||||||
"updateRule": "cascade"
|
"updateRule": "cascade"
|
||||||
}
|
}
|
||||||
@@ -4431,6 +4475,7 @@
|
|||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"referencedTableName": "public.order",
|
"referencedTableName": "public.order",
|
||||||
|
"createForeignKeyConstraint": true,
|
||||||
"deleteRule": "cascade",
|
"deleteRule": "cascade",
|
||||||
"updateRule": "cascade"
|
"updateRule": "cascade"
|
||||||
},
|
},
|
||||||
@@ -4444,6 +4489,7 @@
|
|||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"referencedTableName": "public.return",
|
"referencedTableName": "public.return",
|
||||||
|
"createForeignKeyConstraint": true,
|
||||||
"deleteRule": "cascade",
|
"deleteRule": "cascade",
|
||||||
"updateRule": "cascade"
|
"updateRule": "cascade"
|
||||||
},
|
},
|
||||||
@@ -4457,6 +4503,7 @@
|
|||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"referencedTableName": "public.order_exchange",
|
"referencedTableName": "public.order_exchange",
|
||||||
|
"createForeignKeyConstraint": true,
|
||||||
"deleteRule": "set null",
|
"deleteRule": "set null",
|
||||||
"updateRule": "cascade"
|
"updateRule": "cascade"
|
||||||
},
|
},
|
||||||
@@ -4470,6 +4517,7 @@
|
|||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"referencedTableName": "public.order_claim",
|
"referencedTableName": "public.order_claim",
|
||||||
|
"createForeignKeyConstraint": true,
|
||||||
"deleteRule": "set null",
|
"deleteRule": "set null",
|
||||||
"updateRule": "cascade"
|
"updateRule": "cascade"
|
||||||
},
|
},
|
||||||
@@ -4483,6 +4531,7 @@
|
|||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"referencedTableName": "public.order_shipping_method",
|
"referencedTableName": "public.order_shipping_method",
|
||||||
|
"createForeignKeyConstraint": true,
|
||||||
"updateRule": "cascade"
|
"updateRule": "cascade"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -4673,6 +4722,7 @@
|
|||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"referencedTableName": "public.order_claim",
|
"referencedTableName": "public.order_claim",
|
||||||
|
"createForeignKeyConstraint": true,
|
||||||
"deleteRule": "cascade",
|
"deleteRule": "cascade",
|
||||||
"updateRule": "cascade"
|
"updateRule": "cascade"
|
||||||
},
|
},
|
||||||
@@ -4686,6 +4736,7 @@
|
|||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"referencedTableName": "public.order_line_item",
|
"referencedTableName": "public.order_line_item",
|
||||||
|
"createForeignKeyConstraint": true,
|
||||||
"updateRule": "cascade"
|
"updateRule": "cascade"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -4815,6 +4866,7 @@
|
|||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"referencedTableName": "public.order_claim_item",
|
"referencedTableName": "public.order_claim_item",
|
||||||
|
"createForeignKeyConstraint": true,
|
||||||
"deleteRule": "cascade",
|
"deleteRule": "cascade",
|
||||||
"updateRule": "cascade"
|
"updateRule": "cascade"
|
||||||
}
|
}
|
||||||
@@ -4972,6 +5024,7 @@
|
|||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"referencedTableName": "public.return_reason",
|
"referencedTableName": "public.return_reason",
|
||||||
|
"createForeignKeyConstraint": true,
|
||||||
"deleteRule": "set null",
|
"deleteRule": "set null",
|
||||||
"updateRule": "cascade"
|
"updateRule": "cascade"
|
||||||
}
|
}
|
||||||
@@ -5194,6 +5247,7 @@
|
|||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"referencedTableName": "public.return_reason",
|
"referencedTableName": "public.return_reason",
|
||||||
|
"createForeignKeyConstraint": true,
|
||||||
"deleteRule": "set null",
|
"deleteRule": "set null",
|
||||||
"updateRule": "cascade"
|
"updateRule": "cascade"
|
||||||
},
|
},
|
||||||
@@ -5207,6 +5261,7 @@
|
|||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"referencedTableName": "public.return",
|
"referencedTableName": "public.return",
|
||||||
|
"createForeignKeyConstraint": true,
|
||||||
"deleteRule": "cascade",
|
"deleteRule": "cascade",
|
||||||
"updateRule": "cascade"
|
"updateRule": "cascade"
|
||||||
},
|
},
|
||||||
@@ -5220,6 +5275,7 @@
|
|||||||
"id"
|
"id"
|
||||||
],
|
],
|
||||||
"referencedTableName": "public.order_line_item",
|
"referencedTableName": "public.order_line_item",
|
||||||
|
"createForeignKeyConstraint": true,
|
||||||
"updateRule": "cascade"
|
"updateRule": "cascade"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
import { Migration } from "@mikro-orm/migrations"
|
||||||
|
|
||||||
|
export class Migration20251016182939 extends Migration {
|
||||||
|
override async up(): Promise<void> {
|
||||||
|
// Step 1: Add the column
|
||||||
|
this.addSql(`
|
||||||
|
alter table if exists "order_credit_line"
|
||||||
|
add column if not exists "version" integer default null;
|
||||||
|
`)
|
||||||
|
|
||||||
|
// Step 2: Populate the version column from the related order table
|
||||||
|
this.addSql(`
|
||||||
|
update "order_credit_line" ocl
|
||||||
|
set "version" = o."version"
|
||||||
|
from "order" o
|
||||||
|
where ocl."order_id" = o."id";
|
||||||
|
`)
|
||||||
|
|
||||||
|
// Step 3: Set NOT NULL and default AFTER backfilling
|
||||||
|
this.addSql(`
|
||||||
|
alter table if exists "order_credit_line"
|
||||||
|
alter column "version" set not null,
|
||||||
|
alter column "version" set default 1;
|
||||||
|
`)
|
||||||
|
|
||||||
|
// Step 4: Add index for performance
|
||||||
|
this.addSql(`
|
||||||
|
create index if not exists "IDX_order_credit_line_order_id_version"
|
||||||
|
on "order_credit_line" (order_id, version)
|
||||||
|
where deleted_at is null;
|
||||||
|
`)
|
||||||
|
}
|
||||||
|
|
||||||
|
override async down(): Promise<void> {
|
||||||
|
this.addSql(
|
||||||
|
`drop index if exists "IDX_order_credit_line_order_id_version";`
|
||||||
|
)
|
||||||
|
this.addSql(
|
||||||
|
`alter table if exists "order_credit_line" drop column if exists "version";`
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,14 +4,15 @@ import { Order } from "./order"
|
|||||||
const OrderCreditLine_ = model
|
const OrderCreditLine_ = model
|
||||||
.define("OrderCreditLine", {
|
.define("OrderCreditLine", {
|
||||||
id: model.id({ prefix: "ordcl" }).primaryKey(),
|
id: model.id({ prefix: "ordcl" }).primaryKey(),
|
||||||
order: model.belongsTo(() => Order, {
|
version: model.number().default(1),
|
||||||
mappedBy: "credit_lines",
|
|
||||||
}),
|
|
||||||
reference: model.text().nullable(),
|
reference: model.text().nullable(),
|
||||||
reference_id: model.text().nullable(),
|
reference_id: model.text().nullable(),
|
||||||
amount: model.bigNumber(),
|
amount: model.bigNumber(),
|
||||||
raw_amount: model.json(),
|
raw_amount: model.json(),
|
||||||
metadata: model.json().nullable(),
|
metadata: model.json().nullable(),
|
||||||
|
order: model.belongsTo(() => Order, {
|
||||||
|
mappedBy: "credit_lines",
|
||||||
|
}),
|
||||||
})
|
})
|
||||||
.indexes([
|
.indexes([
|
||||||
{
|
{
|
||||||
@@ -20,6 +21,12 @@ const OrderCreditLine_ = model
|
|||||||
unique: false,
|
unique: false,
|
||||||
where: "deleted_at IS NULL",
|
where: "deleted_at IS NULL",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "IDX_order_credit_line_order_id_version",
|
||||||
|
on: ["order_id", "version"],
|
||||||
|
unique: false,
|
||||||
|
where: "deleted_at IS NULL",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "IDX_order_credit_line_deleted_at",
|
name: "IDX_order_credit_line_deleted_at",
|
||||||
on: ["deleted_at"],
|
on: ["deleted_at"],
|
||||||
|
|||||||
@@ -3116,6 +3116,21 @@ export default class OrderModuleService
|
|||||||
this.orderShippingService_.softDelete(orderShippingIds, sharedContext)
|
this.orderShippingService_.softDelete(orderShippingIds, sharedContext)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Order Credit Lines
|
||||||
|
const orderCreditLines = await this.orderCreditLineService_.list(
|
||||||
|
{
|
||||||
|
order_id: order.id,
|
||||||
|
version: currentVersion,
|
||||||
|
},
|
||||||
|
{ select: ["id", "version"] },
|
||||||
|
sharedContext
|
||||||
|
)
|
||||||
|
const orderCreditLineIds = orderCreditLines.map((cl) => cl.id)
|
||||||
|
|
||||||
|
updatePromises.push(
|
||||||
|
this.orderCreditLineService_.softDelete(orderCreditLineIds, sharedContext)
|
||||||
|
)
|
||||||
|
|
||||||
// Order
|
// Order
|
||||||
updatePromises.push(
|
updatePromises.push(
|
||||||
this.orderService_.update(
|
this.orderService_.update(
|
||||||
@@ -3220,6 +3235,21 @@ export default class OrderModuleService
|
|||||||
this.orderShippingService_.softDelete(orderShippingIds, sharedContext)
|
this.orderShippingService_.softDelete(orderShippingIds, sharedContext)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Order Credit Lines
|
||||||
|
const orderCreditLines = await this.orderCreditLineService_.list(
|
||||||
|
{
|
||||||
|
order_id: order.id,
|
||||||
|
version: currentVersion,
|
||||||
|
},
|
||||||
|
{ select: ["id", "version"] },
|
||||||
|
sharedContext
|
||||||
|
)
|
||||||
|
const orderCreditLineIds = orderCreditLines.map((cl) => cl.id)
|
||||||
|
|
||||||
|
updatePromises.push(
|
||||||
|
this.orderCreditLineService_.softDelete(orderCreditLineIds, sharedContext)
|
||||||
|
)
|
||||||
|
|
||||||
// Order
|
// Order
|
||||||
updatePromises.push(
|
updatePromises.push(
|
||||||
this.orderService_.update(
|
this.orderService_.update(
|
||||||
@@ -3487,7 +3517,7 @@ export default class OrderModuleService
|
|||||||
shippingMethodsToUpsert,
|
shippingMethodsToUpsert,
|
||||||
summariesToUpsert,
|
summariesToUpsert,
|
||||||
orderToUpdate,
|
orderToUpdate,
|
||||||
creditLinesToCreate,
|
creditLinesToUpsert,
|
||||||
} = await applyChangesToOrder(orders, actionsMap, {
|
} = await applyChangesToOrder(orders, actionsMap, {
|
||||||
addActionReferenceToObject: true,
|
addActionReferenceToObject: true,
|
||||||
includeTaxLinesAndAdjustementsToPreview: async (...args) => {
|
includeTaxLinesAndAdjustementsToPreview: async (...args) => {
|
||||||
@@ -3505,7 +3535,7 @@ export default class OrderModuleService
|
|||||||
orderItems,
|
orderItems,
|
||||||
_orderSummaryUpdate,
|
_orderSummaryUpdate,
|
||||||
orderShippingMethods,
|
orderShippingMethods,
|
||||||
createdOrderCreditLines,
|
orderCreditLines,
|
||||||
] = await promiseAll([
|
] = await promiseAll([
|
||||||
orderToUpdate.length
|
orderToUpdate.length
|
||||||
? this.orderService_.update(orderToUpdate, sharedContext)
|
? this.orderService_.update(orderToUpdate, sharedContext)
|
||||||
@@ -3525,9 +3555,9 @@ export default class OrderModuleService
|
|||||||
sharedContext
|
sharedContext
|
||||||
)
|
)
|
||||||
: null,
|
: null,
|
||||||
creditLinesToCreate.length
|
creditLinesToUpsert.length
|
||||||
? this.orderCreditLineService_.create(
|
? this.orderCreditLineService_.upsert(
|
||||||
creditLinesToCreate,
|
creditLinesToUpsert,
|
||||||
sharedContext
|
sharedContext
|
||||||
)
|
)
|
||||||
: null,
|
: null,
|
||||||
@@ -3536,7 +3566,7 @@ export default class OrderModuleService
|
|||||||
return {
|
return {
|
||||||
items: orderItems ?? [],
|
items: orderItems ?? [],
|
||||||
shipping_methods: orderShippingMethods ?? [],
|
shipping_methods: orderShippingMethods ?? [],
|
||||||
credit_lines: createdOrderCreditLines ?? ([] as any),
|
credit_lines: orderCreditLines ?? ([] as any),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,17 +1,16 @@
|
|||||||
import {
|
import {
|
||||||
CreateOrderCreditLineDTO,
|
|
||||||
InferEntityType,
|
InferEntityType,
|
||||||
OrderChangeActionDTO,
|
OrderChangeActionDTO,
|
||||||
OrderDTO,
|
OrderDTO,
|
||||||
} from "@medusajs/framework/types"
|
} from "@medusajs/framework/types"
|
||||||
import {
|
import {
|
||||||
ChangeActionType,
|
ChangeActionType,
|
||||||
MathBN,
|
|
||||||
createRawPropertiesFromBigNumber,
|
createRawPropertiesFromBigNumber,
|
||||||
decorateCartTotals,
|
decorateCartTotals,
|
||||||
isDefined,
|
isDefined,
|
||||||
|
MathBN,
|
||||||
} from "@medusajs/framework/utils"
|
} from "@medusajs/framework/utils"
|
||||||
import { OrderItem, OrderShippingMethod } from "@models"
|
import { OrderCreditLine, OrderItem, OrderShippingMethod } from "@models"
|
||||||
import { calculateOrderChange } from "./calculate-order-change"
|
import { calculateOrderChange } from "./calculate-order-change"
|
||||||
|
|
||||||
export interface ApplyOrderChangeDTO extends OrderChangeActionDTO {
|
export interface ApplyOrderChangeDTO extends OrderChangeActionDTO {
|
||||||
@@ -30,7 +29,7 @@ export async function applyChangesToOrder(
|
|||||||
}
|
}
|
||||||
) {
|
) {
|
||||||
const itemsToUpsert: InferEntityType<typeof OrderItem>[] = []
|
const itemsToUpsert: InferEntityType<typeof OrderItem>[] = []
|
||||||
const creditLinesToCreate: CreateOrderCreditLineDTO[] = []
|
const creditLinesToUpsert: InferEntityType<typeof OrderCreditLine>[] = []
|
||||||
const shippingMethodsToUpsert: InferEntityType<typeof OrderShippingMethod>[] =
|
const shippingMethodsToUpsert: InferEntityType<typeof OrderShippingMethod>[] =
|
||||||
[]
|
[]
|
||||||
const summariesToUpsert: any[] = []
|
const summariesToUpsert: any[] = []
|
||||||
@@ -98,23 +97,29 @@ export async function applyChangesToOrder(
|
|||||||
itemsToUpsert.push(itemToUpsert)
|
itemsToUpsert.push(itemToUpsert)
|
||||||
}
|
}
|
||||||
|
|
||||||
const creditLines = (calculated.order.credit_lines ?? []).filter(
|
if (version > order.version) {
|
||||||
(creditLine) => !("id" in creditLine)
|
// Handle credit line versioning
|
||||||
)
|
for (const creditLine of calculated.order.credit_lines ?? []) {
|
||||||
|
const creditLine_ = creditLine as any
|
||||||
|
if (!creditLine_) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
for (const creditLine of creditLines) {
|
const upsertCreditLine = {
|
||||||
const creditLineToCreate = {
|
id: creditLine_.version === version ? creditLine_.id : undefined,
|
||||||
order_id: order.id,
|
order_id: order.id,
|
||||||
amount: creditLine.amount,
|
version,
|
||||||
reference: creditLine.reference,
|
reference: creditLine_.reference,
|
||||||
reference_id: creditLine.reference_id,
|
reference_id: creditLine_.reference_id,
|
||||||
metadata: creditLine.metadata,
|
amount: creditLine_.amount,
|
||||||
|
raw_amount: creditLine_.raw_amount,
|
||||||
|
metadata: creditLine_.metadata,
|
||||||
|
} as any
|
||||||
|
|
||||||
|
creditLinesToUpsert.push(upsertCreditLine)
|
||||||
}
|
}
|
||||||
|
|
||||||
creditLinesToCreate.push(creditLineToCreate)
|
// Handle shipping method versioning
|
||||||
}
|
|
||||||
|
|
||||||
if (version > order.version) {
|
|
||||||
for (const shippingMethod of calculated.order.shipping_methods ?? []) {
|
for (const shippingMethod of calculated.order.shipping_methods ?? []) {
|
||||||
const shippingMethod_ = shippingMethod as any
|
const shippingMethod_ = shippingMethod as any
|
||||||
const isNewShippingMethod = !isDefined(shippingMethod_?.detail)
|
const isNewShippingMethod = !isDefined(shippingMethod_?.detail)
|
||||||
@@ -190,7 +195,7 @@ export async function applyChangesToOrder(
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
itemsToUpsert,
|
itemsToUpsert,
|
||||||
creditLinesToCreate,
|
creditLinesToUpsert,
|
||||||
shippingMethodsToUpsert,
|
shippingMethodsToUpsert,
|
||||||
summariesToUpsert,
|
summariesToUpsert,
|
||||||
orderToUpdate,
|
orderToUpdate,
|
||||||
|
|||||||
@@ -224,6 +224,11 @@ function configurePopulateWhere(
|
|||||||
popWhere.summary.version = version
|
popWhere.summary.version = version
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (hasRelation("credit_lines")) {
|
||||||
|
popWhere.credit_lines ??= {}
|
||||||
|
popWhere.credit_lines.version = version
|
||||||
|
}
|
||||||
|
|
||||||
if (hasRelation("items") || hasRelation("order.items")) {
|
if (hasRelation("items") || hasRelation("order.items")) {
|
||||||
popWhere.items ??= {}
|
popWhere.items ??= {}
|
||||||
popWhere.items.version = version
|
popWhere.items.version = version
|
||||||
|
|||||||
Reference in New Issue
Block a user