- Added IDs to buttons in `NewBookingStep5.vue` for better UI automation.
- Removed IDs from buttons in `MyBookingsBook.vue`.
- Updated API URL from `truckwash.dk` to `truckwash.io`.
- Disabled service worker `devOptions` in `vite.config.js`.
- Introduced timeframe selection tabs for viewing goals by different periods.
- Updated `getGoalProgress` and department progress calculations to incorporate selected timeframe.
- Enhanced goal progress display to reflect accurate departmental and overall progress based on current timeframe.
- Updated `getGoalProgress` to use `all?.count` and `all?.target` properties for enhanced accuracy.
- Improved department progress display with detailed progress attributes.
- Refined the `getGoalProgress` function to use new `all?.count` and `all?.target` properties for accurate progress calculation.
- Enhanced department progress display by accessing nested progress details, ensuring correct values are shown per department.
- Updated OpenAPI spec to include detailed progress structures, introducing new schemas like `GoalProgressDetails` and `DepartmentGoalProgress` for comprehensive goal tracking.
- Integrated `vue-i18n` for internationalization features in `GoalFormModal.vue`.
- Added support for custom daily targets for departments, with fallback option for even distribution.
- Updated department, product, and customer search inputs to use `t` function for localization.
- Refactored modal creation logic in `showGoalFormModal.js` to use `createApp` and manage app lifecycle with `i18n`.
- Introduced `ConnectivityIssue.vue` for handling and displaying connectivity problems.
- Added new route for the connectivity issue error page.
- Enhanced accessibility by wrapping table headers in `OrderBookingsTable.vue` with `<thead>` and `<tbody>` tags.
- Included connectivity-related internationalization keys across various locale files.
- Updated components to integrate `ConnectivityIssue` as a fallback display for connection errors.
- Simplified `getDailyGoalDepartmentTarget` by introducing custom daily target overrides and improving department target calculation.
- Removed redundant `@use` of SweetAlert themes to fix import issues.
- Corrected import extension for SweetAlert Bulma theme from `.scss` to `.css`.
- Cleaned up unused imports in `TimeBookingsElementSelectVehicles.vue`.
- Locked versions for `axios`, `sweetalert2`, and `vite` to specific releases.
- Updated multiple Babel helper and plugin packages to newer versions for enhanced functionality.
- Upgraded various esbuild packages and enforced Node.js version >=18 requirement.
- Added missing MIT licenses for dependencies in `package-lock.json` for clarity.
- Updated test creation and maintenance rules to include Playwright as the primary framework.
- Simplified testing instructions with enhanced test file running and asserting methods.
- Enhanced guidelines with examples of Playwright features such as locators, page interactions, and assertions.
- Added information on mobile emulation and test structure best practices.
- Removed outdated testing framework information and examples.
- Added `recaptchaToken` to `getAuthenticationChallenge` and `verifyAuthentication` for enhanced security.
- Simplified endpoint selection logic by removing user type distinction in `PasskeyAuthService.js`.
- Updated `LoginForm.vue` to fetch reCAPTCHA token if enabled during passkey authentication.
- Adjusted `PasskeyManagement.vue` to better align naming conventions with UI elements.
- Refined hostname handling in `PasskeyAuthService.js` for correct `rpId` assignment based on domain matching.
- Expanded OpenAPI spec with multiple production server URLs and added `g_recaptcha_response` in various API endpoints for enhanced security.
- Updated `LoginForm.vue` to ensure `customer_number` is accurately parsed as an integer for API compliance.
- Added `customerNumber` parameter to `getAuthenticationChallenge` and `authenticateWithPasskey` functions.
- Introduced challenge token usage in `verifyAuthentication` to align with OpenAPI spec.
- Improved error handling in `LoginForm.vue` with detailed error checks and logging.
- Ensured support for session tokens in `SubuserLoginForm.vue`.
- Integrated 2FA check and handling in user and employee login workflows with `TwoFactorVerify` component.
- Added 2FA setup, enable, and disable functionalities in `UserProfile` and related management views.
- Enhanced internationalization files with 2FA-related translations for multiple locales.
- Created `TwoFactorAuthService.js` to handle API calls for 2FA setup and verification processes.
- Added passkey support for secure, passwordless authentication using WebAuthn.
- Implemented passkey management in user profiles, enabling users to add, rename, and delete passkeys.
- Updated authentication forms to support passkey login, including feature detection and login flow.
- Enhanced internationalization files with passkey-related translations for multiple locales.
- Introduced new components and services for handling passkey operations and WebAuthn interactions.
- Added `id="book-wash-button"` for better identification of the book button.
- Included dynamic ID `department-option-${dept.id}` for departments to enhance interaction specificity.
- Implemented new actions for force enabling and disabling machines in `ActionSettingsWheelButton.vue`.
- Display success message on login in `LoginForm.vue` and handle reload with delay.
- Adjusted form input handling and error/success message display across auth-related components and forms.
- Included form ID attributes and improved message visibility for user feedback.
- Introduced endpoints to handle force enable/disable machine actions (`/modules/self-serve/lane/force/machine/enable`, `/disable`).
- Updated OpenAPI spec to document the new endpoints.
- Extended `DepartmentLane.vue` and `departmentLanesTable.vue` with buttons for force enable/disable, including loading states and toast notifications.
- Added corresponding i18n translations for force control actions.
- Created E2E tests to verify translation keys, non-empty values, and source file functionality in `department-lane-force-machine.spec.js`.
- Updated i18n files to include "Dynamic Image ID" translations.
- Extended `SelfServeTasks` and `DepartmentLanes` with columns for dynamic image and button configurations.
- Integrated new OpenAPI endpoint to generate dynamic images for department lanes.
- Enhanced tables, forms, and dashboards to display and manage new attributes.
- Updated OpenAPI schemas to include dynamic button IDs and vehicle type overrides for tasks.
- Refined `isMachineAvailable` type definition in `MyWashStart.vue` to improve type safety.
- Simplified lane selection watcher logic in `MyWashStart.vue` by removing redundant step condition.
- Adjusted visibility conditions in `MyWashStart.vue` to include the `VEHICLE` step for lane selection.
- Refined `allowedServices` parsing in `useSelfServeLogic.js` to handle nested API response structures correctly.
- Refactored `handleConfirmNext` in `MyWashStart.vue` to fetch and update allowed services before lane selection.
- Modified `isMachineAvailable` logic to use server-defined allowed services.
- Added watcher for `radioLaneOption` to fetch services dynamically on lane selection.
- Incorporated `isLoadingSelfServeData` check in `shouldDisableNext` to ensure data readiness.
- Introduced new tests for service logic (`updateLaneAllowedServices`, `isServiceAllowed`, `isMachineAvailable`) and added E2E coverage for guided self-serve wash flow.
- Added `enableMachineRelay` function in `useSelfServeLogic.js` for activating machine relays.
- Integrated machine relay logic in `MyWashStart.vue` with error handling to avoid wash start failure.
- Introduced a new test suite for verifying multi-select functionality in `services` column of `SelfServeTasks`.
- Added tests for `type`, `options`, `parse`, and `set.services` functions.
- Enhanced `ObjectsGlobal` form generation to include multi-select checkboxes and pre-checked values for better usability.
- Introduced detailed instructions for test development using WebdriverIO, covering structure, naming conventions, and best practices.
- Added examples for browser interactions, assertions, and handling internationalization (i18n) in tests.
- Documented prerequisites for mobile testing and best practices for maintaining test cases.
Enhance SelfServeTasks capabilities by introducing `services` management
- Added `services` property to `SelfServeTasks` for task-specific service handling.
- Implemented logic to determine and update allowed services dynamically based on active tasks.
- Extended machine availability check (`isMachineAvailable`) to consider services allowed per task.
Expand backend support for lane services
- Added new endpoints to manage lane services (`/modules/self-serve/lane/services/allowed` and `/modules/self-serve/lane/relay/machine/enable`).
- Extended OpenAPI specifications to include service configuration for tasks and validation of lane services.
Modify SelfServe UI components for displaying allowed services
- Updated multiple screens to show allowed services based on active tasks.
- Added tags for visualizing allowed task services in `SelfServeTryModal` and `SelfServeTasksTable`.
Add `i18n-settings-wheel.spec.js` for translation key verification
- Added new test suite to ensure i18n translation parity between English and Danish locale files for `settings_wheel`.
- Implemented checks to validate key presence and exact match across both languages.
- Introduced a new section for subuser security in the user profile.
- Added a "Sign out" button with a confirmation dialog for improved security and functionality.
- Added logic in `SubuserGrantSelector.vue` to auto-select the grant if the subuser only has one available.
- Replaced country code sanitization watcher in `SubuserLoginForm.vue` with a focusout handler for improved performance and simplicity.
- Updated styles and input attributes in login form for better usability and layout consistency.
- Added new Swedish translations for `auth` section in `sv.json` and aligned with `en.json` for consistency.
- Enhanced phone login fields with sanitized country code input handling in `SubuserLoginForm.vue`.
- Improved layout for country code and phone number inputs for better user experience.
- Expanded and improved Danish translations in `da.json` for `auth` and `common` sections.
- Refactored `SubuserLoginForm.vue` to utilize `useI18n` for dynamic text rendering.
- Enhanced i18n key usage for labels and placeholders in the form.
- Used `computed` to synchronize `isLoading` fallback to local state when prop not provided.
- Improved prop handling and reactive property alignment for better state management.
- Reordered wash steps to place "Questions" before "Select wash lane."
- Updated navigation and validation logic to adhere to the new flow.
- Refactored lane selection logic for better visibility and functionality.
- Fixed reactive property usage in daily report counts for improved accuracy.
- Introduced `b-loading` component from Buefy for improved loading state visualization in `UserDashboard.vue`.
- Added computed property `isPermissionsLoading` to manage permission loading states dynamically.
- Updated Danish translations in `da.json` for improved clarity and consistency (`customer_creation`, `customer_login`).
- Refined language for customer and operator modules, making text clearer and terminology more consistent.
- Updated translations for dashboards, reports, and POS components to improve user understanding.
- Improved alignment with key structures in `en.json` for better internationalization consistency.
- Adjusted default values in `VehicleDataStructure.vue` (`customer_id` and `type`).
- Refactored i18n integration in `MassDataInserterModal.vue` to use `i18n.global.t` for improved consistency.
- Introduced logic to filter out restricted products and add-ons using new utility methods (`isProductRestricted`, `isAddonRestricted`, `canBuyAdditionalServices`) based on customer attributes.
- Updated relevant POS components to replace unfiltered lists with computed properties for restricted items.
- Enhanced maintainability by centralizing restriction checks in `POSDepartmentProcess.vue`.
- Added extensive Swedish translations for dashboards, reports, bookings, POS components, settings, and common actions.
- Reorganized and expanded i18n keys for greater maintainability and consistency across multilingual support.
- Aligned sv.json with existing `en.json` and `da.json` structures to ensure seamless integration.
- Introduced comprehensive translation keys for dashboards, reports, bookings, POS components, settings, and common actions.
- Improved multilingual consistency and maintainability by aligning with existing i18n integration in `en.json` and `da.json`.
- Replaced hardcoded text with dynamic translations using `$t` and `i18n.global.t`.
- Updated `en.json` and `da.json` with new translation keys for SMS notifications, country codes, and related labels.
- Improved multilingual consistency and maintainability across components.
- Replaced static shortcut arrays with computed properties for dynamic reactivity to language changes.
- Improved i18n maintainability by using `SessionUser.objects.global.language
- Added new translation keys (`quantity_sold`) in `en.json` and `da.json` for improved multilingual support.
- Replaced hardcoded labels in `DepartmentDailyReportCount.vue` with computed properties using dynamic translations from `useI18n`.
- Improved maintainability and consistency by centralizing reusable strings.
- Replaced hardcoded strings with dynamic translations using `useI18n` and `$t`.
- Localized titles, subtitles, placeholders, labels, and error messages across daily report components for multilingual consistency.
- Added new scalable translation keys to enhance maintainability.
- Updated `en.json` and `da.json` with comprehensive translation keys for department dashboards, booking reports, tables, and POS components.
- Replaced hardcoded strings with dynamic translations using `$t` in multiple components for multilingual consistency.
- Improved maintainability by organizing and centralizing reusable translation keys.
- Added new translation keys in `en.json` and `da.json` for time bookings (placeholders, labels, and actions) and POS component buttons.
- Improved localization for registration numbers, license plate inputs, and booking flows.
- Replaced hardcoded texts in `ActionSettingsWheelButton.vue` and related components with dynamic translations using `useI18n` for improved multilingual consistency.
- Updated `en.json` with new translation keys for buttons, modals, and action labels.
- Consolidated unused translation keys and improved maintainability by centralizing reusable strings.
- Replaced hardcoded text with dynamic translations using `useI18n` or `$t` across multiple dashboards and components.
- Localized labels, placeholders, titles, subtitles, error messages, table headers, buttons, and actions.
- Extended and centralized translation keys for improved multilingual support and maintainability.
- Replaced hardcoded text with dynamic translations using `useI18n` or global `i18n` in multiple components and dashboards.
- Localized buttons, placeholders, labels, table headers, error messages, and object metadata, enhancing multilingual support.
- Improved maintainability by introducing and centralizing new translation keys.
- Replaced hardcoded titles, subtitles, and error messages with dynamic translations using `$t` across dashboard and table components.
- Enhanced i18n support by introducing new translation keys for improved multilingual consistency.
- Replaced hardcoded labels and placeholders with dynamic translations using `i18n` across multiple table components (`PosLastScannedLicensePlates.vue`, `InvoiceCollectionsTable.vue`, `ordersSyncTable.vue`, etc.).
- Added comprehensive translation keys for table headers, actions, and states to improve multilingual support.
- Enhanced maintainability by centralizing reusable translation keys.
- Replaced hardcoded labels in `Bookings.vue`, `Orders.vue`, and `Vehicles.vue` with dynamic translations using `i18n`.
- Added comprehensive translation keys for `objects` in `en.json` and `da.json`.
- Improved multilingual support for objects metadata, columns, and labels.
- Replaced hardcoded text in `ObjectsGlobal.vue` with dynamic translations using `i18n`.
- Centralized global translation keys in `en.json` and `da.json` under the `global` namespace.
- Improved multilingual support and maintainability for global object labels and actions.
- Replaced hardcoded navigation labels in `NavigationMenuItemsUser.vue`, `NavigationMenuItemsAdmin.vue`, and `NavigationMenuItemsGlobal.vue` with dynamic translations using `i18n`.
- Added new translation keys for navigation items in `en.json` and `da.json`, improving multilingual support.
- Replaced hardcoded dashboard text in `UserDashboard.vue` with dynamic translations using `$t`.
- Added new translation keys in `en.json` and `da.json` for user dashboard actions, descriptions, and messages.
- Improved multilingual support for subuser actions, empty state messages, and contact information.
- Introduced a new `LanguageSelector` component for switching between languages with persisted user preference.
- Localized navigation items in `UserLeftMenu.vue` using translation keys in `en.json` and `da.json`.
- Updated `DesktopNavigationBuefy.vue` and `UserLeftMenu.vue` to include the `LanguageSelector` component.