Wednesday, March 18, 2026
59 changes · saas-19.1
Resolved issues and error corrections
This update resolves an issue where timesheet descriptions were being duplicated when updating timesheet entries in the grid view. The fix ensures that new timesheet lines created after an update retain the original description, maintaining data accuracy and consistency for reporting.
Original PR description
To reproduce: ============= - on timesheet group by Project > Task > Description - on a line with a description, update a 0:00 cell to an other value - refresh or change view to list and back to grid - a new line with description '/' is created with the updated value Problem: ======== when creating the new timesheet it's by default given the name '/' which for the grid view is not in same group as the original line with the description. Solution: ========= when creating the new timesheet, we give it the same description as the original line. opw-5909249 Forward-Port-Of: odoo/enterprise#110554 Forward-Port-Of: odoo/enterprise#108894
This update fixes a visual inconsistency in the Odoo calendar view for timesheets. Previously, negative time entries were displayed as '-1h 15m', which was confusing. Now, the calendar view accurately reflects negative durations like '-45 minutes', aligning with how they're shown in the list view for clarity and accuracy.
Original PR description
The calendar view used Python's `divmod` for time calculations, which renders -45 minutes as -1h 15m. This representation is misleading for timesheet entries, while the list view already displays the values correctly. Adjust the calendar view logic to ensure consistent and accurate handling of negative durations. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247925
This update resolves a technical error that prevented users from placing lunch orders with vendors when a 'Until Date' was specified. The fix ensures the system correctly handles date comparisons, preventing a traceback and allowing users to complete their orders. This improves the reliability of the Lunch module.
Original PR description
Steps to reproduce: ------------------------------ 1. Install Lunch module 2. Lunch > configurations > Vendors 3. Open any vendor and set Until date to any near future date 4. Go to My Lunch > New Order 5. Click on Any product with above vendor > Add to Cart 6. Click on Order Now Observation: ------------------------------ Traceback Occurs: ``` return not (self.recurrency_end_date and date.date() >= self.recurrency_end_date) and self[fieldname] ^^^^^^^^^ AttributeError: 'datetime.date' object has no attribute 'date' ``` Issue: ------------------------------ `_available_on_date` calls `date.date()` unconditionally, which fails when passed a `datetime.date` object (from `lunch.order`) since date objects lack the `date()` method. Solution: ------------------------------ Check instance type before calling `date()` to handle both `datetime.datetime` and `datetime.date` objects correctly. opw-5948688 Forward-Port-Of: odoo/odoo#249449
This update fixes an issue where the product search bar on the mobile version of the website wasn't functioning correctly. The fix ensures that searches are processed properly, allowing users to find products effectively on their mobile devices. This improves the overall shopping experience for mobile users.
Original PR description
Steps to produce: --- - Install `website_sale` module. - Go to `website > shop`. - Open the `Customizable Desk` product page. - From the website editor, `enable the search bar` for the product page.…
Steps to produce: --- - Install `website_sale` module. - Go to `website > shop`. - Open the `Customizable Desk` product page. - From the website editor, `enable the search bar` for the product page. - Switch to `mobile view`. - Now search for `drawer` in product search. Issue: --- - In mobile view, the search does not work. When performing a search, nothing happens, and the request is not executed. Root cause: --- - At [1], in the search template definition, the action attribute is missing in the search form. Solution: --- - Set the form action using keep(search=0) instead of leaving it undefined. - This ensures that the search behaves correctly depending on the context (global or category-scoped). [1]https://github.com/odoo/odoo/blob/51f59a293de1e86f66f30257f8fc0c419463d18c/addons/website_sale/views/templates.xml#L2239-L2259 opw-5992052 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#251694
This update fixes a problem where image uploads would fail and cause a confusing user experience. Now, when you discard an image upload, the process stops cleanly, preventing errors and ensuring a smoother user experience. The fix ensures files are no longer uploaded after discarding the media dialog.
Original PR description
Steps to Reproduce: 1. Open the website module. 2. Open the media upload dialog to upload an image by either double-clicking the logo or replacing the existing image. 3. Upload a large file. 4. Abort…
Steps to Reproduce: 1. Open the website module. 2. Open the media upload dialog to upload an image by either double-clicking the logo or replacing the existing image. 3. Upload a large file. 4. Abort the upload before it finishes by clicking the 'Discard' button in the media dialog box. After performing these steps, a traceback is observed. Before this commit: - Image upload failures would throw uncaught exceptions. - These exceptions would interrupt the flow and result in a poor user experience with no clear feedback. - Even after clicking the discard button the image was still getting uploaded. After this commit: - Uploads can be safely aborted when the media dialog is discarded. - Ongoing XHR requests and RPC calls are properly cancelled. - The upload loop stops immediately when an abort is triggered with no traceback. - Users get a predictable and clean exit instead of a broken state. - Files are no longer uploaded after clicking Discard. ### task-4752497 Forward-Port-Of: odoo/odoo#250065 Forward-Port-Of: odoo/odoo#219081
This update resolves an issue where clicking on 'reply' links within Odoo mailboxes didn't function correctly. Now, clicking on a reply link will automatically take the user to the original conversation thread, improving the user experience and ensuring messages are easily accessible within their email chains.
Original PR description
Before this change, clicking on a `message in reply` in mailboxes had no effect. The expected behavior is for it to jump to the message in its origin thread. To fix it, this commit ensures that `useMessageHighlight` hook receives the correct thread which in this case is the origin thread of the message in reply. task-5343804 Forward-Port-Of: odoo/odoo#253990 Forward-Port-Of: odoo/odoo#253334
This update fixes an issue where upload widgets within dropdown menus on smaller screens wouldn't function correctly. The fix ensures that dropdowns remain open while users initiate uploads, improving the user experience for mobile and tablet users. This resolves a bug preventing users from uploading documents from purchase orders.
Original PR description
## Issue: On small screens, when an upload widget is placed inside a dropdown (e.g., Upload Bill from a Purchase Order), the action does not work Clicking the dropdown item closes the dropdown immediately, which prevents the widget action from completing ## Cause: Widget actions require an accessible anchor element to function properly. However, dropdown items automatically close the dropdown on click As a result, the widget is triggered but immediately detached from the DOM before its action can fully execute ## Steps to reproduce: - Install `purchase_stock` (to have the Upload Bill widget available) - Create and confirm a Purchase Order (the Receive button must be available) - Reduce the browser width until the action buttons collapse into the three-dots menu - Click Upload Bill and try to upload a document opw-5918379 Forward-Port-Of: odoo/odoo#251492
This update corrects a naming error in the ZUGFeRD eInvoice XML file generated by our system. Previously, the file name didn't meet validator requirements, causing issues with several e-invoice validation services. Now, the ZUGFeRD file is correctly named, ensuring compatibility with key validation tools and facilitating accurate e-invoice processing.
Original PR description
Fix the name of the embedded xml for zugferd eInvoice format. Before this PR: For the validator https://www.portinvoice.com/en/, the error > No, the file is called zugferd.xml. The following naming conventions are > permitted: “factur-x.xml”, “xrechnung.xml”, “zugferd-invoice.xml”, > “ZUGFeRD-invoice.xml”, “order-x.xml”, “cida.xml” And also: > The XML has a valid profile? No This corresponds to the document_context, as the french factur-x and the german ZUGFeRD are a common standard, we can put the same context. After this PR: The ZUGFeRD file passes on different validators. Validators: * https://erechnungs-validator.de/ * https://easyfirma.net/e-rechnung/validieren * https://www.portinvoice.com/en/ * https://demo.verapdf.org/ task-6010416 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#253704 Forward-Port-Of: odoo/odoo#252681
This update fixes an issue where unbuilding products from different companies resulted in incorrect pricing due to a mismanaged company context. The fix ensures that component pricing accurately reflects the company from which the unbuild order originates, resolving discrepancies in inventory valuation reports.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#249790
This update corrects a previous issue where event ticket prices were fixed and not recalculated within the Point of Sale system. Now, event tickets will dynamically adjust their price based on either the event's defined price or the customer's active pricelist, ensuring accurate pricing at the POS. This improves the overall POS experience and pricing accuracy for event tickets.
Original PR description
Event tickets in POS would have their price locked to the price defined in the event itself. They would be filtered out of any price recalculation inside the POS to keep the POS from recalculating the price based on the `product_template` and to keep the price defined in the event itself. This PR will add event tickets back into price recalculation. It will set the price to the price defined inside the event if no pricelist is applicable, or use the pricelist to calculate the price if there is one applicable. Task-[5092613](https://www.odoo.com/odoo/project/1737/tasks/5092613) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248454
This update fixes an issue where group leave durations were incorrectly calculated when overlapping with existing approved leave requests. The fix ensures that group leave durations accurately reflect all allocated time off, resolving a discrepancy in how the system processed conflicting leave types. This improves the reliability of time off scheduling.
Original PR description
Problem ------------------------ When an employee has approved leaves, and a group leave is created that overlaps with the approved leave and overrides it, the duration of the new group leave is not…
Problem ------------------------ When an employee has approved leaves, and a group leave is created that overlaps with the approved leave and overrides it, the duration of the new group leave is not computed correctly. The duration does not include the overridden days. To reproduce: 1. Create allocated leave for employee and approve and validate it. 2. Go to Management > Time Off and create a group leave for the employee that includes the approved time off dates. The dates of all leaves are updated correctly, but the duration of the group leave is incorrect. Objective --------------------------- Even though conflicting leaves were correctly split in the multi leave generation wizard, the resource.calendar.leaves table was not synchronized within the same transaction. Because the leave types required allocation, the duration was computed by subtracting the old time off days from the new leave's duration, since they were treated as unavailable. Solution -------------------------- Manually unlink the resource.calendar.leaves records associated with the conflicting leaves before calculating the new duration. The clears the employee's schedule in the database so that the dates are correctly processed as available. The calendar blocks for the remaining days of the approved time off and the new group leave are generated when the leaves are created. Task: 5911074 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#253425 Forward-Port-Of: odoo/odoo#249527
This update resolves an issue where salespeople without project access were unable to open sale orders with timesheet entries. The fix uses `sudo()` to bypass access restrictions when determining button visibility, ensuring all salespeople can manage timesheets on sale orders.
Original PR description
to reproduce: ============= - create a user with only user access to timesheet and no access to project - create and confirm a sale order with a timesheet-delivered service product assigned to that salesperson - record some hours on that SO with another user - open the sale order as that salesperson -> AccessError problem: ======== `_compute_show_hours_recorded_button` reads `timesheet_count` and `project_count` on the sale order, which internally query `account.analytic.line` and `project.project` records. a salesperson without all timesheet or project groups lacks read access to those models, causing an AccessError during the compute. solution: ========= use `sudo()` since the result is only used to determine button visibility and does not expose sensitive data to the user. opw-5893324 Forward-Port-Of: odoo/odoo#248026
This update corrects a warning related to outdated cryptography libraries used in our payment processing system (payment_redsys). The change ensures compatibility with newer versions of the cryptography library, preventing potential issues and maintaining a stable payment experience for our customers.
Original PR description
In cryptography 43.0.0 (present in Debian Trixie), ARC4 and TripleDES were migrated to decrepit [^1], leaving a deprecation warning in the old path. This commit handles both previous pre/post 43.0.0 import path. runbot-233267 [^1]: pyca/cryptography@722a6393e61b3acb569f404218f213fe08478a96 Forward-Port-Of: odoo/odoo#253957
This update fixes an issue where certain salary deductions (specifically 'ATTACH_SALARY') were not being correctly processed in the net calculation for Odoo's Kenyan payroll module. The changes ensure that these deductions are accurately accounted for, improving payroll accuracy and compliance.
Original PR description
**Behavior before this commit** Some salary rules (e.g. `ATTACH_SALARY`) were ignored in the NET calculation. **Behavior after this commit** - Four rules are now added to the "Total deductions" line: their sequence and category has been changed. - The sign of these lines has also been switched: an attachment of salary of a positive amount should be added to the amount of total deductions, which is then deducted from the net.  opw-5894647 Forward-Port-Of: odoo/enterprise#110367 Forward-Port-Of: odoo/enterprise#107033
This update prevents ribbon customizations from resetting to default settings when creating a new ribbon. Previously, changes made immediately after creation were lost due to a delay in the ribbon's database assignment. Now, the system waits for the ribbon to be fully created before applying updates, ensuring customizations are reliably saved.
Original PR description
When creating a new ribbon and immediately changing its options, the title and colors would unexpectedly reset to None. This happened because the ribbon was not fully saved in the database before we tried to update its settings, causing the changes to be lost. Now we wait for the ribbon to be properly created and assigned its database identifier before applying any updates. A mapping system tracks the relationship between temporary and final identifiers to ensure changes are always applied to the correct ribbon. task-5503716 Forward-Port-Of: odoo/odoo#227626
This update corrects a display issue in the employee emergency contact section for employees outside of India. Previously, the ‘Relationship’ field was incorrectly shown to all employees, regardless of their company location. This fix ensures the field is only visible for employees associated with Indian companies, improving data accuracy and user experience.
Original PR description
### Steps to reproduce: - Install l10n_in_hr_payroll. - Create an employee (also link a user) in an Indian company and another company. - Go to My Profile > Private Information > Emergency. - The Relationship field is shown for non-Indian employees as well as employees from other countries. ### Issue: - We're not hiding the relationship field if employee is from other country. ### Fix: - We'll hide this field if an employee belongs to non-indian company. Task: 6008888 Forward-Port-Of: odoo/enterprise#109775
This update fixes an issue where certain valid Non-Resident (NRI) GSTINs were not recognized by the partner autocomplete feature. The change updates the validation logic to accept a wider range of NRI GSTIN formats, ensuring accurate data entry for international business partners. This improves the usability of the system for users dealing with NRI clients.
Original PR description
Currently, certain `valid GSTINs` for Non-Resident taxpayers are not recognized by the partner `autocomplete` feature. **Steps to reproduce:** - Install the `l10n_in` and `partner_autocomplete`…
Currently, certain `valid GSTINs` for Non-Resident taxpayers are not recognized by the partner `autocomplete` feature. **Steps to reproduce:** - Install the `l10n_in` and `partner_autocomplete` modules. - Navigate to Settings > Users & Companies > Companies. - Click `New` and set `Tax ID` to `9922JPN29001OSU`. - Wait for 5–10 seconds. **Observation:** The partner autocomplete does not trigger, although it is valid and verifiable on the official GST portal: https://services.gst.gov.in/services/searchtp **Root Cause:** The issue was already fixed in core validation by PR [1], but the GSTIN validation logic used in partner autocomplete was not updated. At [2], the GSTIN validation regex for NRI taxpayers only supports formats ending with `NRX` (X = any alphanumeric character). However, certain valid GSTINs follow a revised structure and therefore are not matched by the existing regex. **Fix**: This commit ensures that valid NRI GSTIN formats are accepted during validation by applying a fix similar to [1] to the partner autocomplete GSTIN validation at [2]. Related IAP PR: https://github.com/odoo/iap-apps/pull/1491 [1]: https://github.com/odoo/odoo/pull/251760 [2]: https://github.com/odoo/odoo/blob/3016c08a7aa8701ec9b0092b5aafc282b16dd9f3/addons/partner_autocomplete/static/src/js/partner_autocomplete_core.js#L36-L52 Forward-Port-Of: odoo/odoo#253799
This update resolves an issue where image galleries could inadvertently share the same ID, leading to unexpected behavior when saving and refreshing website pages. The fix generates a truly unique ID for each gallery, preventing conflicts and ensuring consistent functionality across user sessions. This improves the stability and reliability of the website builder.
Original PR description
Commit [86a3f41] called `uniqueId()` to generate the image gallery id in the builder options. However, `uniqueId()` is only unique in the course of the current client session. As a result, you could drop a gallery, save your page, refresh it, edit the page and drop another gallery with the same id as the 1st one. Steps to reproduce: - Drop an image gallery - Save - Refresh - Go back to edit - Drop another image gallery => Check their ids. It's very probable that they are the same. - Save - Click on the "Previous" or "Next" arrow of the 2nd gallery => it updates the 1st carousel, not the 2nd one. [86a3f41]: https://github.com/odoo/odoo/commit/86a3f41a71a91c656a9969a4ef251f8c2ce3a266 Forward-Port-Of: odoo/odoo#253960
This update fixes an issue where time off leaves weren't displaying the correct return dates for employees. The fix ensures that all validated leaves, including worked-time leaves, now accurately calculate and display the employee's expected return date, improving the accuracy of employee schedules and reporting.
Original PR description
Issue: - When a time off type was configured as , adding a leave for today caused the employee form to display instead of a real date. Fix: - Compute leave dates for all validated leaves, including worked-time leaves. - Ensure the date is always computed using the first working interval after the leave end date. Impact: - Employee profiles now display a correct return date for worked-time leaves. task-5421688 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241329
This update resolves a sporadic test failure related to scrolling to notifications within the email system. The fix ensures messages are fully loaded before the scroll action, preventing conflicts with other UI elements and improving test reliability. This enhances the overall stability of the email functionality.
Original PR description
Before this commit, test 'Can scroll to notification' may fail non-deterministically with the following error: ``` [toBe] expected values to be strictly equal (Element…
Before this commit, test 'Can scroll to notification' may fail non-deterministically with the following error: ``` [toBe] expected values to be strictly equal (Element .o-mail-NotificationMessage:contains(notification 0) not found in viewport of .o-mail-Thread) ``` This happens because while the test is awaiting the scrolling to unread, this is made with just an `await tick()` after opening discuss app. This is not enough: messages need to be loaded and then there's a tick with scroll to unread message. The awaiting of messages being loaded was missing in the test, which this error is fixing. This is important because the opening of pinned panel and click on jump may be triggered before the auto-scroll to unread message, and this is a problem because the jump to pinned message would be cancelled by the scroll to bottom. Also instead of awaiting the tick for scroll to unread message, this commit replaces it by assertion of message list being at the bottom. This asserts precisely the scroll has happen, and its ok to have it scroll at bottom as the last message is short and is necessarily smaller than viewport, thus the auto-scroll to this unread message implies this scrolls to the bottom of message list. Fixes runbot-error-238427 Forward-Port-Of: odoo/odoo#253928
This update corrects a data issue in NACHA payment files by prioritizing the actual bank account holder's name over the customer's name in Odoo. Using the correct account holder name ensures accurate bank identification and avoids potential payment processing errors. This improves the reliability of US payments.
Original PR description
The NACHA entry detail was using the partner's name (res.partner.name) for the Individual Name field. This should instead prioritize the Account Holder Name (acc_holder_name) from the bank account, as this reflects the actual name on the bank account which may differ from the partner's name in Odoo. The code now uses bank.acc_holder_name if set, and falls back to payment.partner_id.name if not set. Forward-Port-Of: odoo/enterprise#108414 Forward-Port-Of: odoo/enterprise#105582
This update fixes an error in how credit notes calculate the cost of goods sold (COGS). Previously, the calculation was incorrect when the invoice's unit of measure differed from the product's. This change ensures accurate COGS reporting for credit notes, improving financial reporting accuracy.
Original PR description
…f uom **Problem:** partial cogs are computed incorrectly when the uom of the invoice is different than the one of the product **Steps to reproduce:** -1) created a stored product with category std…
…f uom **Problem:** partial cogs are computed incorrectly when the uom of the invoice is different than the one of the product **Steps to reproduce:** -1) created a stored product with category std price perpetual -2) set a cost of 1 and an on hand quantity of 12 -3) for the invoicing policy select 'delivered quantities' -4) in the sales tab add the packaging 'pack of 6' -5) confirm a sale order for 2 packs of 6 Problem A: -6a) validate the delivery -7a) create and confirm an invoice for all the quanity -8b) on the delivery create a return for a quantity of 6 and validate -9b) select 'create invoice' on the sale order -10b) confirm the credit note Problem B: -6b) change the quantity to 6 units on the delivery -7b) validate with backorder -8b) create and confirm an invoice for the delivered quantity (1 pack of 6) -9b) validate the back order -10b) create and confirm an invoice for the remaining (1 pack of 6) **Current behavior:** Problem A : the cogs lines are : - crediting stock valuation of 54$ - debiting expenses of 54$ Problem B: the cogs lines are: - debiting stock valuation of 24 - crediting expenses of 24 **Expected behavior:** Problem A: the cogs lines should be: - debiting stock valuation of 6 - crediting expenses of 6 Problem B: the cogs lines should be: - crediting stock valuation of 6 - debiting expenses of 6 **Cause of the issue:** Both problems have the same cause. To compute the price unit for the cogs we call _get_cogs_value() https://github.com/odoo/odoo/blob/b071bc3cb9e1d91d9d0fbce7961c3c75f28ef874/addons/stock_account/models/account_move.py#L122 Inside _get_cogs_value, in the computation of the return value: https://github.com/odoo/odoo/blob/b071bc3cb9e1d91d9d0fbce7961c3c75f28ef874/addons/stock_account/models/account_move_line.py#L74 - price_unit is computed (in both use cases) using _get_cogs_price_unit https://github.com/odoo/odoo/blob/b071bc3cb9e1d91d9d0fbce7961c3c75f28ef874/addons/stock_account/models/account_move_line.py#L68 and is expressed in the uom of the product https://github.com/odoo/odoo/blob/b071bc3cb9e1d91d9d0fbce7961c3c75f28ef874/addons/stock_account/models/stock_move.py#L238-L240 - self.quantity is expressed in the uom of the invoice (pack of 6) - cogs_qty is computed using _get_cogs_qty() https://github.com/odoo/odoo/blob/b071bc3cb9e1d91d9d0fbce7961c3c75f28ef874/addons/stock_account/models/account_move_line.py#L66 and is expressed in the uom of the invoices (pack of 6) Because of this, in both use cases, the computation is incorrect. **fix:** we use the uom of the product everywhere because _get_cogs_value() should return the price unit in the products uom https://github.com/odoo/odoo/blob/b071bc3cb9e1d91d9d0fbce7961c3c75f28ef874/addons/stock_account/models/account_move_line.py#L51-L52 opw-5901706 Forward-Port-Of: odoo/odoo#250154
This update fixes an issue where timesheets were incorrectly calculating hours for employees on past contracts. The change ensures that timesheets accurately reflect the employee's historical working hours based on their contract period, resolving a discrepancy between current and past contract data.
Original PR description
Currently on creating a time off that falls under a past contract still generates timesheet hours based on the employee's current contract. ### **Steps to Reproduce:** 1) Install…
Currently on creating a time off that falls under a past contract still generates timesheet hours based on the employee's current contract. ### **Steps to Reproduce:** 1) Install `project_timesheet_holidays` module with demo data. 2) Create an employee with two contracts/versions: - Past contract: 1 Jan 2025 to 31 Dec 2025 with standard 40h/week (8h/day). - Current contract: 1 Jan 2026 to indefinite with standard 35h/week (7h/day). 3) Create and validate Time off for this employee in the past (e.g, 29 Dec 2025) 4) Navigate to `Timesheets>All Timesheets`, search for this employee and switch list view for clear view. ### **Observed Behavior:** 7:00 hours are displayed on the timesheet, pulling from the employee's current active contract calendar. ### **Expected Behavior:** 8:00 hours should be displayed, as the leave date falls under the 40h/week past contract. ### **Root Cause:** In the `_generate_timesheets`, the caledar values is fetched using `employee_id.resource_calendar_id` see[1], which always points to the employee's currently active calendar. Furthermore, this calendar is not explicitly passed to `_list_work_time_per_day` see[1], causing the method to fall back on the current default. [1]- https://github.com/odoo/odoo/blob/c2595e47e3b36120f4c3da8bfe8c16f6c5969a70/addons/project_timesheet_holidays/models/hr_leave.py#L36-L55 ### **Fix:** Change the logic to use `leave.resource_calendar_id`, which correctly computes and retrieves the resource calendar active during the specific `date_from` and `date_to` of the leave and pass this `calendar` to `_list_work_time_per_day` to ensure the correct historical hours are used for timesheet generation. **opw-5922695** Forward-Port-Of: odoo/odoo#248207
This update resolves a technical issue that caused inconsistent test results in the HTML editor. The fix ensures the editor is fully loaded before tests attempt to interact with it, improving the reliability of the testing process. This contributes to overall product stability and reduces the risk of unexpected behavior.
Original PR description
See commit messages. Forward-Port-Of: odoo/odoo#253051
This update fixes a minor typo in the Odoo software's documentation related to country state selection. The 'Departement' word was incorrectly displayed, which has now been corrected. This ensures users receive accurate information and a better experience when setting up their business data.
Original PR description
Fixes #202198 Split from #249963 per reviewer feedback. **CLA sign-off:** Individual CLA signed (doc/cla/individual/vedantmadane.md) Forward-Port-Of: odoo/odoo#253224