@endora-commerce/mod-price-lists 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.
Files changed (171) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +59 -0
  3. package/dist/admin/components/ApplicationRuleBuilder.d.ts +24 -0
  4. package/dist/admin/components/ApplicationRuleBuilder.d.ts.map +1 -0
  5. package/dist/admin/components/ApplicationRuleBuilder.js +249 -0
  6. package/dist/admin/components/ApplicationRuleBuilder.js.map +1 -0
  7. package/dist/admin/components/BracketGrid.d.ts +29 -0
  8. package/dist/admin/components/BracketGrid.d.ts.map +1 -0
  9. package/dist/admin/components/BracketGrid.js +252 -0
  10. package/dist/admin/components/BracketGrid.js.map +1 -0
  11. package/dist/admin/components/DisplayModeOverrideRow.d.ts +46 -0
  12. package/dist/admin/components/DisplayModeOverrideRow.d.ts.map +1 -0
  13. package/dist/admin/components/DisplayModeOverrideRow.js +109 -0
  14. package/dist/admin/components/DisplayModeOverrideRow.js.map +1 -0
  15. package/dist/admin/components/LinkedPriceListsPanel.d.ts +55 -0
  16. package/dist/admin/components/LinkedPriceListsPanel.d.ts.map +1 -0
  17. package/dist/admin/components/LinkedPriceListsPanel.js +131 -0
  18. package/dist/admin/components/LinkedPriceListsPanel.js.map +1 -0
  19. package/dist/admin/index.d.ts +34 -0
  20. package/dist/admin/index.d.ts.map +1 -0
  21. package/dist/admin/index.js +119 -0
  22. package/dist/admin/index.js.map +1 -0
  23. package/dist/admin/pages/DisplayModeOverridesPage.d.ts +25 -0
  24. package/dist/admin/pages/DisplayModeOverridesPage.d.ts.map +1 -0
  25. package/dist/admin/pages/DisplayModeOverridesPage.js +266 -0
  26. package/dist/admin/pages/DisplayModeOverridesPage.js.map +1 -0
  27. package/dist/admin/pages/PriceListDetailPage.d.ts +23 -0
  28. package/dist/admin/pages/PriceListDetailPage.d.ts.map +1 -0
  29. package/dist/admin/pages/PriceListDetailPage.js +421 -0
  30. package/dist/admin/pages/PriceListDetailPage.js.map +1 -0
  31. package/dist/admin/pages/PriceListsPage.d.ts +17 -0
  32. package/dist/admin/pages/PriceListsPage.d.ts.map +1 -0
  33. package/dist/admin/pages/PriceListsPage.js +198 -0
  34. package/dist/admin/pages/PriceListsPage.js.map +1 -0
  35. package/dist/admin/zones/CategoryDisplayMode.d.ts +27 -0
  36. package/dist/admin/zones/CategoryDisplayMode.d.ts.map +1 -0
  37. package/dist/admin/zones/CategoryDisplayMode.js +11 -0
  38. package/dist/admin/zones/CategoryDisplayMode.js.map +1 -0
  39. package/dist/admin/zones/OrganizationDisplayMode.d.ts +36 -0
  40. package/dist/admin/zones/OrganizationDisplayMode.d.ts.map +1 -0
  41. package/dist/admin/zones/OrganizationDisplayMode.js +12 -0
  42. package/dist/admin/zones/OrganizationDisplayMode.js.map +1 -0
  43. package/dist/admin/zones/ProductLinkedPriceLists.d.ts +16 -0
  44. package/dist/admin/zones/ProductLinkedPriceLists.d.ts.map +1 -0
  45. package/dist/admin/zones/ProductLinkedPriceLists.js +7 -0
  46. package/dist/admin/zones/ProductLinkedPriceLists.js.map +1 -0
  47. package/dist/backend/entities/price-display-mode-override.entity.d.ts +23 -0
  48. package/dist/backend/entities/price-display-mode-override.entity.d.ts.map +1 -0
  49. package/dist/backend/entities/price-display-mode-override.entity.js +58 -0
  50. package/dist/backend/entities/price-display-mode-override.entity.js.map +1 -0
  51. package/dist/backend/entities/price-list-price-bracket.entity.d.ts +26 -0
  52. package/dist/backend/entities/price-list-price-bracket.entity.d.ts.map +1 -0
  53. package/dist/backend/entities/price-list-price-bracket.entity.js +73 -0
  54. package/dist/backend/entities/price-list-price-bracket.entity.js.map +1 -0
  55. package/dist/backend/entities/price-list-product.entity.d.ts +15 -0
  56. package/dist/backend/entities/price-list-product.entity.d.ts.map +1 -0
  57. package/dist/backend/entities/price-list-product.entity.js +43 -0
  58. package/dist/backend/entities/price-list-product.entity.js.map +1 -0
  59. package/dist/backend/entities/price-list.entity.d.ts +34 -0
  60. package/dist/backend/entities/price-list.entity.d.ts.map +1 -0
  61. package/dist/backend/entities/price-list.entity.js +115 -0
  62. package/dist/backend/entities/price-list.entity.js.map +1 -0
  63. package/dist/backend/index.d.ts +125 -0
  64. package/dist/backend/index.d.ts.map +1 -0
  65. package/dist/backend/index.js +179 -0
  66. package/dist/backend/index.js.map +1 -0
  67. package/dist/backend/plugin.d.ts +68 -0
  68. package/dist/backend/plugin.d.ts.map +1 -0
  69. package/dist/backend/plugin.js +88 -0
  70. package/dist/backend/plugin.js.map +1 -0
  71. package/dist/backend/routes.d.ts +40 -0
  72. package/dist/backend/routes.d.ts.map +1 -0
  73. package/dist/backend/routes.js +447 -0
  74. package/dist/backend/routes.js.map +1 -0
  75. package/dist/backend/routes.storefront.d.ts +47 -0
  76. package/dist/backend/routes.storefront.d.ts.map +1 -0
  77. package/dist/backend/routes.storefront.js +131 -0
  78. package/dist/backend/routes.storefront.js.map +1 -0
  79. package/dist/backend/services/application-rule-evaluator.d.ts +25 -0
  80. package/dist/backend/services/application-rule-evaluator.d.ts.map +1 -0
  81. package/dist/backend/services/application-rule-evaluator.js +2 -0
  82. package/dist/backend/services/application-rule-evaluator.js.map +1 -0
  83. package/dist/backend/services/audit-references.d.ts +11 -0
  84. package/dist/backend/services/audit-references.d.ts.map +1 -0
  85. package/dist/backend/services/audit-references.js +23 -0
  86. package/dist/backend/services/audit-references.js.map +1 -0
  87. package/dist/backend/services/default-price-list-migration.d.ts +70 -0
  88. package/dist/backend/services/default-price-list-migration.d.ts.map +1 -0
  89. package/dist/backend/services/default-price-list-migration.js +177 -0
  90. package/dist/backend/services/default-price-list-migration.js.map +1 -0
  91. package/dist/backend/services/display-mode-resolver.d.ts +78 -0
  92. package/dist/backend/services/display-mode-resolver.d.ts.map +1 -0
  93. package/dist/backend/services/display-mode-resolver.js +71 -0
  94. package/dist/backend/services/display-mode-resolver.js.map +1 -0
  95. package/dist/backend/services/listing-price-chain.d.ts +26 -0
  96. package/dist/backend/services/listing-price-chain.d.ts.map +1 -0
  97. package/dist/backend/services/listing-price-chain.js +55 -0
  98. package/dist/backend/services/listing-price-chain.js.map +1 -0
  99. package/dist/backend/services/price-bracket-resolver.d.ts +24 -0
  100. package/dist/backend/services/price-bracket-resolver.d.ts.map +1 -0
  101. package/dist/backend/services/price-bracket-resolver.js +16 -0
  102. package/dist/backend/services/price-bracket-resolver.js.map +1 -0
  103. package/dist/backend/services/price-list-candidate-vector.d.ts +116 -0
  104. package/dist/backend/services/price-list-candidate-vector.d.ts.map +1 -0
  105. package/dist/backend/services/price-list-candidate-vector.js +133 -0
  106. package/dist/backend/services/price-list-candidate-vector.js.map +1 -0
  107. package/dist/backend/services/price-list-currency-reference.d.ts +12 -0
  108. package/dist/backend/services/price-list-currency-reference.d.ts.map +1 -0
  109. package/dist/backend/services/price-list-currency-reference.js +24 -0
  110. package/dist/backend/services/price-list-currency-reference.js.map +1 -0
  111. package/dist/backend/services/price-list-read-port.d.ts +29 -0
  112. package/dist/backend/services/price-list-read-port.d.ts.map +1 -0
  113. package/dist/backend/services/price-list-read-port.js +64 -0
  114. package/dist/backend/services/price-list-read-port.js.map +1 -0
  115. package/dist/backend/services/price-list-resolver.d.ts +26 -0
  116. package/dist/backend/services/price-list-resolver.d.ts.map +1 -0
  117. package/dist/backend/services/price-list-resolver.js +37 -0
  118. package/dist/backend/services/price-list-resolver.js.map +1 -0
  119. package/dist/backend/services/price-list-service.d.ts +431 -0
  120. package/dist/backend/services/price-list-service.d.ts.map +1 -0
  121. package/dist/backend/services/price-list-service.js +1238 -0
  122. package/dist/backend/services/price-list-service.js.map +1 -0
  123. package/dist/backend/services/price-list-status-worker.d.ts +28 -0
  124. package/dist/backend/services/price-list-status-worker.d.ts.map +1 -0
  125. package/dist/backend/services/price-list-status-worker.js +38 -0
  126. package/dist/backend/services/price-list-status-worker.js.map +1 -0
  127. package/dist/backend/services/pricing-cache.d.ts +53 -0
  128. package/dist/backend/services/pricing-cache.d.ts.map +1 -0
  129. package/dist/backend/services/pricing-cache.js +88 -0
  130. package/dist/backend/services/pricing-cache.js.map +1 -0
  131. package/dist/backend/services/pricing-service.d.ts +304 -0
  132. package/dist/backend/services/pricing-service.d.ts.map +1 -0
  133. package/dist/backend/services/pricing-service.interface.d.ts +151 -0
  134. package/dist/backend/services/pricing-service.interface.d.ts.map +1 -0
  135. package/dist/backend/services/pricing-service.interface.js +10 -0
  136. package/dist/backend/services/pricing-service.interface.js.map +1 -0
  137. package/dist/backend/services/pricing-service.js +803 -0
  138. package/dist/backend/services/pricing-service.js.map +1 -0
  139. package/dist/backend/services/unit-price-ordering.d.ts +121 -0
  140. package/dist/backend/services/unit-price-ordering.d.ts.map +1 -0
  141. package/dist/backend/services/unit-price-ordering.js +164 -0
  142. package/dist/backend/services/unit-price-ordering.js.map +1 -0
  143. package/dist/manifest.d.ts +218 -0
  144. package/dist/manifest.d.ts.map +1 -0
  145. package/dist/manifest.js +228 -0
  146. package/dist/manifest.js.map +1 -0
  147. package/dist/migrations/20260426T075235_price_lists_pricing_init.d.ts +24 -0
  148. package/dist/migrations/20260426T075235_price_lists_pricing_init.d.ts.map +1 -0
  149. package/dist/migrations/20260426T075235_price_lists_pricing_init.js +89 -0
  150. package/dist/migrations/20260426T075235_price_lists_pricing_init.js.map +1 -0
  151. package/dist/migrations/20260504T125655_price_lists_engine.d.ts +6 -0
  152. package/dist/migrations/20260504T125655_price_lists_engine.d.ts.map +1 -0
  153. package/dist/migrations/20260504T125655_price_lists_engine.js +319 -0
  154. package/dist/migrations/20260504T125655_price_lists_engine.js.map +1 -0
  155. package/dist/migrations/20260817T055457_price_lists_single_system_price_list.d.ts +15 -0
  156. package/dist/migrations/20260817T055457_price_lists_single_system_price_list.d.ts.map +1 -0
  157. package/dist/migrations/20260817T055457_price_lists_single_system_price_list.js +58 -0
  158. package/dist/migrations/20260817T055457_price_lists_single_system_price_list.js.map +1 -0
  159. package/dist/migrations/20260821T135907_price_lists_unit_price_amount_index.d.ts +40 -0
  160. package/dist/migrations/20260821T135907_price_lists_unit_price_amount_index.d.ts.map +1 -0
  161. package/dist/migrations/20260821T135907_price_lists_unit_price_amount_index.js +46 -0
  162. package/dist/migrations/20260821T135907_price_lists_unit_price_amount_index.js.map +1 -0
  163. package/dist/migrations/index.d.ts +30 -0
  164. package/dist/migrations/index.d.ts.map +1 -0
  165. package/dist/migrations/index.js +35 -0
  166. package/dist/migrations/index.js.map +1 -0
  167. package/docs/price_lists.md +278 -0
  168. package/i18n/en.json +14 -0
  169. package/i18n/pl.json +14 -0
  170. package/package.json +99 -0
  171. package/tailwind.css +14 -0
