@endora-commerce/mod-returns 0.100.0
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.
- package/LICENSE +21 -0
- package/README.md +60 -0
- package/dist/admin/api/returns-client.d.ts +69 -0
- package/dist/admin/api/returns-client.d.ts.map +1 -0
- package/dist/admin/api/returns-client.js +36 -0
- package/dist/admin/api/returns-client.js.map +1 -0
- package/dist/admin/index.d.ts +37 -0
- package/dist/admin/index.d.ts.map +1 -0
- package/dist/admin/index.js +57 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/admin/pages/ReturnDeliveryMethodsPage.d.ts +5 -0
- package/dist/admin/pages/ReturnDeliveryMethodsPage.d.ts.map +1 -0
- package/dist/admin/pages/ReturnDeliveryMethodsPage.js +44 -0
- package/dist/admin/pages/ReturnDeliveryMethodsPage.js.map +1 -0
- package/dist/admin/pages/ReturnDetail.d.ts +5 -0
- package/dist/admin/pages/ReturnDetail.d.ts.map +1 -0
- package/dist/admin/pages/ReturnDetail.js +115 -0
- package/dist/admin/pages/ReturnDetail.js.map +1 -0
- package/dist/admin/pages/ReturnReasonsPage.d.ts +5 -0
- package/dist/admin/pages/ReturnReasonsPage.d.ts.map +1 -0
- package/dist/admin/pages/ReturnReasonsPage.js +44 -0
- package/dist/admin/pages/ReturnReasonsPage.js.map +1 -0
- package/dist/admin/pages/ReturnStatusesConfigPage.d.ts +5 -0
- package/dist/admin/pages/ReturnStatusesConfigPage.d.ts.map +1 -0
- package/dist/admin/pages/ReturnStatusesConfigPage.js +71 -0
- package/dist/admin/pages/ReturnStatusesConfigPage.js.map +1 -0
- package/dist/admin/pages/ReturnsList.d.ts +5 -0
- package/dist/admin/pages/ReturnsList.d.ts.map +1 -0
- package/dist/admin/pages/ReturnsList.js +189 -0
- package/dist/admin/pages/ReturnsList.js.map +1 -0
- package/dist/backend/domain/default-reasons.d.ts +14 -0
- package/dist/backend/domain/default-reasons.d.ts.map +1 -0
- package/dist/backend/domain/default-reasons.js +9 -0
- package/dist/backend/domain/default-reasons.js.map +1 -0
- package/dist/backend/domain/free-return-window.d.ts +2 -0
- package/dist/backend/domain/free-return-window.d.ts.map +1 -0
- package/dist/backend/domain/free-return-window.js +19 -0
- package/dist/backend/domain/free-return-window.js.map +1 -0
- package/dist/backend/domain/refund-math.d.ts +19 -0
- package/dist/backend/domain/refund-math.d.ts.map +1 -0
- package/dist/backend/domain/refund-math.js +27 -0
- package/dist/backend/domain/refund-math.js.map +1 -0
- package/dist/backend/domain/return-status-graph.d.ts +91 -0
- package/dist/backend/domain/return-status-graph.d.ts.map +1 -0
- package/dist/backend/domain/return-status-graph.js +143 -0
- package/dist/backend/domain/return-status-graph.js.map +1 -0
- package/dist/backend/email-templates/return-authorized.d.ts +11 -0
- package/dist/backend/email-templates/return-authorized.d.ts.map +1 -0
- package/dist/backend/email-templates/return-authorized.js +18 -0
- package/dist/backend/email-templates/return-authorized.js.map +1 -0
- package/dist/backend/email-templates/return-rejected.d.ts +11 -0
- package/dist/backend/email-templates/return-rejected.d.ts.map +1 -0
- package/dist/backend/email-templates/return-rejected.js +20 -0
- package/dist/backend/email-templates/return-rejected.js.map +1 -0
- package/dist/backend/email-templates/transactional-defaults.d.ts +11 -0
- package/dist/backend/email-templates/transactional-defaults.d.ts.map +1 -0
- package/dist/backend/email-templates/transactional-defaults.js +64 -0
- package/dist/backend/email-templates/transactional-defaults.js.map +1 -0
- package/dist/backend/entities/refund.entity.d.ts +41 -0
- package/dist/backend/entities/refund.entity.d.ts.map +1 -0
- package/dist/backend/entities/refund.entity.js +122 -0
- package/dist/backend/entities/refund.entity.js.map +1 -0
- package/dist/backend/entities/return-case-attachment.entity.d.ts +16 -0
- package/dist/backend/entities/return-case-attachment.entity.d.ts.map +1 -0
- package/dist/backend/entities/return-case-attachment.entity.js +53 -0
- package/dist/backend/entities/return-case-attachment.entity.js.map +1 -0
- package/dist/backend/entities/return-case-comment.entity.d.ts +20 -0
- package/dist/backend/entities/return-case-comment.entity.d.ts.map +1 -0
- package/dist/backend/entities/return-case-comment.entity.js +70 -0
- package/dist/backend/entities/return-case-comment.entity.js.map +1 -0
- package/dist/backend/entities/return-case-item.entity.d.ts +25 -0
- package/dist/backend/entities/return-case-item.entity.d.ts.map +1 -0
- package/dist/backend/entities/return-case-item.entity.js +87 -0
- package/dist/backend/entities/return-case-item.entity.js.map +1 -0
- package/dist/backend/entities/return-case.entity.d.ts +41 -0
- package/dist/backend/entities/return-case.entity.d.ts.map +1 -0
- package/dist/backend/entities/return-case.entity.js +155 -0
- package/dist/backend/entities/return-case.entity.js.map +1 -0
- package/dist/backend/entities/return-delivery-method.entity.d.ts +18 -0
- package/dist/backend/entities/return-delivery-method.entity.d.ts.map +1 -0
- package/dist/backend/entities/return-delivery-method.entity.js +63 -0
- package/dist/backend/entities/return-delivery-method.entity.js.map +1 -0
- package/dist/backend/entities/return-list-saved-view.entity.d.ts +24 -0
- package/dist/backend/entities/return-list-saved-view.entity.d.ts.map +1 -0
- package/dist/backend/entities/return-list-saved-view.entity.js +74 -0
- package/dist/backend/entities/return-list-saved-view.entity.js.map +1 -0
- package/dist/backend/entities/return-reason.entity.d.ts +21 -0
- package/dist/backend/entities/return-reason.entity.d.ts.map +1 -0
- package/dist/backend/entities/return-reason.entity.js +65 -0
- package/dist/backend/entities/return-reason.entity.js.map +1 -0
- package/dist/backend/entities/return-shipment.entity.d.ts +22 -0
- package/dist/backend/entities/return-shipment.entity.d.ts.map +1 -0
- package/dist/backend/entities/return-shipment.entity.js +71 -0
- package/dist/backend/entities/return-shipment.entity.js.map +1 -0
- package/dist/backend/entities/return-status-transition.entity.d.ts +17 -0
- package/dist/backend/entities/return-status-transition.entity.d.ts.map +1 -0
- package/dist/backend/entities/return-status-transition.entity.js +55 -0
- package/dist/backend/entities/return-status-transition.entity.js.map +1 -0
- package/dist/backend/entities/return-status.entity.d.ts +29 -0
- package/dist/backend/entities/return-status.entity.d.ts.map +1 -0
- package/dist/backend/entities/return-status.entity.js +90 -0
- package/dist/backend/entities/return-status.entity.js.map +1 -0
- package/dist/backend/events/return-status-events.d.ts +44 -0
- package/dist/backend/events/return-status-events.d.ts.map +1 -0
- package/dist/backend/events/return-status-events.js +50 -0
- package/dist/backend/events/return-status-events.js.map +1 -0
- package/dist/backend/index.d.ts +106 -0
- package/dist/backend/index.d.ts.map +1 -0
- package/dist/backend/index.js +116 -0
- package/dist/backend/index.js.map +1 -0
- package/dist/backend/plugin.d.ts +33 -0
- package/dist/backend/plugin.d.ts.map +1 -0
- package/dist/backend/plugin.js +124 -0
- package/dist/backend/plugin.js.map +1 -0
- package/dist/backend/routes.admin.d.ts +38 -0
- package/dist/backend/routes.admin.d.ts.map +1 -0
- package/dist/backend/routes.admin.js +181 -0
- package/dist/backend/routes.admin.js.map +1 -0
- package/dist/backend/routes.customer.d.ts +22 -0
- package/dist/backend/routes.customer.d.ts.map +1 -0
- package/dist/backend/routes.customer.js +56 -0
- package/dist/backend/routes.customer.js.map +1 -0
- package/dist/backend/services/notification-context.d.ts +47 -0
- package/dist/backend/services/notification-context.d.ts.map +1 -0
- package/dist/backend/services/notification-context.js +49 -0
- package/dist/backend/services/notification-context.js.map +1 -0
- package/dist/backend/services/return-attachment-service.d.ts +20 -0
- package/dist/backend/services/return-attachment-service.d.ts.map +1 -0
- package/dist/backend/services/return-attachment-service.js +48 -0
- package/dist/backend/services/return-attachment-service.js.map +1 -0
- package/dist/backend/services/return-authorization-service.d.ts +53 -0
- package/dist/backend/services/return-authorization-service.d.ts.map +1 -0
- package/dist/backend/services/return-authorization-service.js +72 -0
- package/dist/backend/services/return-authorization-service.js.map +1 -0
- package/dist/backend/services/return-case-service.d.ts +44 -0
- package/dist/backend/services/return-case-service.d.ts.map +1 -0
- package/dist/backend/services/return-case-service.js +260 -0
- package/dist/backend/services/return-case-service.js.map +1 -0
- package/dist/backend/services/return-comment-service.d.ts +43 -0
- package/dist/backend/services/return-comment-service.d.ts.map +1 -0
- package/dist/backend/services/return-comment-service.js +109 -0
- package/dist/backend/services/return-comment-service.js.map +1 -0
- package/dist/backend/services/return-delivery-method-service.d.ts +44 -0
- package/dist/backend/services/return-delivery-method-service.d.ts.map +1 -0
- package/dist/backend/services/return-delivery-method-service.js +114 -0
- package/dist/backend/services/return-delivery-method-service.js.map +1 -0
- package/dist/backend/services/return-email-notifier.d.ts +89 -0
- package/dist/backend/services/return-email-notifier.d.ts.map +1 -0
- package/dist/backend/services/return-email-notifier.js +128 -0
- package/dist/backend/services/return-email-notifier.js.map +1 -0
- package/dist/backend/services/return-export-service.d.ts +16 -0
- package/dist/backend/services/return-export-service.d.ts.map +1 -0
- package/dist/backend/services/return-export-service.js +29 -0
- package/dist/backend/services/return-export-service.js.map +1 -0
- package/dist/backend/services/return-list-service.d.ts +27 -0
- package/dist/backend/services/return-list-service.d.ts.map +1 -0
- package/dist/backend/services/return-list-service.js +114 -0
- package/dist/backend/services/return-list-service.js.map +1 -0
- package/dist/backend/services/return-list-view-service.d.ts +36 -0
- package/dist/backend/services/return-list-view-service.d.ts.map +1 -0
- package/dist/backend/services/return-list-view-service.js +82 -0
- package/dist/backend/services/return-list-view-service.js.map +1 -0
- package/dist/backend/services/return-reason-service.d.ts +33 -0
- package/dist/backend/services/return-reason-service.d.ts.map +1 -0
- package/dist/backend/services/return-reason-service.js +90 -0
- package/dist/backend/services/return-reason-service.js.map +1 -0
- package/dist/backend/services/return-settlement-service.d.ts +67 -0
- package/dist/backend/services/return-settlement-service.d.ts.map +1 -0
- package/dist/backend/services/return-settlement-service.js +295 -0
- package/dist/backend/services/return-settlement-service.js.map +1 -0
- package/dist/backend/services/return-shipment-service.d.ts +40 -0
- package/dist/backend/services/return-shipment-service.d.ts.map +1 -0
- package/dist/backend/services/return-shipment-service.js +113 -0
- package/dist/backend/services/return-shipment-service.js.map +1 -0
- package/dist/backend/services/return-status-graph-service.d.ts +59 -0
- package/dist/backend/services/return-status-graph-service.d.ts.map +1 -0
- package/dist/backend/services/return-status-graph-service.js +197 -0
- package/dist/backend/services/return-status-graph-service.js.map +1 -0
- package/dist/backend/services/return-transition-service.d.ts +48 -0
- package/dist/backend/services/return-transition-service.d.ts.map +1 -0
- package/dist/backend/services/return-transition-service.js +116 -0
- package/dist/backend/services/return-transition-service.js.map +1 -0
- package/dist/backend/services/returns-seeder.d.ts +18 -0
- package/dist/backend/services/returns-seeder.d.ts.map +1 -0
- package/dist/backend/services/returns-seeder.js +63 -0
- package/dist/backend/services/returns-seeder.js.map +1 -0
- package/dist/backend/services/rma-number-generator.d.ts +35 -0
- package/dist/backend/services/rma-number-generator.d.ts.map +1 -0
- package/dist/backend/services/rma-number-generator.js +45 -0
- package/dist/backend/services/rma-number-generator.js.map +1 -0
- package/dist/manifest.d.ts +182 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +216 -0
- package/dist/manifest.js.map +1 -0
- package/dist/migrations/20260625T144227_returns_init.d.ts +15 -0
- package/dist/migrations/20260625T144227_returns_init.d.ts.map +1 -0
- package/dist/migrations/20260625T144227_returns_init.js +241 -0
- package/dist/migrations/20260625T144227_returns_init.js.map +1 -0
- package/dist/migrations/20260817T203206_returns_refund_corrective_invoice_outcome.d.ts +25 -0
- package/dist/migrations/20260817T203206_returns_refund_corrective_invoice_outcome.d.ts.map +1 -0
- package/dist/migrations/20260817T203206_returns_refund_corrective_invoice_outcome.js +46 -0
- package/dist/migrations/20260817T203206_returns_refund_corrective_invoice_outcome.js.map +1 -0
- package/dist/migrations/index.d.ts +28 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +31 -0
- package/dist/migrations/index.js.map +1 -0
- package/docs/returns.md +103 -0
- package/i18n/en.json +28 -0
- package/i18n/pl.json +28 -0
- package/package.json +101 -0
- package/tailwind.css +14 -0
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Return/complaint status graph — pure domain (feature 046, US3).
|
|
3
|
+
*
|
|
4
|
+
* The RMA case lifecycle is admin-configurable (FR-010..FR-014): a set of
|
|
5
|
+
* statuses and a set of allowed directed transitions between them. This module
|
|
6
|
+
* holds the pure, DB-free representation and validation logic, mirroring the
|
|
7
|
+
* orders module's `domain/order-status-graph.ts`. The DB-backed loader
|
|
8
|
+
* (`ReturnStatusGraphService`) builds a `ReturnStatusGraph` from persisted rows;
|
|
9
|
+
* this value object answers "is this transition allowed?" and enforces the
|
|
10
|
+
* structural invariants (single initial status, terminal statuses have no exit).
|
|
11
|
+
*
|
|
12
|
+
* Unlike the orders graph, the returns graph has no universal `on_hold` edge —
|
|
13
|
+
* the default flow is linear (new → authorized → received → resolved → closed)
|
|
14
|
+
* with rejection and cancellation as terminal off-ramps (data-model.md).
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Resolve a status's display label for a viewer's active language, falling back
|
|
18
|
+
* to the language-independent default name, then the code.
|
|
19
|
+
*/
|
|
20
|
+
export function resolveReturnStatusName(def, language) {
|
|
21
|
+
return def.name[language] ?? (def.defaultName || undefined) ?? def.code;
|
|
22
|
+
}
|
|
23
|
+
export const RETURN_STATUS_INITIAL = 'new';
|
|
24
|
+
export const RETURN_STATUS_AUTHORIZED = 'authorized';
|
|
25
|
+
export const RETURN_STATUS_RECEIVED = 'received';
|
|
26
|
+
export const RETURN_STATUS_RESOLVED = 'resolved';
|
|
27
|
+
export const RETURN_STATUS_REJECTED = 'rejected';
|
|
28
|
+
export const RETURN_STATUS_CLOSED = 'closed';
|
|
29
|
+
export const RETURN_STATUS_CANCELLED = 'cancelled';
|
|
30
|
+
/** The default statuses shipped on install (data-model.md). */
|
|
31
|
+
export const DEFAULT_RETURN_STATUSES = [
|
|
32
|
+
{ code: 'new', name: { en: 'New', pl: 'Nowe' }, defaultName: 'New', isInitial: true, isTerminal: false, isSystem: true, weight: 10, color: '#64748b' },
|
|
33
|
+
{ code: 'authorized', name: { en: 'Authorized', pl: 'Autoryzowane' }, defaultName: 'Authorized', isInitial: false, isTerminal: false, isSystem: true, weight: 20, color: '#3b82f6' },
|
|
34
|
+
{ code: 'received', name: { en: 'Received', pl: 'Odebrane' }, defaultName: 'Received', isInitial: false, isTerminal: false, isSystem: true, weight: 30, color: '#8b5cf6' },
|
|
35
|
+
{ code: 'resolved', name: { en: 'Resolved', pl: 'Rozliczone' }, defaultName: 'Resolved', isInitial: false, isTerminal: false, isSystem: true, weight: 40, color: '#10b981' },
|
|
36
|
+
{ code: 'rejected', name: { en: 'Rejected', pl: 'Odrzucone' }, defaultName: 'Rejected', isInitial: false, isTerminal: true, isSystem: true, weight: 50, color: '#ef4444' },
|
|
37
|
+
{ code: 'closed', name: { en: 'Closed', pl: 'Zamknięte' }, defaultName: 'Closed', isInitial: false, isTerminal: true, isSystem: true, weight: 60, color: '#10b981' },
|
|
38
|
+
{ code: 'cancelled', name: { en: 'Cancelled', pl: 'Anulowane' }, defaultName: 'Cancelled', isInitial: false, isTerminal: true, isSystem: true, weight: 70, color: '#ef4444' },
|
|
39
|
+
];
|
|
40
|
+
/** The default transitions (User Story 3). */
|
|
41
|
+
export const DEFAULT_EXPLICIT_TRANSITIONS = [
|
|
42
|
+
['new', 'authorized'],
|
|
43
|
+
['new', 'rejected'],
|
|
44
|
+
['new', 'cancelled'],
|
|
45
|
+
['authorized', 'received'],
|
|
46
|
+
['authorized', 'cancelled'],
|
|
47
|
+
['authorized', 'rejected'],
|
|
48
|
+
['received', 'resolved'],
|
|
49
|
+
['received', 'rejected'],
|
|
50
|
+
['resolved', 'closed'],
|
|
51
|
+
];
|
|
52
|
+
/** The full default transition set. */
|
|
53
|
+
export function computeDefaultTransitions() {
|
|
54
|
+
return DEFAULT_EXPLICIT_TRANSITIONS.map(([from, to]) => ({
|
|
55
|
+
fromStatusCode: from,
|
|
56
|
+
toStatusCode: to,
|
|
57
|
+
isSystem: true,
|
|
58
|
+
}));
|
|
59
|
+
}
|
|
60
|
+
export class ReturnStatusConfigError extends Error {
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Immutable, validated view of the configurable lifecycle. Build it once per
|
|
64
|
+
* read, then ask it questions.
|
|
65
|
+
*/
|
|
66
|
+
export class ReturnStatusGraph {
|
|
67
|
+
statuses;
|
|
68
|
+
transitions;
|
|
69
|
+
byCode;
|
|
70
|
+
adjacency;
|
|
71
|
+
constructor(statuses, transitions) {
|
|
72
|
+
this.statuses = statuses;
|
|
73
|
+
this.transitions = transitions;
|
|
74
|
+
this.byCode = new Map(statuses.map((s) => [s.code, s]));
|
|
75
|
+
this.adjacency = new Map();
|
|
76
|
+
for (const t of transitions) {
|
|
77
|
+
const set = this.adjacency.get(t.fromStatusCode) ?? new Set();
|
|
78
|
+
set.add(t.toStatusCode);
|
|
79
|
+
this.adjacency.set(t.fromStatusCode, set);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
has(code) {
|
|
83
|
+
return this.byCode.has(code);
|
|
84
|
+
}
|
|
85
|
+
get(code) {
|
|
86
|
+
return this.byCode.get(code);
|
|
87
|
+
}
|
|
88
|
+
isTerminal(code) {
|
|
89
|
+
return this.byCode.get(code)?.isTerminal ?? false;
|
|
90
|
+
}
|
|
91
|
+
isInitial(code) {
|
|
92
|
+
return this.byCode.get(code)?.isInitial ?? false;
|
|
93
|
+
}
|
|
94
|
+
/** The single initial status code (always `new` in the default seed). */
|
|
95
|
+
initialCode() {
|
|
96
|
+
const initial = this.statuses.find((s) => s.isInitial);
|
|
97
|
+
if (!initial)
|
|
98
|
+
throw new ReturnStatusConfigError('No initial return status configured.');
|
|
99
|
+
return initial.code;
|
|
100
|
+
}
|
|
101
|
+
/** Allowed target codes from `from`, sorted by status weight. */
|
|
102
|
+
allowedTargets(from) {
|
|
103
|
+
const targets = [...(this.adjacency.get(from) ?? new Set())];
|
|
104
|
+
return targets.sort((a, b) => (this.byCode.get(a)?.weight ?? 0) - (this.byCode.get(b)?.weight ?? 0));
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* True iff both endpoints exist, `from` is not terminal, and a configured
|
|
108
|
+
* edge `from → to` exists (FR-012).
|
|
109
|
+
*/
|
|
110
|
+
canTransition(from, to) {
|
|
111
|
+
if (!this.byCode.has(from) || !this.byCode.has(to))
|
|
112
|
+
return false;
|
|
113
|
+
if (this.isTerminal(from))
|
|
114
|
+
return false;
|
|
115
|
+
return this.adjacency.get(from)?.has(to) ?? false;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Structural validation of a candidate config (used by the admin CRUD path
|
|
119
|
+
* before persisting): exactly one initial status, no edge leaves a terminal
|
|
120
|
+
* status, every edge endpoint exists.
|
|
121
|
+
*/
|
|
122
|
+
assertValid() {
|
|
123
|
+
const initials = this.statuses.filter((s) => s.isInitial);
|
|
124
|
+
if (initials.length !== 1) {
|
|
125
|
+
throw new ReturnStatusConfigError(`Exactly one initial status required, found ${initials.length}.`);
|
|
126
|
+
}
|
|
127
|
+
if (!this.statuses.some((s) => s.isTerminal)) {
|
|
128
|
+
throw new ReturnStatusConfigError('At least one terminal status is required.');
|
|
129
|
+
}
|
|
130
|
+
for (const t of this.transitions) {
|
|
131
|
+
if (!this.byCode.has(t.fromStatusCode) || !this.byCode.has(t.toStatusCode)) {
|
|
132
|
+
throw new ReturnStatusConfigError(`Transition references unknown status: ${t.fromStatusCode} → ${t.toStatusCode}.`);
|
|
133
|
+
}
|
|
134
|
+
if (this.isTerminal(t.fromStatusCode)) {
|
|
135
|
+
throw new ReturnStatusConfigError(`Terminal status "${t.fromStatusCode}" cannot have outgoing transitions.`);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
export function buildDefaultReturnGraph() {
|
|
141
|
+
return new ReturnStatusGraph(DEFAULT_RETURN_STATUSES.map((s) => ({ ...s })), computeDefaultTransitions());
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=return-status-graph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"return-status-graph.js","sourceRoot":"","sources":["../../../src/backend/domain/return-status-graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { EmailMailerSendInput } from '@endora-commerce/contracts';
|
|
2
|
+
/**
|
|
3
|
+
* Feature 046 (US2) — email to the customer when their return/complaint case is
|
|
4
|
+
* authorized: the RMA number plus return instructions.
|
|
5
|
+
*/
|
|
6
|
+
export declare function buildReturnAuthorizedEmail(params: {
|
|
7
|
+
to: string;
|
|
8
|
+
rmaNumber: string;
|
|
9
|
+
returnCaseId: string;
|
|
10
|
+
}): EmailMailerSendInput;
|
|
11
|
+
//# sourceMappingURL=return-authorized.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"return-authorized.d.ts","sourceRoot":"","sources":["../../../src/backend/email-templates/return-authorized.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEvE;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE;IACjD,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,oBAAoB,CAYvB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feature 046 (US2) — email to the customer when their return/complaint case is
|
|
3
|
+
* authorized: the RMA number plus return instructions.
|
|
4
|
+
*/
|
|
5
|
+
export function buildReturnAuthorizedEmail(params) {
|
|
6
|
+
return {
|
|
7
|
+
messageId: `return_authorized:${params.returnCaseId}`,
|
|
8
|
+
to: params.to,
|
|
9
|
+
subject: `Your return was approved — RMA ${params.rmaNumber}`,
|
|
10
|
+
text: [
|
|
11
|
+
`Your return request has been approved. Your RMA number is ${params.rmaNumber}.`,
|
|
12
|
+
'Please write this RMA number on the package or the return label before sending the goods back.',
|
|
13
|
+
'You can track the case from your account under Returns.',
|
|
14
|
+
].join('\n'),
|
|
15
|
+
meta: { returnCaseId: params.returnCaseId, kind: 'return_authorized' },
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=return-authorized.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"return-authorized.js","sourceRoot":"","sources":["../../../src/backend/email-templates/return-authorized.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CAAC,MAI1C;IACC,OAAO;QACL,SAAS,EAAE,qBAAqB,MAAM,CAAC,YAAY,EAAE;QACrD,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,OAAO,EAAE,kCAAkC,MAAM,CAAC,SAAS,EAAE;QAC7D,IAAI,EAAE;YACJ,6DAA6D,MAAM,CAAC,SAAS,GAAG;YAChF,gGAAgG;YAChG,yDAAyD;SAC1D,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,IAAI,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,IAAI,EAAE,mBAAmB,EAAE;KACvE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { EmailMailerSendInput } from '@endora-commerce/contracts';
|
|
2
|
+
/**
|
|
3
|
+
* Feature 046 (US2) — email to the customer when their return/complaint case is
|
|
4
|
+
* rejected, including the reason.
|
|
5
|
+
*/
|
|
6
|
+
export declare function buildReturnRejectedEmail(params: {
|
|
7
|
+
to: string;
|
|
8
|
+
reason: string;
|
|
9
|
+
returnCaseId: string;
|
|
10
|
+
}): EmailMailerSendInput;
|
|
11
|
+
//# sourceMappingURL=return-rejected.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"return-rejected.d.ts","sourceRoot":"","sources":["../../../src/backend/email-templates/return-rejected.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEvE;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,oBAAoB,CAcvB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feature 046 (US2) — email to the customer when their return/complaint case is
|
|
3
|
+
* rejected, including the reason.
|
|
4
|
+
*/
|
|
5
|
+
export function buildReturnRejectedEmail(params) {
|
|
6
|
+
return {
|
|
7
|
+
messageId: `return_rejected:${params.returnCaseId}`,
|
|
8
|
+
to: params.to,
|
|
9
|
+
subject: 'Your return request was declined',
|
|
10
|
+
text: [
|
|
11
|
+
'We have reviewed your return request and are unable to accept it.',
|
|
12
|
+
params.reason ? `Reason: ${params.reason}` : '',
|
|
13
|
+
'If you have questions, you can reply on the case from your account under Returns.',
|
|
14
|
+
]
|
|
15
|
+
.filter(Boolean)
|
|
16
|
+
.join('\n'),
|
|
17
|
+
meta: { returnCaseId: params.returnCaseId, kind: 'return_rejected' },
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=return-rejected.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"return-rejected.js","sourceRoot":"","sources":["../../../src/backend/email-templates/return-rejected.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAIxC;IACC,OAAO;QACL,SAAS,EAAE,mBAAmB,MAAM,CAAC,YAAY,EAAE;QACnD,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,OAAO,EAAE,kCAAkC;QAC3C,IAAI,EAAE;YACJ,mEAAmE;YACnE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE;YAC/C,mFAAmF;SACpF;aACE,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,IAAI,CAAC;QACb,IAAI,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,IAAI,EAAE,iBAAiB,EAAE;KACrE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const RETURN_AUTHORIZED_DEFAULT: {
|
|
2
|
+
defaultSubject: Record<string, string>;
|
|
3
|
+
defaultContent: Record<string, unknown>;
|
|
4
|
+
languages: string[];
|
|
5
|
+
};
|
|
6
|
+
export declare const RETURN_REJECTED_DEFAULT: {
|
|
7
|
+
defaultSubject: Record<string, string>;
|
|
8
|
+
defaultContent: Record<string, unknown>;
|
|
9
|
+
languages: string[];
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=transactional-defaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactional-defaults.d.ts","sourceRoot":"","sources":["../../../src/backend/email-templates/transactional-defaults.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,yBAAyB;oBAI/B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;oBAuBtB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;CAE7B,CAAC;AAEF,eAAO,MAAM,uBAAuB;oBAI7B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;oBAuBtB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;CAE7B,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
// Default subject + content for the returns transactional emails (feature 047).
|
|
2
|
+
import { simpleEmailBodyTree } from '@endora-commerce/email-components/defaults/simple-email-body';
|
|
3
|
+
const LANGS = ['en-US', 'pl-PL'];
|
|
4
|
+
export const RETURN_AUTHORIZED_DEFAULT = {
|
|
5
|
+
defaultSubject: {
|
|
6
|
+
'en-US': 'Your return was approved — RMA {{var rmaNumber}}',
|
|
7
|
+
'pl-PL': 'Twój zwrot został zaakceptowany — RMA {{var rmaNumber}}',
|
|
8
|
+
},
|
|
9
|
+
defaultContent: {
|
|
10
|
+
schema_version: 1,
|
|
11
|
+
languages: {
|
|
12
|
+
'en-US': simpleEmailBodyTree({
|
|
13
|
+
idPrefix: 'return-ok',
|
|
14
|
+
heading: 'Return approved',
|
|
15
|
+
text: [
|
|
16
|
+
'Your return request has been approved. Your RMA number is {{var rmaNumber}}.',
|
|
17
|
+
'Please write this RMA number on the package or the return label before sending the goods back.',
|
|
18
|
+
'You can track the case from your account under Returns.',
|
|
19
|
+
].join('\n'),
|
|
20
|
+
}),
|
|
21
|
+
'pl-PL': simpleEmailBodyTree({
|
|
22
|
+
idPrefix: 'return-ok',
|
|
23
|
+
heading: 'Zwrot zaakceptowany',
|
|
24
|
+
text: [
|
|
25
|
+
'Twój wniosek o zwrot został zaakceptowany. Numer RMA to {{var rmaNumber}}.',
|
|
26
|
+
'Umieść ten numer RMA na paczce lub etykiecie zwrotnej przed odesłaniem towaru.',
|
|
27
|
+
'Status sprawy możesz śledzić w swoim koncie w sekcji Zwroty.',
|
|
28
|
+
].join('\n'),
|
|
29
|
+
}),
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
languages: LANGS,
|
|
33
|
+
};
|
|
34
|
+
export const RETURN_REJECTED_DEFAULT = {
|
|
35
|
+
defaultSubject: {
|
|
36
|
+
'en-US': 'Your return request was declined',
|
|
37
|
+
'pl-PL': 'Twój wniosek o zwrot został odrzucony',
|
|
38
|
+
},
|
|
39
|
+
defaultContent: {
|
|
40
|
+
schema_version: 1,
|
|
41
|
+
languages: {
|
|
42
|
+
'en-US': simpleEmailBodyTree({
|
|
43
|
+
idPrefix: 'return-no',
|
|
44
|
+
heading: 'Return declined',
|
|
45
|
+
text: [
|
|
46
|
+
'We have reviewed your return request and are unable to accept it.',
|
|
47
|
+
'{{if reason}}Reason: {{var reason}}{{/if}}',
|
|
48
|
+
'If you have questions, you can reply on the case from your account under Returns.',
|
|
49
|
+
].join('\n'),
|
|
50
|
+
}),
|
|
51
|
+
'pl-PL': simpleEmailBodyTree({
|
|
52
|
+
idPrefix: 'return-no',
|
|
53
|
+
heading: 'Zwrot odrzucony',
|
|
54
|
+
text: [
|
|
55
|
+
'Rozpatrzyliśmy Twój wniosek o zwrot i nie możemy go zaakceptować.',
|
|
56
|
+
'{{if reason}}Powód: {{var reason}}{{/if}}',
|
|
57
|
+
'W razie pytań możesz odpowiedzieć w sprawie ze swojego konta w sekcji Zwroty.',
|
|
58
|
+
].join('\n'),
|
|
59
|
+
}),
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
languages: LANGS,
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=transactional-defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactional-defaults.js","sourceRoot":"","sources":["../../../src/backend/email-templates/transactional-defaults.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAEhF,OAAO,EAAE,mBAAmB,EAAE,MAAM,8DAA8D,CAAC;AAEnG,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAEjC,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,cAAc,EAAE;QACd,OAAO,EAAE,kDAAkD;QAC3D,OAAO,EAAE,yDAAyD;KACzC;IAC3B,cAAc,EAAE;QACd,cAAc,EAAE,CAAC;QACjB,SAAS,EAAE;YACT,OAAO,EAAE,mBAAmB,CAAC;gBAC3B,QAAQ,EAAE,WAAW;gBACrB,OAAO,EAAE,iBAAiB;gBAC1B,IAAI,EAAE;oBACJ,8EAA8E;oBAC9E,gGAAgG;oBAChG,yDAAyD;iBAC1D,CAAC,IAAI,CAAC,IAAI,CAAC;aACb,CAAC;YACF,OAAO,EAAE,mBAAmB,CAAC;gBAC3B,QAAQ,EAAE,WAAW;gBACrB,OAAO,EAAE,qBAAqB;gBAC9B,IAAI,EAAE;oBACJ,4EAA4E;oBAC5E,gFAAgF;oBAChF,8DAA8D;iBAC/D,CAAC,IAAI,CAAC,IAAI,CAAC;aACb,CAAC;SACH;KACyB;IAC5B,SAAS,EAAE,KAAK;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,cAAc,EAAE;QACd,OAAO,EAAE,kCAAkC;QAC3C,OAAO,EAAE,uCAAuC;KACvB;IAC3B,cAAc,EAAE;QACd,cAAc,EAAE,CAAC;QACjB,SAAS,EAAE;YACT,OAAO,EAAE,mBAAmB,CAAC;gBAC3B,QAAQ,EAAE,WAAW;gBACrB,OAAO,EAAE,iBAAiB;gBAC1B,IAAI,EAAE;oBACJ,mEAAmE;oBACnE,4CAA4C;oBAC5C,mFAAmF;iBACpF,CAAC,IAAI,CAAC,IAAI,CAAC;aACb,CAAC;YACF,OAAO,EAAE,mBAAmB,CAAC;gBAC3B,QAAQ,EAAE,WAAW;gBACrB,OAAO,EAAE,iBAAiB;gBAC1B,IAAI,EAAE;oBACJ,mEAAmE;oBACnE,2CAA2C;oBAC3C,+EAA+E;iBAChF,CAAC,IAAI,CAAC,IAAI,CAAC;aACb,CAAC;SACH;KACyB;IAC5B,SAAS,EAAE,KAAK;CACjB,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { OptionalProps } from '@mikro-orm/core';
|
|
2
|
+
/**
|
|
3
|
+
* Refund — feature 046 (US5).
|
|
4
|
+
*
|
|
5
|
+
* The financial outcome of a settled case: either money back (`resolutionType =
|
|
6
|
+
* 'refund'`, issued through the payments domain) or store credit
|
|
7
|
+
* (`resolutionType = 'credit'`). `settlementState` records whether the money
|
|
8
|
+
* movement succeeded, is pending manual handling (adapter can't auto-refund), or
|
|
9
|
+
* failed. `attemptNo` supports retries (1 = first).
|
|
10
|
+
*/
|
|
11
|
+
export declare class Refund {
|
|
12
|
+
[OptionalProps]?: 'id' | 'paymentMethodId' | 'externalReference' | 'providerDetails' | 'failureReason' | 'correctiveInvoiceId' | 'correctiveInvoiceOutcome' | 'creditLimitTopupApplied' | 'attemptNo' | 'createdAt' | 'updatedAt';
|
|
13
|
+
id: string;
|
|
14
|
+
returnCaseId: string;
|
|
15
|
+
/** `refund` (money) | `credit` (store credit). */
|
|
16
|
+
resolutionType: 'refund' | 'credit';
|
|
17
|
+
amount: string;
|
|
18
|
+
currency: string;
|
|
19
|
+
paymentMethodId?: string | null;
|
|
20
|
+
/** `issued` | `pending_manual` | `failed`. */
|
|
21
|
+
settlementState: 'issued' | 'pending_manual' | 'failed';
|
|
22
|
+
externalReference?: string | null;
|
|
23
|
+
providerDetails?: Record<string, unknown> | null;
|
|
24
|
+
failureReason?: string | null;
|
|
25
|
+
correctiveInvoiceId?: string | null;
|
|
26
|
+
/**
|
|
27
|
+
* What became of the corrective invoice (D-92, issue #156).
|
|
28
|
+
*
|
|
29
|
+
* `correctiveInvoiceId` alone is a two-way answer to a three-way question —
|
|
30
|
+
* `null` stood for "not due", "not requested" and "asked for, and we do not
|
|
31
|
+
* know" at once, and the distinction lived only in the settlement response
|
|
32
|
+
* and the audit entry, neither of which survives a reload. `issued` is
|
|
33
|
+
* exactly the case where `correctiveInvoiceId` is set.
|
|
34
|
+
*/
|
|
35
|
+
correctiveInvoiceOutcome: 'issued' | 'not_due' | 'not_requested';
|
|
36
|
+
creditLimitTopupApplied: boolean;
|
|
37
|
+
attemptNo: number;
|
|
38
|
+
createdAt: Date;
|
|
39
|
+
updatedAt: Date;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=refund.entity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refund.entity.d.ts","sourceRoot":"","sources":["../../../src/backend/entities/refund.entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,aAAa,EAAwB,MAAM,iBAAiB,CAAC;AAIrF;;;;;;;;GAQG;AACH,qBAEa,MAAM;IACjB,CAAC,aAAa,CAAC,CAAC,EACZ,IAAI,GACJ,iBAAiB,GACjB,mBAAmB,GACnB,iBAAiB,GACjB,eAAe,GACf,qBAAqB,GACrB,0BAA0B,GAC1B,yBAAyB,GACzB,WAAW,GACX,WAAW,GACX,WAAW,CAAC;IAGhB,EAAE,EAAE,MAAM,CAAgB;IAI1B,YAAY,EAAG,MAAM,CAAC;IAEtB,kDAAkD;IAElD,cAAc,EAAG,QAAQ,GAAG,QAAQ,CAAC;IAGrC,MAAM,EAAG,MAAM,CAAC;IAGhB,QAAQ,EAAG,MAAM,CAAC;IAGlB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEhC,8CAA8C;IAE9C,eAAe,EAAG,QAAQ,GAAG,gBAAgB,GAAG,QAAQ,CAAC;IAGzD,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAGlC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAGjD,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAG9B,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEpC;;;;;;;;OAQG;IAEH,wBAAwB,EAAE,QAAQ,GAAG,SAAS,GAAG,eAAe,CAAmB;IAGnF,uBAAuB,EAAE,OAAO,CAAS;IAGzC,SAAS,EAAE,MAAM,CAAK;IAGtB,SAAS,EAAE,IAAI,CAAc;IAG7B,SAAS,EAAE,IAAI,CAAc;CAC9B"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { Entity, Index, OptionalProps, PrimaryKey, Property } from '@mikro-orm/core';
|
|
11
|
+
import { GlobalEntity } from '@endora-commerce/platform/tenancy';
|
|
12
|
+
import { randomUUID } from 'crypto';
|
|
13
|
+
/**
|
|
14
|
+
* Refund — feature 046 (US5).
|
|
15
|
+
*
|
|
16
|
+
* The financial outcome of a settled case: either money back (`resolutionType =
|
|
17
|
+
* 'refund'`, issued through the payments domain) or store credit
|
|
18
|
+
* (`resolutionType = 'credit'`). `settlementState` records whether the money
|
|
19
|
+
* movement succeeded, is pending manual handling (adapter can't auto-refund), or
|
|
20
|
+
* failed. `attemptNo` supports retries (1 = first).
|
|
21
|
+
*/
|
|
22
|
+
let Refund = class Refund {
|
|
23
|
+
[OptionalProps];
|
|
24
|
+
id = randomUUID();
|
|
25
|
+
returnCaseId;
|
|
26
|
+
/** `refund` (money) | `credit` (store credit). */
|
|
27
|
+
resolutionType;
|
|
28
|
+
amount;
|
|
29
|
+
currency;
|
|
30
|
+
paymentMethodId;
|
|
31
|
+
/** `issued` | `pending_manual` | `failed`. */
|
|
32
|
+
settlementState;
|
|
33
|
+
externalReference;
|
|
34
|
+
providerDetails;
|
|
35
|
+
failureReason;
|
|
36
|
+
correctiveInvoiceId;
|
|
37
|
+
/**
|
|
38
|
+
* What became of the corrective invoice (D-92, issue #156).
|
|
39
|
+
*
|
|
40
|
+
* `correctiveInvoiceId` alone is a two-way answer to a three-way question —
|
|
41
|
+
* `null` stood for "not due", "not requested" and "asked for, and we do not
|
|
42
|
+
* know" at once, and the distinction lived only in the settlement response
|
|
43
|
+
* and the audit entry, neither of which survives a reload. `issued` is
|
|
44
|
+
* exactly the case where `correctiveInvoiceId` is set.
|
|
45
|
+
*/
|
|
46
|
+
correctiveInvoiceOutcome = 'not_requested';
|
|
47
|
+
creditLimitTopupApplied = false;
|
|
48
|
+
attemptNo = 1;
|
|
49
|
+
createdAt = new Date();
|
|
50
|
+
updatedAt = new Date();
|
|
51
|
+
};
|
|
52
|
+
__decorate([
|
|
53
|
+
PrimaryKey({ type: 'uuid' }),
|
|
54
|
+
__metadata("design:type", String)
|
|
55
|
+
], Refund.prototype, "id", void 0);
|
|
56
|
+
__decorate([
|
|
57
|
+
Property({ type: 'uuid' }),
|
|
58
|
+
Index(),
|
|
59
|
+
__metadata("design:type", String)
|
|
60
|
+
], Refund.prototype, "returnCaseId", void 0);
|
|
61
|
+
__decorate([
|
|
62
|
+
Property({ type: 'string', length: 16 }),
|
|
63
|
+
__metadata("design:type", String)
|
|
64
|
+
], Refund.prototype, "resolutionType", void 0);
|
|
65
|
+
__decorate([
|
|
66
|
+
Property({ type: 'decimal', precision: 14, scale: 2 }),
|
|
67
|
+
__metadata("design:type", String)
|
|
68
|
+
], Refund.prototype, "amount", void 0);
|
|
69
|
+
__decorate([
|
|
70
|
+
Property({ type: 'string', length: 3 }),
|
|
71
|
+
__metadata("design:type", String)
|
|
72
|
+
], Refund.prototype, "currency", void 0);
|
|
73
|
+
__decorate([
|
|
74
|
+
Property({ type: 'uuid', nullable: true }),
|
|
75
|
+
__metadata("design:type", Object)
|
|
76
|
+
], Refund.prototype, "paymentMethodId", void 0);
|
|
77
|
+
__decorate([
|
|
78
|
+
Property({ type: 'string', length: 16 }),
|
|
79
|
+
__metadata("design:type", String)
|
|
80
|
+
], Refund.prototype, "settlementState", void 0);
|
|
81
|
+
__decorate([
|
|
82
|
+
Property({ type: 'string', length: 128, nullable: true }),
|
|
83
|
+
__metadata("design:type", Object)
|
|
84
|
+
], Refund.prototype, "externalReference", void 0);
|
|
85
|
+
__decorate([
|
|
86
|
+
Property({ type: 'json', nullable: true }),
|
|
87
|
+
__metadata("design:type", Object)
|
|
88
|
+
], Refund.prototype, "providerDetails", void 0);
|
|
89
|
+
__decorate([
|
|
90
|
+
Property({ type: 'text', nullable: true }),
|
|
91
|
+
__metadata("design:type", Object)
|
|
92
|
+
], Refund.prototype, "failureReason", void 0);
|
|
93
|
+
__decorate([
|
|
94
|
+
Property({ type: 'uuid', nullable: true }),
|
|
95
|
+
__metadata("design:type", Object)
|
|
96
|
+
], Refund.prototype, "correctiveInvoiceId", void 0);
|
|
97
|
+
__decorate([
|
|
98
|
+
Property({ type: 'string', length: 16 }),
|
|
99
|
+
__metadata("design:type", String)
|
|
100
|
+
], Refund.prototype, "correctiveInvoiceOutcome", void 0);
|
|
101
|
+
__decorate([
|
|
102
|
+
Property({ type: 'boolean' }),
|
|
103
|
+
__metadata("design:type", Boolean)
|
|
104
|
+
], Refund.prototype, "creditLimitTopupApplied", void 0);
|
|
105
|
+
__decorate([
|
|
106
|
+
Property({ type: 'integer' }),
|
|
107
|
+
__metadata("design:type", Number)
|
|
108
|
+
], Refund.prototype, "attemptNo", void 0);
|
|
109
|
+
__decorate([
|
|
110
|
+
Property({ type: 'datetime', onCreate: () => new Date() }),
|
|
111
|
+
__metadata("design:type", Date)
|
|
112
|
+
], Refund.prototype, "createdAt", void 0);
|
|
113
|
+
__decorate([
|
|
114
|
+
Property({ type: 'datetime', onUpdate: () => new Date() }),
|
|
115
|
+
__metadata("design:type", Date)
|
|
116
|
+
], Refund.prototype, "updatedAt", void 0);
|
|
117
|
+
Refund = __decorate([
|
|
118
|
+
GlobalEntity(),
|
|
119
|
+
Entity({ tableName: 'refunds' })
|
|
120
|
+
], Refund);
|
|
121
|
+
export { Refund };
|
|
122
|
+
//# sourceMappingURL=refund.entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refund.entity.js","sourceRoot":"","sources":["../../../src/backend/entities/refund.entity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { OptionalProps } from '@mikro-orm/core';
|
|
2
|
+
/**
|
|
3
|
+
* ReturnCaseAttachment — feature 046 (US1, R9).
|
|
4
|
+
*
|
|
5
|
+
* Links an uploaded asset (e.g. a defect photo) to a case or a specific case
|
|
6
|
+
* line. Reuses the assets library; `assetId` references `assets`.
|
|
7
|
+
*/
|
|
8
|
+
export declare class ReturnCaseAttachment {
|
|
9
|
+
[OptionalProps]?: 'id' | 'returnCaseItemId' | 'createdAt';
|
|
10
|
+
id: string;
|
|
11
|
+
returnCaseId: string;
|
|
12
|
+
returnCaseItemId?: string | null;
|
|
13
|
+
assetId: string;
|
|
14
|
+
createdAt: Date;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=return-case-attachment.entity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"return-case-attachment.entity.d.ts","sourceRoot":"","sources":["../../../src/backend/entities/return-case-attachment.entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,aAAa,EAAwB,MAAM,iBAAiB,CAAC;AAIrF;;;;;GAKG;AACH,qBAEa,oBAAoB;IAC/B,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,GAAG,kBAAkB,GAAG,WAAW,CAAC;IAG1D,EAAE,EAAE,MAAM,CAAgB;IAI1B,YAAY,EAAG,MAAM,CAAC;IAGtB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAGjC,OAAO,EAAG,MAAM,CAAC;IAGjB,SAAS,EAAE,IAAI,CAAc;CAC9B"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { Entity, Index, OptionalProps, PrimaryKey, Property } from '@mikro-orm/core';
|
|
11
|
+
import { GlobalEntity } from '@endora-commerce/platform/tenancy';
|
|
12
|
+
import { randomUUID } from 'crypto';
|
|
13
|
+
/**
|
|
14
|
+
* ReturnCaseAttachment — feature 046 (US1, R9).
|
|
15
|
+
*
|
|
16
|
+
* Links an uploaded asset (e.g. a defect photo) to a case or a specific case
|
|
17
|
+
* line. Reuses the assets library; `assetId` references `assets`.
|
|
18
|
+
*/
|
|
19
|
+
let ReturnCaseAttachment = class ReturnCaseAttachment {
|
|
20
|
+
[OptionalProps];
|
|
21
|
+
id = randomUUID();
|
|
22
|
+
returnCaseId;
|
|
23
|
+
returnCaseItemId;
|
|
24
|
+
assetId;
|
|
25
|
+
createdAt = new Date();
|
|
26
|
+
};
|
|
27
|
+
__decorate([
|
|
28
|
+
PrimaryKey({ type: 'uuid' }),
|
|
29
|
+
__metadata("design:type", String)
|
|
30
|
+
], ReturnCaseAttachment.prototype, "id", void 0);
|
|
31
|
+
__decorate([
|
|
32
|
+
Property({ type: 'uuid' }),
|
|
33
|
+
Index(),
|
|
34
|
+
__metadata("design:type", String)
|
|
35
|
+
], ReturnCaseAttachment.prototype, "returnCaseId", void 0);
|
|
36
|
+
__decorate([
|
|
37
|
+
Property({ type: 'uuid', nullable: true }),
|
|
38
|
+
__metadata("design:type", Object)
|
|
39
|
+
], ReturnCaseAttachment.prototype, "returnCaseItemId", void 0);
|
|
40
|
+
__decorate([
|
|
41
|
+
Property({ type: 'uuid' }),
|
|
42
|
+
__metadata("design:type", String)
|
|
43
|
+
], ReturnCaseAttachment.prototype, "assetId", void 0);
|
|
44
|
+
__decorate([
|
|
45
|
+
Property({ type: 'datetime', onCreate: () => new Date() }),
|
|
46
|
+
__metadata("design:type", Date)
|
|
47
|
+
], ReturnCaseAttachment.prototype, "createdAt", void 0);
|
|
48
|
+
ReturnCaseAttachment = __decorate([
|
|
49
|
+
GlobalEntity(),
|
|
50
|
+
Entity({ tableName: 'return_case_attachments' })
|
|
51
|
+
], ReturnCaseAttachment);
|
|
52
|
+
export { ReturnCaseAttachment };
|
|
53
|
+
//# sourceMappingURL=return-case-attachment.entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"return-case-attachment.entity.js","sourceRoot":"","sources":["../../../src/backend/entities/return-case-attachment.entity.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC;;;;;GAKG;AAGI,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAC/B,CAAC,aAAa,CAAC,CAA2C;IAG1D,EAAE,GAAW,UAAU,EAAE,CAAC;IAI1B,YAAY,CAAU;IAGtB,gBAAgB,CAAiB;IAGjC,OAAO,CAAU;IAGjB,SAAS,GAAS,IAAI,IAAI,EAAE,CAAC;CAC9B,CAAA;AAdC;IADC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;gDACH;AAI1B;IAFC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1B,KAAK,EAAE;;0DACc;AAGtB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;8DACV;AAGjC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;qDACV;AAGjB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;8BAChD,IAAI;uDAAc;AAjBlB,oBAAoB;IAFhC,YAAY,EAAE;IACd,MAAM,CAAC,EAAE,SAAS,EAAE,yBAAyB,EAAE,CAAC;GACpC,oBAAoB,CAkBhC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { OptionalProps } from '@mikro-orm/core';
|
|
2
|
+
/**
|
|
3
|
+
* ReturnCaseComment — feature 046 (US4).
|
|
4
|
+
*
|
|
5
|
+
* A message on a case. Mirrors `order_comments`: admin comments carry a
|
|
6
|
+
* visibility choice (`isCustomerVisible`) and a `notifyCustomer` flag; customer
|
|
7
|
+
* comments are always visible. Exactly one author id is set.
|
|
8
|
+
*/
|
|
9
|
+
export declare class ReturnCaseComment {
|
|
10
|
+
[OptionalProps]?: 'id' | 'authorAdminUserId' | 'authorCustomerAccountId' | 'isCustomerVisible' | 'notifyCustomer' | 'createdAt';
|
|
11
|
+
id: string;
|
|
12
|
+
returnCaseId: string;
|
|
13
|
+
authorAdminUserId?: string | null;
|
|
14
|
+
authorCustomerAccountId?: string | null;
|
|
15
|
+
body: string;
|
|
16
|
+
isCustomerVisible: boolean;
|
|
17
|
+
notifyCustomer: boolean;
|
|
18
|
+
createdAt: Date;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=return-case-comment.entity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"return-case-comment.entity.d.ts","sourceRoot":"","sources":["../../../src/backend/entities/return-case-comment.entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,aAAa,EAAwB,MAAM,iBAAiB,CAAC;AAIrF;;;;;;GAMG;AACH,qBAEa,iBAAiB;IAC5B,CAAC,aAAa,CAAC,CAAC,EACZ,IAAI,GACJ,mBAAmB,GACnB,yBAAyB,GACzB,mBAAmB,GACnB,gBAAgB,GAChB,WAAW,CAAC;IAGhB,EAAE,EAAE,MAAM,CAAgB;IAI1B,YAAY,EAAG,MAAM,CAAC;IAGtB,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAGlC,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAGxC,IAAI,EAAG,MAAM,CAAC;IAGd,iBAAiB,EAAE,OAAO,CAAQ;IAGlC,cAAc,EAAE,OAAO,CAAS;IAIhC,SAAS,EAAE,IAAI,CAAc;CAC9B"}
|