Commit Graph
259 Commits
Author SHA1 Message Date
Jeppe Bundgaard 860b5ac6e3 Add OpenAPI v1 documentation for Bookings API
- Introduced Writerside topics for multiple endpoints in the Bookings module, including user, admin, and public time booking routes.
- Added `Bookings_OpenAPIv1.json` specification defining API paths, schemas, and security configurations.
- Included endpoint details for operations like booking retrieval, updates, deletion, syncing, and timebookings.
2026-02-24 11:38:41 +01:00
Jeppe Bundgaard 5a59562e35 Add Bird API integration with voice call and flash call support
- Implement Bird API client (`bird.php`) for handling HTTP requests to Bird services.
- Add routes for voice and flash call management (`birdVoiceFlashCallsRoute.php`, `birdNumbersRoute.php`).
- Introduce test cases for voice calls, flash calls, and numbers (`VoiceCallsApiTest.php`, `NumbersAndFlashCallsApiTest.php`).
- Include configuration management classes and APIs for enabling the Bird module and managing API keys (`bird_c.php`).
- Provide OpenAPI specifications for flash call endpoints (`bird-flash-calls.md`).
2026-02-19 12:19:36 +01:00
Jeppe Bundgaard 6d09e5449e Enhance MACHINE relay control logic and add emergency override functionality
- Add `forceTurnOffMachineRelay` method for superuser/emergency operations to bypass gating restrictions.
- Enforce `toggle_after = 0` to prevent auto-toggle behavior.
- Update routes to explicitly reflect relay state when modifying MACHINE relay.
- Extend Shelly device switch handling with optional `skip_toggle_after` parameter.
2026-02-19 11:37:16 +01:00
Jeppe Bundgaard 4bdbe40329 Add superuser endpoints for forced MACHINE relay control
- Implement emergency operations to forcibly enable or disable MACHINE relays (`forceTurnOnMachineRelay`).
- Add OpenAPI specifications for `/modules/self-serve/lane/force/machine/enable` and `/modules/self-serve/lane/force/machine/disable`.
- Update route definitions and introduce validation for input parameters.
2026-02-19 10:39:43 +01:00
Jeppe Bundgaard 28a4a9d8e6 Add StopTurnsOffRelayTest to verify machine relay behavior during STOP with self-serve enabled
- Introduce a minimal, self-contained test to ensure the relay turns off when STOP is executed.
- Enhance `selfserve_lane_command_t` to handle relay shutdown based on department configuration.
- Include `isDepartmentSelfServeEnabled` method for testing override and I/O avoidance.
2026-02-18 16:14:33 +01:00
Jeppe Bundgaard 9881e57698 Ensure proper initialization of lane status via getter methods, refactor email template structure for better MSO compatibility, and add machine_available field to guest API response. 2026-02-18 16:06:14 +01:00
Jeppe Bundgaard f292152135 Improve email templates with MSO compatibility and enhanced styling
- Refactor header and footer to support Outlook Classic (MSO) rendering.
- Adjust logo sizing, alignment, and styles for improved consistency.
- Update inline styles for better cross-platform email rendering.
2026-02-18 15:43:19 +01:00
Jeppe Bundgaard 3f512a4fa6 Refine new customer welcome email template with inline styles, improved accessibility, and MSO-specific adjustments 2026-02-18 15:42:14 +01:00
Jeppe Bundgaard c5840c0f3e Add self-serve module loading, enum test, and update email styles/text
- Add `SelfserveLaneServicesEnumTest` to validate `selfserve_lane_services` cases.
- Update `index.php` to load self-serve module interfaces, traits, classes, helpers, and configs.
- Center Truck Wash logo in email header and adjust styling.
- Localize password reset error message in `authRoute.php` with Danish text.
2026-02-18 15:35:41 +01:00
Jeppe Bundgaard 51014bf774 Add development guidelines, testing rules, and secure routes documentation
- Add `.junie/guidelines.md` with comprehensive development instructions.
- Include `.aiassistant/rules/Creating and maintaining tests.md` and `.aiassistant/rules/Creating and securing routes.md`.
- Introduce `CACHE_SELFSERVE_LANE_KEY_ALLOWED_SERVICES` for lane service validation.
- Update `selfserve_lane_relay_controller_t` to enforce service-specific permissions for machine relay.
2026-02-18 14:13:05 +01:00
Jeppe Bundgaard 008e2af09a Add support for self-serve task services and validation logic
- Introduce `services` property to `department_selfserve_tasks_o` for task-specific functionalities.
- Add service validation and normalization via `selfserve_lane_services` enum.
- Extend `departmentSelfserveTasksRoute` to handle `services` input for add/edit operations.
- Create `selfserve_lane_services` enum to define and validate service types.
2026-02-18 12:47:00 +01:00
Jeppe Bundgaard efaed8c6cc Refactor new customer email template and attachments handling
- Update welcome email template to conditionally include corporate ID.
- Remove unused base64 signature utility and clean up the email class.
- Comment out attachments array for potential future updates.
2026-02-17 12:07:03 +01:00
Jeppe Bundgaard b7648ccc2c Update new customer email template with dynamic company data and revised signature assets
- Dynamically insert company name and corporate ID in welcome message.
- Replace signature image URLs with updated assets and ensure proper loading.
- Add utility for retrieving base64-encoded signatures to enhance flexibility.
2026-02-17 12:01:10 +01:00
Jeppe Bundgaard a31187879b Refine new customer welcome email template with enhanced styles and improved HTML structure 2026-02-17 11:46:33 +01:00
Jeppe Bundgaard 3e76bdccc2 Add HTML email template for new customer welcome email and integrate into email class 2026-02-17 11:43:14 +01:00
Jeppe Bundgaard 0a582951a0 Add new HTML email template and assets for welcoming new Truckwash customers 2026-02-17 11:37:49 +01:00
Jeppe Bundgaard e6358d09fc Ensure isWashCertificate check is case-insensitive in attachment.php 2026-02-16 15:32:37 +01:00
Jeppe Bundgaard aae244887f Extend CORS headers to include X-Customer-Number and add customer context in subuser grants. 2026-02-12 18:12:29 +01:00
Jeppe Bundgaard 6302fd25df Extend subuser permission system and refactor route permission handling
- Update `subusersRoute` to support subuser authentication and permission checks dynamically.
- Add new permission nodes (`SELFSERVE_LIST`, `SELFSERVE_EDIT`, `SELFSERVE_DELETE`) in `subusers_permission_node_key`.
- Fix typos in vehicle permission constants and ensure proper resolution.
- Enhance `vehiclesRoute` with effective customer context and scoped permission checks.
- Localize new permission nodes with descriptions in Danish.
2026-02-12 16:26:29 +01:00
Jeppe Bundgaard 16094575a7 Refactor ordersRoute, vehiclesRoute, and related routes for subuser permission handling
- Integrate `subusers_permission_node_key` for dynamic subuser-specific permission checks.
- Refactor authentication and permission logic to streamline checks for own vs. department-level access.
- Simplify error handling and enforce scoped permissions for vehicles, orders, and their attachments.
- Localize permission labels and descriptions to Danish for relevant modules.
2026-02-12 15:52:37 +01:00
Jeppe Bundgaard f265a83034 Refactor route_t and orderBookingRoute to simplify permission handling
- Add reusable helpers: `isOwnCustomerContext`, `resolveEffectiveCustomerNumber`, and `allowOwnOrDepartmentAccess` in `route_t` for streamlined permission checks.
- Replace inlined permission logic in `orderBookingRoute` with common helpers for creating, viewing, editing, and deleting bookings.
- Localize permission names, descriptions, and labels to Danish across relevant modules.
- Improve error handling and simplify context resolution for subuser and department-level permissions.
2026-02-12 15:43:02 +01:00
Jeppe Bundgaard f2244f5d0d Initialize permission node containers and handle uninitialized properties in subuser_user_grant to ensure proper grant resolution logic. 2026-02-12 14:08:01 +01:00
Jeppe Bundgaard d26b94de3b Integrate subuser permission node system and refactor route-level permissions
- Add `permission_node` DTO to link classic permissions with subuser-specific nodes.
- Extend `authentication` to support subuser resolution via tokens.
- Introduce route traits for permission evaluation with subuser context.
- Update `requirePermission` and `hasPermission` to handle subuser grants dynamically.
- Implement fallback mechanisms for customer number context in subuser permissions.
2026-02-12 13:54:28 +01:00
Jeppe Bundgaard c83b7d49e4 Add permission node system and extend subuser grants functionality
- Introduce a comprehensive permission system for subusers, including permission nodes and types with support for vehicles, bookings, orders, subusers, and self-serve modules.
- Implement `subusers_user`, `subuser_user_grant`, and `subusers_permission_node` classes for managing subuser permissions and grants.
- Extend `subuser_grants_o` with methods to retrieve permissions for subusers linked to customers.
- Add traits and enumerations to streamline permission handling across modules.
- Update subuser session handling to include token-based subuser lookups.
2026-02-11 17:13:25 +01:00
Jeppe Bundgaard 5aa575268f Add booked invoice helper and retrieval methods
- Introduce `economic_invoice_booked` helper for normalizing booked invoice data.
- Add `getFromId` method to fetch booked invoice details by ID.
- Extend `economic` class with `getInvoiceBookedFromExternalId` for external ID-based retrieval.
- Update imports and economic helper class registrations to include booked invoice functionality.
2026-02-03 12:19:42 +01:00
Jeppe Bundgaard c591439240 Refactor goals_progress_alert_renderer to separate period department lines from totals
- Introduce `periodLines` array for improved clarity and logic separation.
- Update total expression to include period label for better formatting.
- Move department lines and blanks to `periodLines` and merge into output at the end of each period.
2026-02-02 11:25:45 +01:00
Jeppe Bundgaard 4816075041 Add total progress summary line in goals_progress_alert_renderer
- Include total progress calculations across departments for each period.
- Add percentage comparison against target when applicable.
2026-02-02 10:42:33 +01:00
Jeppe Bundgaard 17325f565e Update Slack notification logic and refine COUNT_ONLY summary rendering
- Swap `send_message` with `send_webhook_message` to fix departmental Slack notification issues.
- Adjust `COUNT_ONLY` in `renderDanishPeriodSummary` to exclude targets for raw count-focused alerts.
2026-01-29 20:31:05 +01:00
Jeppe Bundgaard 4f9c91dceb Refactor goals_progress_alert_renderer for improved date handling and department target calculations
- Replace immutable/mutable `DateTime` conversions with safer handling in target and progress calculations.
- Update `getDailyTarget` to normalize timeframes and improve operating day computations.
- Refine department-specific target calculation logic for enhanced accuracy in multi-department setups.
2026-01-29 20:24:47 +01:00
Jeppe Bundgaard cd2190d976 Refactor goals_progress_alert_renderer for enhanced department summary rendering
- Simplify multi-period department progress calculations by restructuring logic to render by period first.
- Add support for daily target calculations and timeframe-based target adjustments in `goals_criteria`.
- Introduce `countOperatingDaysInTimeframe` and related helper methods for improved alert scheduling and progress tracking.
2026-01-29 20:20:05 +01:00
Jeppe Bundgaard b3b12b58fd Refactor goals_criteria and goals_progress_alert_renderer for improved department filtering and summary rendering
- Add cloning logic in `withDepartmentFilter` to avoid mutating original `goals_criteria` objects.
- Rename method parameter in `render` and refactor `renderDanishPeriodSummary` for enhanced readability and flexibility.
- Introduce helper methods for date range and criteria window adjustments to streamline department progress calculations.
2026-01-29 19:42:03 +01:00
Jeppe Bundgaard 84bfbdad25 Refactor Slack notifications and enhance departmental progress calculation
- Replace `send_webhook_message` with `send_message` for improved Slack notification rendering using `goals_progress_alert_renderer`.
- Add methods for calculating and retrieving departmental progress and distribution in `goals_criteria`.
- Update `renderDanishPeriodSummary` and Slack cron logic to support departmental-specific summaries.
- Include departmental progress in serialized goal objects for better reporting.
2026-01-29 18:30:04 +01:00
Jeppe Bundgaard 8972db3469 Add optional crop functionality to drawCropOutLine in machine_1
- Update `drawCropOutLine` to accept a `crop` parameter for conditional cropping alongside outline rendering.
- Adjust crop outline coordinates for improved alignment.
- Introduce logic to calculate and apply crop dimensions when `crop` is enabled.
2026-01-29 16:03:32 +01:00
Jeppe Bundgaard 71e2519e8b Add drawLine method and refactor crop outline rendering in machine_1
- Introduce `drawLine` method in `dynamicimages_image_t` for drawing lines with customizable styles (color, thickness, dash patterns).
- Update `drawCropOutLine` in `machine_1` to use a dynamic configuration for rendering top, left, right, and bottom crop outlines.
- Refactor crop outline logic for better readability and maintainability.
2026-01-29 15:48:18 +01:00
Jeppe Bundgaard 9e58370e94 Add crop outline rendering and step counter refinement in machine_1
- Implement `drawCropOutLine` method for rendering horizontal crop outlines in machine images.
- Refactor `drawStepCounterOnButton` with dynamic font sizing and fallback handling for better text alignment.
- Add step counter rendering in top-right position for enhanced button visuals.
- Update `exampleRoute` debugging logic to integrate new `machine_1` functionality.
- Replace old debug assets with new button highlight state assets.
2026-01-29 15:18:37 +01:00
Jeppe Bundgaard db99b293de Reset current_step to 0 and update comments in machine_1 button highlighting logic 2026-01-28 19:06:04 +01:00
Jeppe Bundgaard 5171d55e1f Add only_generate_current_step logic to machine_1 rendering
- Introduce `only_generate_current_step` property to conditionally skip non-relevant button highlights during rendering.
- Update button rendering methods to respect the `only_generate_current_step` flag for improved efficiency.
- Adjust logic in `drawHighlightedButtons` and related functions to check current step before drawing assets.
2026-01-28 19:02:30 +01:00
Jeppe Bundgaard 7247da5e21 Add start button rendering and update highlighted button logic in machine_1
- Introduce `drawHighlightedStartButton` method for dynamic rendering of the start button with step indicators.
- Add new constants for `IMAGE_BUTTON_HIGHLIGHTED_GREEN`, `IMAGE_BUTTON_HIGHLIGHTED_GREY`, and `IMAGE_BUTTON_HIGHLIGHTED_COMPLETED`.
- Refactor `getHighlightedAssetName` to provide conditional asset selection based on step completion.
- Implement `drawStepThumb` for rendering step indicators on the washing thumb.
- Adjust highlighted button logic to dynamically incorporate step counts and completion states.
- Add new assets for highlighted button states (`completed`, `green`, `grey`).
2026-01-28 18:11:52 +01:00
Jeppe Bundgaard 0357c478b4 Remove debug guides and finalize badge positioning in machine_1
- Remove temporary debug crosshair overlays after calibration.
- Refine badge positioning with calibrated inset adjustments.
- Confirm optical centering for better visual alignment.
2026-01-28 16:47:36 +01:00
Jeppe Bundgaard ab7bd4c2da Calibrate badge positioning and add debug guides in machine_1
- Adjust badge center calculations for improved alignment based on asset layout.
- Temporarily disable optical nudge calibration for badge centering.
- Add debug crosshair overlays to validate badge and text anchor points during rendering.
2026-01-28 16:46:04 +01:00
Jeppe Bundgaard 220eda5cb5 Refactor step counter rendering for machine_1 buttons
- Redesign badge positioning with dynamic calculations for better alignment.
- Implement optical centering and text-size adjustments based on badge dimensions.
- Improve font size optimization with iterative refinement and fallback handling.
2026-01-28 16:35:34 +01:00
Jeppe Bundgaard 790e0fbeec Normalize color handling and enhance text overlay logic
- Add `normalizeColor` method in `dynamicimages_asset_t` for consistent color input handling across strings, arrays, and defaults.
- Update text overlay to use the new `normalizeColor` method, improving flexibility and robustness.
- Refactor `machine_1` button step counter to calculate font size dynamically and use RGBA colors.
- Adjust `drawStepCounterOnButton` to improve text alignment and styling.
2026-01-28 16:16:53 +01:00
Jeppe Bundgaard 24b1d410c0 Add text overlay support and enhance font handling in dynamicimages
- Introduce `addTextOverlay` method in `dynamicimages_asset_t` for adding customizable text overlays with alignment and styling options.
- Add `getFontPath` method in `dynamicimages_image_t` for resolving font paths under the shared assets directory.
- Refactor `machine_1` to use `drawStepCounterOnButton` for adding dynamic step counters to buttons.
- Rename and relocate `AlfaSlabOne-Regular.ttf` under `assets/fonts`.
2026-01-28 16:07:03 +01:00
Jeppe Bundgaard f158fa7120 Add reset button rendering and refine highlighted button logic in machine_1
- Introduce `drawHighlightedResetButton` method for dynamically rendering the reset button with text overlay.
- Add `IMAGE_BUTTON_HIGHLIGHTED_BLUE` constant and update asset usage for reset button rendering.
- Refine highlighted button positioning with per-row spacing adjustments and configurable highlight states.
- Add `getNextButtonStepCount` method for tracking button steps during rendering.
2026-01-28 15:56:50 +01:00
Jeppe Bundgaard 3fcccd8e5a Add AlfaSlabOne-Regular.ttf font to dynamicimages module 2026-01-28 15:56:38 +01:00
Jeppe Bundgaard d03151c426 Add highlighted button rendering to machine_1 layout
- Introduce `drawHighlightedButtons` method for drawing button grids based on configurable rows, columns, and spacing.
- Add new constants for button size, spacing, and grid dimensions.
- Update asset usage to include `machine_1_button_highlighted_transparent`.
2026-01-28 14:57:44 +01:00
Jeppe Bundgaard a2dc4da2bf Refactor machine_1 rendering logic and add new assets
- Replace `IMAGE_WASH_PROGRAMS` with `IMAGE_PROGRAMS_WHEEL` and add `IMAGE_BUTTON_HIGHLIGHTED`.
- Introduce `drawProgramWheel` and `drawThumb` methods for improved modularity.
- Adjust thumb properties (`$thumb_position`, `$thumb_size`) and refine positioning logic.
- Update asset loading to include the new `machine_1_button_highlighted_transparent` asset.
2026-01-28 14:27:06 +01:00
Jeppe Bundgaard 43eeb14099 Update machine_1 default thumb position and adjust thumb X-coordinate positioning
- Set `$thumb_position` default value to `10` for improved alignment.
- Tweak thumb X-coordinate from `620` to `650` for better rendering consistency.
2026-01-27 15:04:17 +01:00
Jeppe Bundgaard 2e7376f00a Add centered asset drawing support and refine image transformations
- Introduce `drawAssetCentered` method in `dynamicimages_image_t` for drawing assets visually centered on specified coordinates.
- Reset virtual canvas/page after image rotation in both `dynamicimages_asset_t` and `dynamicimages_image_t` to ensure consistent positioning.
- Update `machine_1` logic to use `drawAssetCentered` for improved thumb drawing and dynamic pivot alignment.
- Adjust thumb rotation calculations and positioning logic for better visual rendering.
2026-01-27 14:56:58 +01:00
Jeppe Bundgaard 493b4a2d6e Add resize method to dynamicimages_asset_t and enhance machine_1 thumb rendering
- Introduce `resize` method in `dynamicimages_asset_t` for resizing assets in memory with or without aspect ratio preservation.
- Refine `machine_1` rendering logic to dynamically calculate and apply thumb width based on height.
2026-01-27 14:10:45 +01:00