@@ -0,0 +1,198 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useMemo, useState, } from 'react';
3
+ import { Link, useNavigate } from 'react-router-dom';
4
+ import { Calendar, CircleDollarSign, Eye, Lock, Plus, Search, Star, Tag, Zap, } from 'lucide-react';
5
+ import { ApiError, apiClient } from '@endora-commerce/admin-kit/lib';
6
+ import { useTranslation } from '@endora-commerce/admin-kit/i18n';
7
+ const STATUS_BADGE_CLASS = {
8
+ draft: 'b2b-badge b2b-badge--outline',
9
+ active: 'b2b-badge b2b-badge--success',
10
+ scheduled: 'b2b-badge b2b-badge--info',
11
+ expired: 'b2b-badge b2b-badge--muted',
12
+ };
13
+ /**
14
+ * Price lists — feature 011 (engine) admin landing page.
15
+ *
16
+ * Lists every price list with status/type filter chips and a free-text
17
+ * search. Clicking a row opens the editor; the seeded `Default` row is
18
+ * marked with a lock icon and a "System" chip because protections in
19
+ * `price-list-service.ts` refuse delete/state-change/rule-attach on it.
20
+ */
21
+ export function PriceListsPage() {
22
+ const t = useTranslation('core');
23
+ const STATUS_LABEL = {
24
+ draft: t('priceLists.status.draft'),
25
+ active: t('priceLists.status.active'),
26
+ scheduled: t('priceLists.status.scheduled'),
27
+ expired: t('priceLists.status.expired'),
28
+ };
29
+ const TYPE_LABEL = {
30
+ base: t('priceLists.type.base'),
31
+ sale: t('priceLists.type.sale'),
32
+ };
33
+ const navigate = useNavigate();
34
+ const [rows, setRows] = useState([]);
35
+ const [loading, setLoading] = useState(true);
36
+ const [error, setError] = useState(null);
37
+ const [info, setInfo] = useState(null);
38
+ const [query, setQuery] = useState('');
39
+ const [statusFilter, setStatusFilter] = useState(new Set());
40
+ const [typeFilter, setTypeFilter] = useState(new Set());
41
+ const [creating, setCreating] = useState(false);
42
+ const refresh = useCallback(async () => {
43
+ setLoading(true);
44
+ setError(null);
45
+ try {
46
+ const params = new URLSearchParams();
47
+ for (const s of statusFilter)
48
+ params.append('status', s);
49
+ for (const ty of typeFilter)
50
+ params.append('type', ty);
51
+ if (query.trim())
52
+ params.set('search', query.trim());
53
+ const qs = params.toString();
54
+ const res = await apiClient.get(`/api/v1/admin/price-lists-engine${qs ? `?${qs}` : ''}`);
55
+ setRows(res.data.items);
56
+ }
57
+ catch (err) {
58
+ setError(err instanceof ApiError ? err.envelope.error.message : t('priceLists.error.load'));
59
+ }
60
+ finally {
61
+ setLoading(false);
62
+ }
63
+ }, [statusFilter, typeFilter, query, t]);
64
+ useEffect(() => {
65
+ void refresh();
66
+ }, [refresh]);
67
+ const stats = useMemo(() => {
68
+ return {
69
+ total: rows.length,
70
+ active: rows.filter((r) => r.status === 'active').length,
71
+ scheduled: rows.filter((r) => r.status === 'scheduled').length,
72
+ sale: rows.filter((r) => r.type === 'sale').length,
73
+ };
74
+ }, [rows]);
75
+ const handleCreate = useCallback(async (input) => {
76
+ try {
77
+ const res = await apiClient.post('/api/v1/admin/price-lists-engine', input);
78
+ setInfo(t('priceLists.info.created', { name: res.data.name }));
79
+ setCreating(false);
80
+ navigate(`/price-lists/${res.data.id}`);
81
+ }
82
+ catch (err) {
83
+ setError(err instanceof ApiError ? err.envelope.error.message : t('priceLists.error.create'));
84
+ }
85
+ }, [navigate, t]);
86
+ return (_jsxs("div", { className: "b2b-page b2b-page--wide", children: [_jsxs("div", { className: "b2b-page-head", children: [_jsxs("div", { className: "b2b-grow", children: [_jsx("div", { className: "b2b-page-head__title", children: t('priceLists.page.title') }), _jsx("div", { className: "b2b-page-head__sub", children: t('priceLists.page.description') })] }), _jsxs("div", { className: "b2b-page-head__actions", children: [_jsxs(Link, { to: "/price-lists/display-modes", className: "b2b-btn b2b-btn--default", children: [_jsx(Eye, { size: 14 }), " ", t('priceLists.action.displayModes')] }), _jsxs("button", { type: "button", className: "b2b-btn b2b-btn--primary", onClick: () => setCreating(true), children: [_jsx(Plus, { size: 14 }), " ", t('priceLists.action.newPriceList')] })] })] }), error ? (_jsx(Banner, { kind: "error", message: error, onDismiss: () => setError(null) })) : null, info ? (_jsx(Banner, { kind: "info", message: info, onDismiss: () => setInfo(null) })) : null, _jsxs("div", { className: "b2b-row", style: { gap: 16, marginBottom: 16 }, children: [_jsx(Stat, { label: t('priceLists.stat.total'), value: String(stats.total) }), _jsx(Stat, { label: t('priceLists.stat.active'), value: String(stats.active) }), _jsx(Stat, { label: t('priceLists.stat.scheduled'), value: String(stats.scheduled) }), _jsx(Stat, { label: t('priceLists.stat.sale'), value: String(stats.sale) })] }), _jsxs("div", { className: "b2b-card", children: [_jsxs("div", { className: "b2b-filterbar", children: [_jsx("div", { className: "b2b-filterbar__search", children: _jsxs("div", { className: "b2b-input-wrap", children: [_jsx(Search, { size: 16, className: "lead" }), _jsx("input", { className: "b2b-field b2b-field--addon", placeholder: t('priceLists.search.placeholder'), value: query, onChange: (e) => setQuery(e.target.value) })] }) }), _jsx(FilterChip, { icon: _jsx(Zap, { size: 12 }), label: t('priceLists.filter.status'), options: ['draft', 'active', 'scheduled', 'expired'].map((s) => ({
87
+ value: s,
88
+ label: STATUS_LABEL[s],
89
+ })), selected: statusFilter, onToggle: (value) => {
90
+ setStatusFilter((prev) => {
91
+ const next = new Set(prev);
92
+ const v = value;
93
+ if (next.has(v))
94
+ next.delete(v);
95
+ else
96
+ next.add(v);
97
+ return next;
98
+ });
99
+ } }), _jsx(FilterChip, { icon: _jsx(Tag, { size: 12 }), label: t('priceLists.filter.type'), options: ['base', 'sale'].map((ty) => ({ value: ty, label: TYPE_LABEL[ty] })), selected: typeFilter, onToggle: (value) => {
100
+ setTypeFilter((prev) => {
101
+ const next = new Set(prev);
102
+ const v = value;
103
+ if (next.has(v))
104
+ next.delete(v);
105
+ else
106
+ next.add(v);
107
+ return next;
108
+ });
109
+ } })] }), _jsx("div", { className: "b2b-card__body b2b-card__body--flush", children: loading ? (_jsx("div", { style: { padding: 32, color: 'var(--fg-muted)', fontSize: 13 }, children: t('priceLists.loading') })) : rows.length === 0 ? (_jsxs("div", { className: "b2b-empty", children: [_jsx("div", { className: "b2b-empty__icon", children: _jsx(CircleDollarSign, { size: 20 }) }), _jsx("div", { className: "b2b-empty__title", children: query.trim() || statusFilter.size > 0 || typeFilter.size > 0
110
+ ? t('priceLists.empty.filtered')
111
+ : t('priceLists.empty.none') }), _jsx("div", { className: "b2b-empty__sub", children: t('priceLists.empty.subtitle') }), _jsxs("button", { type: "button", className: "b2b-btn b2b-btn--primary", onClick: () => setCreating(true), children: [_jsx(Plus, { size: 14 }), " ", t('priceLists.action.newPriceList')] })] })) : (_jsxs("table", { className: "b2b-tbl", children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { children: t('priceLists.column.name') }), _jsx("th", { children: t('priceLists.column.type') }), _jsx("th", { children: t('priceLists.column.status') }), _jsx("th", { children: t('priceLists.column.activeWindow') }), _jsx("th", { children: t('priceLists.column.lastModified') })] }) }), _jsx("tbody", { children: rows.map((r) => (_jsxs("tr", { className: "is-clickable", onClick: () => { navigate(`/price-lists/${r.id}`); }, children: [_jsx("td", { children: _jsxs("div", { className: "b2b-row", style: { gap: 12 }, children: [_jsx("div", { style: {
112
+ width: 32,
113
+ height: 32,
114
+ borderRadius: 6,
115
+ background: r.isSystem ? 'var(--primary-soft)' : 'var(--surface-sunken)',
116
+ display: 'grid',
117
+ placeItems: 'center',
118
+ }, children: r.isSystem ? (_jsx(Star, { size: 14, style: { color: 'var(--primary-color)' } })) : (_jsx(CircleDollarSign, { size: 14, style: { color: 'var(--fg-muted)' } })) }), _jsxs("div", { children: [_jsx("div", { style: { fontWeight: 500 }, children: r.name }), r.isSystem ? (_jsxs("span", { className: "b2b-badge b2b-badge--success", style: { marginTop: 2, display: 'inline-flex', alignItems: 'center', gap: 4 }, children: [_jsx(Lock, { size: 10 }), " ", t('priceLists.systemBadge')] })) : null] })] }) }), _jsx("td", { children: _jsx("span", { className: "b2b-badge b2b-badge--outline", children: TYPE_LABEL[r.type] }) }), _jsx("td", { children: _jsx("span", { className: STATUS_BADGE_CLASS[r.status], children: STATUS_LABEL[r.status] }) }), _jsx("td", { children: _jsxs("span", { style: { fontSize: 12, color: 'var(--fg-muted)', display: 'inline-flex', alignItems: 'center', gap: 4 }, children: [_jsx(Calendar, { size: 12 }), formatRange(r.startsAt, r.endsAt, t)] }) }), _jsx("td", { children: _jsx("span", { style: { fontSize: 12, color: 'var(--fg-muted)' }, children: formatDate(r.modifiedAt) }) })] }, r.id))) })] })) })] }), creating ? (_jsx(CreateDrawer, { onClose: () => setCreating(false), onSubmit: handleCreate })) : null] }));
119
+ }
120
+ function Stat({ label, value }) {
121
+ return (_jsxs("div", { className: "b2b-card", style: { flex: 1, padding: 16 }, children: [_jsx("div", { className: "b2b-muted", style: { fontSize: 11, textTransform: 'uppercase', letterSpacing: '0.06em' }, children: label }), _jsx("div", { style: { fontSize: 22, fontWeight: 600, marginTop: 4 }, children: value })] }));
122
+ }
123
+ function Banner({ kind, message, onDismiss, }) {
124
+ const t = useTranslation('core');
125
+ const palette = kind === 'error'
126
+ ? { bg: 'var(--danger-soft)', fg: 'var(--danger-soft-fg)', border: 'hsl(8 80% 85%)' }
127
+ : { bg: 'var(--success-soft)', fg: 'var(--success-soft-fg)', border: 'hsl(142 50% 80%)' };
128
+ return (_jsxs("div", { className: "b2b-card b2b-row", style: {
129
+ background: palette.bg,
130
+ color: palette.fg,
131
+ padding: 12,
132
+ marginBottom: 16,
133
+ border: `1px solid ${palette.border}`,
134
+ gap: 8,
135
+ alignItems: 'center',
136
+ }, children: [_jsx("div", { className: "b2b-grow", children: message }), _jsx("button", { type: "button", className: "b2b-btn b2b-btn--ghost b2b-btn--sm", onClick: onDismiss, children: t('priceLists.dismiss') })] }));
137
+ }
138
+ function FilterChip({ icon, label, options, selected, onToggle, }) {
139
+ const [open, setOpen] = useState(false);
140
+ return (_jsxs("div", { style: { position: 'relative' }, children: [_jsxs("button", { type: "button", className: "b2b-filterchip", "aria-expanded": open, onClick: () => setOpen((v) => !v), style: selected.size > 0 ? { borderColor: 'var(--primary-color)' } : undefined, children: [icon, _jsxs("span", { children: [label, selected.size > 0 ? ` · ${selected.size}` : ''] })] }), open ? (_jsx("div", { className: "b2b-card", style: {
141
+ position: 'absolute',
142
+ top: '100%',
143
+ left: 0,
144
+ marginTop: 4,
145
+ zIndex: 10,
146
+ padding: 8,
147
+ minWidth: 140,
148
+ display: 'flex',
149
+ flexDirection: 'column',
150
+ gap: 4,
151
+ }, children: options.map((opt) => {
152
+ const isOn = selected.has(opt.value);
153
+ return (_jsxs("label", { style: { display: 'flex', alignItems: 'center', gap: 8, fontSize: 12, padding: '4px 6px', cursor: 'pointer' }, children: [_jsx("input", { type: "checkbox", className: "b2b-cbx", checked: isOn, onChange: () => onToggle(opt.value) }), opt.label] }, opt.value));
154
+ }) })) : null] }));
155
+ }
156
+ function CreateDrawer({ onClose, onSubmit, }) {
157
+ const t = useTranslation('core');
158
+ const [name, setName] = useState('');
159
+ const [type, setType] = useState('base');
160
+ const [startsAt, setStartsAt] = useState('');
161
+ const [endsAt, setEndsAt] = useState('');
162
+ const [submitting, setSubmitting] = useState(false);
163
+ const handle = async () => {
164
+ if (!name.trim())
165
+ return;
166
+ setSubmitting(true);
167
+ try {
168
+ await onSubmit({
169
+ name: name.trim(),
170
+ type,
171
+ startsAt: startsAt ? new Date(startsAt).toISOString() : null,
172
+ endsAt: endsAt ? new Date(endsAt).toISOString() : null,
173
+ });
174
+ }
175
+ finally {
176
+ setSubmitting(false);
177
+ }
178
+ };
179
+ return (_jsxs(_Fragment, { children: [_jsx("div", { className: "b2b-scrim", onClick: onClose }), _jsxs("aside", { className: "b2b-drawer", role: "dialog", "aria-modal": "true", children: [_jsx("div", { className: "b2b-drawer__head", children: _jsxs("div", { className: "b2b-grow", children: [_jsx("div", { className: "b2b-drawer__title", children: t('priceLists.create.title') }), _jsx("div", { className: "b2b-card__sub", children: t('priceLists.create.description') })] }) }), _jsx("div", { className: "b2b-drawer__body", children: _jsxs("div", { className: "b2b-col", style: { gap: 14 }, children: [_jsxs("div", { children: [_jsx("label", { className: "b2b-label", htmlFor: "pl-name", children: t('priceLists.create.name') }), _jsx("input", { id: "pl-name", className: "b2b-field", value: name, onChange: (e) => setName(e.target.value), placeholder: t('priceLists.create.namePlaceholder'), required: true }), _jsx("div", { className: "b2b-help", children: t('priceLists.create.nameHelp') })] }), _jsxs("div", { children: [_jsx("label", { className: "b2b-label", htmlFor: "pl-type", children: t('priceLists.create.type') }), _jsxs("select", { id: "pl-type", className: "b2b-field", value: type, onChange: (e) => setType(e.target.value), children: [_jsx("option", { value: "base", children: t('priceLists.create.typeBaseOption') }), _jsx("option", { value: "sale", children: t('priceLists.create.typeSaleOption') })] })] }), _jsxs("div", { className: "b2b-row", style: { gap: 12 }, children: [_jsxs("div", { className: "b2b-grow", children: [_jsx("label", { className: "b2b-label", htmlFor: "pl-starts", children: t('priceLists.create.startsAt') }), _jsx("input", { id: "pl-starts", className: "b2b-field", type: "datetime-local", value: startsAt, onChange: (e) => setStartsAt(e.target.value) })] }), _jsxs("div", { className: "b2b-grow", children: [_jsx("label", { className: "b2b-label", htmlFor: "pl-ends", children: t('priceLists.create.endsAt') }), _jsx("input", { id: "pl-ends", className: "b2b-field", type: "datetime-local", value: endsAt, onChange: (e) => setEndsAt(e.target.value) })] })] }), _jsx("div", { className: "b2b-help", children: t('priceLists.create.windowHint') })] }) }), _jsxs("div", { className: "b2b-drawer__foot", children: [_jsx("button", { type: "button", className: "b2b-btn b2b-btn--ghost", onClick: onClose, children: t('priceLists.create.cancel') }), _jsx("button", { type: "button", className: "b2b-btn b2b-btn--primary", disabled: submitting || !name.trim(), onClick: () => {
180
+ void handle();
181
+ }, children: submitting ? t('priceLists.create.creating') : t('priceLists.create.submit') })] })] })] }));
182
+ }
183
+ function formatRange(startsAt, endsAt, t) {
184
+ if (!startsAt && !endsAt)
185
+ return t('priceLists.window.always');
186
+ const fmt = (s) => (s ? new Date(s).toLocaleDateString() : '—');
187
+ return `${fmt(startsAt)} → ${fmt(endsAt)}`;
188
+ }
189
+ function formatDate(iso) {
190
+ return new Date(iso).toLocaleString();
191
+ }
192
+ /**
193
+ * The registry loads a route component through a dynamic-import factory and
194
+ * reads its default export (feature 091, FR-013). The named export stays: it is
195
+ * the spelling this module's own code and its tests use.
196
+ */
197
+ export default PriceListsPage;
198
+ //# sourceMappingURL=PriceListsPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PriceListsPage.js","sourceRoot":"","sources":["../../../src/admin/pages/PriceListsPage.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { AdminZoneProps } from '@endora-commerce/contracts';
3
+ /**
4
+ * The category editor's price-display-mode override (feature 091, P7a).
5
+ *
6
+ * `catalog`'s `CategoriesTree.tsx` used to import `DisplayModeOverrideRow`
7
+ * directly and hand it its own label and hint. The place is
8
+ * `category.editor.after` now, and this is the four-line wrapper that binds the
9
+ * zone's props to the control's: the scope is *this module's* constant, because
10
+ * the host mounting a category editor is the only thing that could have said
11
+ * `'category'`.
12
+ *
13
+ * **No `match`, and it is a decision rather than an omission.** `match` narrows
14
+ * the mounts of one place (Z13); this place has one host and one mount, so
15
+ * there is nothing to narrow, and `match` has no negation — anything written
16
+ * here would be an enumeration of `catalog`'s vocabulary that goes stale
17
+ * fail-closed. `admin/test/modules/price_lists/price-lists-zones.test.tsx`
18
+ * asserts it absent.
19
+ */
20
+ export type CategoryDisplayModeProps = AdminZoneProps<'category.editor.after'>;
21
+ export declare function CategoryDisplayMode({ categoryId }: CategoryDisplayModeProps): ReactNode;
22
+ /**
23
+ * The zone renderer loads a contribution through a dynamic-import factory and
24
+ * reads its default export (feature 091, FR-013).
25
+ */
26
+ export default CategoryDisplayMode;
27
+ //# sourceMappingURL=CategoryDisplayMode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CategoryDisplayMode.d.ts","sourceRoot":"","sources":["../../../src/admin/zones/CategoryDisplayMode.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAGjE;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,wBAAwB,GAAG,cAAc,CAAC,uBAAuB,CAAC,CAAC;AAE/E,wBAAgB,mBAAmB,CAAC,EAAE,UAAU,EAAE,EAAE,wBAAwB,GAAG,SAAS,CAEvF;AAED;;;GAGG;AACH,eAAe,mBAAmB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { DisplayModeOverrideRow } from '../components/DisplayModeOverrideRow.js';
3
+ export function CategoryDisplayMode({ categoryId }) {
4
+ return _jsx(DisplayModeOverrideRow, { scope: "category", targetId: categoryId });
5
+ }
6
+ /**
7
+ * The zone renderer loads a contribution through a dynamic-import factory and
8
+ * reads its default export (feature 091, FR-013).
9
+ */
10
+ export default CategoryDisplayMode;
11
+ //# sourceMappingURL=CategoryDisplayMode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CategoryDisplayMode.js","sourceRoot":"","sources":["../../../src/admin/zones/CategoryDisplayMode.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AAqBjF,MAAM,UAAU,mBAAmB,CAAC,EAAE,UAAU,EAA4B;IAC1E,OAAO,KAAC,sBAAsB,IAAC,KAAK,EAAC,UAAU,EAAC,QAAQ,EAAE,UAAU,GAAI,CAAC;AAC3E,CAAC;AAED;;;GAGG;AACH,eAAe,mBAAmB,CAAC"}
@@ -0,0 +1,36 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { AdminZoneProps } from '@endora-commerce/contracts';
3
+ /**
4
+ * The organization detail screen's price-display-mode override (feature 091,
5
+ * P7b).
6
+ *
7
+ * `organizations`' `OrganizationDetail.tsx` used to import
8
+ * `DisplayModeOverrideRow` by path and wrap it in a card of its own, handing it
9
+ * `organizations.detail.pricingLabel` and `organizations.detail.pricingHint`.
10
+ * The place is `organization.detail.after` now, and the scope is *this
11
+ * module's* constant, because the host mounting an organization detail is the
12
+ * only thing that could have said `'organization'`.
13
+ *
14
+ * **The card is the contribution's and not the host's**, which is the one
15
+ * layout decision this wrapper makes. The zone is a stack of panels and the
16
+ * other three contributors each render a `Card`; a bare row between them would
17
+ * read as a rendering failure. The host cannot wrap the zone in one card
18
+ * instead, because that would nest four cards inside a fifth. What went with
19
+ * the host's card is its heading — `organizations.detail.pricingCard` — for
20
+ * `DisplayModeOverrideRow`'s own reason: a host cannot title a contributor it
21
+ * does not know, and the row already labels its control.
22
+ *
23
+ * **No `match`, and it is a decision rather than an omission.** `match` narrows
24
+ * the mounts of one place (Z13); this place has one host and one mount, so
25
+ * there is nothing to narrow.
26
+ * `admin/test/modules/price_lists/price-lists-zones.test.tsx` asserts it absent
27
+ * so a later author cannot add one quietly.
28
+ */
29
+ export type OrganizationDisplayModeProps = AdminZoneProps<'organization.detail.after'>;
30
+ export declare function OrganizationDisplayMode({ organizationId, }: OrganizationDisplayModeProps): ReactNode;
31
+ /**
32
+ * The zone renderer loads a contribution through a dynamic-import factory and
33
+ * reads its default export (feature 091, FR-013).
34
+ */
35
+ export default OrganizationDisplayMode;
36
+ //# sourceMappingURL=OrganizationDisplayMode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrganizationDisplayMode.d.ts","sourceRoot":"","sources":["../../../src/admin/zones/OrganizationDisplayMode.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAIjE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,MAAM,4BAA4B,GAAG,cAAc,CAAC,2BAA2B,CAAC,CAAC;AAEvF,wBAAgB,uBAAuB,CAAC,EACtC,cAAc,GACf,EAAE,4BAA4B,GAAG,SAAS,CAQ1C;AAED;;;GAGG;AACH,eAAe,uBAAuB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Card, CardContent } from '@endora-commerce/admin-kit/ui';
3
+ import { DisplayModeOverrideRow } from '../components/DisplayModeOverrideRow.js';
4
+ export function OrganizationDisplayMode({ organizationId, }) {
5
+ return (_jsx(Card, { className: "mb-4", children: _jsx(CardContent, { children: _jsx(DisplayModeOverrideRow, { scope: "organization", targetId: organizationId }) }) }));
6
+ }
7
+ /**
8
+ * The zone renderer loads a contribution through a dynamic-import factory and
9
+ * reads its default export (feature 091, FR-013).
10
+ */
11
+ export default OrganizationDisplayMode;
12
+ //# sourceMappingURL=OrganizationDisplayMode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrganizationDisplayMode.js","sourceRoot":"","sources":["../../../src/admin/zones/OrganizationDisplayMode.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AA8BjF,MAAM,UAAU,uBAAuB,CAAC,EACtC,cAAc,GACe;IAC7B,OAAO,CACL,KAAC,IAAI,IAAC,SAAS,EAAC,MAAM,YACpB,KAAC,WAAW,cACV,KAAC,sBAAsB,IAAC,KAAK,EAAC,cAAc,EAAC,QAAQ,EAAE,cAAc,GAAI,GAC7D,GACT,CACR,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,eAAe,uBAAuB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { AdminZoneProps } from '@endora-commerce/contracts';
3
+ /**
4
+ * The product editor's linked-price-lists panel (feature 091, P7a).
5
+ *
6
+ * `catalog`'s `ProductEditor.tsx` used to import `LinkedPriceListsPanel`
7
+ * directly and render it as the last child of the Pricing tab. The place is
8
+ * `product.editor.pricing.after` now, and the zone's props are the panel's, so
9
+ * this wrapper exists only to give the renderer a default export.
10
+ *
11
+ * **No `match`** — one host, one mount; see `CategoryDisplayMode.tsx`.
12
+ */
13
+ export type ProductLinkedPriceListsProps = AdminZoneProps<'product.editor.pricing.after'>;
14
+ export declare function ProductLinkedPriceLists({ productId }: ProductLinkedPriceListsProps): ReactNode;
15
+ export default ProductLinkedPriceLists;
16
+ //# sourceMappingURL=ProductLinkedPriceLists.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProductLinkedPriceLists.d.ts","sourceRoot":"","sources":["../../../src/admin/zones/ProductLinkedPriceLists.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAGjE;;;;;;;;;GASG;AACH,MAAM,MAAM,4BAA4B,GAAG,cAAc,CAAC,8BAA8B,CAAC,CAAC;AAE1F,wBAAgB,uBAAuB,CAAC,EAAE,SAAS,EAAE,EAAE,4BAA4B,GAAG,SAAS,CAE9F;AAED,eAAe,uBAAuB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { LinkedPriceListsPanel } from '../components/LinkedPriceListsPanel.js';
3
+ export function ProductLinkedPriceLists({ productId }) {
4
+ return _jsx(LinkedPriceListsPanel, { productId: productId });
5
+ }
6
+ export default ProductLinkedPriceLists;
7
+ //# sourceMappingURL=ProductLinkedPriceLists.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProductLinkedPriceLists.js","sourceRoot":"","sources":["../../../src/admin/zones/ProductLinkedPriceLists.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAc/E,MAAM,UAAU,uBAAuB,CAAC,EAAE,SAAS,EAAgC;IACjF,OAAO,KAAC,qBAAqB,IAAC,SAAS,EAAE,SAAS,GAAI,CAAC;AACzD,CAAC;AAED,eAAe,uBAAuB,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { OptionalProps } from '@mikro-orm/core';
2
+ /**
3
+ * PriceDisplayModeOverride — per-Organization / per-Category / per-Product
4
+ * override of the price display mode.
5
+ *
6
+ * Resolves alongside the platform defaults from the settings module
7
+ * (`pricing.default_display_mode`, `pricing.unauthenticated_display_mode`)
8
+ * via the chain Product → Category → Organization → Settings.
9
+ *
10
+ * Composite primary key on `(scope, targetId)` allows at most one override per
11
+ * scope+target pair. The `targetId` is a polymorphic FK to the appropriate
12
+ * table for `scope`; integrity is enforced at the service layer because the
13
+ * target table varies (data-model.md §1.4).
14
+ */
15
+ export declare class PriceDisplayModeOverride {
16
+ [OptionalProps]?: 'createdAt' | 'updatedAt';
17
+ scope: 'organization' | 'category' | 'product';
18
+ targetId: string;
19
+ mode: 'gross_only' | 'net_only' | 'both' | 'none';
20
+ createdAt: Date;
21
+ updatedAt: Date;
22
+ }
23
+ //# sourceMappingURL=price-display-mode-override.entity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"price-display-mode-override.entity.d.ts","sourceRoot":"","sources":["../../../src/backend/entities/price-display-mode-override.entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,aAAa,EAAwB,MAAM,iBAAiB,CAAC;AAG9E;;;;;;;;;;;;GAYG;AACH,qBAEa,wBAAwB;IACnC,CAAC,aAAa,CAAC,CAAC,EAAE,WAAW,GAAG,WAAW,CAAC;IAG5C,KAAK,EAAG,cAAc,GAAG,UAAU,GAAG,SAAS,CAAC;IAGhD,QAAQ,EAAG,MAAM,CAAC;IAGlB,IAAI,EAAG,YAAY,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;IAGnD,SAAS,EAAE,IAAI,CAAc;IAG7B,SAAS,EAAE,IAAI,CAAc;CAC9B"}
@@ -0,0 +1,58 @@
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, OptionalProps, PrimaryKey, Property } from '@mikro-orm/core';
11
+ import { GlobalEntity } from '@endora-commerce/platform/tenancy';
12
+ /**
13
+ * PriceDisplayModeOverride — per-Organization / per-Category / per-Product
14
+ * override of the price display mode.
15
+ *
16
+ * Resolves alongside the platform defaults from the settings module
17
+ * (`pricing.default_display_mode`, `pricing.unauthenticated_display_mode`)
18
+ * via the chain Product → Category → Organization → Settings.
19
+ *
20
+ * Composite primary key on `(scope, targetId)` allows at most one override per
21
+ * scope+target pair. The `targetId` is a polymorphic FK to the appropriate
22
+ * table for `scope`; integrity is enforced at the service layer because the
23
+ * target table varies (data-model.md §1.4).
24
+ */
25
+ let PriceDisplayModeOverride = class PriceDisplayModeOverride {
26
+ [OptionalProps];
27
+ scope;
28
+ targetId;
29
+ mode;
30
+ createdAt = new Date();
31
+ updatedAt = new Date();
32
+ };
33
+ __decorate([
34
+ PrimaryKey({ type: 'string', length: 16 }),
35
+ __metadata("design:type", String)
36
+ ], PriceDisplayModeOverride.prototype, "scope", void 0);
37
+ __decorate([
38
+ PrimaryKey({ type: 'uuid' }),
39
+ __metadata("design:type", String)
40
+ ], PriceDisplayModeOverride.prototype, "targetId", void 0);
41
+ __decorate([
42
+ Property({ type: 'string', length: 16 }),
43
+ __metadata("design:type", String)
44
+ ], PriceDisplayModeOverride.prototype, "mode", void 0);
45
+ __decorate([
46
+ Property({ type: 'datetime', onCreate: () => new Date() }),
47
+ __metadata("design:type", Date)
48
+ ], PriceDisplayModeOverride.prototype, "createdAt", void 0);
49
+ __decorate([
50
+ Property({ type: 'datetime', onUpdate: () => new Date() }),
51
+ __metadata("design:type", Date)
52
+ ], PriceDisplayModeOverride.prototype, "updatedAt", void 0);
53
+ PriceDisplayModeOverride = __decorate([
54
+ GlobalEntity(),
55
+ Entity({ tableName: 'price_display_mode_overrides' })
56
+ ], PriceDisplayModeOverride);
57
+ export { PriceDisplayModeOverride };
58
+ //# sourceMappingURL=price-display-mode-override.entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"price-display-mode-override.entity.js","sourceRoot":"","sources":["../../../src/backend/entities/price-display-mode-override.entity.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAEjE;;;;;;;;;;;;GAYG;AAGI,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IACnC,CAAC,aAAa,CAAC,CAA6B;IAG5C,KAAK,CAA2C;IAGhD,QAAQ,CAAU;IAGlB,IAAI,CAA+C;IAGnD,SAAS,GAAS,IAAI,IAAI,EAAE,CAAC;IAG7B,SAAS,GAAS,IAAI,IAAI,EAAE,CAAC;CAC9B,CAAA;AAbC;IADC,UAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;;uDACK;AAGhD;IADC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;0DACX;AAGlB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;;sDACU;AAGnD;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;8BAChD,IAAI;2DAAc;AAG7B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;8BAChD,IAAI;2DAAc;AAhBlB,wBAAwB;IAFpC,YAAY,EAAE;IACd,MAAM,CAAC,EAAE,SAAS,EAAE,8BAA8B,EAAE,CAAC;GACzC,wBAAwB,CAiBpC"}
@@ -0,0 +1,26 @@
1
+ import { OptionalProps } from '@mikro-orm/core';
2
+ /**
3
+ * PriceListPriceBracket — one bracket row inside a price list for a given
4
+ * `(product, currency)` pair.
5
+ *
6
+ * Composite primary key on `(priceListId, productId, currencyCode, minQuantity)`
7
+ * which guarantees a unique starting point per series. Overlap-freedom across
8
+ * brackets within the same `(list, product, currency)` triplet is enforced at
9
+ * the service layer (research §R3) — not at the DB — so the API can return a
10
+ * structured `400 bracket_overlap` error.
11
+ *
12
+ * `maxQuantity = null` is the open-ended top bracket. `amount` is decimal(14,4)
13
+ * stored as a string to preserve precision through the wire and the ORM.
14
+ */
15
+ export declare class PriceListPriceBracket {
16
+ [OptionalProps]?: 'createdAt' | 'updatedAt' | 'maxQuantity';
17
+ priceListId: string;
18
+ productId: string;
19
+ currencyCode: string;
20
+ minQuantity: number;
21
+ maxQuantity?: number | null;
22
+ amount: string;
23
+ createdAt: Date;
24
+ updatedAt: Date;
25
+ }
26
+ //# sourceMappingURL=price-list-price-bracket.entity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"price-list-price-bracket.entity.d.ts","sourceRoot":"","sources":["../../../src/backend/entities/price-list-price-bracket.entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,aAAa,EAAwB,MAAM,iBAAiB,CAAC;AAG9E;;;;;;;;;;;;GAYG;AACH,qBAEa,qBAAqB;IAChC,CAAC,aAAa,CAAC,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,aAAa,CAAC;IAG5D,WAAW,EAAG,MAAM,CAAC;IAGrB,SAAS,EAAG,MAAM,CAAC;IAGnB,YAAY,EAAG,MAAM,CAAC;IAGtB,WAAW,EAAG,MAAM,CAAC;IAGrB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAG5B,MAAM,EAAG,MAAM,CAAC;IAGhB,SAAS,EAAE,IAAI,CAAc;IAG7B,SAAS,EAAE,IAAI,CAAc;CAC9B"}
@@ -0,0 +1,73 @@
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, OptionalProps, PrimaryKey, Property } from '@mikro-orm/core';
11
+ import { GlobalEntity } from '@endora-commerce/platform/tenancy';
12
+ /**
13
+ * PriceListPriceBracket — one bracket row inside a price list for a given
14
+ * `(product, currency)` pair.
15
+ *
16
+ * Composite primary key on `(priceListId, productId, currencyCode, minQuantity)`
17
+ * which guarantees a unique starting point per series. Overlap-freedom across
18
+ * brackets within the same `(list, product, currency)` triplet is enforced at
19
+ * the service layer (research §R3) — not at the DB — so the API can return a
20
+ * structured `400 bracket_overlap` error.
21
+ *
22
+ * `maxQuantity = null` is the open-ended top bracket. `amount` is decimal(14,4)
23
+ * stored as a string to preserve precision through the wire and the ORM.
24
+ */
25
+ let PriceListPriceBracket = class PriceListPriceBracket {
26
+ [OptionalProps];
27
+ priceListId;
28
+ productId;
29
+ currencyCode;
30
+ minQuantity;
31
+ maxQuantity;
32
+ amount;
33
+ createdAt = new Date();
34
+ updatedAt = new Date();
35
+ };
36
+ __decorate([
37
+ PrimaryKey({ type: 'uuid' }),
38
+ __metadata("design:type", String)
39
+ ], PriceListPriceBracket.prototype, "priceListId", void 0);
40
+ __decorate([
41
+ PrimaryKey({ type: 'uuid' }),
42
+ __metadata("design:type", String)
43
+ ], PriceListPriceBracket.prototype, "productId", void 0);
44
+ __decorate([
45
+ PrimaryKey({ type: 'string', length: 3 }),
46
+ __metadata("design:type", String)
47
+ ], PriceListPriceBracket.prototype, "currencyCode", void 0);
48
+ __decorate([
49
+ PrimaryKey({ type: 'integer' }),
50
+ __metadata("design:type", Number)
51
+ ], PriceListPriceBracket.prototype, "minQuantity", void 0);
52
+ __decorate([
53
+ Property({ type: 'integer', nullable: true }),
54
+ __metadata("design:type", Object)
55
+ ], PriceListPriceBracket.prototype, "maxQuantity", void 0);
56
+ __decorate([
57
+ Property({ type: 'decimal', precision: 14, scale: 4 }),
58
+ __metadata("design:type", String)
59
+ ], PriceListPriceBracket.prototype, "amount", void 0);
60
+ __decorate([
61
+ Property({ type: 'datetime', onCreate: () => new Date() }),
62
+ __metadata("design:type", Date)
63
+ ], PriceListPriceBracket.prototype, "createdAt", void 0);
64
+ __decorate([
65
+ Property({ type: 'datetime', onUpdate: () => new Date() }),
66
+ __metadata("design:type", Date)
67
+ ], PriceListPriceBracket.prototype, "updatedAt", void 0);
68
+ PriceListPriceBracket = __decorate([
69
+ GlobalEntity(),
70
+ Entity({ tableName: 'price_list_price_brackets' })
71
+ ], PriceListPriceBracket);
72
+ export { PriceListPriceBracket };
73
+ //# sourceMappingURL=price-list-price-bracket.entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"price-list-price-bracket.entity.js","sourceRoot":"","sources":["../../../src/backend/entities/price-list-price-bracket.entity.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAEjE;;;;;;;;;;;;GAYG;AAGI,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAChC,CAAC,aAAa,CAAC,CAA6C;IAG5D,WAAW,CAAU;IAGrB,SAAS,CAAU;IAGnB,YAAY,CAAU;IAGtB,WAAW,CAAU;IAGrB,WAAW,CAAiB;IAG5B,MAAM,CAAU;IAGhB,SAAS,GAAS,IAAI,IAAI,EAAE,CAAC;IAG7B,SAAS,GAAS,IAAI,IAAI,EAAE,CAAC;CAC9B,CAAA;AAtBC;IADC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;0DACR;AAGrB;IADC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;wDACV;AAGnB;IADC,UAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;;2DACpB;AAGtB;IADC,UAAU,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;0DACX;AAGrB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;0DAClB;AAG5B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;;qDACvC;AAGhB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;8BAChD,IAAI;wDAAc;AAG7B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;8BAChD,IAAI;wDAAc;AAzBlB,qBAAqB;IAFjC,YAAY,EAAE;IACd,MAAM,CAAC,EAAE,SAAS,EAAE,2BAA2B,EAAE,CAAC;GACtC,qBAAqB,CA0BjC"}
@@ -0,0 +1,15 @@
1
+ import { OptionalProps } from '@mikro-orm/core';
2
+ /**
3
+ * PriceListProduct — assignment join between a price list and a product.
4
+ *
5
+ * Composite primary key on `(priceListId, productId)`. The bracket rows in
6
+ * `price_list_price_brackets` cascade off this assignment: removing a product
7
+ * from a list deletes its bracket rows.
8
+ */
9
+ export declare class PriceListProduct {
10
+ [OptionalProps]?: 'createdAt';
11
+ priceListId: string;
12
+ productId: string;
13
+ createdAt: Date;
14
+ }
15
+ //# sourceMappingURL=price-list-product.entity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"price-list-product.entity.d.ts","sourceRoot":"","sources":["../../../src/backend/entities/price-list-product.entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,aAAa,EAAwB,MAAM,iBAAiB,CAAC;AAGrF;;;;;;GAMG;AACH,qBAEa,gBAAgB;IAC3B,CAAC,aAAa,CAAC,CAAC,EAAE,WAAW,CAAC;IAG9B,WAAW,EAAG,MAAM,CAAC;IAGrB,SAAS,EAAG,MAAM,CAAC;IAInB,SAAS,EAAE,IAAI,CAAc;CAC9B"}