Tuesday, August 19, 2025
26 changes · saas-18.3
Enhancements to existing features
The accounting tax helper documentation was improved to make it clearer which helpers are available in the point of sale interface and which are only available on the server side. This helps developers avoid confusion when working with tax behavior across accounting and point of sale areas, with no direct change for end users.
Original PR description
Since some of them are copy pasted javascript side, adding such docstring is helping to distinguish what is available directly js-side from point_of_sale from what is only accessible python-side. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#223258
Resolved issues and error corrections
When sending an SMS from a chosen phone field, Odoo now keeps that selected field even if its number is invalid instead of silently switching to the contact's main phone number. This helps users spot and correct the specific bad number they selected, reducing the risk of messages being sent to an unintended recipient.
Original PR description
If a user picks a specific field to open the composer with and that field is invalid we currently attempt to pick the number from the partner of the record as a fall back. Instead if the user picked a specific field and it happens to be invalid for some reason, they will want to correct it in-situ rather than have it be something completely different. Some similar tests are regrouped. task-4900210 Forward-Port-Of: odoo/odoo#216242
Documentation and clarification updates
The Adhoc corporate CLA record was updated to include additional members. This keeps contribution authorization records current and supports continued compliance for project contributions.
Original PR description
--- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#223312
A Point of Sale automated test now archives existing products instead of deleting them. This prevents failures caused by protected products, improving test reliability without changing customer-facing behavior.
Original PR description
### Before this commit: - The `test_load_pos_demo_data` test case was deleting all products, including special ones like `Gift card`, `default_booking_product`, leading to errors due to constraints on deleting such records. ### After this commit: - The test case now archives existing products instead of deleting them, avoiding these errors. Runbot Errors: 229904 & 229903 Task: 4974081 Forward-Port-Of: odoo/odoo#221317
This update aligns point of sale and restaurant screens with a recent internal change in how options are passed between methods. It helps prevent checkout, receipt, and restaurant workflow issues caused by mismatched method calls.
Original PR description
In a previous commit, some method signatures were changed to use an options object instead of multiple parameters. This commit updates the affected method calls to use the new options object format. Forward-Port-Of: odoo/odoo#222473
This fixes a test setup issue by only using the demo payment provider when its supporting module is installed. It prevents avoidable test failures in limited installation scenarios, improving reliability for release validation without changing customer-facing payment behavior.
Original PR description
Add module installation check before using "demo" as payment provider to generate payment token for payment register test case. Steps to reproduce: 1. Install single module (website_sale). 2. Run test case `TestAccountPaymentRegister.test_register_payment_doesnt_send_email`. You will get ValueError: Invalid field 'demo_simulated_state' on model 'payment.token' build_error-230731 Forward-Port-Of: odoo/odoo#222330
This fixes a small issue where a renamed electronic invoicing field was not correctly refreshed when related data changed. It has minimal day-to-day impact, but prevents potential problems for customers who expose or customize this field through Odoo Studio.
Original PR description
In previous PR [1], we renamed field `ubl_xml_id` to `ubl_cii_xml_id`, but failed the compute dependencies. It has next to no impact since this field it not in views, but could lead to problems if people add it through Studio. [1]: https://github.com/odoo/odoo/pull/115627/files#diff-5f7f5f6e9c54527b31f7579db7ef63b5b910794e462cd3346e32387900c13efdR12 task-none Forward-Port-Of: odoo/odoo#223259
Edited attendance records that were originally created as absences now switch to normal manual attendance status when their check-in or check-out times are corrected. This ensures the attendance list no longer incorrectly keeps those records highlighted as absences, reducing confusion for HR users.
Original PR description
### Steps to reproduce: - Run Absence detection cron - Navigate to the attendances got created in list view - Notice all of them are in red color - Modify the check in and check out dates to correct them as normal attendance - Notice the color didn't change in the view and it is still shows as red ### Cause: This is happening because color of the record is dependant on the check out mode, so if it is technical it means it is absence so we give it red color. https://github.com/odoo/odoo/blob/a7a29ed691db4f1607c0d12929c56845681164fa/addons/hr_attendance/models/hr_attendance.py#L84-L89 Also, the check out mode cannot be changed in any way. ### Fix: When updating the check out and check in time we check if the mode is technical we change it to manual. opw-4865524 Forward-Port-Of: odoo/odoo#218177
This pull request appears to make a small change in Odoo's base module around partner records and related company tests. The description suggests it is mainly a test or investigation of the automated validation process, so business impact is expected to be minimal.
Original PR description
I will update the commit just want to investigate if runbot will work or not --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The employee public and private pages have been aligned so they present information in a more consistent way. This reduces confusion for users who switch between employee record views and helps keep HR screens visually coherent.
Original PR description
The aim of this PR is to make the employee public and private views look similar Task-4778704 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Users no longer see a flickering empty dropdown when selecting related records in forms where creating new records is restricted. The menu now consistently shows a "start typing" prompt, making the interface clearer and less distracting.
Original PR description
Before this commit, the m2x dropdown flickered when the option "create and edit" was disabled and there was no data. Now, we display at least the "start typing" message. task-4920761
This update stops an unnecessary warning from appearing in stock accounting by replacing use of a deprecated method. It keeps the system cleaner for users and reduces noise without changing business workflows.
Original PR description
Before this commit a deprecated method is used and create a useless warning. 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#222148
This fix ensures an HR employee web JSON test can run correctly even when demo data is not installed. It improves reliability of automated checks for HR functionality without changing business features or user workflows.
Original PR description
Before this commit the test `test_webjson_employees` was failing in no demo builds as the json route only works in demo databases or when explicitly set. See https://github.com/odoo/odoo/pull/182196 This commit enables the system parameter, so that the test can be run as intended in no demo databases. Runbot Error: https://runbot.odoo.com/odoo/error/162907 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#205580
Fixed an issue where some images, such as course rank badges, could appear much larger when entering edit mode. Image dimensions are now preserved correctly during editing, helping pages look consistent for editors and visitors.
Original PR description
Problem: On the Courses page, the user rank badge image becomes much larger when entering edit mode. Cause: During HTML sanitization, `img.width` is removed and its value is moved to `img.style.width`. If `img.width` is a number (e.g., `100`), it is interpreted as `100px`. However, when assigned to `img.style.width` without a unit, the style is considered invalid, and the image defaults to its original size. The same applies to `img.height`. Solution: When transferring width or height to style, ensure a unit is added. If the original attribute is a plain number without a unit, default to `px`. Steps to reproduce: - Open Website > Courses - Observe the user rank badge is appropriately sized - Enter edit mode > The badge image becomes much larger than expected opw-4993038 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#221843
WhatsApp template previews no longer mistake underscores inside links or similar text for italic formatting. This keeps generated message previews accurate while still allowing intentional italic text when underscores are used with surrounding spaces.
Original PR description
Steps to reproduce: 1. Go to a WhatsApp template, for e.g. Sale Order. 2. Update the sample value for the Portal Link variable to include an underscore. 3. Click on Preview Issue: Due to the current…
Steps to reproduce: 1. Go to a WhatsApp template, for e.g. Sale Order. 2. Update the sample value for the Portal Link variable to include an underscore. 3. Click on Preview Issue: Due to the current regex, we will apply italic to any underscore we find which is not ideal, mostly when we work with URLs that can contain underscores like "acces_token" which we will try to apply italic to it too. Solution: Following the most common logic for italic formatting, we will only apply italic formatting when the underscore is surrounded by whitespace. This is the same way it already behaves in Whatsapp. If we write it like_this_for example, it will not apply italic formatting, but if we write it like this _this_ it will apply italic formatting. So this for example: **"If we write it like_this_for example"** Will be like - before the fix: **"If we write it like<i>this</i>for example"** Will be like - after the fix: **"If we write it like_this_for example"** opw-4720017 Forward-Port-Of: odoo/enterprise#91217
This fixes an error that could stop WhatsApp marketing automation tests when users ran the same test more than once. The change makes the automation handle each test result separately, improving reliability for teams validating campaigns before launch.
Original PR description
Currently an error occurs when trying to run whatsapp marketing automation test more than once. **Steps to replicate:** * Install `marketing_automation_whatsapp` * Setup whatsapp integration *…
Currently an error occurs when trying to run whatsapp marketing automation test more than once. **Steps to replicate:** * Install `marketing_automation_whatsapp` * Setup whatsapp integration * Marketing Automation > New > Start From Scratch > Add a new activity * Select Activity Type as Whatsapp Message and a Whatsapp Template * Launch a Test > Pick a contact > Launch > Run (Do this step twice) **Error:** `ValueError: Expected singleton: marketing.trace(6, 4, 3, 2, 1)` **Cause:** This error occurs because the variable `trace` contains multiple records, but the `process_event` method is being called on the entire recordset. Since `process_event` uses `self.ensure_one()`, it expects exactly one record, and therefore raises an error at [1] when multiple records are passed. **Solution:** * Handle trace records one by one using a loop. [1]: https://github.com/odoo/enterprise/blob/624b18bdb5dff0df4756c4e1d37a696631e57a05/marketing_automation_whatsapp/models/marketing_trace.py#L20 **Sentry-6772553612** Forward-Port-Of: odoo/enterprise#91207
This fixes an accounting test so it no longer depends on a hard-coded year. The change helps keep automated checks stable as dates change, reducing avoidable build failures and maintenance work.
Original PR description
In `test_matching_rules_with_empty_aml_move_name`, the payment `move_id.name` was hard-coded to use the year "25" in the sequence prefix (e.g. MOVE25/00004). This caused ValidationErrors when the mocked posting date in the test environment belonged to a different year, as the sequence mixin enforces alignment between the move date and sequence year. The test now derives the year suffix dynamically from the actual `move_id.date` to ensure it always matches the posting date used in the test context. This makes the test stable regardless of the current (or mocked) date, removing the need for manual adjustments when fiscal years or test setup dates change. build_error-230659
Odoo now avoids showing a misleading activity log message when validating a batch that includes payments still in process. This helps users trust the payment history by no longer saying a payment was removed from a batch when it actually remains there.
Original PR description
When validating a batch that includes payments in process (e.g., without journal entries), Odoo incorrectly logs that the payment was removed from the batch, even though it remains. This commit fixes the chatter message by not possessing the write method of the account_payment if batch_payment_id not in vals. task-5011672 Forward-Port-Of: odoo/enterprise#92197
Setting a Pricer Sales Pricelist on a product variant no longer triggers an error. This ensures users can configure product pricing reliably, including when working with newly created product records.
Original PR description
Steps to Reproduce: ---------------------------------- - Open the product variant form - Set the Pricer Sales Pricelist field - Traceback Issue: ---------------------------------- - `TypeError: ProductPricelist._compute_price_rule() takes 3 positional arguments but 4 were given` Cause: ---------------------------------- - `_get_product_price()` was calling `_compute_price_rule()` with positional args instead of named quantity - If the product record is not yet created (`product._origin` is False), it skips price computation logic Fix: ---------------------------------- - Pass `quantity=1.0` explicitly to `_compute_price_rule()` to resolve the argument mismatch - Handle case where `product._origin` is False by falling back to `product` itself Task-4888983
The AI field selector now avoids showing unnecessary warnings for valid boolean values and hides separators when inserting properties into prompts. This makes the AI prompt setup experience clearer and less confusing for users.
Original PR description
Bug === The `False` value is a valid value for boolean type, and the warning should not be displayed for that type. When inserting properties in an AI prompt, the property separator should not be visible. Task-4896271
This update corrects internal calls in Point of Sale restaurant and Urban Piper flows after a recent technical change. It helps keep related tests and order preparation behavior working reliably without changing day-to-day user workflows.
Original PR description
In a previous commit, some method signatures were changed to use an options object instead of multiple parameters. This commit updates the affected method calls to use the new options object format. Forward-Port-Of: odoo/enterprise#92091
Gantt popover cards now show standard labels such as Name, Start, and Stop in the user's selected language instead of always displaying English. This improves the experience for multilingual users and teams working with custom Studio menus and Gantt views.
Original PR description
**NOTE:** This is extremely similar to the [request](https://github.com/odoo/enterprise/pull/90605) that was created for saas-18.2. However with the changes in [2] , from saas-18.3 and on, template…
**NOTE:** This is extremely similar to the [request](https://github.com/odoo/enterprise/pull/90605) that was created for saas-18.2. However with the changes in [2] , from saas-18.3 and on, template strings can be directly extracted with ``_t`` , and so this PR is meant to provide a more forward-port friendly version for future roll outs. Steps to Reproduce: - Change the language to something other than English. - Create a new menu in the Appointment module using Studio. - Link that menu with the existing model (Resource Time of Detail). - Save the changes and add the Gantt view - Save the changes and close Studio. - View this new menu in the Gantt view Issue: - When clicking onto the kanban popover card for any record, the labels will remain as "Name" , "Start" , and "Stop" in English, and it will not translate. Reason: - [1] changed the rendering of default kanban card templates from XML to JS. This changed the default template to be static. Fix: - Add a call to the translation core tool "_t" on the three labels upon their generation in _getKanbanViewParams(). This ensures that the arch template that is generated is translated correctly into the user's set language. - Additionally, add these terms into the .pot file for web_gantt. This ensures that the proper translations are stored for transifex and the relevant translation team and that the call to _t will have a translation to reference in it's call. [1] : https://github.com/odoo-dev/enterprise/commit/23e53dab70fe3f1d418a12f7ac040acacf9e1ead [2] : https://github.com/odoo/odoo/commit/079c3b0f6078377335837defa08077b0d7d3489f opw-4861899
This fixes an issue in Odoo Studio where adding a column to a customized report table could create unwanted spacing inside the new cells. The change helps keep report tables aligned and visually consistent after editing.
Original PR description
Before this commit when adding a column into a modified qweb table (q-table node) we inserte a `p` as the cell's first child. This was problematic as a margin was always present, messing with the whole table alignment. After this commit, we put a simple DIV. task-5005441 Forward-Port-Of: odoo/enterprise#92085
The employee appraisal screens have been adjusted so public and private employee views look consistent. This reduces confusion for users who work across both views and creates a more uniform HR experience.
Original PR description
The aim of this PR is to make the employee public and private views look similar task-4778704
When an applicant is converted into an employee through the salary configurator, their recorded skills are now carried over correctly. This prevents recruiters and HR teams from losing important candidate information during onboarding.
Original PR description
Originally, an applicant, who became an employee through the salary configurator flow, loses his skill info. So, the migration of applicant information, through the salary configurator flow, to employee view has been adjusted. Forward-Port-Of: odoo/enterprise#87076
This update records that Luca Policastro has signed the Odoo Contributor License Agreement for Camptocamp. It supports legal compliance for contributions and does not change product functionality or user workflows.
Original PR description
This pull request adds my Contributor License Agreement (CLA) as required by the Odoo contribution guidelines for Camptocamp company. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#222968 Forward-Port-Of: odoo/odoo#222429