@open-mercato/core 0.6.4-develop.3996.1.430e257cfc → 0.6.4-develop.4011.1.4f3ed9ae3e
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/.turbo/turbo-build.log +1 -1
- package/dist/modules/auth/api/features.js +24 -2
- package/dist/modules/auth/api/features.js.map +2 -2
- package/dist/modules/auth/backend/users/[id]/edit/page.js +70 -57
- package/dist/modules/auth/backend/users/[id]/edit/page.js.map +2 -2
- package/dist/modules/auth/components/AclDependencyDiagnosticsPanel.js +135 -0
- package/dist/modules/auth/components/AclDependencyDiagnosticsPanel.js.map +7 -0
- package/dist/modules/auth/components/AclEditor.js +10 -0
- package/dist/modules/auth/components/AclEditor.js.map +2 -2
- package/dist/modules/catalog/acl.js +30 -5
- package/dist/modules/catalog/acl.js.map +2 -2
- package/dist/modules/catalog/backend/catalog/products/[id]/page.js +17 -5
- package/dist/modules/catalog/backend/catalog/products/[id]/page.js.map +2 -2
- package/dist/modules/catalog/commands/offers.js +26 -7
- package/dist/modules/catalog/commands/offers.js.map +2 -2
- package/dist/modules/catalog/commands/prices.js +41 -26
- package/dist/modules/catalog/commands/prices.js.map +2 -2
- package/dist/modules/catalog/commands/productUnitConversions.js +7 -1
- package/dist/modules/catalog/commands/productUnitConversions.js.map +2 -2
- package/dist/modules/catalog/commands/products.js +2 -0
- package/dist/modules/catalog/commands/products.js.map +2 -2
- package/dist/modules/catalog/commands/shared.js +58 -11
- package/dist/modules/catalog/commands/shared.js.map +2 -2
- package/dist/modules/catalog/commands/variants.js +18 -5
- package/dist/modules/catalog/commands/variants.js.map +2 -2
- package/dist/modules/customers/acl.js +72 -12
- package/dist/modules/customers/acl.js.map +2 -2
- package/dist/modules/resources/backend/resources/resources/[id]/page.js +17 -2
- package/dist/modules/resources/backend/resources/resources/[id]/page.js.map +2 -2
- package/dist/modules/sales/acl.js +109 -16
- package/dist/modules/sales/acl.js.map +2 -2
- package/dist/modules/sales/backend/sales/documents/[id]/page.js +20 -1
- package/dist/modules/sales/backend/sales/documents/[id]/page.js.map +2 -2
- package/dist/modules/sales/setup.js +2 -0
- package/dist/modules/sales/setup.js.map +2 -2
- package/package.json +7 -7
- package/src/modules/auth/api/features.ts +34 -4
- package/src/modules/auth/backend/users/[id]/edit/page.tsx +28 -6
- package/src/modules/auth/components/AclDependencyDiagnosticsPanel.tsx +173 -0
- package/src/modules/auth/components/AclEditor.tsx +14 -4
- package/src/modules/auth/i18n/de.json +9 -0
- package/src/modules/auth/i18n/en.json +9 -0
- package/src/modules/auth/i18n/es.json +9 -0
- package/src/modules/auth/i18n/pl.json +9 -0
- package/src/modules/catalog/acl.ts +30 -5
- package/src/modules/catalog/backend/catalog/products/[id]/page.tsx +21 -5
- package/src/modules/catalog/commands/offers.ts +26 -7
- package/src/modules/catalog/commands/prices.ts +41 -26
- package/src/modules/catalog/commands/productUnitConversions.ts +7 -1
- package/src/modules/catalog/commands/products.ts +2 -0
- package/src/modules/catalog/commands/shared.ts +70 -6
- package/src/modules/catalog/commands/variants.ts +18 -5
- package/src/modules/catalog/i18n/de.json +1 -0
- package/src/modules/catalog/i18n/en.json +1 -0
- package/src/modules/catalog/i18n/es.json +1 -0
- package/src/modules/catalog/i18n/pl.json +1 -0
- package/src/modules/customers/acl.ts +72 -12
- package/src/modules/resources/backend/resources/resources/[id]/page.tsx +21 -2
- package/src/modules/sales/acl.ts +109 -16
- package/src/modules/sales/backend/sales/documents/[id]/page.tsx +28 -1
- package/src/modules/sales/i18n/de.json +3 -0
- package/src/modules/sales/i18n/en.json +3 -0
- package/src/modules/sales/i18n/es.json +3 -0
- package/src/modules/sales/i18n/pl.json +3 -0
- package/src/modules/sales/setup.ts +2 -0
|
@@ -1,23 +1,83 @@
|
|
|
1
1
|
export const features = [
|
|
2
2
|
{ id: 'customers.people.view', title: 'View people', module: 'customers' },
|
|
3
|
-
{
|
|
3
|
+
{
|
|
4
|
+
id: 'customers.people.manage',
|
|
5
|
+
title: 'Manage people',
|
|
6
|
+
module: 'customers',
|
|
7
|
+
dependsOn: ['customers.people.view'],
|
|
8
|
+
},
|
|
4
9
|
{ id: 'customers.companies.view', title: 'View companies', module: 'customers' },
|
|
5
|
-
{
|
|
6
|
-
|
|
7
|
-
|
|
10
|
+
{
|
|
11
|
+
id: 'customers.companies.manage',
|
|
12
|
+
title: 'Manage companies',
|
|
13
|
+
module: 'customers',
|
|
14
|
+
dependsOn: ['customers.companies.view'],
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
id: 'customers.deals.view',
|
|
18
|
+
title: 'View deals',
|
|
19
|
+
module: 'customers',
|
|
20
|
+
dependsOn: ['customers.people.view'],
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
id: 'customers.deals.manage',
|
|
24
|
+
title: 'Manage deals',
|
|
25
|
+
module: 'customers',
|
|
26
|
+
dependsOn: ['customers.deals.view'],
|
|
27
|
+
},
|
|
8
28
|
{ id: 'customers.activities.view', title: 'View activities', module: 'customers' },
|
|
9
|
-
{
|
|
29
|
+
{
|
|
30
|
+
id: 'customers.activities.manage',
|
|
31
|
+
title: 'Manage activities',
|
|
32
|
+
module: 'customers',
|
|
33
|
+
dependsOn: ['customers.activities.view'],
|
|
34
|
+
},
|
|
10
35
|
{ id: 'customers.settings.manage', title: 'Manage customer settings', module: 'customers' },
|
|
11
36
|
{ id: 'customers.pipelines.view', title: 'View pipelines', module: 'customers' },
|
|
12
|
-
{
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
37
|
+
{
|
|
38
|
+
id: 'customers.pipelines.manage',
|
|
39
|
+
title: 'Manage pipelines',
|
|
40
|
+
module: 'customers',
|
|
41
|
+
dependsOn: ['customers.pipelines.view'],
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
id: 'customers.widgets.todos',
|
|
45
|
+
title: 'Use customer todos widget',
|
|
46
|
+
module: 'customers',
|
|
47
|
+
dependsOn: ['customers.activities.view'],
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
id: 'customers.widgets.next-interactions',
|
|
51
|
+
title: 'Use customer next interactions widget',
|
|
52
|
+
module: 'customers',
|
|
53
|
+
dependsOn: ['customers.interactions.view'],
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
id: 'customers.widgets.new-customers',
|
|
57
|
+
title: 'Use customer new customers widget',
|
|
58
|
+
module: 'customers',
|
|
59
|
+
dependsOn: ['customers.people.view'],
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
id: 'customers.widgets.new-deals',
|
|
63
|
+
title: 'Use customer new deals widget',
|
|
64
|
+
module: 'customers',
|
|
65
|
+
dependsOn: ['customers.deals.view'],
|
|
66
|
+
},
|
|
17
67
|
{ id: 'customers.interactions.view', title: 'View interactions', module: 'customers' },
|
|
18
|
-
{
|
|
68
|
+
{
|
|
69
|
+
id: 'customers.interactions.manage',
|
|
70
|
+
title: 'Manage interactions',
|
|
71
|
+
module: 'customers',
|
|
72
|
+
dependsOn: ['customers.interactions.view'],
|
|
73
|
+
},
|
|
19
74
|
{ id: 'customers.roles.view', title: 'View entity roles', module: 'customers' },
|
|
20
|
-
{
|
|
75
|
+
{
|
|
76
|
+
id: 'customers.roles.manage',
|
|
77
|
+
title: 'Manage entity roles',
|
|
78
|
+
module: 'customers',
|
|
79
|
+
dependsOn: ['customers.roles.view'],
|
|
80
|
+
},
|
|
21
81
|
]
|
|
22
82
|
|
|
23
83
|
export default features
|
|
@@ -10,7 +10,7 @@ import { collectCustomFieldValues } from '@open-mercato/ui/backend/utils/customF
|
|
|
10
10
|
import { createCrudFormError } from '@open-mercato/ui/backend/utils/serverErrors'
|
|
11
11
|
import { updateCrud, deleteCrud } from '@open-mercato/ui/backend/utils/crud'
|
|
12
12
|
import { flash } from '@open-mercato/ui/backend/FlashMessages'
|
|
13
|
-
import { ActivitiesSection, NotesSection, type SectionAction, type TagOption } from '@open-mercato/ui/backend/detail'
|
|
13
|
+
import { ActivitiesSection, NotesSection, RecordNotFoundState, type SectionAction, type TagOption } from '@open-mercato/ui/backend/detail'
|
|
14
14
|
import { VersionHistoryAction } from '@open-mercato/ui/backend/version-history'
|
|
15
15
|
import { SendObjectMessageDialog } from '@open-mercato/ui/backend/messages'
|
|
16
16
|
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
@@ -83,6 +83,7 @@ export default function ResourcesResourceDetailPage({ params }: { params?: { id?
|
|
|
83
83
|
const router = useRouter()
|
|
84
84
|
const searchParams = useSearchParams()
|
|
85
85
|
const [initialValues, setInitialValues] = React.useState<Record<string, unknown> | null>(null)
|
|
86
|
+
const [isNotFound, setIsNotFound] = React.useState(false)
|
|
86
87
|
const [tags, setTags] = React.useState<TagOption[]>([])
|
|
87
88
|
const [activeTab, setActiveTab] = React.useState<'details' | 'availability'>('details')
|
|
88
89
|
const [activeDetailTab, setActiveDetailTab] = React.useState<'notes' | 'activities'>('notes')
|
|
@@ -411,6 +412,7 @@ export default function ResourcesResourceDetailPage({ params }: { params?: { id?
|
|
|
411
412
|
|
|
412
413
|
React.useEffect(() => {
|
|
413
414
|
if (!resourceId || !resourceTypesLoaded) return
|
|
415
|
+
setIsNotFound(false)
|
|
414
416
|
let cancelled = false
|
|
415
417
|
async function loadResource() {
|
|
416
418
|
try {
|
|
@@ -421,7 +423,10 @@ export default function ResourcesResourceDetailPage({ params }: { params?: { id?
|
|
|
421
423
|
const record = await readApiResultOrThrow<ResourceResponse>(`/api/resources/resources?${params.toString()}`)
|
|
422
424
|
const resourceRaw = Array.isArray(record?.items) ? record.items[0] : null
|
|
423
425
|
const resource = resourceRaw ? normalizeResourceRecord(resourceRaw) : null
|
|
424
|
-
if (!resource)
|
|
426
|
+
if (!resource) {
|
|
427
|
+
if (!cancelled) setIsNotFound(true)
|
|
428
|
+
return
|
|
429
|
+
}
|
|
425
430
|
if (!cancelled) {
|
|
426
431
|
const customValues = extractCustomFieldEntries(resource)
|
|
427
432
|
setTags(Array.isArray(resource.tags) ? resource.tags : [])
|
|
@@ -479,6 +484,20 @@ export default function ResourcesResourceDetailPage({ params }: { params?: { id?
|
|
|
479
484
|
? initialValues.name.trim()
|
|
480
485
|
: t('resources.resources.detail.untitled', 'Unnamed resource')
|
|
481
486
|
|
|
487
|
+
if (isNotFound) {
|
|
488
|
+
return (
|
|
489
|
+
<Page>
|
|
490
|
+
<PageBody>
|
|
491
|
+
<RecordNotFoundState
|
|
492
|
+
label={t('resources.resources.form.errors.notFound', 'Resource not found.')}
|
|
493
|
+
backHref="/backend/resources/resources"
|
|
494
|
+
backLabel={t('resources.resources.detail.back', 'Back to resources')}
|
|
495
|
+
/>
|
|
496
|
+
</PageBody>
|
|
497
|
+
</Page>
|
|
498
|
+
)
|
|
499
|
+
}
|
|
500
|
+
|
|
482
501
|
return (
|
|
483
502
|
<Page>
|
|
484
503
|
<PageBody>
|
package/src/modules/sales/acl.ts
CHANGED
|
@@ -1,20 +1,113 @@
|
|
|
1
1
|
export const features = [
|
|
2
|
-
{
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
{
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
2
|
+
{
|
|
3
|
+
id: 'sales.orders.view',
|
|
4
|
+
title: 'View sales orders',
|
|
5
|
+
module: 'sales',
|
|
6
|
+
dependsOn: [
|
|
7
|
+
'sales.channels.view',
|
|
8
|
+
'sales.settings.view',
|
|
9
|
+
'customers.people.view',
|
|
10
|
+
'catalog.products.view',
|
|
11
|
+
'currencies.view',
|
|
12
|
+
],
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
id: 'sales.orders.manage',
|
|
16
|
+
title: 'Manage sales orders',
|
|
17
|
+
module: 'sales',
|
|
18
|
+
dependsOn: ['sales.orders.view'],
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
id: 'sales.orders.approve',
|
|
22
|
+
title: 'Approve sales orders',
|
|
23
|
+
module: 'sales',
|
|
24
|
+
dependsOn: ['sales.orders.view'],
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
id: 'sales.widgets.new-orders',
|
|
28
|
+
title: 'View new orders widget',
|
|
29
|
+
module: 'sales',
|
|
30
|
+
dependsOn: ['sales.orders.view'],
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
id: 'sales.widgets.new-quotes',
|
|
34
|
+
title: 'View new quotes widget',
|
|
35
|
+
module: 'sales',
|
|
36
|
+
dependsOn: ['sales.quotes.view'],
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
id: 'sales.quotes.view',
|
|
40
|
+
title: 'View sales quotes',
|
|
41
|
+
module: 'sales',
|
|
42
|
+
dependsOn: [
|
|
43
|
+
'sales.channels.view',
|
|
44
|
+
'sales.settings.view',
|
|
45
|
+
'customers.people.view',
|
|
46
|
+
'catalog.products.view',
|
|
47
|
+
],
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
id: 'sales.quotes.manage',
|
|
51
|
+
title: 'Manage sales quotes',
|
|
52
|
+
module: 'sales',
|
|
53
|
+
dependsOn: ['sales.quotes.view'],
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
id: 'sales.documents.number.edit',
|
|
57
|
+
title: 'Edit sales document numbers',
|
|
58
|
+
module: 'sales',
|
|
59
|
+
dependsOn: ['sales.orders.view'],
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
id: 'sales.shipments.manage',
|
|
63
|
+
title: 'Manage order shipments',
|
|
64
|
+
module: 'sales',
|
|
65
|
+
dependsOn: ['sales.orders.view', 'shipping_carriers.view'],
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
id: 'sales.payments.manage',
|
|
69
|
+
title: 'Manage order payments',
|
|
70
|
+
module: 'sales',
|
|
71
|
+
dependsOn: ['sales.orders.view', 'payment_gateways.view'],
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
id: 'sales.returns.view',
|
|
75
|
+
title: 'View order returns',
|
|
76
|
+
module: 'sales',
|
|
77
|
+
dependsOn: ['sales.orders.view'],
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
id: 'sales.returns.create',
|
|
81
|
+
title: 'Create order returns',
|
|
82
|
+
module: 'sales',
|
|
83
|
+
dependsOn: ['sales.returns.view', 'sales.orders.manage'],
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
id: 'sales.invoices.manage',
|
|
87
|
+
title: 'Manage sales invoices',
|
|
88
|
+
module: 'sales',
|
|
89
|
+
dependsOn: ['sales.orders.view'],
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
id: 'sales.credit_memos.manage',
|
|
93
|
+
title: 'Manage credit memos',
|
|
94
|
+
module: 'sales',
|
|
95
|
+
dependsOn: ['sales.invoices.manage'],
|
|
96
|
+
},
|
|
97
|
+
{ id: 'sales.channels.view', title: 'View sales channels', module: 'sales' },
|
|
98
|
+
{
|
|
99
|
+
id: 'sales.channels.manage',
|
|
100
|
+
title: 'Manage sales channels',
|
|
101
|
+
module: 'sales',
|
|
102
|
+
dependsOn: ['sales.channels.view'],
|
|
103
|
+
},
|
|
104
|
+
{ id: 'sales.settings.view', title: 'View sales configuration', module: 'sales' },
|
|
105
|
+
{
|
|
106
|
+
id: 'sales.settings.manage',
|
|
107
|
+
title: 'Manage sales configuration',
|
|
108
|
+
module: 'sales',
|
|
109
|
+
dependsOn: ['sales.settings.view'],
|
|
110
|
+
},
|
|
18
111
|
]
|
|
19
112
|
|
|
20
113
|
export default features
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
ErrorMessage,
|
|
12
12
|
InlineTextEditor,
|
|
13
13
|
LoadingMessage,
|
|
14
|
+
RecordNotFoundState,
|
|
14
15
|
TabEmptyState,
|
|
15
16
|
TagsSection,
|
|
16
17
|
type TagOption,
|
|
@@ -1876,6 +1877,7 @@ export default function SalesDocumentDetailPage({
|
|
|
1876
1877
|
const searchParams = useSearchParams()
|
|
1877
1878
|
const { confirm, ConfirmDialogElement } = useConfirmDialog()
|
|
1878
1879
|
const [loading, setLoading] = React.useState(true)
|
|
1880
|
+
const [isNotFound, setIsNotFound] = React.useState(false)
|
|
1879
1881
|
const [record, setRecord] = React.useState<DocumentRecord | null>(null)
|
|
1880
1882
|
const [tags, setTags] = React.useState<TagOption[]>([])
|
|
1881
1883
|
const [kind, setKind] = React.useState<'order' | 'quote'>('quote')
|
|
@@ -2483,6 +2485,7 @@ export default function SalesDocumentDetailPage({
|
|
|
2483
2485
|
async function load() {
|
|
2484
2486
|
setLoading(true)
|
|
2485
2487
|
setError(null)
|
|
2488
|
+
setIsNotFound(false)
|
|
2486
2489
|
const requestedKind = searchParams.get('kind')
|
|
2487
2490
|
const preferredKind = requestedKind === 'order' ? 'order' : requestedKind === 'quote' ? 'quote' : initialKind ?? null
|
|
2488
2491
|
const kindsToTry: Array<'order' | 'quote'> = preferredKind
|
|
@@ -2505,7 +2508,11 @@ export default function SalesDocumentDetailPage({
|
|
|
2505
2508
|
}
|
|
2506
2509
|
if (!cancelled) {
|
|
2507
2510
|
setLoading(false)
|
|
2508
|
-
|
|
2511
|
+
if (lastError) {
|
|
2512
|
+
setError(lastError)
|
|
2513
|
+
} else {
|
|
2514
|
+
setIsNotFound(true)
|
|
2515
|
+
}
|
|
2509
2516
|
}
|
|
2510
2517
|
}
|
|
2511
2518
|
load().catch((err) => {
|
|
@@ -4435,6 +4442,26 @@ export default function SalesDocumentDetailPage({
|
|
|
4435
4442
|
)
|
|
4436
4443
|
}
|
|
4437
4444
|
|
|
4445
|
+
if (isNotFound) {
|
|
4446
|
+
const backHref = (searchParams.get('kind') === 'order' || initialKind === 'order')
|
|
4447
|
+
? '/backend/sales/orders'
|
|
4448
|
+
: '/backend/sales/quotes'
|
|
4449
|
+
const backLabel = (searchParams.get('kind') === 'order' || initialKind === 'order')
|
|
4450
|
+
? t('sales.documents.detail.backToOrders', 'Back to orders')
|
|
4451
|
+
: t('sales.documents.detail.backToQuotes', 'Back to quotes')
|
|
4452
|
+
return (
|
|
4453
|
+
<Page>
|
|
4454
|
+
<PageBody>
|
|
4455
|
+
<RecordNotFoundState
|
|
4456
|
+
label={t('sales.documents.detail.notFound', 'Document not found.')}
|
|
4457
|
+
backHref={backHref}
|
|
4458
|
+
backLabel={backLabel}
|
|
4459
|
+
/>
|
|
4460
|
+
</PageBody>
|
|
4461
|
+
</Page>
|
|
4462
|
+
)
|
|
4463
|
+
}
|
|
4464
|
+
|
|
4438
4465
|
if (error) {
|
|
4439
4466
|
return (
|
|
4440
4467
|
<Page>
|
|
@@ -552,6 +552,8 @@
|
|
|
552
552
|
"sales.documents.detail.adjustments.updated": "Anpassung aktualisiert.",
|
|
553
553
|
"sales.documents.detail.back": "Zurück zu Sales",
|
|
554
554
|
"sales.documents.detail.backToCreate": "Neues Dokument erstellen",
|
|
555
|
+
"sales.documents.detail.backToOrders": "Zurück zu Bestellungen",
|
|
556
|
+
"sales.documents.detail.backToQuotes": "Zurück zu Angeboten",
|
|
555
557
|
"sales.documents.detail.billing": "Rechnungsadresse",
|
|
556
558
|
"sales.documents.detail.channel": "Kanal",
|
|
557
559
|
"sales.documents.detail.channelInvalid": "Ausgewählter Kanal wurde nicht gefunden.",
|
|
@@ -679,6 +681,7 @@
|
|
|
679
681
|
"sales.documents.detail.items.variant": "Variante",
|
|
680
682
|
"sales.documents.detail.items.variantSearch": "Variante suchen",
|
|
681
683
|
"sales.documents.detail.loading": "Dokument wird geladen…",
|
|
684
|
+
"sales.documents.detail.notFound": "Dokument nicht gefunden.",
|
|
682
685
|
"sales.documents.detail.number": "Dokumentnummer",
|
|
683
686
|
"sales.documents.detail.numberEditForbidden": "Dokumentennummer kann nicht bearbeitet werden.",
|
|
684
687
|
"sales.documents.detail.numberEmpty": "Noch keine Nummer",
|
|
@@ -552,6 +552,8 @@
|
|
|
552
552
|
"sales.documents.detail.adjustments.updated": "Adjustment updated.",
|
|
553
553
|
"sales.documents.detail.back": "Back to Sales",
|
|
554
554
|
"sales.documents.detail.backToCreate": "Create a new document",
|
|
555
|
+
"sales.documents.detail.backToOrders": "Back to orders",
|
|
556
|
+
"sales.documents.detail.backToQuotes": "Back to quotes",
|
|
555
557
|
"sales.documents.detail.billing": "Billing address",
|
|
556
558
|
"sales.documents.detail.channel": "Channel",
|
|
557
559
|
"sales.documents.detail.channelInvalid": "Selected channel could not be found.",
|
|
@@ -679,6 +681,7 @@
|
|
|
679
681
|
"sales.documents.detail.items.variant": "Variant",
|
|
680
682
|
"sales.documents.detail.items.variantSearch": "Search variant",
|
|
681
683
|
"sales.documents.detail.loading": "Loading document…",
|
|
684
|
+
"sales.documents.detail.notFound": "Document not found.",
|
|
682
685
|
"sales.documents.detail.number": "Document number",
|
|
683
686
|
"sales.documents.detail.numberEditForbidden": "Document number cannot be edited.",
|
|
684
687
|
"sales.documents.detail.numberEmpty": "No number yet",
|
|
@@ -552,6 +552,8 @@
|
|
|
552
552
|
"sales.documents.detail.adjustments.updated": "Ajuste actualizado.",
|
|
553
553
|
"sales.documents.detail.back": "Volver a Ventas",
|
|
554
554
|
"sales.documents.detail.backToCreate": "Crear un nuevo documento",
|
|
555
|
+
"sales.documents.detail.backToOrders": "Volver a pedidos",
|
|
556
|
+
"sales.documents.detail.backToQuotes": "Volver a cotizaciones",
|
|
555
557
|
"sales.documents.detail.billing": "Dirección de facturación",
|
|
556
558
|
"sales.documents.detail.channel": "Canal",
|
|
557
559
|
"sales.documents.detail.channelInvalid": "No se pudo encontrar el canal seleccionado.",
|
|
@@ -679,6 +681,7 @@
|
|
|
679
681
|
"sales.documents.detail.items.variant": "Variante",
|
|
680
682
|
"sales.documents.detail.items.variantSearch": "Buscar variante",
|
|
681
683
|
"sales.documents.detail.loading": "Cargando documento…",
|
|
684
|
+
"sales.documents.detail.notFound": "Documento no encontrado.",
|
|
682
685
|
"sales.documents.detail.number": "Número de documento",
|
|
683
686
|
"sales.documents.detail.numberEditForbidden": "El número de documento no se puede editar.",
|
|
684
687
|
"sales.documents.detail.numberEmpty": "Sin número aún",
|
|
@@ -552,6 +552,8 @@
|
|
|
552
552
|
"sales.documents.detail.adjustments.updated": "Korekta zaktualizowana.",
|
|
553
553
|
"sales.documents.detail.back": "Wróć do sprzedaży",
|
|
554
554
|
"sales.documents.detail.backToCreate": "Utwórz nowy dokument",
|
|
555
|
+
"sales.documents.detail.backToOrders": "Powrót do zamówień",
|
|
556
|
+
"sales.documents.detail.backToQuotes": "Powrót do ofert",
|
|
555
557
|
"sales.documents.detail.billing": "Adres rozliczeniowy",
|
|
556
558
|
"sales.documents.detail.channel": "Kanał",
|
|
557
559
|
"sales.documents.detail.channelInvalid": "Nie znaleziono wybranego kanału.",
|
|
@@ -679,6 +681,7 @@
|
|
|
679
681
|
"sales.documents.detail.items.variant": "Wariant",
|
|
680
682
|
"sales.documents.detail.items.variantSearch": "Szukaj wariantu",
|
|
681
683
|
"sales.documents.detail.loading": "Ładowanie dokumentu…",
|
|
684
|
+
"sales.documents.detail.notFound": "Nie znaleziono dokumentu.",
|
|
682
685
|
"sales.documents.detail.number": "Numer dokumentu",
|
|
683
686
|
"sales.documents.detail.numberEditForbidden": "Numer dokumentu nie może być edytowany.",
|
|
684
687
|
"sales.documents.detail.numberEmpty": "Brak numeru",
|
|
@@ -50,6 +50,8 @@ export const setup: ModuleSetupConfig = {
|
|
|
50
50
|
defaultRoleFeatures: {
|
|
51
51
|
admin: ['sales.*', 'sales.documents.number.edit'],
|
|
52
52
|
employee: [
|
|
53
|
+
'sales.channels.view',
|
|
54
|
+
'sales.settings.view',
|
|
53
55
|
'sales.orders.view',
|
|
54
56
|
'sales.orders.manage',
|
|
55
57
|
'sales.orders.approve',
|