From 02ddb99000aba0e8b89d8d558acf4fea6dd05870 Mon Sep 17 00:00:00 2001 From: Jeppe Bundgaard Date: Mon, 6 Jul 2026 10:15:11 +0200 Subject: [PATCH 01/15] Add custom-only department pricing toggle --- scripts/playwright-pr-mapping.mjs | 17 ++- scripts/run-playwright-full-slice.mjs | 1 + .../token/SessionUser/Objects/Departments.vue | 16 +++ src/i18n/generated/da-v2.json | 8 ++ src/i18n/generated/en-v2.json | 8 ++ src/i18n/generated/global-v2.json | 8 ++ .../da/phrases/compat/departments/index.json | 7 ++ .../da/phrases/compat/objects/index.json | 1 + .../en/phrases/compat/departments/index.json | 7 ++ .../en/phrases/compat/objects/index.json | 1 + .../global/shared/departments/index.json | 7 ++ .../source/global/shared/objects/index.json | 1 + .../department/DepartmentPricing.vue | 103 +++++++++++++-- .../SuperUserSelectedDepartmentObject.vue | 43 ++++++- ...ser-department-pricing-custom-only.spec.ts | 117 ++++++++++++++++++ tests/unit/playwright-pr-mapping.spec.js | 15 +++ 16 files changed, 344 insertions(+), 16 deletions(-) create mode 100644 tests/e2e/superuser-department-pricing-custom-only.spec.ts diff --git a/scripts/playwright-pr-mapping.mjs b/scripts/playwright-pr-mapping.mjs index 3a8f1808..d04a03ac 100644 --- a/scripts/playwright-pr-mapping.mjs +++ b/scripts/playwright-pr-mapping.mjs @@ -7,14 +7,18 @@ export const fallbackChangePatterns = [ /^vite\.config\.js$/u, /^playwright(?:\..+)?\.config\.(?:js|ts)$/u, /^playwright\.global-(?:setup|teardown)\.mjs$/u, - /^scripts\/run-playwright/u, + /^scripts\/run-playwright-pr\.mjs$/u, /^tests\/e2e\/(?:support|fixtures)\//u, ]; export const sourceMappings = [ { name: "auth", - patterns: [/^src\/(?:views|components|middleware)\/.*auth/iu, /^src\/views\/auth\//u, /^src\/components\/session\//u], + patterns: [ + /^src\/(?:views|components|middleware)\/.*auth/iu, + /^src\/views\/auth\//u, + /^src\/components\/session\/(?!token\/SessionUser\/Objects\/)/u, + ], specs: ["tests/e2e/auth.smoke.spec.js", "tests/e2e/userAuth.spec.ts"], projects: chromiumProjects, }, @@ -74,6 +78,15 @@ export const sourceMappings = [ specs: ["tests/e2e/superuser-system-status.smoke.spec.js"], projects: chromiumProjects, }, + { + name: "superuser-department-pricing", + patterns: [ + /^src\/views\/dashboards\/superUserDashboard\/department\/(?:DepartmentPricing|SuperUserSelectedDepartmentObject)\.vue$/u, + /^src\/components\/session\/token\/SessionUser\/Objects\/Departments\.vue$/u, + ], + specs: ["tests/e2e/superuser-department-pricing-custom-only.spec.ts"], + projects: ["chromium-desktop"], + }, { name: "self-serve", patterns: [/self[-/]?serve/iu, /selfserve/iu, /wash\/MyWash/iu], diff --git a/scripts/run-playwright-full-slice.mjs b/scripts/run-playwright-full-slice.mjs index c2d88279..caf02efe 100644 --- a/scripts/run-playwright-full-slice.mjs +++ b/scripts/run-playwright-full-slice.mjs @@ -102,6 +102,7 @@ export const ownedFilesByRole = { "superuser-department-branding.spec.js", "superuser-department-gates.spec.ts", "superuser-department-lanes.spec.ts", + "superuser-department-pricing-custom-only.spec.ts", "superuser-departments-archive.spec.ts", "superuser-drafts.spec.ts", "superuser-products-layout.spec.ts", diff --git a/src/components/session/token/SessionUser/Objects/Departments.vue b/src/components/session/token/SessionUser/Objects/Departments.vue index 8fe31643..16256d40 100644 --- a/src/components/session/token/SessionUser/Objects/Departments.vue +++ b/src/components/session/token/SessionUser/Objects/Departments.vue @@ -108,6 +108,14 @@ export const Departments = { required: false, }, }, + custom_pricing_only: { + label: t("objects.departments.columns.custom_pricing_only"), + type: "boolean", + sortable: true, + creation: { + required: false, + }, + }, longitude: { label: t("objects.departments.columns.longitude"), type: "number", @@ -164,6 +172,14 @@ export const Departments = { archived: async (id, archived) => { return ObjectsGlobal.set.column(Departments.meta.endpoint, id, "archived", ObjectsGlobal.parse.boolean(archived)); }, + custom_pricing_only: async (id, custom_pricing_only) => { + return ObjectsGlobal.set.column( + Departments.meta.endpoint, + id, + "custom_pricing_only", + ObjectsGlobal.parse.boolean(custom_pricing_only) + ); + }, longitude: async (id, longitude) => { return ObjectsGlobal.set.column(Departments.meta.endpoint, id, "longitude", parseFloat(longitude)); }, diff --git a/src/i18n/generated/da-v2.json b/src/i18n/generated/da-v2.json index bad03b54..f8dfa58b 100644 --- a/src/i18n/generated/da-v2.json +++ b/src/i18n/generated/da-v2.json @@ -3331,6 +3331,13 @@ "opening_hours": { "closed": "Stengt" }, + "pricing": { + "custom_pricing_disabled": "Fallback aktiv", + "custom_pricing_enabled": "Kun egne priser", + "custom_pricing_missing_price": "Manglende afdelingspriser bliver 999999.", + "custom_pricing_only": "Ingen fallback-priser", + "effective_department_price": "Effektiv afdelingspris" + }, "search_placeholder": "@.capitalize:{'words.generated.søg'} @:{'words.generated.efter'} @:{'words.generated.afdelingsnavn'}", "select_department": "@.capitalize:{'words.generated.vælg'} @:{'words.replication.host_definite_suffix'} @:{'words.generated.afdeling'}", "subtitle": "@.capitalize:{'words.generated.administrer'} @:{'words.generated.afdelinger'}", @@ -4161,6 +4168,7 @@ "departments": { "columns": { "archived": "Arkiveret", + "custom_pricing_only": "Ingen fallback-priser", "dimension": "Dimension", "economic_department": "@.upper:{'words.generated.e'}-@:{'words.generated.conomic'} @:{'words.generated.afdeling'}", "latitude": "@:{'templates.generated.compat.departments.form.latitude'}", diff --git a/src/i18n/generated/en-v2.json b/src/i18n/generated/en-v2.json index 340884d8..859fff80 100644 --- a/src/i18n/generated/en-v2.json +++ b/src/i18n/generated/en-v2.json @@ -3163,6 +3163,13 @@ "opening_hours": { "closed": "@:{'templates.generated.compat.global.closed'}" }, + "pricing": { + "custom_pricing_disabled": "Fallback enabled", + "custom_pricing_enabled": "Custom only", + "custom_pricing_missing_price": "Missing department prices resolve to 999999.", + "custom_pricing_only": "No fallback pricing", + "effective_department_price": "Effective department price" + }, "search_placeholder": "@.capitalize:{'words.generated.search'} @:{'words.generated.by'} @:{'words.generated.department'} @:{'words.generated.name'}", "select_department": "@.capitalize:{'words.generated.select'} @:{'words.generated.a'} @:{'words.generated.department'}", "subtitle": "@.capitalize:{'words.generated.manage'} @:{'words.generated.departments'}", @@ -3993,6 +4000,7 @@ "departments": { "columns": { "archived": "@:{'words.generated.archived'}", + "custom_pricing_only": "No fallback pricing", "dimension": "Dimension", "economic_department": "@.upper:{'words.generated.e'}-@:{'words.generated.conomic'} @.capitalize:{'words.generated.department'}", "latitude": "@:{'templates.generated.compat.departments.form.latitude'}", diff --git a/src/i18n/generated/global-v2.json b/src/i18n/generated/global-v2.json index 7360db11..e1bc255a 100644 --- a/src/i18n/generated/global-v2.json +++ b/src/i18n/generated/global-v2.json @@ -2420,6 +2420,13 @@ "title": "@:{'templates.generated.compat.departments.tab.opening_hours'}" }, "phone": "@:common.phone", + "pricing": { + "custom_pricing_disabled": "@:{'templates.generated.compat.departments.pricing.custom_pricing_disabled'}", + "custom_pricing_enabled": "@:{'templates.generated.compat.departments.pricing.custom_pricing_enabled'}", + "custom_pricing_missing_price": "@:{'templates.generated.compat.departments.pricing.custom_pricing_missing_price'}", + "custom_pricing_only": "@:{'templates.generated.compat.departments.pricing.custom_pricing_only'}", + "effective_department_price": "@:{'templates.generated.compat.departments.pricing.effective_department_price'}" + }, "products": { "new_product": "@:products.new_product" }, @@ -3486,6 +3493,7 @@ "departments": { "columns": { "archived": "@:{'templates.generated.compat.objects.departments.columns.archived'}", + "custom_pricing_only": "@:{'templates.generated.compat.objects.departments.columns.custom_pricing_only'}", "dimension": "@:{'templates.generated.compat.objects.departments.columns.dimension'}", "economic_department": "@:{'templates.generated.compat.objects.departments.columns.economic_department'}", "latitude": "@:{'templates.generated.compat.objects.departments.columns.latitude'}", diff --git a/src/i18n/source/da/phrases/compat/departments/index.json b/src/i18n/source/da/phrases/compat/departments/index.json index 825368ab..2557efb8 100644 --- a/src/i18n/source/da/phrases/compat/departments/index.json +++ b/src/i18n/source/da/phrases/compat/departments/index.json @@ -21,6 +21,13 @@ "opening_hours": { "closed": "Stengt" }, + "pricing": { + "custom_pricing_disabled": "Fallback aktiv", + "custom_pricing_enabled": "Kun egne priser", + "custom_pricing_missing_price": "Manglende afdelingspriser bliver 999999.", + "custom_pricing_only": "Ingen fallback-priser", + "effective_department_price": "Effektiv afdelingspris" + }, "search_placeholder": "@.capitalize:{'terms.glossary.søg'} @:{'terms.glossary.efter'} @:{'terms.glossary.afdelingsnavn'}", "select_department": "@.capitalize:{'terms.glossary.vælg'} @:{'terms.replication.host_definite_suffix'} @:{'terms.glossary.afdeling'}", "subtitle": "@.capitalize:{'terms.glossary.administrer'} @:{'terms.glossary.afdelinger'}", diff --git a/src/i18n/source/da/phrases/compat/objects/index.json b/src/i18n/source/da/phrases/compat/objects/index.json index 85372e1b..25eb7c8f 100644 --- a/src/i18n/source/da/phrases/compat/objects/index.json +++ b/src/i18n/source/da/phrases/compat/objects/index.json @@ -140,6 +140,7 @@ "departments": { "columns": { "archived": "Arkiveret", + "custom_pricing_only": "Ingen fallback-priser", "dimension": "Dimension", "economic_department": "@.upper:{'terms.glossary.e'}-@:{'terms.glossary.conomic'} @:{'terms.glossary.afdeling'}", "latitude": "@:{'phrases.compat.departments.form.latitude'}", diff --git a/src/i18n/source/en/phrases/compat/departments/index.json b/src/i18n/source/en/phrases/compat/departments/index.json index b67aca12..a891ab80 100644 --- a/src/i18n/source/en/phrases/compat/departments/index.json +++ b/src/i18n/source/en/phrases/compat/departments/index.json @@ -21,6 +21,13 @@ "opening_hours": { "closed": "@:{'phrases.compat.global.closed'}" }, + "pricing": { + "custom_pricing_disabled": "Fallback enabled", + "custom_pricing_enabled": "Custom only", + "custom_pricing_missing_price": "Missing department prices resolve to 999999.", + "custom_pricing_only": "No fallback pricing", + "effective_department_price": "Effective department price" + }, "search_placeholder": "@.capitalize:{'terms.glossary.search'} @:{'terms.glossary.by'} @:{'terms.glossary.department'} @:{'terms.glossary.name'}", "select_department": "@.capitalize:{'terms.glossary.select'} @:{'terms.glossary.a'} @:{'terms.glossary.department'}", "subtitle": "@.capitalize:{'terms.glossary.manage'} @:{'terms.glossary.departments'}", diff --git a/src/i18n/source/en/phrases/compat/objects/index.json b/src/i18n/source/en/phrases/compat/objects/index.json index 442a6105..83c0e746 100644 --- a/src/i18n/source/en/phrases/compat/objects/index.json +++ b/src/i18n/source/en/phrases/compat/objects/index.json @@ -140,6 +140,7 @@ "departments": { "columns": { "archived": "@:{'terms.glossary.archived'}", + "custom_pricing_only": "No fallback pricing", "dimension": "Dimension", "economic_department": "@.upper:{'terms.glossary.e'}-@:{'terms.glossary.conomic'} @.capitalize:{'terms.glossary.department'}", "latitude": "@:{'phrases.compat.departments.form.latitude'}", diff --git a/src/i18n/source/global/shared/departments/index.json b/src/i18n/source/global/shared/departments/index.json index 5d02de5f..13de8bfe 100644 --- a/src/i18n/source/global/shared/departments/index.json +++ b/src/i18n/source/global/shared/departments/index.json @@ -38,6 +38,13 @@ "title": "@:{'phrases.compat.departments.tab.opening_hours'}" }, "phone": "@:common.phone", + "pricing": { + "custom_pricing_disabled": "@:{'phrases.compat.departments.pricing.custom_pricing_disabled'}", + "custom_pricing_enabled": "@:{'phrases.compat.departments.pricing.custom_pricing_enabled'}", + "custom_pricing_missing_price": "@:{'phrases.compat.departments.pricing.custom_pricing_missing_price'}", + "custom_pricing_only": "@:{'phrases.compat.departments.pricing.custom_pricing_only'}", + "effective_department_price": "@:{'phrases.compat.departments.pricing.effective_department_price'}" + }, "products": { "new_product": "@:products.new_product" }, diff --git a/src/i18n/source/global/shared/objects/index.json b/src/i18n/source/global/shared/objects/index.json index dd609f21..b6910ce8 100644 --- a/src/i18n/source/global/shared/objects/index.json +++ b/src/i18n/source/global/shared/objects/index.json @@ -194,6 +194,7 @@ "departments": { "columns": { "archived": "@:{'phrases.compat.objects.departments.columns.archived'}", + "custom_pricing_only": "@:{'phrases.compat.objects.departments.columns.custom_pricing_only'}", "dimension": "@:{'phrases.compat.objects.departments.columns.dimension'}", "economic_department": "@:{'phrases.compat.objects.departments.columns.economic_department'}", "latitude": "@:{'phrases.compat.objects.departments.columns.latitude'}", diff --git a/src/views/dashboards/superUserDashboard/department/DepartmentPricing.vue b/src/views/dashboards/superUserDashboard/department/DepartmentPricing.vue index 692dda50..50e7d5df 100644 --- a/src/views/dashboards/superUserDashboard/department/DepartmentPricing.vue +++ b/src/views/dashboards/superUserDashboard/department/DepartmentPricing.vue @@ -3,7 +3,15 @@ import PageTitle from "@/components/global/PageTitle.vue"; import RestrictedPageWrapper from "@/components/page/wrappers/RestrictedPageWrapper.vue"; import { SessionUser } from "@/components/session/token/SessionUser.vue"; import DepartmentSubPageWrapper from "@/views/dashboards/superUserDashboard/department/DepartmentSubPageWrapper.vue"; -import { setDepartment, department, departmentId, getDepartmentPrice, editDepartmentPrice } from "@/views/dashboards/superUserDashboard/department/SuperUserSelectedDepartmentObject.vue"; +import { + CUSTOM_PRICING_MISSING_PRICE, + setDepartment, + getDepartmentPrices, + getExplicitDepartmentPrice, + editDepartmentPrice, + isCustomPricingOnly, + updateCustomPricingOnly, +} from "@/views/dashboards/superUserDashboard/department/SuperUserSelectedDepartmentObject.vue"; import { useRouter } from 'vue-router' import { ref } from 'vue'; import { getProducts } from "@/components/shop/Products.vue"; @@ -11,14 +19,40 @@ import { getProducts } from "@/components/shop/Products.vue"; // Get the department from the route const router = useRouter() setDepartment(router.currentRoute.value.params.departmentId); +getDepartmentPrices(); // Set the products const products = ref([]); +const isUpdatingCustomPricingOnly = ref(false); // Get the products getProducts().then((response) => { products.value = response.data.data; }); + +const getDepartmentPriceDisplay = (product) => { + const explicitPrice = getExplicitDepartmentPrice(product); + if (explicitPrice !== null) { + return explicitPrice; + } + return isCustomPricingOnly() ? CUSTOM_PRICING_MISSING_PRICE : '-'; +}; + +const isMissingCustomPrice = (product) => { + return isCustomPricingOnly() && getExplicitDepartmentPrice(product) === null; +}; + +const toggleCustomPricingOnly = async (event) => { + const enabled = event.target.checked; + isUpdatingCustomPricingOnly.value = true; + try { + await updateCustomPricingOnly(enabled); + } catch { + event.target.checked = isCustomPricingOnly(); + } finally { + isUpdatingCustomPricingOnly.value = false; + } +};
+
+
+

{{ $t('departments.pricing.custom_pricing_only') }}

+

+ {{ $t('departments.pricing.custom_pricing_missing_price') }} +

+
+
+ + +
+
- + @@ -43,24 +103,45 @@ getProducts().then((response) => {
{{ $t('common.product') }} {{ $t('tables.common.default_price') }}{{ $t('tables.common.department_price') }}{{ $t('departments.pricing.effective_department_price') }}
{{ getDepartmentPrice(product) === product.price ? '-' : getDepartmentPrice(product) }} + :class="{ 'has-text-danger has-text-weight-semibold': isMissingCustomPrice(product) }" + :data-testid="`department-price-cell-${product.id}`" + >{{ getDepartmentPriceDisplay(product) }}
- Department prices... - {{ departmentId }} - {{ department.id }} - {{ department.name }} - {{ department.description }} - {{ department.created_at }} - {{ department.updated_at }}
\ No newline at end of file +.department-pricing-toggle { + align-items: center; + display: flex; + min-width: 16rem; +} + +@media (max-width: 768px) { + .department-pricing-settings { + align-items: flex-start; + flex-direction: column; + } + + .department-pricing-toggle { + min-width: 0; + } +} + diff --git a/src/views/dashboards/superUserDashboard/department/SuperUserSelectedDepartmentObject.vue b/src/views/dashboards/superUserDashboard/department/SuperUserSelectedDepartmentObject.vue index 8b4e7535..abba3955 100644 --- a/src/views/dashboards/superUserDashboard/department/SuperUserSelectedDepartmentObject.vue +++ b/src/views/dashboards/superUserDashboard/department/SuperUserSelectedDepartmentObject.vue @@ -4,12 +4,14 @@ import { authenticatedRequest } from "@/components/session/authenticatedRequest. import Swal from "sweetalert2"; // Define the department id export const departmentId = ref(0); +export const CUSTOM_PRICING_MISSING_PRICE = 999999; const default_department = { id: null, name: null, description: null, branding: null, + custom_pricing_only: false, created_at: null, updated_at: null, prices: [] @@ -34,6 +36,7 @@ export const department = { id: ref(''), name: ref(''), description: ref(''), + custom_pricing_only: ref(false), created_at: ref(''), updated_at: ref(''), prices: ref([]) @@ -49,6 +52,13 @@ const isDepartmentPricesLoaded = ref(false); // Set the department id export const setDepartment = (id) => { departmentId.value = id; + isDepartmentPricesLoaded.value = false; + department.prices.value = []; + department.custom_pricing_only.value = false; + departmentAdvanced.value = { + ...default_department, + ...default_department_functions + }; // Load the department data return getDepartmentData(); } @@ -60,11 +70,13 @@ export const getDepartmentData = async () => { department.id.value = response.data.data.id; department.name.value = response.data.data.name; department.description.value = response.data.data.description; + department.custom_pricing_only.value = Boolean(response.data.data.custom_pricing_only); department.created_at.value = response.data.data.created_at; department.updated_at.value = response.data.data.updated_at; departmentAdvanced.value = { ...default_department, ...response.data.data, + custom_pricing_only: Boolean(response.data.data.custom_pricing_only), ...default_department_functions }; }) @@ -88,17 +100,42 @@ export const getDepartmentPrice = (product) => { getDepartmentPrices(); } if (isDepartmentPricesLoaded.value) { - const price = department.prices.value.find((price) => price.product_id === product.id); - return price ? price.price : product.price; + const price = getExplicitDepartmentPrice(product); + if (price !== null) { + return price; + } + return isCustomPricingOnly() ? CUSTOM_PRICING_MISSING_PRICE : product.price; } return product.price; } +export const getExplicitDepartmentPrice = (product) => { + const price = department.prices.value.find((price) => price.product_id === product.id); + return price ? price.price : null; +} + +export const isCustomPricingOnly = () => Boolean(departmentAdvanced.value.custom_pricing_only || department.custom_pricing_only.value); + +export const updateCustomPricingOnly = async (enabled) => { + return authenticatedRequest(`/departments`, "PUT", { + id: departmentId.value, + custom_pricing_only: Boolean(enabled) + }).then(async () => { + department.custom_pricing_only.value = Boolean(enabled); + departmentAdvanced.value = { + ...departmentAdvanced.value, + custom_pricing_only: Boolean(enabled) + }; + await getDepartmentData(); + }); +} + export const editDepartmentPrice = (product) => { + const explicitPrice = getExplicitDepartmentPrice(product); Swal.fire({ title: product.name + ' ( product: ' + product.id + ' )', input: 'number', - inputValue: getDepartmentPrice(product), + inputValue: explicitPrice === null ? '' : explicitPrice, inputLabel: 'Price', inputAttributes: { autocapitalize: 'off' diff --git a/tests/e2e/superuser-department-pricing-custom-only.spec.ts b/tests/e2e/superuser-department-pricing-custom-only.spec.ts new file mode 100644 index 00000000..f0cf8a61 --- /dev/null +++ b/tests/e2e/superuser-department-pricing-custom-only.spec.ts @@ -0,0 +1,117 @@ +import { expect, test } from "@playwright/test"; + +import { mockApi, seedAuthenticatedState } from "./support/network.js"; +import { isDesktopProject } from "./support/projects"; + +const json = (body: unknown, status = 200) => ({ + status, + contentType: "application/json", + body: JSON.stringify(body), +}); + +const now = "2026-07-06 10:00:00"; + +const buildProduct = (product: Record) => ({ + description: "E2E product", + subscription_allowed: true, + category: 1, + piktogram: "truck", + economic_product_id: 0, + apply_category_discount: false, + requires_note: false, + created_at: now, + updated_at: now, + addons: [], + is_wash: true, + display_in_booking_form: true, + order_priority: 1, + ...product, +}); + +test.describe("Superuser department custom-only pricing", () => { + test("toggles no-fallback pricing and shows 999999 for missing department prices", async ({ page }, testInfo) => { + test.skip(!isDesktopProject(testInfo), "Desktop only"); + + let customPricingOnly = false; + let receivedToggleBody: Record | null = null; + + const products = [ + buildProduct({ id: 10, name: "Fallback Wash", price: 12345 }), + buildProduct({ id: 11, name: "Explicit Wash", price: 98765, order_priority: 2 }), + ]; + + await page.setViewportSize({ width: 1280, height: 720 }); + await seedAuthenticatedState(page, "superuser-department-pricing-token"); + await mockApi(page, { + authenticated: true, + permissions: [ + "superuser", + "user", + "list_products", + "list_departments", + "edit_department", + "superuser_fetch_department", + "superuser_fetch_department_prices", + "superuser_set_department_prices", + ], + sessionData: { + group_id: 1, + }, + }); + + await page.route("**/api/products**", async (route) => { + await route.fulfill(json({ data: products })); + }); + + await page.route("**/api/superuser/department/prices**", async (route) => { + await route.fulfill( + json({ + data: [{ id: 100, department_id: 42, product_id: 11, price: 2222 }], + }) + ); + }); + + await page.route(/\/api\/superuser\/department(?:\?.*)?$/i, async (route) => { + await route.fulfill( + json({ + data: { + id: 42, + name: "Custom Pricing Department", + description: "E2E department", + custom_pricing_only: customPricingOnly, + created_at: now, + updated_at: now, + }, + }) + ); + }); + + await page.route("**/api/departments", async (route) => { + const request = route.request(); + if (request.method() !== "PUT") { + await route.fallback(); + return; + } + + receivedToggleBody = request.postDataJSON() as Record; + customPricingOnly = Boolean(receivedToggleBody.custom_pricing_only); + await route.fulfill(json({ data: { message: "Department updated successfully" } })); + }); + + await page.goto("/superuser/departments/42/pricing", { waitUntil: "domcontentloaded" }); + + await expect(page.getByTestId("department-custom-pricing-settings")).toBeVisible(); + await expect(page.getByTestId("department-price-cell-10")).toHaveText(/-/); + await expect(page.getByTestId("department-price-cell-11")).toHaveText(/2222/); + + await page.locator('label[for="department-custom-pricing-only"]').click(); + + await expect(page.getByTestId("department-custom-pricing-only-toggle")).toBeChecked(); + await expect(page.getByTestId("department-price-cell-10")).toHaveText(/999999/); + await expect(page.getByTestId("department-price-cell-11")).toHaveText(/2222/); + expect(receivedToggleBody).toMatchObject({ + id: "42", + custom_pricing_only: true, + }); + }); +}); diff --git a/tests/unit/playwright-pr-mapping.spec.js b/tests/unit/playwright-pr-mapping.spec.js index 5ca544e2..0c287e5e 100644 --- a/tests/unit/playwright-pr-mapping.spec.js +++ b/tests/unit/playwright-pr-mapping.spec.js @@ -12,4 +12,19 @@ describe("Playwright PR mapping", () => { "tests/e2e/userVehicles.spec.ts" ); }); + + it("maps superuser department pricing changes to custom-only pricing coverage", () => { + expect(specsFor("src/views/dashboards/superUserDashboard/department/DepartmentPricing.vue")).toContain( + "tests/e2e/superuser-department-pricing-custom-only.spec.ts" + ); + expect( + specsFor("src/views/dashboards/superUserDashboard/department/SuperUserSelectedDepartmentObject.vue") + ).toContain("tests/e2e/superuser-department-pricing-custom-only.spec.ts"); + expect(specsFor("src/components/session/token/SessionUser/Objects/Departments.vue")).toContain( + "tests/e2e/superuser-department-pricing-custom-only.spec.ts" + ); + expect(specsFor("src/components/session/token/SessionUser/Objects/Departments.vue")).not.toContain( + "tests/e2e/userAuth.spec.ts" + ); + }); }); From 49772c1334e8f745f1eb900f434b15d051220b18 Mon Sep 17 00:00:00 2001 From: Jeppe Bundgaard Date: Mon, 6 Jul 2026 10:30:43 +0200 Subject: [PATCH 02/15] Trigger frontend PR checks From bd14d58f08b78b29e35b7bb65c08b0f26a2baeaa Mon Sep 17 00:00:00 2001 From: Jeppe Bundgaard Date: Mon, 6 Jul 2026 11:03:22 +0200 Subject: [PATCH 03/15] Stabilize self-serve wash smoke assertion --- tests/e2e/self-serve-wash.spec.js | 41 ++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/tests/e2e/self-serve-wash.spec.js b/tests/e2e/self-serve-wash.spec.js index 1077437a..bd42ea90 100644 --- a/tests/e2e/self-serve-wash.spec.js +++ b/tests/e2e/self-serve-wash.spec.js @@ -124,6 +124,39 @@ async function seedSavedProgress(page, overrides = {}) { await page.addInitScript((savedProgress) => { window.localStorage.setItem("mywash_progress_v6", JSON.stringify(savedProgress)); }, payload); + + try { + await page.evaluate((savedProgress) => { + window.localStorage.setItem("mywash_progress_v6", JSON.stringify(savedProgress)); + }, payload); + } catch {} +} + +async function expectFinishingOrCompletedWash(page) { + const finishing = page.getByTestId("self-serve-finishing-wash"); + const completed = page.getByTestId("self-serve-completed-step"); + + await expect + .poll( + async () => { + if (await finishing.isVisible().catch(() => false)) { + return "finishing"; + } + if (await completed.isVisible().catch(() => false)) { + return "completed"; + } + return "pending"; + }, + { + message: "expected the wash to show the finishing state or complete", + timeout: 15_000, + } + ) + .toMatch(/^(finishing|completed)$/); + + if (await finishing.isVisible().catch(() => false)) { + await expect(finishing).toContainText("Afslutter vask, porten åbnes automatisk"); + } } function captureSelfServeGatewayRequests(page) { @@ -276,9 +309,7 @@ test.describe("Self-serve wash", () => { const stopCommandRequestPromise = waitForLaneCommandRequest(page, "STOP"); const exitGateCommandRequestPromise = waitForLaneCommandRequest(page, "OPEN_PROPERTY_EXIT_GATE"); await page.getByTestId("self-serve-nav-complete").click(); - await expect(page.getByTestId("self-serve-finishing-wash")).toContainText( - "Afslutter vask, porten åbnes automatisk" - ); + await expectFinishingOrCompletedWash(page); const stopCommandRequest = await stopCommandRequestPromise; const exitGateCommandRequest = await exitGateCommandRequestPromise; expect(stopCommandRequest.postDataJSON?.()).toMatchObject({ @@ -1147,9 +1178,7 @@ test.describe("Self-serve wash", () => { const stopCommandRequestPromise = waitForLaneCommandRequest(page, "STOP"); const exitGateCommandRequestPromise = waitForLaneCommandRequest(page, "OPEN_PROPERTY_EXIT_GATE"); await page.getByTestId("self-serve-nav-complete").click(); - await expect(page.getByTestId("self-serve-finishing-wash")).toContainText( - "Afslutter vask, porten åbnes automatisk" - ); + await expectFinishingOrCompletedWash(page); const stopCommandRequest = await stopCommandRequestPromise; const exitGateCommandRequest = await exitGateCommandRequestPromise; From 7f3a8c07e2a746d08114b2ad56093ed25f7d3f77 Mon Sep 17 00:00:00 2001 From: Jeppe Bundgaard Date: Mon, 6 Jul 2026 11:47:58 +0200 Subject: [PATCH 04/15] Stabilize edge gateway installer smoke tests --- tests/e2e/edge-gateways.smoke.spec.js | 62 ++++++++++++++++++++++++--- 1 file changed, 57 insertions(+), 5 deletions(-) diff --git a/tests/e2e/edge-gateways.smoke.spec.js b/tests/e2e/edge-gateways.smoke.spec.js index 0a252303..c2516249 100644 --- a/tests/e2e/edge-gateways.smoke.spec.js +++ b/tests/e2e/edge-gateways.smoke.spec.js @@ -109,6 +109,58 @@ async function acceleratePageTimers(page, timerScale = 0.01) { }, timerScale); } +async function dismissUnexpectedSweetAlert(page) { + const overlays = page.locator(".swal2-container.swal2-backdrop-show"); + + for (let attempt = 0; attempt < 3; attempt += 1) { + const overlay = overlays.first(); + if (!(await overlay.isVisible().catch(() => false))) { + return; + } + + let dismissed = false; + for (const selector of [".swal2-close", ".swal2-cancel", ".swal2-deny", ".swal2-confirm"]) { + const action = overlay.locator(selector).first(); + if (await action.isVisible().catch(() => false)) { + await action.click({ force: true }); + dismissed = true; + break; + } + } + + if (!dismissed) { + await page.keyboard.press("Escape"); + } + + await expect(overlays) + .toHaveCount(0, { timeout: 5_000 }) + .catch(() => {}); + } +} + +async function generateGatewayInstaller(page) { + const button = page.getByTestId("gateway-installer-generate"); + await expect(button).toBeVisible({ timeout: 15_000 }); + await expect(button).toBeEnabled({ timeout: 15_000 }); + + let lastError; + for (let attempt = 0; attempt < 3; attempt += 1) { + await dismissUnexpectedSweetAlert(page); + + try { + await button.click({ timeout: 15_000 }); + return; + } catch (error) { + lastError = error; + if (!/swal2-container|intercepts pointer events/i.test(error?.message || "")) { + throw error; + } + } + } + + throw lastError; +} + test.describe("Edge gateway management smoke", () => { test.describe.configure({ mode: "serial" }); @@ -193,7 +245,7 @@ test.describe("Edge gateway management smoke", () => { await page.getByTestId("gateway-installer-department").selectOption("1"); await page.getByTestId("gateway-installer-label").fill("Copy Test Pi"); - await page.getByTestId("gateway-installer-generate").click(); + await generateGatewayInstaller(page); await expect(page.getByTestId("gateway-install-command")).toHaveValue(/install\.sh\?token=edge-install-token/); await page.getByTestId("gateway-installer-copy").click(); @@ -246,7 +298,7 @@ test.describe("Edge gateway management smoke", () => { await page.getByTestId("gateway-installer-department").selectOption("1"); await page.getByTestId("gateway-installer-label").fill("Canary Pi"); - await page.getByTestId("gateway-installer-generate").click(); + await generateGatewayInstaller(page); await expect(page.getByTestId("gateway-installer-status")).toBeVisible(); await expect.poll(() => page.getByTestId("gateway-installer-status-state").textContent()).toContain("Running"); @@ -274,7 +326,7 @@ test.describe("Edge gateway management smoke", () => { await page.getByTestId("gateway-installer-department").selectOption("1"); await page.getByTestId("gateway-installer-label").fill("CPH Edge 01"); - await page.getByTestId("gateway-installer-generate").click(); + await generateGatewayInstaller(page); await expect(page.getByTestId("gateway-installer-status")).toBeVisible(); await expect.poll(() => page.getByTestId("gateway-installer-status-state").textContent()).toContain("Running"); @@ -318,7 +370,7 @@ test.describe("Edge gateway management smoke", () => { await page.getByTestId("gateway-installer-department").selectOption("1"); await page.getByTestId("gateway-installer-label").fill("Broken Pi"); - await page.getByTestId("gateway-installer-generate").click(); + await generateGatewayInstaller(page); await expect(page.getByTestId("gateway-installer-status")).toBeVisible(); await expect @@ -382,7 +434,7 @@ test.describe("Edge gateway management smoke", () => { await page.getByTestId("gateway-installer-department").selectOption("1"); await page.getByTestId("gateway-installer-label").fill("Canary Pi"); - await page.getByTestId("gateway-installer-generate").click(); + await generateGatewayInstaller(page); await expect(page.getByTestId("gateway-install-command")).toHaveValue(/install\.sh\?token=edge-install-token/); await expect(page).toHaveURL(/\/superuser\/selfserve\/edge-agents\/703\/overview$/, { timeout: 20_000 }); From 987acc5b0fe526643da9feedb897d64f15d39457 Mon Sep 17 00:00:00 2001 From: Jeppe B <2jepp9350@gmail.com> Date: Mon, 6 Jul 2026 12:25:01 +0200 Subject: [PATCH 05/15] Add role permission help modal (#142) Adds the Rolle help icon and grouped permissions modal for limited backoffice employees, plus i18n and Playwright coverage. --- src/i18n/generated/da-v2.json | 248 ++++++++++++ src/i18n/generated/de-v2.json | 248 ++++++++++++ src/i18n/generated/en-v2.json | 248 ++++++++++++ src/i18n/generated/no-v2.json | 248 ++++++++++++ src/i18n/generated/sv-v2.json | 248 ++++++++++++ src/i18n/source/da/phrases/index.json | 248 ++++++++++++ src/i18n/source/de/phrases/index.json | 248 ++++++++++++ src/i18n/source/en/phrases/index.json | 248 ++++++++++++ src/i18n/source/no/phrases/index.json | 248 ++++++++++++ src/i18n/source/sv/phrases/index.json | 248 ++++++++++++ .../backoffice/LimitedBackofficeEmployees.vue | 365 +++++++++++++++++- .../userDashboard/wash/MyWashStart.vue | 8 + tests/e2e/limited-backoffice.spec.ts | 175 ++++++++- tests/e2e/self-serve-wash.spec.js | 4 +- tests/e2e/workfeed-config.smoke.spec.js | 37 +- 15 files changed, 3045 insertions(+), 24 deletions(-) diff --git a/src/i18n/generated/da-v2.json b/src/i18n/generated/da-v2.json index bad03b54..af91cc8f 100644 --- a/src/i18n/generated/da-v2.json +++ b/src/i18n/generated/da-v2.json @@ -1239,6 +1239,130 @@ "load_employees": "@:{'templates.generated.compat.limited_backoffice.errors.load_employees'}", "save_employee": "@:{'templates.generated.compat.limited_backoffice.errors.save_employee'}", "deactivate_employee": "@:{'templates.generated.compat.limited_backoffice.errors.deactivate_employee'}" + }, + "role_permissions": { + "title": "@:{'templates.generated.compat.limited_backoffice.role_permissions.title'}", + "tooltip": "@:{'templates.generated.compat.limited_backoffice.role_permissions.tooltip'}", + "intro": "@:{'templates.generated.compat.limited_backoffice.role_permissions.intro'}", + "scope": "@:{'templates.generated.compat.limited_backoffice.role_permissions.scope'}", + "selected": "@:{'templates.generated.compat.limited_backoffice.role_permissions.selected'}", + "close": "@:{'templates.generated.compat.limited_backoffice.role_permissions.close'}", + "unavailable": "@:{'templates.generated.compat.limited_backoffice.role_permissions.unavailable'}", + "groups": { + "account": "@:{'templates.generated.compat.limited_backoffice.role_permissions.groups.account'}", + "orders": "@:{'templates.generated.compat.limited_backoffice.role_permissions.groups.orders'}", + "bookings": "@:{'templates.generated.compat.limited_backoffice.role_permissions.groups.bookings'}", + "time_bookings": "@:{'templates.generated.compat.limited_backoffice.role_permissions.groups.time_bookings'}", + "reports": "@:{'templates.generated.compat.limited_backoffice.role_permissions.groups.reports'}", + "limited_backoffice": "@:{'templates.generated.compat.limited_backoffice.role_permissions.groups.limited_backoffice'}", + "unknown": "@:{'templates.generated.compat.limited_backoffice.role_permissions.groups.unknown'}" + }, + "capabilities": { + "sign_in": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.sign_in.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.sign_in.description'}" + }, + "view_own_permissions": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_own_permissions.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_own_permissions.description'}" + }, + "view_orders": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_orders.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_orders.description'}" + }, + "create_orders": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_orders.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_orders.description'}" + }, + "edit_orders": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.edit_orders.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.edit_orders.description'}" + }, + "delete_orders": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.delete_orders.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.delete_orders.description'}" + }, + "view_order_items": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_order_items.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_order_items.description'}" + }, + "create_order_items": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_order_items.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_order_items.description'}" + }, + "update_order_lines": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.update_order_lines.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.update_order_lines.description'}" + }, + "remove_order_lines": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.remove_order_lines.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.remove_order_lines.description'}" + }, + "charge_orders": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.charge_orders.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.charge_orders.description'}" + }, + "view_department_bookings": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_department_bookings.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_department_bookings.description'}" + }, + "view_own_bookings": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_own_bookings.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_own_bookings.description'}" + }, + "update_bookings": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.update_bookings.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.update_bookings.description'}" + }, + "create_bookings": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_bookings.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_bookings.description'}" + }, + "mark_bookings_complete": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.mark_bookings_complete.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.mark_bookings_complete.description'}" + }, + "send_booking_confirmations": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.send_booking_confirmations.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.send_booking_confirmations.description'}" + }, + "view_time_booking_entries": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_time_booking_entries.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_time_booking_entries.description'}" + }, + "create_time_booking_entries": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_time_booking_entries.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_time_booking_entries.description'}" + }, + "edit_time_booking_entries": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.edit_time_booking_entries.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.edit_time_booking_entries.description'}" + }, + "view_order_statistics": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_order_statistics.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_order_statistics.description'}" + }, + "view_booking_statistics": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_booking_statistics.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_booking_statistics.description'}" + }, + "open_limited_backoffice": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.open_limited_backoffice.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.open_limited_backoffice.description'}" + }, + "manage_department_prices": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.manage_department_prices.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.manage_department_prices.description'}" + }, + "manage_employee_access": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.manage_employee_access.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.manage_employee_access.description'}" + }, + "unknown": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.unknown.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.unknown.description'}" + } + } } }, "redirect": { @@ -5844,6 +5968,130 @@ "load_employees": "@.capitalize:{'words.generated.medarbejdere'} @:{'words.generated.kunne'} @:{'words.generated.ikke'} @:{'words.generated.indlæses'}.", "save_employee": "@.capitalize:{'words.generated.medarbejderen'} @:{'words.generated.kunne'} @:{'words.generated.ikke'} @:{'words.generated.gemmes'}.", "deactivate_employee": "@.capitalize:{'words.generated.medarbejderen'} @:{'words.generated.kunne'} @:{'words.generated.ikke'} deaktiveres." + }, + "role_permissions": { + "title": "Rolletilladelser", + "tooltip": "Vis rolletilladelser", + "intro": "Roller samler de præcise funktioner, der tildeles en medarbejder, når rollen gemmes.", + "scope": "Alle funktioner er begrænset til de afdelinger, der vælges for medarbejderen.", + "selected": "Valgt", + "close": "Luk", + "unavailable": "Tilladelsesdetaljer er ikke tilgængelige for denne rolle, før rollekataloget er opdateret.", + "groups": { + "account": "Konto", + "orders": "Ordrer", + "bookings": "Bookinger", + "time_bookings": "Tidsbookinger", + "reports": "Rapporter", + "limited_backoffice": "Backoffice", + "unknown": "Øvrigt" + }, + "capabilities": { + "sign_in": { + "label": "Log ind", + "description": "Giver medarbejderen adgang til at logge ind i Pleno." + }, + "view_own_permissions": { + "label": "Se egne tilladelser", + "description": "Viser medarbejderen, hvilke adgangsrettigheder kontoen har." + }, + "view_orders": { + "label": "Se ordrer", + "description": "Kan åbne ordrelister og ordredetaljer for tildelte afdelinger." + }, + "create_orders": { + "label": "Opret ordrer", + "description": "Kan oprette nye ordrer for tildelte afdelinger." + }, + "edit_orders": { + "label": "Rediger ordrer", + "description": "Kan ændre ordredetaljer for tildelte afdelinger." + }, + "delete_orders": { + "label": "Slet ordrer", + "description": "Kan slette ordrer i tildelte afdelinger." + }, + "view_order_items": { + "label": "Se ordrelinjer", + "description": "Kan se produkter, ydelser og priser på ordrer." + }, + "create_order_items": { + "label": "Opret ordrelinjer", + "description": "Kan tilføje produkter og ydelser til ordrer." + }, + "update_order_lines": { + "label": "Rediger ordrelinjer", + "description": "Kan ændre produkter, antal og priser på ordrer." + }, + "remove_order_lines": { + "label": "Slet ordrelinjer", + "description": "Kan fjerne produkter og ydelser fra ordrer." + }, + "charge_orders": { + "label": "Opkræv ordrer", + "description": "Kan tage betaling eller opkræve en betalingsreservation for en ordre." + }, + "view_department_bookings": { + "label": "Se afdelingsbookinger", + "description": "Kan se bookinger for tildelte afdelinger." + }, + "view_own_bookings": { + "label": "Se egne bookinger", + "description": "Kan se bookingantal og bookinger knyttet til medarbejderkontoen." + }, + "update_bookings": { + "label": "Rediger bookinger", + "description": "Kan ændre tilladte bookingdetaljer." + }, + "create_bookings": { + "label": "Opret bookinger", + "description": "Kan oprette nye bookinger for tildelte afdelinger." + }, + "mark_bookings_complete": { + "label": "Afslut bookinger", + "description": "Kan markere bookinger som afsluttet." + }, + "send_booking_confirmations": { + "label": "Gensend bookingbekræftelser", + "description": "Kan gensende bookingbekræftelser og afslutningsmails." + }, + "view_time_booking_entries": { + "label": "Se tidsbookinger", + "description": "Kan gennemse tidsbookingposter for tildelte afdelinger." + }, + "create_time_booking_entries": { + "label": "Opret tidsbookinger", + "description": "Kan oprette nye tidsbookingposter." + }, + "edit_time_booking_entries": { + "label": "Rediger tidsbookinger", + "description": "Kan redigere tidsbookingposter, når backend-ruten understøtter det." + }, + "view_order_statistics": { + "label": "Se ordrestatistik", + "description": "Kan åbne statistikvisninger for ordrer i tildelte afdelinger." + }, + "view_booking_statistics": { + "label": "Se bookingstatistik", + "description": "Kan åbne statistikvisninger for bookinger i tildelte afdelinger." + }, + "open_limited_backoffice": { + "label": "Åbn begrænset backoffice", + "description": "Kan tilgå det begrænsede backofficeområde." + }, + "manage_department_prices": { + "label": "Administrer afdelingspriser", + "description": "Kan redigere eksplicitte priser for tildelte afdelinger." + }, + "manage_employee_access": { + "label": "Administrer medarbejderadgang", + "description": "Kan oprette, redigere og deaktivere begrænsede backofficemedarbejdere." + }, + "unknown": { + "label": "Ekstra funktion", + "description": "Denne funktion kommer fra rollekataloget, men er endnu ikke beskrevet i grænsefladen." + } + } } } } diff --git a/src/i18n/generated/de-v2.json b/src/i18n/generated/de-v2.json index 5501ee9b..c81d0294 100644 --- a/src/i18n/generated/de-v2.json +++ b/src/i18n/generated/de-v2.json @@ -1350,6 +1350,130 @@ "load_employees": "@:{'templates.generated.compat.limited_backoffice.errors.load_employees'}", "save_employee": "@:{'templates.generated.compat.limited_backoffice.errors.save_employee'}", "deactivate_employee": "@:{'templates.generated.compat.limited_backoffice.errors.deactivate_employee'}" + }, + "role_permissions": { + "title": "@:{'templates.generated.compat.limited_backoffice.role_permissions.title'}", + "tooltip": "@:{'templates.generated.compat.limited_backoffice.role_permissions.tooltip'}", + "intro": "@:{'templates.generated.compat.limited_backoffice.role_permissions.intro'}", + "scope": "@:{'templates.generated.compat.limited_backoffice.role_permissions.scope'}", + "selected": "@:{'templates.generated.compat.limited_backoffice.role_permissions.selected'}", + "close": "@:{'templates.generated.compat.limited_backoffice.role_permissions.close'}", + "unavailable": "@:{'templates.generated.compat.limited_backoffice.role_permissions.unavailable'}", + "groups": { + "account": "@:{'templates.generated.compat.limited_backoffice.role_permissions.groups.account'}", + "orders": "@:{'templates.generated.compat.limited_backoffice.role_permissions.groups.orders'}", + "bookings": "@:{'templates.generated.compat.limited_backoffice.role_permissions.groups.bookings'}", + "time_bookings": "@:{'templates.generated.compat.limited_backoffice.role_permissions.groups.time_bookings'}", + "reports": "@:{'templates.generated.compat.limited_backoffice.role_permissions.groups.reports'}", + "limited_backoffice": "@:{'templates.generated.compat.limited_backoffice.role_permissions.groups.limited_backoffice'}", + "unknown": "@:{'templates.generated.compat.limited_backoffice.role_permissions.groups.unknown'}" + }, + "capabilities": { + "sign_in": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.sign_in.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.sign_in.description'}" + }, + "view_own_permissions": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_own_permissions.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_own_permissions.description'}" + }, + "view_orders": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_orders.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_orders.description'}" + }, + "create_orders": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_orders.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_orders.description'}" + }, + "edit_orders": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.edit_orders.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.edit_orders.description'}" + }, + "delete_orders": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.delete_orders.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.delete_orders.description'}" + }, + "view_order_items": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_order_items.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_order_items.description'}" + }, + "create_order_items": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_order_items.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_order_items.description'}" + }, + "update_order_lines": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.update_order_lines.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.update_order_lines.description'}" + }, + "remove_order_lines": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.remove_order_lines.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.remove_order_lines.description'}" + }, + "charge_orders": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.charge_orders.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.charge_orders.description'}" + }, + "view_department_bookings": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_department_bookings.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_department_bookings.description'}" + }, + "view_own_bookings": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_own_bookings.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_own_bookings.description'}" + }, + "update_bookings": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.update_bookings.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.update_bookings.description'}" + }, + "create_bookings": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_bookings.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_bookings.description'}" + }, + "mark_bookings_complete": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.mark_bookings_complete.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.mark_bookings_complete.description'}" + }, + "send_booking_confirmations": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.send_booking_confirmations.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.send_booking_confirmations.description'}" + }, + "view_time_booking_entries": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_time_booking_entries.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_time_booking_entries.description'}" + }, + "create_time_booking_entries": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_time_booking_entries.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_time_booking_entries.description'}" + }, + "edit_time_booking_entries": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.edit_time_booking_entries.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.edit_time_booking_entries.description'}" + }, + "view_order_statistics": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_order_statistics.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_order_statistics.description'}" + }, + "view_booking_statistics": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_booking_statistics.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_booking_statistics.description'}" + }, + "open_limited_backoffice": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.open_limited_backoffice.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.open_limited_backoffice.description'}" + }, + "manage_department_prices": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.manage_department_prices.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.manage_department_prices.description'}" + }, + "manage_employee_access": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.manage_employee_access.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.manage_employee_access.description'}" + }, + "unknown": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.unknown.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.unknown.description'}" + } + } } }, "redirect": { @@ -5955,6 +6079,130 @@ "load_employees": "@:{'words.generated.mitarbeiter'} @:{'words.generated.konnten'} @:{'words.generated.nicht'} @:{'words.generated.geladen'} @:{'words.generated.werden'}.", "save_employee": "@:{'words.generated.mitarbeiter'} @:{'words.generated.konnte'} @:{'words.generated.nicht'} @:{'words.generated.gespeichert'} @:{'words.generated.werden'}.", "deactivate_employee": "@:{'words.generated.mitarbeiter'} @:{'words.generated.konnte'} @:{'words.generated.nicht'} @:{'words.generated.deaktiviert'} @:{'words.generated.werden'}." + }, + "role_permissions": { + "title": "Rollenberechtigungen", + "tooltip": "Rollenberechtigungen anzeigen", + "intro": "Rollen bündeln die genauen Funktionen, die einem Mitarbeiter beim Speichern der Rolle zugewiesen werden.", + "scope": "Jede Funktion ist auf die Abteilungen begrenzt, die für den Mitarbeiter ausgewählt sind.", + "selected": "Ausgewählt", + "close": "Schließen", + "unavailable": "Berechtigungsdetails sind für diese Rolle erst verfügbar, wenn der Rollenkatalog aktualisiert wurde.", + "groups": { + "account": "Konto", + "orders": "Aufträge", + "bookings": "Buchungen", + "time_bookings": "Zeitbuchungen", + "reports": "Berichte", + "limited_backoffice": "Backoffice", + "unknown": "Sonstiges" + }, + "capabilities": { + "sign_in": { + "label": "Anmelden", + "description": "Erlaubt dem Mitarbeiter, sich bei Pleno anzumelden." + }, + "view_own_permissions": { + "label": "Eigene Berechtigungen anzeigen", + "description": "Zeigt dem Mitarbeiter, welche Zugriffsrechte das Konto hat." + }, + "view_orders": { + "label": "Aufträge anzeigen", + "description": "Kann Auftragslisten und Auftragsdetails für zugewiesene Abteilungen öffnen." + }, + "create_orders": { + "label": "Aufträge erstellen", + "description": "Kann neue Aufträge für zugewiesene Abteilungen erstellen." + }, + "edit_orders": { + "label": "Aufträge bearbeiten", + "description": "Kann Auftragsdetails für zugewiesene Abteilungen ändern." + }, + "delete_orders": { + "label": "Aufträge löschen", + "description": "Kann Aufträge in zugewiesenen Abteilungen löschen." + }, + "view_order_items": { + "label": "Auftragspositionen anzeigen", + "description": "Kann Produkte, Leistungen und Preise auf Aufträgen sehen." + }, + "create_order_items": { + "label": "Auftragspositionen erstellen", + "description": "Kann Produkte und Leistungen zu Aufträgen hinzufügen." + }, + "update_order_lines": { + "label": "Auftragspositionen bearbeiten", + "description": "Kann Produkte, Mengen und Preise auf Aufträgen ändern." + }, + "remove_order_lines": { + "label": "Auftragspositionen löschen", + "description": "Kann Produkte und Leistungen aus Aufträgen entfernen." + }, + "charge_orders": { + "label": "Aufträge abrechnen", + "description": "Kann Zahlungen annehmen oder eine Zahlungsreservierung für einen Auftrag belasten." + }, + "view_department_bookings": { + "label": "Abteilungsbuchungen anzeigen", + "description": "Kann Buchungen für zugewiesene Abteilungen sehen." + }, + "view_own_bookings": { + "label": "Eigene Buchungen anzeigen", + "description": "Kann Buchungszahlen und Buchungen sehen, die mit dem Mitarbeiterkonto verbunden sind." + }, + "update_bookings": { + "label": "Buchungen bearbeiten", + "description": "Kann erlaubte Buchungsdetails ändern." + }, + "create_bookings": { + "label": "Buchungen erstellen", + "description": "Kann neue Buchungen für zugewiesene Abteilungen erstellen." + }, + "mark_bookings_complete": { + "label": "Buchungen abschließen", + "description": "Kann Buchungen als abgeschlossen markieren." + }, + "send_booking_confirmations": { + "label": "Buchungsbestätigungen erneut senden", + "description": "Kann Buchungsbestätigungen und Abschluss-E-Mails erneut senden." + }, + "view_time_booking_entries": { + "label": "Zeitbuchungen anzeigen", + "description": "Kann Zeitbuchungseinträge für zugewiesene Abteilungen prüfen." + }, + "create_time_booking_entries": { + "label": "Zeitbuchungen erstellen", + "description": "Kann neue Zeitbuchungseinträge hinzufügen." + }, + "edit_time_booking_entries": { + "label": "Zeitbuchungen bearbeiten", + "description": "Kann Zeitbuchungseinträge bearbeiten, wenn die Backend-Route dies unterstützt." + }, + "view_order_statistics": { + "label": "Auftragsstatistik anzeigen", + "description": "Kann Auftragsstatistiken für zugewiesene Abteilungen öffnen." + }, + "view_booking_statistics": { + "label": "Buchungsstatistik anzeigen", + "description": "Kann Buchungsstatistiken für zugewiesene Abteilungen öffnen." + }, + "open_limited_backoffice": { + "label": "Begrenztes Backoffice öffnen", + "description": "Kann den begrenzten Backofficebereich öffnen." + }, + "manage_department_prices": { + "label": "Abteilungspreise verwalten", + "description": "Kann explizite Preise für zugewiesene Abteilungen bearbeiten." + }, + "manage_employee_access": { + "label": "Mitarbeiterzugang verwalten", + "description": "Kann begrenzte Backoffice-Mitarbeiter erstellen, bearbeiten und deaktivieren." + }, + "unknown": { + "label": "Zusätzliche Funktion", + "description": "Diese Funktion kommt aus dem Rollenkatalog, ist aber in der Oberfläche noch nicht beschrieben." + } + } } } } diff --git a/src/i18n/generated/en-v2.json b/src/i18n/generated/en-v2.json index 340884d8..e87e8d19 100644 --- a/src/i18n/generated/en-v2.json +++ b/src/i18n/generated/en-v2.json @@ -1071,6 +1071,130 @@ "load_employees": "@:{'templates.generated.compat.limited_backoffice.errors.load_employees'}", "save_employee": "@:{'templates.generated.compat.limited_backoffice.errors.save_employee'}", "deactivate_employee": "@:{'templates.generated.compat.limited_backoffice.errors.deactivate_employee'}" + }, + "role_permissions": { + "title": "@:{'templates.generated.compat.limited_backoffice.role_permissions.title'}", + "tooltip": "@:{'templates.generated.compat.limited_backoffice.role_permissions.tooltip'}", + "intro": "@:{'templates.generated.compat.limited_backoffice.role_permissions.intro'}", + "scope": "@:{'templates.generated.compat.limited_backoffice.role_permissions.scope'}", + "selected": "@:{'templates.generated.compat.limited_backoffice.role_permissions.selected'}", + "close": "@:{'templates.generated.compat.limited_backoffice.role_permissions.close'}", + "unavailable": "@:{'templates.generated.compat.limited_backoffice.role_permissions.unavailable'}", + "groups": { + "account": "@:{'templates.generated.compat.limited_backoffice.role_permissions.groups.account'}", + "orders": "@:{'templates.generated.compat.limited_backoffice.role_permissions.groups.orders'}", + "bookings": "@:{'templates.generated.compat.limited_backoffice.role_permissions.groups.bookings'}", + "time_bookings": "@:{'templates.generated.compat.limited_backoffice.role_permissions.groups.time_bookings'}", + "reports": "@:{'templates.generated.compat.limited_backoffice.role_permissions.groups.reports'}", + "limited_backoffice": "@:{'templates.generated.compat.limited_backoffice.role_permissions.groups.limited_backoffice'}", + "unknown": "@:{'templates.generated.compat.limited_backoffice.role_permissions.groups.unknown'}" + }, + "capabilities": { + "sign_in": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.sign_in.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.sign_in.description'}" + }, + "view_own_permissions": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_own_permissions.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_own_permissions.description'}" + }, + "view_orders": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_orders.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_orders.description'}" + }, + "create_orders": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_orders.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_orders.description'}" + }, + "edit_orders": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.edit_orders.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.edit_orders.description'}" + }, + "delete_orders": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.delete_orders.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.delete_orders.description'}" + }, + "view_order_items": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_order_items.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_order_items.description'}" + }, + "create_order_items": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_order_items.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_order_items.description'}" + }, + "update_order_lines": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.update_order_lines.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.update_order_lines.description'}" + }, + "remove_order_lines": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.remove_order_lines.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.remove_order_lines.description'}" + }, + "charge_orders": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.charge_orders.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.charge_orders.description'}" + }, + "view_department_bookings": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_department_bookings.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_department_bookings.description'}" + }, + "view_own_bookings": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_own_bookings.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_own_bookings.description'}" + }, + "update_bookings": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.update_bookings.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.update_bookings.description'}" + }, + "create_bookings": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_bookings.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_bookings.description'}" + }, + "mark_bookings_complete": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.mark_bookings_complete.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.mark_bookings_complete.description'}" + }, + "send_booking_confirmations": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.send_booking_confirmations.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.send_booking_confirmations.description'}" + }, + "view_time_booking_entries": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_time_booking_entries.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_time_booking_entries.description'}" + }, + "create_time_booking_entries": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_time_booking_entries.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_time_booking_entries.description'}" + }, + "edit_time_booking_entries": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.edit_time_booking_entries.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.edit_time_booking_entries.description'}" + }, + "view_order_statistics": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_order_statistics.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_order_statistics.description'}" + }, + "view_booking_statistics": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_booking_statistics.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_booking_statistics.description'}" + }, + "open_limited_backoffice": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.open_limited_backoffice.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.open_limited_backoffice.description'}" + }, + "manage_department_prices": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.manage_department_prices.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.manage_department_prices.description'}" + }, + "manage_employee_access": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.manage_employee_access.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.manage_employee_access.description'}" + }, + "unknown": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.unknown.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.unknown.description'}" + } + } } }, "redirect": { @@ -5676,6 +5800,130 @@ "load_employees": "@.capitalize:{'words.generated.could'} @:{'words.generated.not'} @:{'words.generated.load'} @:{'words.generated.employees'}.", "save_employee": "@.capitalize:{'words.generated.could'} @:{'words.generated.not'} @:{'words.generated.save'} @:{'words.generated.employee'}.", "deactivate_employee": "@.capitalize:{'words.generated.could'} @:{'words.generated.not'} @:{'words.generated.deactivate'} @:{'words.generated.employee'}." + }, + "role_permissions": { + "title": "Role permissions", + "tooltip": "View role permissions", + "intro": "Roles combine the exact capabilities assigned to an employee when the role is saved.", + "scope": "Every capability is limited to the departments selected for the employee.", + "selected": "Selected", + "close": "Close", + "unavailable": "Permission details are unavailable for this role until the role catalog has been updated.", + "groups": { + "account": "Account", + "orders": "Orders", + "bookings": "Bookings", + "time_bookings": "Time bookings", + "reports": "Reports", + "limited_backoffice": "Backoffice", + "unknown": "Other" + }, + "capabilities": { + "sign_in": { + "label": "Sign in", + "description": "Allows the employee to sign in to Pleno." + }, + "view_own_permissions": { + "label": "View own permissions", + "description": "Shows the employee which access rights their account has." + }, + "view_orders": { + "label": "View orders", + "description": "Can open order lists and order details for assigned departments." + }, + "create_orders": { + "label": "Create orders", + "description": "Can create new orders for assigned departments." + }, + "edit_orders": { + "label": "Edit orders", + "description": "Can update order details for assigned departments." + }, + "delete_orders": { + "label": "Delete orders", + "description": "Can delete orders in assigned departments." + }, + "view_order_items": { + "label": "View order lines", + "description": "Can see products, services, and prices on orders." + }, + "create_order_items": { + "label": "Create order lines", + "description": "Can add products and services to orders." + }, + "update_order_lines": { + "label": "Edit order lines", + "description": "Can change products, quantities, and prices on orders." + }, + "remove_order_lines": { + "label": "Delete order lines", + "description": "Can remove products and services from orders." + }, + "charge_orders": { + "label": "Charge orders", + "description": "Can take payment or charge a payment intent for an order." + }, + "view_department_bookings": { + "label": "View department bookings", + "description": "Can see bookings for assigned departments." + }, + "view_own_bookings": { + "label": "View own bookings", + "description": "Can see booking counts and bookings tied to the employee account." + }, + "update_bookings": { + "label": "Edit bookings", + "description": "Can change permitted booking details." + }, + "create_bookings": { + "label": "Create bookings", + "description": "Can create new bookings for assigned departments." + }, + "mark_bookings_complete": { + "label": "Complete bookings", + "description": "Can mark bookings as completed." + }, + "send_booking_confirmations": { + "label": "Resend booking confirmations", + "description": "Can resend booking confirmation and completion emails." + }, + "view_time_booking_entries": { + "label": "View time booking entries", + "description": "Can inspect time-booking entries for assigned departments." + }, + "create_time_booking_entries": { + "label": "Create time booking entries", + "description": "Can add new time-booking entries." + }, + "edit_time_booking_entries": { + "label": "Edit time booking entries", + "description": "Can edit time-booking entries when the backend route supports it." + }, + "view_order_statistics": { + "label": "View order statistics", + "description": "Can open order statistics views for assigned departments." + }, + "view_booking_statistics": { + "label": "View booking statistics", + "description": "Can open booking statistics views for assigned departments." + }, + "open_limited_backoffice": { + "label": "Open limited backoffice", + "description": "Can access the limited backoffice area." + }, + "manage_department_prices": { + "label": "Manage department prices", + "description": "Can edit explicit prices for assigned departments." + }, + "manage_employee_access": { + "label": "Manage employee access", + "description": "Can create, edit, and deactivate limited backoffice employees." + }, + "unknown": { + "label": "Additional capability", + "description": "This capability is provided by the role catalog but is not yet described in the interface." + } + } } } } diff --git a/src/i18n/generated/no-v2.json b/src/i18n/generated/no-v2.json index 48804913..d214e1d1 100644 --- a/src/i18n/generated/no-v2.json +++ b/src/i18n/generated/no-v2.json @@ -1353,6 +1353,130 @@ "load_employees": "@:{'templates.generated.compat.limited_backoffice.errors.load_employees'}", "save_employee": "@:{'templates.generated.compat.limited_backoffice.errors.save_employee'}", "deactivate_employee": "@:{'templates.generated.compat.limited_backoffice.errors.deactivate_employee'}" + }, + "role_permissions": { + "title": "@:{'templates.generated.compat.limited_backoffice.role_permissions.title'}", + "tooltip": "@:{'templates.generated.compat.limited_backoffice.role_permissions.tooltip'}", + "intro": "@:{'templates.generated.compat.limited_backoffice.role_permissions.intro'}", + "scope": "@:{'templates.generated.compat.limited_backoffice.role_permissions.scope'}", + "selected": "@:{'templates.generated.compat.limited_backoffice.role_permissions.selected'}", + "close": "@:{'templates.generated.compat.limited_backoffice.role_permissions.close'}", + "unavailable": "@:{'templates.generated.compat.limited_backoffice.role_permissions.unavailable'}", + "groups": { + "account": "@:{'templates.generated.compat.limited_backoffice.role_permissions.groups.account'}", + "orders": "@:{'templates.generated.compat.limited_backoffice.role_permissions.groups.orders'}", + "bookings": "@:{'templates.generated.compat.limited_backoffice.role_permissions.groups.bookings'}", + "time_bookings": "@:{'templates.generated.compat.limited_backoffice.role_permissions.groups.time_bookings'}", + "reports": "@:{'templates.generated.compat.limited_backoffice.role_permissions.groups.reports'}", + "limited_backoffice": "@:{'templates.generated.compat.limited_backoffice.role_permissions.groups.limited_backoffice'}", + "unknown": "@:{'templates.generated.compat.limited_backoffice.role_permissions.groups.unknown'}" + }, + "capabilities": { + "sign_in": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.sign_in.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.sign_in.description'}" + }, + "view_own_permissions": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_own_permissions.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_own_permissions.description'}" + }, + "view_orders": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_orders.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_orders.description'}" + }, + "create_orders": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_orders.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_orders.description'}" + }, + "edit_orders": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.edit_orders.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.edit_orders.description'}" + }, + "delete_orders": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.delete_orders.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.delete_orders.description'}" + }, + "view_order_items": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_order_items.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_order_items.description'}" + }, + "create_order_items": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_order_items.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_order_items.description'}" + }, + "update_order_lines": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.update_order_lines.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.update_order_lines.description'}" + }, + "remove_order_lines": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.remove_order_lines.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.remove_order_lines.description'}" + }, + "charge_orders": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.charge_orders.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.charge_orders.description'}" + }, + "view_department_bookings": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_department_bookings.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_department_bookings.description'}" + }, + "view_own_bookings": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_own_bookings.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_own_bookings.description'}" + }, + "update_bookings": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.update_bookings.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.update_bookings.description'}" + }, + "create_bookings": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_bookings.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_bookings.description'}" + }, + "mark_bookings_complete": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.mark_bookings_complete.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.mark_bookings_complete.description'}" + }, + "send_booking_confirmations": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.send_booking_confirmations.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.send_booking_confirmations.description'}" + }, + "view_time_booking_entries": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_time_booking_entries.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_time_booking_entries.description'}" + }, + "create_time_booking_entries": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_time_booking_entries.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_time_booking_entries.description'}" + }, + "edit_time_booking_entries": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.edit_time_booking_entries.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.edit_time_booking_entries.description'}" + }, + "view_order_statistics": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_order_statistics.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_order_statistics.description'}" + }, + "view_booking_statistics": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_booking_statistics.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_booking_statistics.description'}" + }, + "open_limited_backoffice": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.open_limited_backoffice.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.open_limited_backoffice.description'}" + }, + "manage_department_prices": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.manage_department_prices.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.manage_department_prices.description'}" + }, + "manage_employee_access": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.manage_employee_access.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.manage_employee_access.description'}" + }, + "unknown": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.unknown.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.unknown.description'}" + } + } } }, "redirect": { @@ -5958,6 +6082,130 @@ "load_employees": "@.capitalize:{'words.generated.kunne'} @:{'words.generated.ikke'} @:{'words.generated.laste'} @:{'words.generated.medarbeidere'}.", "save_employee": "@.capitalize:{'words.generated.kunne'} @:{'words.generated.ikke'} @:{'words.generated.lagre'} @:{'words.generated.medarbeideren'}.", "deactivate_employee": "@.capitalize:{'words.generated.kunne'} @:{'words.generated.ikke'} deaktivere @:{'words.generated.medarbeideren'}." + }, + "role_permissions": { + "title": "Rolletillatelser", + "tooltip": "Vis rolletillatelser", + "intro": "Roller samler de nøyaktige funksjonene som tildeles en ansatt når rollen lagres.", + "scope": "Alle funksjoner er begrenset til avdelingene som velges for den ansatte.", + "selected": "Valgt", + "close": "Lukk", + "unavailable": "Tillatelsesdetaljer er ikke tilgjengelige for denne rollen før rollekatalogen er oppdatert.", + "groups": { + "account": "Konto", + "orders": "Ordrer", + "bookings": "Bookinger", + "time_bookings": "Tidsbookinger", + "reports": "Rapporter", + "limited_backoffice": "Backoffice", + "unknown": "Annet" + }, + "capabilities": { + "sign_in": { + "label": "Logg inn", + "description": "Lar den ansatte logge inn i Pleno." + }, + "view_own_permissions": { + "label": "Se egne tillatelser", + "description": "Viser den ansatte hvilke tilgangsrettigheter kontoen har." + }, + "view_orders": { + "label": "Se ordrer", + "description": "Kan åpne ordrelister og ordredetaljer for tildelte avdelinger." + }, + "create_orders": { + "label": "Opprett ordrer", + "description": "Kan opprette nye ordrer for tildelte avdelinger." + }, + "edit_orders": { + "label": "Rediger ordrer", + "description": "Kan endre ordredetaljer for tildelte avdelinger." + }, + "delete_orders": { + "label": "Slett ordrer", + "description": "Kan slette ordrer i tildelte avdelinger." + }, + "view_order_items": { + "label": "Se ordrelinjer", + "description": "Kan se produkter, tjenester og priser på ordrer." + }, + "create_order_items": { + "label": "Opprett ordrelinjer", + "description": "Kan legge produkter og tjenester til ordrer." + }, + "update_order_lines": { + "label": "Rediger ordrelinjer", + "description": "Kan endre produkter, antall og priser på ordrer." + }, + "remove_order_lines": { + "label": "Slett ordrelinjer", + "description": "Kan fjerne produkter og tjenester fra ordrer." + }, + "charge_orders": { + "label": "Belast ordrer", + "description": "Kan ta betaling eller belaste en betalingsreservasjon for en ordre." + }, + "view_department_bookings": { + "label": "Se avdelingsbookinger", + "description": "Kan se bookinger for tildelte avdelinger." + }, + "view_own_bookings": { + "label": "Se egne bookinger", + "description": "Kan se bookingantall og bookinger knyttet til ansattkontoen." + }, + "update_bookings": { + "label": "Rediger bookinger", + "description": "Kan endre tillatte bookingdetaljer." + }, + "create_bookings": { + "label": "Opprett bookinger", + "description": "Kan opprette nye bookinger for tildelte avdelinger." + }, + "mark_bookings_complete": { + "label": "Fullfør bookinger", + "description": "Kan markere bookinger som fullført." + }, + "send_booking_confirmations": { + "label": "Send bookingbekreftelser på nytt", + "description": "Kan sende bookingbekreftelser og fullførings-e-poster på nytt." + }, + "view_time_booking_entries": { + "label": "Se tidsbookinger", + "description": "Kan gå gjennom tidsbookingoppføringer for tildelte avdelinger." + }, + "create_time_booking_entries": { + "label": "Opprett tidsbookinger", + "description": "Kan legge til nye tidsbookingoppføringer." + }, + "edit_time_booking_entries": { + "label": "Rediger tidsbookinger", + "description": "Kan redigere tidsbookingoppføringer når backend-ruten støtter det." + }, + "view_order_statistics": { + "label": "Se ordrestatistikk", + "description": "Kan åpne ordrestatistikk for tildelte avdelinger." + }, + "view_booking_statistics": { + "label": "Se bookingstatistikk", + "description": "Kan åpne bookingstatistikk for tildelte avdelinger." + }, + "open_limited_backoffice": { + "label": "Åpne begrenset backoffice", + "description": "Kan åpne det begrensede backofficeområdet." + }, + "manage_department_prices": { + "label": "Administrer avdelingspriser", + "description": "Kan redigere eksplisitte priser for tildelte avdelinger." + }, + "manage_employee_access": { + "label": "Administrer ansattilgang", + "description": "Kan opprette, redigere og deaktivere begrensede backofficeansatte." + }, + "unknown": { + "label": "Ekstra funksjon", + "description": "Denne funksjonen kommer fra rollekatalogen, men er ennå ikke beskrevet i grensesnittet." + } + } } } } diff --git a/src/i18n/generated/sv-v2.json b/src/i18n/generated/sv-v2.json index a014c4f1..d85775ec 100644 --- a/src/i18n/generated/sv-v2.json +++ b/src/i18n/generated/sv-v2.json @@ -1403,6 +1403,130 @@ "load_employees": "@:{'templates.generated.compat.limited_backoffice.errors.load_employees'}", "save_employee": "@:{'templates.generated.compat.limited_backoffice.errors.save_employee'}", "deactivate_employee": "@:{'templates.generated.compat.limited_backoffice.errors.deactivate_employee'}" + }, + "role_permissions": { + "title": "@:{'templates.generated.compat.limited_backoffice.role_permissions.title'}", + "tooltip": "@:{'templates.generated.compat.limited_backoffice.role_permissions.tooltip'}", + "intro": "@:{'templates.generated.compat.limited_backoffice.role_permissions.intro'}", + "scope": "@:{'templates.generated.compat.limited_backoffice.role_permissions.scope'}", + "selected": "@:{'templates.generated.compat.limited_backoffice.role_permissions.selected'}", + "close": "@:{'templates.generated.compat.limited_backoffice.role_permissions.close'}", + "unavailable": "@:{'templates.generated.compat.limited_backoffice.role_permissions.unavailable'}", + "groups": { + "account": "@:{'templates.generated.compat.limited_backoffice.role_permissions.groups.account'}", + "orders": "@:{'templates.generated.compat.limited_backoffice.role_permissions.groups.orders'}", + "bookings": "@:{'templates.generated.compat.limited_backoffice.role_permissions.groups.bookings'}", + "time_bookings": "@:{'templates.generated.compat.limited_backoffice.role_permissions.groups.time_bookings'}", + "reports": "@:{'templates.generated.compat.limited_backoffice.role_permissions.groups.reports'}", + "limited_backoffice": "@:{'templates.generated.compat.limited_backoffice.role_permissions.groups.limited_backoffice'}", + "unknown": "@:{'templates.generated.compat.limited_backoffice.role_permissions.groups.unknown'}" + }, + "capabilities": { + "sign_in": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.sign_in.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.sign_in.description'}" + }, + "view_own_permissions": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_own_permissions.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_own_permissions.description'}" + }, + "view_orders": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_orders.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_orders.description'}" + }, + "create_orders": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_orders.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_orders.description'}" + }, + "edit_orders": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.edit_orders.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.edit_orders.description'}" + }, + "delete_orders": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.delete_orders.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.delete_orders.description'}" + }, + "view_order_items": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_order_items.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_order_items.description'}" + }, + "create_order_items": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_order_items.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_order_items.description'}" + }, + "update_order_lines": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.update_order_lines.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.update_order_lines.description'}" + }, + "remove_order_lines": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.remove_order_lines.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.remove_order_lines.description'}" + }, + "charge_orders": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.charge_orders.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.charge_orders.description'}" + }, + "view_department_bookings": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_department_bookings.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_department_bookings.description'}" + }, + "view_own_bookings": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_own_bookings.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_own_bookings.description'}" + }, + "update_bookings": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.update_bookings.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.update_bookings.description'}" + }, + "create_bookings": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_bookings.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_bookings.description'}" + }, + "mark_bookings_complete": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.mark_bookings_complete.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.mark_bookings_complete.description'}" + }, + "send_booking_confirmations": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.send_booking_confirmations.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.send_booking_confirmations.description'}" + }, + "view_time_booking_entries": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_time_booking_entries.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_time_booking_entries.description'}" + }, + "create_time_booking_entries": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_time_booking_entries.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.create_time_booking_entries.description'}" + }, + "edit_time_booking_entries": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.edit_time_booking_entries.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.edit_time_booking_entries.description'}" + }, + "view_order_statistics": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_order_statistics.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_order_statistics.description'}" + }, + "view_booking_statistics": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_booking_statistics.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.view_booking_statistics.description'}" + }, + "open_limited_backoffice": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.open_limited_backoffice.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.open_limited_backoffice.description'}" + }, + "manage_department_prices": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.manage_department_prices.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.manage_department_prices.description'}" + }, + "manage_employee_access": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.manage_employee_access.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.manage_employee_access.description'}" + }, + "unknown": { + "label": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.unknown.label'}", + "description": "@:{'templates.generated.compat.limited_backoffice.role_permissions.capabilities.unknown.description'}" + } + } } }, "redirect": { @@ -6008,6 +6132,130 @@ "load_employees": "@.capitalize:{'words.generated.kunde'} @:{'words.generated.inte'} @:{'words.generated.ladda'} @:{'words.generated.medarbetare'}.", "save_employee": "@.capitalize:{'words.generated.kunde'} @:{'words.generated.inte'} @:{'words.generated.spara'} @:{'words.generated.medarbetaren'}.", "deactivate_employee": "@.capitalize:{'words.generated.kunde'} @:{'words.generated.inte'} @:{'words.generated.inaktivera'} @:{'words.generated.medarbetaren'}." + }, + "role_permissions": { + "title": "Rollbehörigheter", + "tooltip": "Visa rollbehörigheter", + "intro": "Roller samlar de exakta funktioner som tilldelas en medarbetare när rollen sparas.", + "scope": "Alla funktioner är begränsade till de avdelningar som väljs för medarbetaren.", + "selected": "Vald", + "close": "Stäng", + "unavailable": "Behörighetsdetaljer är inte tillgängliga för den här rollen förrän rollkatalogen har uppdaterats.", + "groups": { + "account": "Konto", + "orders": "Order", + "bookings": "Bokningar", + "time_bookings": "Tidsbokningar", + "reports": "Rapporter", + "limited_backoffice": "Backoffice", + "unknown": "Övrigt" + }, + "capabilities": { + "sign_in": { + "label": "Logga in", + "description": "Ger medarbetaren möjlighet att logga in i Pleno." + }, + "view_own_permissions": { + "label": "Se egna behörigheter", + "description": "Visar medarbetaren vilka åtkomsträttigheter kontot har." + }, + "view_orders": { + "label": "Se order", + "description": "Kan öppna orderlistor och orderdetaljer för tilldelade avdelningar." + }, + "create_orders": { + "label": "Skapa order", + "description": "Kan skapa nya order för tilldelade avdelningar." + }, + "edit_orders": { + "label": "Redigera order", + "description": "Kan ändra orderdetaljer för tilldelade avdelningar." + }, + "delete_orders": { + "label": "Ta bort order", + "description": "Kan ta bort order i tilldelade avdelningar." + }, + "view_order_items": { + "label": "Se orderrader", + "description": "Kan se produkter, tjänster och priser på order." + }, + "create_order_items": { + "label": "Skapa orderrader", + "description": "Kan lägga till produkter och tjänster på order." + }, + "update_order_lines": { + "label": "Redigera orderrader", + "description": "Kan ändra produkter, antal och priser på order." + }, + "remove_order_lines": { + "label": "Ta bort orderrader", + "description": "Kan ta bort produkter och tjänster från order." + }, + "charge_orders": { + "label": "Debitera order", + "description": "Kan ta betalt eller debitera en betalningsreservation för en order." + }, + "view_department_bookings": { + "label": "Se avdelningsbokningar", + "description": "Kan se bokningar för tilldelade avdelningar." + }, + "view_own_bookings": { + "label": "Se egna bokningar", + "description": "Kan se bokningsantal och bokningar kopplade till medarbetarkontot." + }, + "update_bookings": { + "label": "Redigera bokningar", + "description": "Kan ändra tillåtna bokningsdetaljer." + }, + "create_bookings": { + "label": "Skapa bokningar", + "description": "Kan skapa nya bokningar för tilldelade avdelningar." + }, + "mark_bookings_complete": { + "label": "Slutför bokningar", + "description": "Kan markera bokningar som slutförda." + }, + "send_booking_confirmations": { + "label": "Skicka bokningsbekräftelser igen", + "description": "Kan skicka bokningsbekräftelser och slutförandemejl igen." + }, + "view_time_booking_entries": { + "label": "Se tidsbokningar", + "description": "Kan granska tidsbokningsposter för tilldelade avdelningar." + }, + "create_time_booking_entries": { + "label": "Skapa tidsbokningar", + "description": "Kan lägga till nya tidsbokningsposter." + }, + "edit_time_booking_entries": { + "label": "Redigera tidsbokningar", + "description": "Kan redigera tidsbokningsposter när backend-rutten stöder det." + }, + "view_order_statistics": { + "label": "Se orderstatistik", + "description": "Kan öppna orderstatistik för tilldelade avdelningar." + }, + "view_booking_statistics": { + "label": "Se bokningsstatistik", + "description": "Kan öppna bokningsstatistik för tilldelade avdelningar." + }, + "open_limited_backoffice": { + "label": "Öppna begränsat backoffice", + "description": "Kan öppna det begränsade backofficeområdet." + }, + "manage_department_prices": { + "label": "Hantera avdelningspriser", + "description": "Kan redigera uttryckliga priser för tilldelade avdelningar." + }, + "manage_employee_access": { + "label": "Hantera medarbetaråtkomst", + "description": "Kan skapa, redigera och inaktivera begränsade backofficemedarbetare." + }, + "unknown": { + "label": "Extra funktion", + "description": "Den här funktionen kommer från rollkatalogen men är ännu inte beskriven i gränssnittet." + } + } } } } diff --git a/src/i18n/source/da/phrases/index.json b/src/i18n/source/da/phrases/index.json index 8297bfdf..0913b5cb 100644 --- a/src/i18n/source/da/phrases/index.json +++ b/src/i18n/source/da/phrases/index.json @@ -95,6 +95,130 @@ "load_employees": "@:{'phrases.compat.limited_backoffice.errors.load_employees'}", "save_employee": "@:{'phrases.compat.limited_backoffice.errors.save_employee'}", "deactivate_employee": "@:{'phrases.compat.limited_backoffice.errors.deactivate_employee'}" + }, + "role_permissions": { + "title": "@:{'phrases.compat.limited_backoffice.role_permissions.title'}", + "tooltip": "@:{'phrases.compat.limited_backoffice.role_permissions.tooltip'}", + "intro": "@:{'phrases.compat.limited_backoffice.role_permissions.intro'}", + "scope": "@:{'phrases.compat.limited_backoffice.role_permissions.scope'}", + "selected": "@:{'phrases.compat.limited_backoffice.role_permissions.selected'}", + "close": "@:{'phrases.compat.limited_backoffice.role_permissions.close'}", + "unavailable": "@:{'phrases.compat.limited_backoffice.role_permissions.unavailable'}", + "groups": { + "account": "@:{'phrases.compat.limited_backoffice.role_permissions.groups.account'}", + "orders": "@:{'phrases.compat.limited_backoffice.role_permissions.groups.orders'}", + "bookings": "@:{'phrases.compat.limited_backoffice.role_permissions.groups.bookings'}", + "time_bookings": "@:{'phrases.compat.limited_backoffice.role_permissions.groups.time_bookings'}", + "reports": "@:{'phrases.compat.limited_backoffice.role_permissions.groups.reports'}", + "limited_backoffice": "@:{'phrases.compat.limited_backoffice.role_permissions.groups.limited_backoffice'}", + "unknown": "@:{'phrases.compat.limited_backoffice.role_permissions.groups.unknown'}" + }, + "capabilities": { + "sign_in": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.sign_in.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.sign_in.description'}" + }, + "view_own_permissions": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_own_permissions.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_own_permissions.description'}" + }, + "view_orders": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_orders.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_orders.description'}" + }, + "create_orders": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_orders.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_orders.description'}" + }, + "edit_orders": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.edit_orders.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.edit_orders.description'}" + }, + "delete_orders": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.delete_orders.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.delete_orders.description'}" + }, + "view_order_items": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_order_items.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_order_items.description'}" + }, + "create_order_items": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_order_items.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_order_items.description'}" + }, + "update_order_lines": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.update_order_lines.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.update_order_lines.description'}" + }, + "remove_order_lines": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.remove_order_lines.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.remove_order_lines.description'}" + }, + "charge_orders": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.charge_orders.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.charge_orders.description'}" + }, + "view_department_bookings": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_department_bookings.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_department_bookings.description'}" + }, + "view_own_bookings": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_own_bookings.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_own_bookings.description'}" + }, + "update_bookings": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.update_bookings.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.update_bookings.description'}" + }, + "create_bookings": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_bookings.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_bookings.description'}" + }, + "mark_bookings_complete": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.mark_bookings_complete.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.mark_bookings_complete.description'}" + }, + "send_booking_confirmations": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.send_booking_confirmations.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.send_booking_confirmations.description'}" + }, + "view_time_booking_entries": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_time_booking_entries.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_time_booking_entries.description'}" + }, + "create_time_booking_entries": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_time_booking_entries.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_time_booking_entries.description'}" + }, + "edit_time_booking_entries": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.edit_time_booking_entries.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.edit_time_booking_entries.description'}" + }, + "view_order_statistics": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_order_statistics.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_order_statistics.description'}" + }, + "view_booking_statistics": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_booking_statistics.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_booking_statistics.description'}" + }, + "open_limited_backoffice": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.open_limited_backoffice.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.open_limited_backoffice.description'}" + }, + "manage_department_prices": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.manage_department_prices.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.manage_department_prices.description'}" + }, + "manage_employee_access": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.manage_employee_access.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.manage_employee_access.description'}" + }, + "unknown": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.unknown.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.unknown.description'}" + } + } } }, "redirect": { @@ -204,6 +328,130 @@ "load_employees": "@.capitalize:{'terms.glossary.medarbejdere'} @:{'terms.glossary.kunne'} @:{'terms.glossary.ikke'} @:{'terms.glossary.indlæses'}.", "save_employee": "@.capitalize:{'terms.glossary.medarbejderen'} @:{'terms.glossary.kunne'} @:{'terms.glossary.ikke'} @:{'terms.glossary.gemmes'}.", "deactivate_employee": "@.capitalize:{'terms.glossary.medarbejderen'} @:{'terms.glossary.kunne'} @:{'terms.glossary.ikke'} deaktiveres." + }, + "role_permissions": { + "title": "Rolletilladelser", + "tooltip": "Vis rolletilladelser", + "intro": "Roller samler de præcise funktioner, der tildeles en medarbejder, når rollen gemmes.", + "scope": "Alle funktioner er begrænset til de afdelinger, der vælges for medarbejderen.", + "selected": "Valgt", + "close": "Luk", + "unavailable": "Tilladelsesdetaljer er ikke tilgængelige for denne rolle, før rollekataloget er opdateret.", + "groups": { + "account": "Konto", + "orders": "Ordrer", + "bookings": "Bookinger", + "time_bookings": "Tidsbookinger", + "reports": "Rapporter", + "limited_backoffice": "Backoffice", + "unknown": "Øvrigt" + }, + "capabilities": { + "sign_in": { + "label": "Log ind", + "description": "Giver medarbejderen adgang til at logge ind i Pleno." + }, + "view_own_permissions": { + "label": "Se egne tilladelser", + "description": "Viser medarbejderen, hvilke adgangsrettigheder kontoen har." + }, + "view_orders": { + "label": "Se ordrer", + "description": "Kan åbne ordrelister og ordredetaljer for tildelte afdelinger." + }, + "create_orders": { + "label": "Opret ordrer", + "description": "Kan oprette nye ordrer for tildelte afdelinger." + }, + "edit_orders": { + "label": "Rediger ordrer", + "description": "Kan ændre ordredetaljer for tildelte afdelinger." + }, + "delete_orders": { + "label": "Slet ordrer", + "description": "Kan slette ordrer i tildelte afdelinger." + }, + "view_order_items": { + "label": "Se ordrelinjer", + "description": "Kan se produkter, ydelser og priser på ordrer." + }, + "create_order_items": { + "label": "Opret ordrelinjer", + "description": "Kan tilføje produkter og ydelser til ordrer." + }, + "update_order_lines": { + "label": "Rediger ordrelinjer", + "description": "Kan ændre produkter, antal og priser på ordrer." + }, + "remove_order_lines": { + "label": "Slet ordrelinjer", + "description": "Kan fjerne produkter og ydelser fra ordrer." + }, + "charge_orders": { + "label": "Opkræv ordrer", + "description": "Kan tage betaling eller opkræve en betalingsreservation for en ordre." + }, + "view_department_bookings": { + "label": "Se afdelingsbookinger", + "description": "Kan se bookinger for tildelte afdelinger." + }, + "view_own_bookings": { + "label": "Se egne bookinger", + "description": "Kan se bookingantal og bookinger knyttet til medarbejderkontoen." + }, + "update_bookings": { + "label": "Rediger bookinger", + "description": "Kan ændre tilladte bookingdetaljer." + }, + "create_bookings": { + "label": "Opret bookinger", + "description": "Kan oprette nye bookinger for tildelte afdelinger." + }, + "mark_bookings_complete": { + "label": "Afslut bookinger", + "description": "Kan markere bookinger som afsluttet." + }, + "send_booking_confirmations": { + "label": "Gensend bookingbekræftelser", + "description": "Kan gensende bookingbekræftelser og afslutningsmails." + }, + "view_time_booking_entries": { + "label": "Se tidsbookinger", + "description": "Kan gennemse tidsbookingposter for tildelte afdelinger." + }, + "create_time_booking_entries": { + "label": "Opret tidsbookinger", + "description": "Kan oprette nye tidsbookingposter." + }, + "edit_time_booking_entries": { + "label": "Rediger tidsbookinger", + "description": "Kan redigere tidsbookingposter, når backend-ruten understøtter det." + }, + "view_order_statistics": { + "label": "Se ordrestatistik", + "description": "Kan åbne statistikvisninger for ordrer i tildelte afdelinger." + }, + "view_booking_statistics": { + "label": "Se bookingstatistik", + "description": "Kan åbne statistikvisninger for bookinger i tildelte afdelinger." + }, + "open_limited_backoffice": { + "label": "Åbn begrænset backoffice", + "description": "Kan tilgå det begrænsede backofficeområde." + }, + "manage_department_prices": { + "label": "Administrer afdelingspriser", + "description": "Kan redigere eksplicitte priser for tildelte afdelinger." + }, + "manage_employee_access": { + "label": "Administrer medarbejderadgang", + "description": "Kan oprette, redigere og deaktivere begrænsede backofficemedarbejdere." + }, + "unknown": { + "label": "Ekstra funktion", + "description": "Denne funktion kommer fra rollekataloget, men er endnu ikke beskrevet i grænsefladen." + } + } } } } diff --git a/src/i18n/source/de/phrases/index.json b/src/i18n/source/de/phrases/index.json index 180b3e3c..5bb6df51 100644 --- a/src/i18n/source/de/phrases/index.json +++ b/src/i18n/source/de/phrases/index.json @@ -95,6 +95,130 @@ "load_employees": "@:{'phrases.compat.limited_backoffice.errors.load_employees'}", "save_employee": "@:{'phrases.compat.limited_backoffice.errors.save_employee'}", "deactivate_employee": "@:{'phrases.compat.limited_backoffice.errors.deactivate_employee'}" + }, + "role_permissions": { + "title": "@:{'phrases.compat.limited_backoffice.role_permissions.title'}", + "tooltip": "@:{'phrases.compat.limited_backoffice.role_permissions.tooltip'}", + "intro": "@:{'phrases.compat.limited_backoffice.role_permissions.intro'}", + "scope": "@:{'phrases.compat.limited_backoffice.role_permissions.scope'}", + "selected": "@:{'phrases.compat.limited_backoffice.role_permissions.selected'}", + "close": "@:{'phrases.compat.limited_backoffice.role_permissions.close'}", + "unavailable": "@:{'phrases.compat.limited_backoffice.role_permissions.unavailable'}", + "groups": { + "account": "@:{'phrases.compat.limited_backoffice.role_permissions.groups.account'}", + "orders": "@:{'phrases.compat.limited_backoffice.role_permissions.groups.orders'}", + "bookings": "@:{'phrases.compat.limited_backoffice.role_permissions.groups.bookings'}", + "time_bookings": "@:{'phrases.compat.limited_backoffice.role_permissions.groups.time_bookings'}", + "reports": "@:{'phrases.compat.limited_backoffice.role_permissions.groups.reports'}", + "limited_backoffice": "@:{'phrases.compat.limited_backoffice.role_permissions.groups.limited_backoffice'}", + "unknown": "@:{'phrases.compat.limited_backoffice.role_permissions.groups.unknown'}" + }, + "capabilities": { + "sign_in": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.sign_in.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.sign_in.description'}" + }, + "view_own_permissions": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_own_permissions.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_own_permissions.description'}" + }, + "view_orders": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_orders.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_orders.description'}" + }, + "create_orders": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_orders.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_orders.description'}" + }, + "edit_orders": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.edit_orders.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.edit_orders.description'}" + }, + "delete_orders": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.delete_orders.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.delete_orders.description'}" + }, + "view_order_items": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_order_items.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_order_items.description'}" + }, + "create_order_items": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_order_items.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_order_items.description'}" + }, + "update_order_lines": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.update_order_lines.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.update_order_lines.description'}" + }, + "remove_order_lines": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.remove_order_lines.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.remove_order_lines.description'}" + }, + "charge_orders": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.charge_orders.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.charge_orders.description'}" + }, + "view_department_bookings": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_department_bookings.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_department_bookings.description'}" + }, + "view_own_bookings": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_own_bookings.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_own_bookings.description'}" + }, + "update_bookings": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.update_bookings.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.update_bookings.description'}" + }, + "create_bookings": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_bookings.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_bookings.description'}" + }, + "mark_bookings_complete": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.mark_bookings_complete.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.mark_bookings_complete.description'}" + }, + "send_booking_confirmations": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.send_booking_confirmations.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.send_booking_confirmations.description'}" + }, + "view_time_booking_entries": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_time_booking_entries.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_time_booking_entries.description'}" + }, + "create_time_booking_entries": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_time_booking_entries.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_time_booking_entries.description'}" + }, + "edit_time_booking_entries": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.edit_time_booking_entries.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.edit_time_booking_entries.description'}" + }, + "view_order_statistics": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_order_statistics.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_order_statistics.description'}" + }, + "view_booking_statistics": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_booking_statistics.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_booking_statistics.description'}" + }, + "open_limited_backoffice": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.open_limited_backoffice.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.open_limited_backoffice.description'}" + }, + "manage_department_prices": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.manage_department_prices.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.manage_department_prices.description'}" + }, + "manage_employee_access": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.manage_employee_access.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.manage_employee_access.description'}" + }, + "unknown": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.unknown.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.unknown.description'}" + } + } } }, "redirect": { @@ -204,6 +328,130 @@ "load_employees": "@:{'terms.glossary.mitarbeiter'} @:{'terms.glossary.konnten'} @:{'terms.glossary.nicht'} @:{'terms.glossary.geladen'} @:{'terms.glossary.werden'}.", "save_employee": "@:{'terms.glossary.mitarbeiter'} @:{'terms.glossary.konnte'} @:{'terms.glossary.nicht'} @:{'terms.glossary.gespeichert'} @:{'terms.glossary.werden'}.", "deactivate_employee": "@:{'terms.glossary.mitarbeiter'} @:{'terms.glossary.konnte'} @:{'terms.glossary.nicht'} @:{'terms.glossary.deaktiviert'} @:{'terms.glossary.werden'}." + }, + "role_permissions": { + "title": "Rollenberechtigungen", + "tooltip": "Rollenberechtigungen anzeigen", + "intro": "Rollen bündeln die genauen Funktionen, die einem Mitarbeiter beim Speichern der Rolle zugewiesen werden.", + "scope": "Jede Funktion ist auf die Abteilungen begrenzt, die für den Mitarbeiter ausgewählt sind.", + "selected": "Ausgewählt", + "close": "Schließen", + "unavailable": "Berechtigungsdetails sind für diese Rolle erst verfügbar, wenn der Rollenkatalog aktualisiert wurde.", + "groups": { + "account": "Konto", + "orders": "Aufträge", + "bookings": "Buchungen", + "time_bookings": "Zeitbuchungen", + "reports": "Berichte", + "limited_backoffice": "Backoffice", + "unknown": "Sonstiges" + }, + "capabilities": { + "sign_in": { + "label": "Anmelden", + "description": "Erlaubt dem Mitarbeiter, sich bei Pleno anzumelden." + }, + "view_own_permissions": { + "label": "Eigene Berechtigungen anzeigen", + "description": "Zeigt dem Mitarbeiter, welche Zugriffsrechte das Konto hat." + }, + "view_orders": { + "label": "Aufträge anzeigen", + "description": "Kann Auftragslisten und Auftragsdetails für zugewiesene Abteilungen öffnen." + }, + "create_orders": { + "label": "Aufträge erstellen", + "description": "Kann neue Aufträge für zugewiesene Abteilungen erstellen." + }, + "edit_orders": { + "label": "Aufträge bearbeiten", + "description": "Kann Auftragsdetails für zugewiesene Abteilungen ändern." + }, + "delete_orders": { + "label": "Aufträge löschen", + "description": "Kann Aufträge in zugewiesenen Abteilungen löschen." + }, + "view_order_items": { + "label": "Auftragspositionen anzeigen", + "description": "Kann Produkte, Leistungen und Preise auf Aufträgen sehen." + }, + "create_order_items": { + "label": "Auftragspositionen erstellen", + "description": "Kann Produkte und Leistungen zu Aufträgen hinzufügen." + }, + "update_order_lines": { + "label": "Auftragspositionen bearbeiten", + "description": "Kann Produkte, Mengen und Preise auf Aufträgen ändern." + }, + "remove_order_lines": { + "label": "Auftragspositionen löschen", + "description": "Kann Produkte und Leistungen aus Aufträgen entfernen." + }, + "charge_orders": { + "label": "Aufträge abrechnen", + "description": "Kann Zahlungen annehmen oder eine Zahlungsreservierung für einen Auftrag belasten." + }, + "view_department_bookings": { + "label": "Abteilungsbuchungen anzeigen", + "description": "Kann Buchungen für zugewiesene Abteilungen sehen." + }, + "view_own_bookings": { + "label": "Eigene Buchungen anzeigen", + "description": "Kann Buchungszahlen und Buchungen sehen, die mit dem Mitarbeiterkonto verbunden sind." + }, + "update_bookings": { + "label": "Buchungen bearbeiten", + "description": "Kann erlaubte Buchungsdetails ändern." + }, + "create_bookings": { + "label": "Buchungen erstellen", + "description": "Kann neue Buchungen für zugewiesene Abteilungen erstellen." + }, + "mark_bookings_complete": { + "label": "Buchungen abschließen", + "description": "Kann Buchungen als abgeschlossen markieren." + }, + "send_booking_confirmations": { + "label": "Buchungsbestätigungen erneut senden", + "description": "Kann Buchungsbestätigungen und Abschluss-E-Mails erneut senden." + }, + "view_time_booking_entries": { + "label": "Zeitbuchungen anzeigen", + "description": "Kann Zeitbuchungseinträge für zugewiesene Abteilungen prüfen." + }, + "create_time_booking_entries": { + "label": "Zeitbuchungen erstellen", + "description": "Kann neue Zeitbuchungseinträge hinzufügen." + }, + "edit_time_booking_entries": { + "label": "Zeitbuchungen bearbeiten", + "description": "Kann Zeitbuchungseinträge bearbeiten, wenn die Backend-Route dies unterstützt." + }, + "view_order_statistics": { + "label": "Auftragsstatistik anzeigen", + "description": "Kann Auftragsstatistiken für zugewiesene Abteilungen öffnen." + }, + "view_booking_statistics": { + "label": "Buchungsstatistik anzeigen", + "description": "Kann Buchungsstatistiken für zugewiesene Abteilungen öffnen." + }, + "open_limited_backoffice": { + "label": "Begrenztes Backoffice öffnen", + "description": "Kann den begrenzten Backofficebereich öffnen." + }, + "manage_department_prices": { + "label": "Abteilungspreise verwalten", + "description": "Kann explizite Preise für zugewiesene Abteilungen bearbeiten." + }, + "manage_employee_access": { + "label": "Mitarbeiterzugang verwalten", + "description": "Kann begrenzte Backoffice-Mitarbeiter erstellen, bearbeiten und deaktivieren." + }, + "unknown": { + "label": "Zusätzliche Funktion", + "description": "Diese Funktion kommt aus dem Rollenkatalog, ist aber in der Oberfläche noch nicht beschrieben." + } + } } } } diff --git a/src/i18n/source/en/phrases/index.json b/src/i18n/source/en/phrases/index.json index afea696c..40eb1207 100644 --- a/src/i18n/source/en/phrases/index.json +++ b/src/i18n/source/en/phrases/index.json @@ -95,6 +95,130 @@ "load_employees": "@:{'phrases.compat.limited_backoffice.errors.load_employees'}", "save_employee": "@:{'phrases.compat.limited_backoffice.errors.save_employee'}", "deactivate_employee": "@:{'phrases.compat.limited_backoffice.errors.deactivate_employee'}" + }, + "role_permissions": { + "title": "@:{'phrases.compat.limited_backoffice.role_permissions.title'}", + "tooltip": "@:{'phrases.compat.limited_backoffice.role_permissions.tooltip'}", + "intro": "@:{'phrases.compat.limited_backoffice.role_permissions.intro'}", + "scope": "@:{'phrases.compat.limited_backoffice.role_permissions.scope'}", + "selected": "@:{'phrases.compat.limited_backoffice.role_permissions.selected'}", + "close": "@:{'phrases.compat.limited_backoffice.role_permissions.close'}", + "unavailable": "@:{'phrases.compat.limited_backoffice.role_permissions.unavailable'}", + "groups": { + "account": "@:{'phrases.compat.limited_backoffice.role_permissions.groups.account'}", + "orders": "@:{'phrases.compat.limited_backoffice.role_permissions.groups.orders'}", + "bookings": "@:{'phrases.compat.limited_backoffice.role_permissions.groups.bookings'}", + "time_bookings": "@:{'phrases.compat.limited_backoffice.role_permissions.groups.time_bookings'}", + "reports": "@:{'phrases.compat.limited_backoffice.role_permissions.groups.reports'}", + "limited_backoffice": "@:{'phrases.compat.limited_backoffice.role_permissions.groups.limited_backoffice'}", + "unknown": "@:{'phrases.compat.limited_backoffice.role_permissions.groups.unknown'}" + }, + "capabilities": { + "sign_in": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.sign_in.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.sign_in.description'}" + }, + "view_own_permissions": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_own_permissions.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_own_permissions.description'}" + }, + "view_orders": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_orders.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_orders.description'}" + }, + "create_orders": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_orders.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_orders.description'}" + }, + "edit_orders": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.edit_orders.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.edit_orders.description'}" + }, + "delete_orders": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.delete_orders.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.delete_orders.description'}" + }, + "view_order_items": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_order_items.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_order_items.description'}" + }, + "create_order_items": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_order_items.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_order_items.description'}" + }, + "update_order_lines": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.update_order_lines.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.update_order_lines.description'}" + }, + "remove_order_lines": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.remove_order_lines.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.remove_order_lines.description'}" + }, + "charge_orders": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.charge_orders.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.charge_orders.description'}" + }, + "view_department_bookings": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_department_bookings.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_department_bookings.description'}" + }, + "view_own_bookings": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_own_bookings.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_own_bookings.description'}" + }, + "update_bookings": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.update_bookings.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.update_bookings.description'}" + }, + "create_bookings": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_bookings.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_bookings.description'}" + }, + "mark_bookings_complete": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.mark_bookings_complete.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.mark_bookings_complete.description'}" + }, + "send_booking_confirmations": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.send_booking_confirmations.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.send_booking_confirmations.description'}" + }, + "view_time_booking_entries": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_time_booking_entries.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_time_booking_entries.description'}" + }, + "create_time_booking_entries": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_time_booking_entries.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_time_booking_entries.description'}" + }, + "edit_time_booking_entries": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.edit_time_booking_entries.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.edit_time_booking_entries.description'}" + }, + "view_order_statistics": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_order_statistics.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_order_statistics.description'}" + }, + "view_booking_statistics": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_booking_statistics.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_booking_statistics.description'}" + }, + "open_limited_backoffice": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.open_limited_backoffice.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.open_limited_backoffice.description'}" + }, + "manage_department_prices": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.manage_department_prices.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.manage_department_prices.description'}" + }, + "manage_employee_access": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.manage_employee_access.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.manage_employee_access.description'}" + }, + "unknown": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.unknown.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.unknown.description'}" + } + } } }, "redirect": { @@ -204,6 +328,130 @@ "load_employees": "@.capitalize:{'terms.glossary.could'} @:{'terms.glossary.not'} @:{'terms.glossary.load'} @:{'terms.glossary.employees'}.", "save_employee": "@.capitalize:{'terms.glossary.could'} @:{'terms.glossary.not'} @:{'terms.glossary.save'} @:{'terms.glossary.employee'}.", "deactivate_employee": "@.capitalize:{'terms.glossary.could'} @:{'terms.glossary.not'} @:{'terms.glossary.deactivate'} @:{'terms.glossary.employee'}." + }, + "role_permissions": { + "title": "Role permissions", + "tooltip": "View role permissions", + "intro": "Roles combine the exact capabilities assigned to an employee when the role is saved.", + "scope": "Every capability is limited to the departments selected for the employee.", + "selected": "Selected", + "close": "Close", + "unavailable": "Permission details are unavailable for this role until the role catalog has been updated.", + "groups": { + "account": "Account", + "orders": "Orders", + "bookings": "Bookings", + "time_bookings": "Time bookings", + "reports": "Reports", + "limited_backoffice": "Backoffice", + "unknown": "Other" + }, + "capabilities": { + "sign_in": { + "label": "Sign in", + "description": "Allows the employee to sign in to Pleno." + }, + "view_own_permissions": { + "label": "View own permissions", + "description": "Shows the employee which access rights their account has." + }, + "view_orders": { + "label": "View orders", + "description": "Can open order lists and order details for assigned departments." + }, + "create_orders": { + "label": "Create orders", + "description": "Can create new orders for assigned departments." + }, + "edit_orders": { + "label": "Edit orders", + "description": "Can update order details for assigned departments." + }, + "delete_orders": { + "label": "Delete orders", + "description": "Can delete orders in assigned departments." + }, + "view_order_items": { + "label": "View order lines", + "description": "Can see products, services, and prices on orders." + }, + "create_order_items": { + "label": "Create order lines", + "description": "Can add products and services to orders." + }, + "update_order_lines": { + "label": "Edit order lines", + "description": "Can change products, quantities, and prices on orders." + }, + "remove_order_lines": { + "label": "Delete order lines", + "description": "Can remove products and services from orders." + }, + "charge_orders": { + "label": "Charge orders", + "description": "Can take payment or charge a payment intent for an order." + }, + "view_department_bookings": { + "label": "View department bookings", + "description": "Can see bookings for assigned departments." + }, + "view_own_bookings": { + "label": "View own bookings", + "description": "Can see booking counts and bookings tied to the employee account." + }, + "update_bookings": { + "label": "Edit bookings", + "description": "Can change permitted booking details." + }, + "create_bookings": { + "label": "Create bookings", + "description": "Can create new bookings for assigned departments." + }, + "mark_bookings_complete": { + "label": "Complete bookings", + "description": "Can mark bookings as completed." + }, + "send_booking_confirmations": { + "label": "Resend booking confirmations", + "description": "Can resend booking confirmation and completion emails." + }, + "view_time_booking_entries": { + "label": "View time booking entries", + "description": "Can inspect time-booking entries for assigned departments." + }, + "create_time_booking_entries": { + "label": "Create time booking entries", + "description": "Can add new time-booking entries." + }, + "edit_time_booking_entries": { + "label": "Edit time booking entries", + "description": "Can edit time-booking entries when the backend route supports it." + }, + "view_order_statistics": { + "label": "View order statistics", + "description": "Can open order statistics views for assigned departments." + }, + "view_booking_statistics": { + "label": "View booking statistics", + "description": "Can open booking statistics views for assigned departments." + }, + "open_limited_backoffice": { + "label": "Open limited backoffice", + "description": "Can access the limited backoffice area." + }, + "manage_department_prices": { + "label": "Manage department prices", + "description": "Can edit explicit prices for assigned departments." + }, + "manage_employee_access": { + "label": "Manage employee access", + "description": "Can create, edit, and deactivate limited backoffice employees." + }, + "unknown": { + "label": "Additional capability", + "description": "This capability is provided by the role catalog but is not yet described in the interface." + } + } } } } diff --git a/src/i18n/source/no/phrases/index.json b/src/i18n/source/no/phrases/index.json index 39a100af..350f14dc 100644 --- a/src/i18n/source/no/phrases/index.json +++ b/src/i18n/source/no/phrases/index.json @@ -95,6 +95,130 @@ "load_employees": "@:{'phrases.compat.limited_backoffice.errors.load_employees'}", "save_employee": "@:{'phrases.compat.limited_backoffice.errors.save_employee'}", "deactivate_employee": "@:{'phrases.compat.limited_backoffice.errors.deactivate_employee'}" + }, + "role_permissions": { + "title": "@:{'phrases.compat.limited_backoffice.role_permissions.title'}", + "tooltip": "@:{'phrases.compat.limited_backoffice.role_permissions.tooltip'}", + "intro": "@:{'phrases.compat.limited_backoffice.role_permissions.intro'}", + "scope": "@:{'phrases.compat.limited_backoffice.role_permissions.scope'}", + "selected": "@:{'phrases.compat.limited_backoffice.role_permissions.selected'}", + "close": "@:{'phrases.compat.limited_backoffice.role_permissions.close'}", + "unavailable": "@:{'phrases.compat.limited_backoffice.role_permissions.unavailable'}", + "groups": { + "account": "@:{'phrases.compat.limited_backoffice.role_permissions.groups.account'}", + "orders": "@:{'phrases.compat.limited_backoffice.role_permissions.groups.orders'}", + "bookings": "@:{'phrases.compat.limited_backoffice.role_permissions.groups.bookings'}", + "time_bookings": "@:{'phrases.compat.limited_backoffice.role_permissions.groups.time_bookings'}", + "reports": "@:{'phrases.compat.limited_backoffice.role_permissions.groups.reports'}", + "limited_backoffice": "@:{'phrases.compat.limited_backoffice.role_permissions.groups.limited_backoffice'}", + "unknown": "@:{'phrases.compat.limited_backoffice.role_permissions.groups.unknown'}" + }, + "capabilities": { + "sign_in": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.sign_in.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.sign_in.description'}" + }, + "view_own_permissions": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_own_permissions.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_own_permissions.description'}" + }, + "view_orders": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_orders.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_orders.description'}" + }, + "create_orders": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_orders.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_orders.description'}" + }, + "edit_orders": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.edit_orders.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.edit_orders.description'}" + }, + "delete_orders": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.delete_orders.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.delete_orders.description'}" + }, + "view_order_items": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_order_items.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_order_items.description'}" + }, + "create_order_items": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_order_items.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_order_items.description'}" + }, + "update_order_lines": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.update_order_lines.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.update_order_lines.description'}" + }, + "remove_order_lines": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.remove_order_lines.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.remove_order_lines.description'}" + }, + "charge_orders": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.charge_orders.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.charge_orders.description'}" + }, + "view_department_bookings": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_department_bookings.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_department_bookings.description'}" + }, + "view_own_bookings": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_own_bookings.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_own_bookings.description'}" + }, + "update_bookings": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.update_bookings.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.update_bookings.description'}" + }, + "create_bookings": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_bookings.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_bookings.description'}" + }, + "mark_bookings_complete": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.mark_bookings_complete.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.mark_bookings_complete.description'}" + }, + "send_booking_confirmations": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.send_booking_confirmations.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.send_booking_confirmations.description'}" + }, + "view_time_booking_entries": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_time_booking_entries.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_time_booking_entries.description'}" + }, + "create_time_booking_entries": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_time_booking_entries.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_time_booking_entries.description'}" + }, + "edit_time_booking_entries": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.edit_time_booking_entries.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.edit_time_booking_entries.description'}" + }, + "view_order_statistics": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_order_statistics.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_order_statistics.description'}" + }, + "view_booking_statistics": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_booking_statistics.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_booking_statistics.description'}" + }, + "open_limited_backoffice": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.open_limited_backoffice.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.open_limited_backoffice.description'}" + }, + "manage_department_prices": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.manage_department_prices.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.manage_department_prices.description'}" + }, + "manage_employee_access": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.manage_employee_access.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.manage_employee_access.description'}" + }, + "unknown": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.unknown.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.unknown.description'}" + } + } } }, "redirect": { @@ -204,6 +328,130 @@ "load_employees": "@.capitalize:{'terms.glossary.kunne'} @:{'terms.glossary.ikke'} @:{'terms.glossary.laste'} @:{'terms.glossary.medarbeidere'}.", "save_employee": "@.capitalize:{'terms.glossary.kunne'} @:{'terms.glossary.ikke'} @:{'terms.glossary.lagre'} @:{'terms.glossary.medarbeideren'}.", "deactivate_employee": "@.capitalize:{'terms.glossary.kunne'} @:{'terms.glossary.ikke'} deaktivere @:{'terms.glossary.medarbeideren'}." + }, + "role_permissions": { + "title": "Rolletillatelser", + "tooltip": "Vis rolletillatelser", + "intro": "Roller samler de nøyaktige funksjonene som tildeles en ansatt når rollen lagres.", + "scope": "Alle funksjoner er begrenset til avdelingene som velges for den ansatte.", + "selected": "Valgt", + "close": "Lukk", + "unavailable": "Tillatelsesdetaljer er ikke tilgjengelige for denne rollen før rollekatalogen er oppdatert.", + "groups": { + "account": "Konto", + "orders": "Ordrer", + "bookings": "Bookinger", + "time_bookings": "Tidsbookinger", + "reports": "Rapporter", + "limited_backoffice": "Backoffice", + "unknown": "Annet" + }, + "capabilities": { + "sign_in": { + "label": "Logg inn", + "description": "Lar den ansatte logge inn i Pleno." + }, + "view_own_permissions": { + "label": "Se egne tillatelser", + "description": "Viser den ansatte hvilke tilgangsrettigheter kontoen har." + }, + "view_orders": { + "label": "Se ordrer", + "description": "Kan åpne ordrelister og ordredetaljer for tildelte avdelinger." + }, + "create_orders": { + "label": "Opprett ordrer", + "description": "Kan opprette nye ordrer for tildelte avdelinger." + }, + "edit_orders": { + "label": "Rediger ordrer", + "description": "Kan endre ordredetaljer for tildelte avdelinger." + }, + "delete_orders": { + "label": "Slett ordrer", + "description": "Kan slette ordrer i tildelte avdelinger." + }, + "view_order_items": { + "label": "Se ordrelinjer", + "description": "Kan se produkter, tjenester og priser på ordrer." + }, + "create_order_items": { + "label": "Opprett ordrelinjer", + "description": "Kan legge produkter og tjenester til ordrer." + }, + "update_order_lines": { + "label": "Rediger ordrelinjer", + "description": "Kan endre produkter, antall og priser på ordrer." + }, + "remove_order_lines": { + "label": "Slett ordrelinjer", + "description": "Kan fjerne produkter og tjenester fra ordrer." + }, + "charge_orders": { + "label": "Belast ordrer", + "description": "Kan ta betaling eller belaste en betalingsreservasjon for en ordre." + }, + "view_department_bookings": { + "label": "Se avdelingsbookinger", + "description": "Kan se bookinger for tildelte avdelinger." + }, + "view_own_bookings": { + "label": "Se egne bookinger", + "description": "Kan se bookingantall og bookinger knyttet til ansattkontoen." + }, + "update_bookings": { + "label": "Rediger bookinger", + "description": "Kan endre tillatte bookingdetaljer." + }, + "create_bookings": { + "label": "Opprett bookinger", + "description": "Kan opprette nye bookinger for tildelte avdelinger." + }, + "mark_bookings_complete": { + "label": "Fullfør bookinger", + "description": "Kan markere bookinger som fullført." + }, + "send_booking_confirmations": { + "label": "Send bookingbekreftelser på nytt", + "description": "Kan sende bookingbekreftelser og fullførings-e-poster på nytt." + }, + "view_time_booking_entries": { + "label": "Se tidsbookinger", + "description": "Kan gå gjennom tidsbookingoppføringer for tildelte avdelinger." + }, + "create_time_booking_entries": { + "label": "Opprett tidsbookinger", + "description": "Kan legge til nye tidsbookingoppføringer." + }, + "edit_time_booking_entries": { + "label": "Rediger tidsbookinger", + "description": "Kan redigere tidsbookingoppføringer når backend-ruten støtter det." + }, + "view_order_statistics": { + "label": "Se ordrestatistikk", + "description": "Kan åpne ordrestatistikk for tildelte avdelinger." + }, + "view_booking_statistics": { + "label": "Se bookingstatistikk", + "description": "Kan åpne bookingstatistikk for tildelte avdelinger." + }, + "open_limited_backoffice": { + "label": "Åpne begrenset backoffice", + "description": "Kan åpne det begrensede backofficeområdet." + }, + "manage_department_prices": { + "label": "Administrer avdelingspriser", + "description": "Kan redigere eksplisitte priser for tildelte avdelinger." + }, + "manage_employee_access": { + "label": "Administrer ansattilgang", + "description": "Kan opprette, redigere og deaktivere begrensede backofficeansatte." + }, + "unknown": { + "label": "Ekstra funksjon", + "description": "Denne funksjonen kommer fra rollekatalogen, men er ennå ikke beskrevet i grensesnittet." + } + } } } } diff --git a/src/i18n/source/sv/phrases/index.json b/src/i18n/source/sv/phrases/index.json index 84059a35..6985e2f7 100644 --- a/src/i18n/source/sv/phrases/index.json +++ b/src/i18n/source/sv/phrases/index.json @@ -95,6 +95,130 @@ "load_employees": "@:{'phrases.compat.limited_backoffice.errors.load_employees'}", "save_employee": "@:{'phrases.compat.limited_backoffice.errors.save_employee'}", "deactivate_employee": "@:{'phrases.compat.limited_backoffice.errors.deactivate_employee'}" + }, + "role_permissions": { + "title": "@:{'phrases.compat.limited_backoffice.role_permissions.title'}", + "tooltip": "@:{'phrases.compat.limited_backoffice.role_permissions.tooltip'}", + "intro": "@:{'phrases.compat.limited_backoffice.role_permissions.intro'}", + "scope": "@:{'phrases.compat.limited_backoffice.role_permissions.scope'}", + "selected": "@:{'phrases.compat.limited_backoffice.role_permissions.selected'}", + "close": "@:{'phrases.compat.limited_backoffice.role_permissions.close'}", + "unavailable": "@:{'phrases.compat.limited_backoffice.role_permissions.unavailable'}", + "groups": { + "account": "@:{'phrases.compat.limited_backoffice.role_permissions.groups.account'}", + "orders": "@:{'phrases.compat.limited_backoffice.role_permissions.groups.orders'}", + "bookings": "@:{'phrases.compat.limited_backoffice.role_permissions.groups.bookings'}", + "time_bookings": "@:{'phrases.compat.limited_backoffice.role_permissions.groups.time_bookings'}", + "reports": "@:{'phrases.compat.limited_backoffice.role_permissions.groups.reports'}", + "limited_backoffice": "@:{'phrases.compat.limited_backoffice.role_permissions.groups.limited_backoffice'}", + "unknown": "@:{'phrases.compat.limited_backoffice.role_permissions.groups.unknown'}" + }, + "capabilities": { + "sign_in": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.sign_in.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.sign_in.description'}" + }, + "view_own_permissions": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_own_permissions.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_own_permissions.description'}" + }, + "view_orders": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_orders.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_orders.description'}" + }, + "create_orders": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_orders.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_orders.description'}" + }, + "edit_orders": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.edit_orders.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.edit_orders.description'}" + }, + "delete_orders": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.delete_orders.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.delete_orders.description'}" + }, + "view_order_items": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_order_items.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_order_items.description'}" + }, + "create_order_items": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_order_items.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_order_items.description'}" + }, + "update_order_lines": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.update_order_lines.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.update_order_lines.description'}" + }, + "remove_order_lines": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.remove_order_lines.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.remove_order_lines.description'}" + }, + "charge_orders": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.charge_orders.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.charge_orders.description'}" + }, + "view_department_bookings": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_department_bookings.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_department_bookings.description'}" + }, + "view_own_bookings": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_own_bookings.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_own_bookings.description'}" + }, + "update_bookings": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.update_bookings.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.update_bookings.description'}" + }, + "create_bookings": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_bookings.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_bookings.description'}" + }, + "mark_bookings_complete": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.mark_bookings_complete.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.mark_bookings_complete.description'}" + }, + "send_booking_confirmations": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.send_booking_confirmations.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.send_booking_confirmations.description'}" + }, + "view_time_booking_entries": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_time_booking_entries.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_time_booking_entries.description'}" + }, + "create_time_booking_entries": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_time_booking_entries.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.create_time_booking_entries.description'}" + }, + "edit_time_booking_entries": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.edit_time_booking_entries.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.edit_time_booking_entries.description'}" + }, + "view_order_statistics": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_order_statistics.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_order_statistics.description'}" + }, + "view_booking_statistics": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_booking_statistics.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.view_booking_statistics.description'}" + }, + "open_limited_backoffice": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.open_limited_backoffice.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.open_limited_backoffice.description'}" + }, + "manage_department_prices": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.manage_department_prices.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.manage_department_prices.description'}" + }, + "manage_employee_access": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.manage_employee_access.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.manage_employee_access.description'}" + }, + "unknown": { + "label": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.unknown.label'}", + "description": "@:{'phrases.compat.limited_backoffice.role_permissions.capabilities.unknown.description'}" + } + } } }, "redirect": { @@ -204,6 +328,130 @@ "load_employees": "@.capitalize:{'terms.glossary.kunde'} @:{'terms.glossary.inte'} @:{'terms.glossary.ladda'} @:{'terms.glossary.medarbetare'}.", "save_employee": "@.capitalize:{'terms.glossary.kunde'} @:{'terms.glossary.inte'} @:{'terms.glossary.spara'} @:{'terms.glossary.medarbetaren'}.", "deactivate_employee": "@.capitalize:{'terms.glossary.kunde'} @:{'terms.glossary.inte'} @:{'terms.glossary.inaktivera'} @:{'terms.glossary.medarbetaren'}." + }, + "role_permissions": { + "title": "Rollbehörigheter", + "tooltip": "Visa rollbehörigheter", + "intro": "Roller samlar de exakta funktioner som tilldelas en medarbetare när rollen sparas.", + "scope": "Alla funktioner är begränsade till de avdelningar som väljs för medarbetaren.", + "selected": "Vald", + "close": "Stäng", + "unavailable": "Behörighetsdetaljer är inte tillgängliga för den här rollen förrän rollkatalogen har uppdaterats.", + "groups": { + "account": "Konto", + "orders": "Order", + "bookings": "Bokningar", + "time_bookings": "Tidsbokningar", + "reports": "Rapporter", + "limited_backoffice": "Backoffice", + "unknown": "Övrigt" + }, + "capabilities": { + "sign_in": { + "label": "Logga in", + "description": "Ger medarbetaren möjlighet att logga in i Pleno." + }, + "view_own_permissions": { + "label": "Se egna behörigheter", + "description": "Visar medarbetaren vilka åtkomsträttigheter kontot har." + }, + "view_orders": { + "label": "Se order", + "description": "Kan öppna orderlistor och orderdetaljer för tilldelade avdelningar." + }, + "create_orders": { + "label": "Skapa order", + "description": "Kan skapa nya order för tilldelade avdelningar." + }, + "edit_orders": { + "label": "Redigera order", + "description": "Kan ändra orderdetaljer för tilldelade avdelningar." + }, + "delete_orders": { + "label": "Ta bort order", + "description": "Kan ta bort order i tilldelade avdelningar." + }, + "view_order_items": { + "label": "Se orderrader", + "description": "Kan se produkter, tjänster och priser på order." + }, + "create_order_items": { + "label": "Skapa orderrader", + "description": "Kan lägga till produkter och tjänster på order." + }, + "update_order_lines": { + "label": "Redigera orderrader", + "description": "Kan ändra produkter, antal och priser på order." + }, + "remove_order_lines": { + "label": "Ta bort orderrader", + "description": "Kan ta bort produkter och tjänster från order." + }, + "charge_orders": { + "label": "Debitera order", + "description": "Kan ta betalt eller debitera en betalningsreservation för en order." + }, + "view_department_bookings": { + "label": "Se avdelningsbokningar", + "description": "Kan se bokningar för tilldelade avdelningar." + }, + "view_own_bookings": { + "label": "Se egna bokningar", + "description": "Kan se bokningsantal och bokningar kopplade till medarbetarkontot." + }, + "update_bookings": { + "label": "Redigera bokningar", + "description": "Kan ändra tillåtna bokningsdetaljer." + }, + "create_bookings": { + "label": "Skapa bokningar", + "description": "Kan skapa nya bokningar för tilldelade avdelningar." + }, + "mark_bookings_complete": { + "label": "Slutför bokningar", + "description": "Kan markera bokningar som slutförda." + }, + "send_booking_confirmations": { + "label": "Skicka bokningsbekräftelser igen", + "description": "Kan skicka bokningsbekräftelser och slutförandemejl igen." + }, + "view_time_booking_entries": { + "label": "Se tidsbokningar", + "description": "Kan granska tidsbokningsposter för tilldelade avdelningar." + }, + "create_time_booking_entries": { + "label": "Skapa tidsbokningar", + "description": "Kan lägga till nya tidsbokningsposter." + }, + "edit_time_booking_entries": { + "label": "Redigera tidsbokningar", + "description": "Kan redigera tidsbokningsposter när backend-rutten stöder det." + }, + "view_order_statistics": { + "label": "Se orderstatistik", + "description": "Kan öppna orderstatistik för tilldelade avdelningar." + }, + "view_booking_statistics": { + "label": "Se bokningsstatistik", + "description": "Kan öppna bokningsstatistik för tilldelade avdelningar." + }, + "open_limited_backoffice": { + "label": "Öppna begränsat backoffice", + "description": "Kan öppna det begränsade backofficeområdet." + }, + "manage_department_prices": { + "label": "Hantera avdelningspriser", + "description": "Kan redigera uttryckliga priser för tilldelade avdelningar." + }, + "manage_employee_access": { + "label": "Hantera medarbetaråtkomst", + "description": "Kan skapa, redigera och inaktivera begränsade backofficemedarbetare." + }, + "unknown": { + "label": "Extra funktion", + "description": "Den här funktionen kommer från rollkatalogen men är ännu inte beskriven i gränssnittet." + } + } } } } diff --git a/src/views/backoffice/LimitedBackofficeEmployees.vue b/src/views/backoffice/LimitedBackofficeEmployees.vue index 91b1d7e1..4a5004cb 100644 --- a/src/views/backoffice/LimitedBackofficeEmployees.vue +++ b/src/views/backoffice/LimitedBackofficeEmployees.vue @@ -28,6 +28,7 @@ const errorMessage = ref(""); const successMessage = ref(""); const editingEmployee = ref(null); const formAttempted = ref(false); +const showRolePermissions = ref(false); const form = ref({ display_name: "", email: "", @@ -59,9 +60,155 @@ const roleMessages = computed(() => ({ }, })); +const rolePermissionGroupMessages = computed(() => ({ + account: { + label: t("templates.limited_backoffice.role_permissions.groups.account"), + }, + orders: { + label: t("templates.limited_backoffice.role_permissions.groups.orders"), + }, + bookings: { + label: t("templates.limited_backoffice.role_permissions.groups.bookings"), + }, + time_bookings: { + label: t("templates.limited_backoffice.role_permissions.groups.time_bookings"), + }, + reports: { + label: t("templates.limited_backoffice.role_permissions.groups.reports"), + }, + limited_backoffice: { + label: t("templates.limited_backoffice.role_permissions.groups.limited_backoffice"), + }, + unknown: { + label: t("templates.limited_backoffice.role_permissions.groups.unknown"), + }, +})); + +const roleCapabilityMessages = computed(() => ({ + sign_in: { + label: t("templates.limited_backoffice.role_permissions.capabilities.sign_in.label"), + description: t("templates.limited_backoffice.role_permissions.capabilities.sign_in.description"), + }, + view_own_permissions: { + label: t("templates.limited_backoffice.role_permissions.capabilities.view_own_permissions.label"), + description: t("templates.limited_backoffice.role_permissions.capabilities.view_own_permissions.description"), + }, + view_orders: { + label: t("templates.limited_backoffice.role_permissions.capabilities.view_orders.label"), + description: t("templates.limited_backoffice.role_permissions.capabilities.view_orders.description"), + }, + create_orders: { + label: t("templates.limited_backoffice.role_permissions.capabilities.create_orders.label"), + description: t("templates.limited_backoffice.role_permissions.capabilities.create_orders.description"), + }, + edit_orders: { + label: t("templates.limited_backoffice.role_permissions.capabilities.edit_orders.label"), + description: t("templates.limited_backoffice.role_permissions.capabilities.edit_orders.description"), + }, + delete_orders: { + label: t("templates.limited_backoffice.role_permissions.capabilities.delete_orders.label"), + description: t("templates.limited_backoffice.role_permissions.capabilities.delete_orders.description"), + }, + view_order_items: { + label: t("templates.limited_backoffice.role_permissions.capabilities.view_order_items.label"), + description: t("templates.limited_backoffice.role_permissions.capabilities.view_order_items.description"), + }, + create_order_items: { + label: t("templates.limited_backoffice.role_permissions.capabilities.create_order_items.label"), + description: t("templates.limited_backoffice.role_permissions.capabilities.create_order_items.description"), + }, + update_order_lines: { + label: t("templates.limited_backoffice.role_permissions.capabilities.update_order_lines.label"), + description: t("templates.limited_backoffice.role_permissions.capabilities.update_order_lines.description"), + }, + remove_order_lines: { + label: t("templates.limited_backoffice.role_permissions.capabilities.remove_order_lines.label"), + description: t("templates.limited_backoffice.role_permissions.capabilities.remove_order_lines.description"), + }, + charge_orders: { + label: t("templates.limited_backoffice.role_permissions.capabilities.charge_orders.label"), + description: t("templates.limited_backoffice.role_permissions.capabilities.charge_orders.description"), + }, + view_department_bookings: { + label: t("templates.limited_backoffice.role_permissions.capabilities.view_department_bookings.label"), + description: t("templates.limited_backoffice.role_permissions.capabilities.view_department_bookings.description"), + }, + view_own_bookings: { + label: t("templates.limited_backoffice.role_permissions.capabilities.view_own_bookings.label"), + description: t("templates.limited_backoffice.role_permissions.capabilities.view_own_bookings.description"), + }, + update_bookings: { + label: t("templates.limited_backoffice.role_permissions.capabilities.update_bookings.label"), + description: t("templates.limited_backoffice.role_permissions.capabilities.update_bookings.description"), + }, + create_bookings: { + label: t("templates.limited_backoffice.role_permissions.capabilities.create_bookings.label"), + description: t("templates.limited_backoffice.role_permissions.capabilities.create_bookings.description"), + }, + mark_bookings_complete: { + label: t("templates.limited_backoffice.role_permissions.capabilities.mark_bookings_complete.label"), + description: t("templates.limited_backoffice.role_permissions.capabilities.mark_bookings_complete.description"), + }, + send_booking_confirmations: { + label: t("templates.limited_backoffice.role_permissions.capabilities.send_booking_confirmations.label"), + description: t("templates.limited_backoffice.role_permissions.capabilities.send_booking_confirmations.description"), + }, + view_time_booking_entries: { + label: t("templates.limited_backoffice.role_permissions.capabilities.view_time_booking_entries.label"), + description: t("templates.limited_backoffice.role_permissions.capabilities.view_time_booking_entries.description"), + }, + create_time_booking_entries: { + label: t("templates.limited_backoffice.role_permissions.capabilities.create_time_booking_entries.label"), + description: t("templates.limited_backoffice.role_permissions.capabilities.create_time_booking_entries.description"), + }, + edit_time_booking_entries: { + label: t("templates.limited_backoffice.role_permissions.capabilities.edit_time_booking_entries.label"), + description: t("templates.limited_backoffice.role_permissions.capabilities.edit_time_booking_entries.description"), + }, + view_order_statistics: { + label: t("templates.limited_backoffice.role_permissions.capabilities.view_order_statistics.label"), + description: t("templates.limited_backoffice.role_permissions.capabilities.view_order_statistics.description"), + }, + view_booking_statistics: { + label: t("templates.limited_backoffice.role_permissions.capabilities.view_booking_statistics.label"), + description: t("templates.limited_backoffice.role_permissions.capabilities.view_booking_statistics.description"), + }, + open_limited_backoffice: { + label: t("templates.limited_backoffice.role_permissions.capabilities.open_limited_backoffice.label"), + description: t("templates.limited_backoffice.role_permissions.capabilities.open_limited_backoffice.description"), + }, + manage_department_prices: { + label: t("templates.limited_backoffice.role_permissions.capabilities.manage_department_prices.label"), + description: t("templates.limited_backoffice.role_permissions.capabilities.manage_department_prices.description"), + }, + manage_employee_access: { + label: t("templates.limited_backoffice.role_permissions.capabilities.manage_employee_access.label"), + description: t("templates.limited_backoffice.role_permissions.capabilities.manage_employee_access.description"), + }, + unknown: { + label: t("templates.limited_backoffice.role_permissions.capabilities.unknown.label"), + description: t("templates.limited_backoffice.role_permissions.capabilities.unknown.description"), + }, +})); + const roleLabel = (role) => roleMessages.value[role?.key]?.label || role?.label || ""; const roleDescription = (role) => roleMessages.value[role?.key]?.description || role?.description || ""; const roleByKey = (key) => roles.value.find((role) => role.key === key) || { key }; +const rolePermissionGroupLabel = (groupKey) => + rolePermissionGroupMessages.value[groupKey]?.label || rolePermissionGroupMessages.value.unknown.label; +const roleCapabilityLabel = (capabilityKey) => + roleCapabilityMessages.value[capabilityKey]?.label || roleCapabilityMessages.value.unknown.label; +const roleCapabilityDescription = (capabilityKey) => + roleCapabilityMessages.value[capabilityKey]?.description || roleCapabilityMessages.value.unknown.description; +const rolePermissionGroups = (role) => + (Array.isArray(role?.permission_groups) ? role.permission_groups : []) + .map((group) => ({ + key: String(group?.key || ""), + capabilities: (Array.isArray(group?.capabilities) ? group.capabilities : []) + .map((capability) => String(capability || "")) + .filter(Boolean), + })) + .filter((group) => group.key && group.capabilities.length > 0); const visibleRoles = computed(() => roles.value.filter((role) => ROLE_KEYS.includes(role.key))); const isEditing = computed(() => Boolean(editingEmployee.value)); @@ -301,9 +448,29 @@ onMounted(() => {
- +
+ + + + +