# Release Notes ## Summary This release adds powerful new tools for managing services, horses, and reports while refining many existing workflows. You can now group billable services, edit horses in bulk, and view breeding plans and horse movements more intuitively. Reports have been enhanced, important bugs fixed—including multi‑tab login stability and error handling—and security updates applied to keep the platform safe. ## Highlights - Group billable services and enable multi‑horse bulk selection and moves - New Breeding Plans page with mobile layout improvements - Bulk edit and move horses directly from the list - Enhanced contact merger with per‑field conflict picker - Location history displayed as an easy‑to‑read timeline - Fixed multi‑tab logout issue to keep sessions active ## Features - **Group billable services and enable multi‑horse selection and moves** You can now create service bundles to group related billable items, select multiple horses using a Gmail‑style avatar selector, and move or edit them in bulk directly from the horse list. - **Dedicated Breeding Plans page** A new page lists all breeding plans and provides detailed views, making it easier to monitor and manage breeding schedules. - **Bulk edit and move horses from the list** Select multiple horses and apply bulk changes such as moving them to a new location or updating basic fields, streamlining large‑scale updates. - **Add SWS filter to Fertility Report** The fertility report now includes an SWS filter, letting you focus on results from that facility. - **Income/Expense report enhancements: default chart, filters, and total column** The report now shows its chart automatically, lets you filter by horse or contact, and adds a total column that summarizes yearly amounts. - **Auto‑move horses when creating a sale invoice** When you add a horse sale line item, the horse’s destination is pre‑filled and the horse is moved automatically after saving the invoice. - **Demo data option during signup** A new checkbox lets new users opt‑in to demo content, giving an instant example environment to explore the app. - **Configure preferred and fallback invoice languages** Organizations can set a default and fallback language for invoices, ensuring they are generated in the correct language automatically. - **Finalize invoices without a valid payment mandate** You can now finalize and send an invoice even if the Mollie mandate is missing or invalid, with an option to skip automatic charging. - **Location history displayed as a timeline** The horse’s location history now appears as a visual timeline, making movement history easier to read. - **Enhanced contact merger with per‑field conflict picker** Merging duplicate contacts now uses dedicated pages with a field‑by‑field conflict picker, giving precise control over which data to keep. - **Filter orders by mare and stallion** The order list now includes separate filters for mares and stallions, simplifying order management. - **Disable pay button during pending payments and require UELN for mares** The order page now hides the ‘pay order’ button while a payment is pending and mandates a UELN when adding a mare through the client portal. - **Split activity list into List view and Day (staff tile) view** The activity planning screen now offers both a List view and a new Day view with staff tiles, providing alternative layouts for better usability. - **Show feed schema on horse detail page** The horse detail page now includes the current feed schema for quick reference. - **Restrict feed type average price to administrators** Only admin users can view or edit the average price of a feed type, ensuring proper access control. - **Show Gantt chart when TransPAS is enabled** The Gantt chart menu item is now visible for users with TransPAS enabled, adding a new visual planning tool. ## Improvements - **Restrict deployment report visibility to BP users** Only users with BP access can view the deployment report, reducing unnecessary clutter for others. - **Make grouped reports sortable** You can now sort columns in the grouped report to arrange information as needed. - **Feed report UI improvements: active filters, cost toggle, and average price** The feed report now displays active filters, includes a cost toggle, and shows the average feed price in type settings for better cost management. - **Reordered report list** Reports are now listed in a more logical order, helping you find the desired report faster. - **Enabled the Report menu** The Report menu is now active, providing quick access to all reporting features. - **Better visual distinction for primary contacts in duplicate list** The duplicate contacts UI now highlights the primary contact more clearly and shows a ‘no results’ bar when appropriate. ## Fixes - **Show ‘unknown’ for unresolved contacts and stables** When a contact or stable cannot be identified, the horse details now display a clear ‘unknown’ label instead of an internal identifier. - **Stop re‑logging handled 400 errors in order wizard** Handled client errors no longer generate duplicate logs, keeping error tracking clean. - **Show validation errors from bulk API calls** When a bulk operation fails, specific field errors are now displayed to the user instead of being silently ignored. - **Preserve login session across multiple tabs** Opening the app in a new browser tab now keeps the existing session without logging you out of the original tab. - **Prevent avatar upload crash on empty S3 presign response** The app now safely handles cases where the S3 presigned URL response is missing, avoiding crashes during profile image uploads. - **Surface nested API errors as non‑field messages** Nested errors returned by bulk endpoints are now presented to the user instead of being hidden. - **Stop double‑logging already‑handled API errors** Errors that are already shown to the user are no longer reported again to Bugsink, reducing noise. - **Show horse name in unassigned column of day view** The day view now correctly displays the horse name even in the unassigned staff column. - **Include stable tasks in planning action list** Tasks linked to a stable now appear in the action list, ensuring they are visible when planning. - **Send product currency with updates** When editing a product, the current price currency is now correctly sent to the server, preventing mismatches. - **Display API errors for fields not present in the form schema** Validation errors for fields that aren’t part of the current form are now shown, ensuring you see all relevant messages. - **Show organization name on invitation acceptance page** When accepting an invitation, the page title now includes the name of the inviting organization. - **Use machtiging\_rvo\_gegeven as primary RvO connection indicator** The RvO connection status now follows the stored authorization field, with clear ‘connection broken’ warnings when needed. - **Preserve product currency and add one‑click correction** Products retain their original currency, and a quick‑fix button lets you resolve mismatched currency values instantly. - **Hide service contract orders from semen orders list** Service contract orders no longer appear in the semen orders view, keeping the list focused on semen orders. - **Clip swipe text to avoid overlap in planning view** Swipe actions now clip text to prevent it from bleeding into the horse name column. - **Correct submenu height measurement on first load** Side‑bar submenus now display with the correct height from the first page load, preventing overlap. - **Trim trailing zeros from cost fields in shop settings** Cost fields now display tidy amounts (e.g., 10,00 instead of 10,00000), improving readability. - **Show estimated horse cost for subscriptions without service contracts** When setting up a subscription, the estimated cost per horse is displayed even if the account lacks a service contract. - **Refresh organization companies after updates** Changes to a company’s address are reflected immediately in draft invoices without needing a page reload. - **Handle errors after quick reservation saves** If the activity list fails to refresh after a rapid reservation, the error is now caught and reported rather than being silent. - **Improve mobile breeding plan layout** Breeding plan rows are now compact on mobile devices, and related order tiles show a clear border. ## Security - **Upgrade react‑router‑dom to fix open‑redirect vulnerabilities** The routing library has been updated to eliminate known open‑redirect security risks. - **Generate S3 keys using built‑in crypto instead of uuid package** S3 object keys are now created with the native crypto API, removing a vulnerable dependency. ## Other - **Suppress 400 error logs for account deletion** User‑initiated 400 errors during account deletion are no longer recorded as system errors. - **Added release‑notes stage to CI pipeline** The CI workflow now generates release notes as a dedicated stage. - **Removed Vercel dependencies** Dependencies related to Vercel have been removed from the project. - **Do not log cancel errors from care horse form** Cancel actions in the care horse form are no longer logged as errors. - **Run npm audit fix to resolve non‑breaking vulnerabilities** Automated dependency updates have reduced known vulnerabilities without changing functionality.