Tuesday, August 19, 2025
59 changes
12 changes
Resolved issues and error corrections
The HTML editor now clears multiple text styles, such as font size, color, and bold, with a single click of the remove formatting button. This avoids repeated user actions and makes content cleanup more predictable.
Original PR description
**Current behaviour before PR:** Steps to reproduce: - Select a text - Apply font size - Apply color - Apply bold - Clicking on removeFormat button doesn't remove all formats User has to click on removeFormat button twice to remove the format. **Desired behaviour after PR is merged:** Now, all formats are getting removed at once when clicking on removeFormat button. task-4911199 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#222512 Forward-Port-Of: odoo/odoo#218093
Expenses created with the default placeholder name can now be renamed automatically by OCR when receipt details are read. This helps employees and accountants get clearer expense records without manual corrections.
Original PR description
Introduces the function `_get_untitled_expense_name` that will be used by the OCR to check whether the expense still has its default name, in which case it can be overwritten. task-[4684825](https://www.odoo.com/odoo/project/967/tasks/4684825) Forward-Port-Of: odoo/odoo#223037
Users can now upload an empty text file while attaching a bill to a purchase order without triggering an error. This prevents a small edge-case upload issue from interrupting the bill attachment workflow.
Original PR description
Currently, an error occurs when a user uploads an empty text file while attaching a bill in a purchase order. **Steps to reproduce**: - Install the `purchase` module. - In the purchase order(form),…
Currently, an error occurs when a user uploads an empty text file while attaching a bill in a purchase order. **Steps to reproduce**: - Install the `purchase` module. - In the purchase order(form), click **Upload Bill** button. - Upload an empty text file. (e.g; [sample here](https://drive.google.com/file/d/1z35T2NY03YVJJPaEL-WjlV8pjvqVCyBW/view?usp=sharing)) - Observe the error. **Errors:** - If the **'python-magic'** library is installed: `TypeError - 'bool' object is not subscriptable` - If not installed: `AttributeError: 'bool' object has no attribute 'startswith'` The issue occurs when the uploaded attachment is empty, `attachment.raw = False` at [1]. This is then passed to `guess_mimetype`, which expects binary data, resulting in an error. [1] - https://github.com/odoo/odoo/blob/3e24ff8d3c36b4b924077933ef78a8289a435ee3/addons/account/models/ir_attachment.py#L120 This commit ensures `guess_mimetype` always receives binary input when the file is empty. Sentry - 6654301906, 6749801114 Forward-Port-Of: odoo/odoo#212939
The eCommerce product filter panel now behaves more consistently when shoppers select an attribute. Selected filter sections remain expanded instead of unexpectedly collapsing, making product browsing smoother and less confusing.
Original PR description
Versions -------- - saas-18.3+ Steps ----- 1. Have 5 or more product attributes visible in eCommerce; 2. go to /shop; 3. select an attribute. Issue ----- The list we just selected an attribute value from collapsed. Cause ----- While some parts allow accordions to auto-expand if 4 or less attributes are visible, or if an attribute is selected, other parts only look at the number of visible attributes. Solution -------- In parts where it only checks whether more than 4 attributes are visible, also add a check on `_status` to improve consistency. opw-4986032 Forward-Port-Of: odoo/odoo#222342
This update stops an unnecessary warning from appearing in stock accounting by replacing use of an outdated internal method. It reduces noise for users and administrators without changing business workflows or stock valuation behavior.
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 test can run correctly even when demo data is not installed. It adjusts the test setup so automated checks are more reliable across build configurations, reducing false failures in validation pipelines.
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
This fixes 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 remain visually consistent for users.
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
This fix prevents unwanted spacing when users add columns to customized report tables in Studio. New table cells now use a neutral container, helping reports keep consistent alignment and formatting.
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
Applicants hired through the salary configurator now keep their recorded skills when they become employees. This prevents loss of important HR information and helps employee profiles remain complete after hiring.
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 fix ensures existing Indian GST records get the correct return period when GSTR-2B data is fetched. It helps keep tax reporting periods consistent and avoids outdated period information in GST reports.
Original PR description
Following up on this commit: https://github.com/odoo/enterprise/commit/eda621c07393ad8e897503c852a9b00480affc52 The recompute was already handled while sending GSTR-1 data, but the part for fetching GSTR-2B was missed in that commit. With this PR, we ensure that the `return_period_month_year` is recomputed as well when fetching GSTR-2B for existing records. Forward-Port-Of: odoo/enterprise#92503
This fixes an error that occurred when users opened Swiss payroll wage type forms. Restoring the activity and message panel support keeps the form working as expected and preserves behavior from earlier versions.
Original PR description
To reproduce: ============= 1- Install Swiss payroll 2- go to payroll configurations 3- wage types 4- open the form view of one wage type Problem: ======== The hr_salary_rule no longer inherits mail.thread due to this PR : https://github.com/odoo/enterprise/pull/83136 So we cannot load the chatter and a traceback will happen Fix: ===== inherit mail.thread in hr_salary rule so the chatter can work properly There's another solution to do which is removing the chatter from the view But the chatter exists in the previous versions and we try to make it work in 18.4 opw-5015226
A leftover, unnecessary parameter was removed from the Belgian point-of-sale certification code. This is a small cleanup that reduces confusion for maintainers and helps keep the POS code reliable without changing user-facing behavior.
Original PR description
An unnecessary parameter has been added and mistakenly not removed. This commit removes it.
23 changes
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
9 changes
Resolved issues and error corrections
A payroll-related test was moved to the correct accounting test area so payroll can be tested independently. This helps prevent test failures when only the Belgian payroll app is checked, improving release reliability without changing user features.
Original PR description
Previously a test created on l10n_be_hr_payroll depended on account module, which broke single app tests. This commit moves the test from l10n_be_hr_payroll to test_l10n_be_hr_payroll_account [Old PR](https://github.com/odoo/enterprise/pull/89149) Task: 4942293 Forward-Port-Of: odoo/enterprise#90144
15 changes
Resolved issues and error corrections
This update corrects how Odoo tracks changes to an electronic invoice identifier after a previous field rename. It has minimal day-to-day impact, but helps avoid issues for customers who customize screens or workflows to use this field.
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
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
Payroll users can now filter employees by name when creating a new pay run. This fixes a broken search filter, making it easier to find the right employees and reducing manual effort during payroll preparation.
Original PR description
Originally, when creating a new payrun, if you filter by employee name, the filter doesn't work. The filter logic has been adjusted to search for the correct field. Forward-Port-Of: odoo/enterprise#89877
Swiss payroll-specific employee fields are now only shown for Swiss companies. This avoids confusion in multi-company setups where users work with companies from other countries.
Original PR description
When using odoo in multi company with Swiss installed, we can see the fields from any other company. They should be hidden if the country is not Swiss. Task: 4788657 Forward-Port-Of: odoo/enterprise#89893
The Belgian payroll salary configurator now calculates the laptop benefit in kind consistently with other benefits such as internet and mobile phone. This helps ensure employee salary offers and payroll-related values show the correct laptop benefit amount.
Original PR description
The benefit in kind laptop salary rule was not adapted for the salary configurator. This commit fixes the issue by always returning the correct laptop value if the salary rule is used in a salary configurator, like it is already the case for the internet and mobile benefits. task-4971722 Forward-Port-Of: odoo/enterprise#92520 Forward-Port-Of: odoo/enterprise#91201
Adding a column to a customized report table now uses a layout element that does not add unwanted spacing. This prevents table alignment issues and helps edited reports keep a cleaner, more consistent appearance.
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
Odoo now avoids showing an incorrect activity note that a payment was removed from a batch when it actually remains there. This keeps payment batch records clearer and helps users trust the history shown during batch validation.
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
The VoIP softphone now shows the correct place to configure the PBX server when setup is incomplete or incorrect. This helps users resolve connection issues faster by pointing them to the right settings area.
Original PR description
Previously, the error message shown to fix setting in general setting. After this commit, the error message shows the correct location of the PBX server. task-5022401
Fixes an issue where running the same WhatsApp marketing automation test more than once could cause an error. This helps users validate campaigns repeatedly without interruptions before launching them.
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
WhatsApp template previews now avoid treating underscores inside URLs or similar text as italic formatting. This prevents portal links and access tokens from being displayed incorrectly, while still allowing intended italic formatting when underscores are separated by 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 update corrects invalid formatting in delivery reports that could cause problems when editing or generating reports. It helps ensure delivery documents display reliably and avoids issues in the report editor.
Original PR description
because of odoo/odoo#169512, there was some illegal html generated in the delivery report. Indeed a <div> in a <p> is not supported. This created issues in the reportEditor, and possibly elsewhere 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
This fixes an intermittent issue in point-of-sale loyalty testing by ensuring the customer appears consistently at the top of the selection list. The change helps keep automated checks stable so loyalty features can be validated more reliably before release.
Original PR description
This commit make sure that the partner is always at the top of the list runbot-230704
Purchase orders now recalculate the company total when the order currency is changed. This prevents outdated totals from being shown after currency changes, improving accuracy for purchasing and reporting.
Original PR description
**Steps to reproduce:** 1. Create a Purchase Order (PO) with a non-company currency (e.g., EUR if the main currency is USD). 2. Add at least one order line so the "Amount Total" is greater than zero. 3. Change the currency of the PO to a different one and save the record. **Expected behavior:** The `Company Total` field is recomputed using the new currency's exchange rate. **Actual behavior:** The `Company Total` remains unchanged, still showing the value in the original currency. **Fix:** Add `currency_id` to the `@api.depends` decorator of the `_amount_all` compute method. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Updating a parent or child contact no longer raises an unnecessary error when one VAT number is blank and the other is empty. This prevents avoidable disruption while still protecting accounting consistency for existing journal items.
Original PR description
An error exists if we update the parent partner and the the VAT number does not match with the child partner to prenvent inconsistencies between journal item created before the change. This error is also triggered when one partner vat is '' and the other is False. This commit aims to fix that. opw-4915851
Dutch Peppol invoice XML files now use the correct identifier scheme when the company ID is a 20-character OIN number. This helps ensure NLCIUS e-invoices are accepted and interpreted correctly by recipients and Peppol systems.
Original PR description
## Short functional explanation of the error For Dutch companies, when downloading the NLCIUS file of an invoice, the schemeID of the companyID in the XML isn't correct. ## Reproduction Steps 1. Make…
## Short functional explanation of the error For Dutch companies, when downloading the NLCIUS file of an invoice, the schemeID of the companyID in the XML isn't correct. ## Reproduction Steps 1. Make sure you use a dutch company: in apps, download the 'l10n_nl' and 'account_edi_ubl_cii' modules. Then, click on your company and select the NL Company. 2. Go to settings and type Peppol. Under Customer Invoices, check the Peppo format. Then, setup a Peppol Endpoint. Hit save. 3. Go to the Accounting app and click on the customers tab, then invoices. Click on new. 4. Select a customer. Make sure that the customer is from the Netherlands, has an email address, and in the accounting tab, an account number. Still in the accounting tab, under Electronic Invoicing, set the format at NLCIUS, set a Peppol e-address and a Peppol Endpoint that is 20 characters long. 5. Add a product, click confirm then Send & Print. Make sure that NLCIUS is well checked and click again Send & Print. 6. In the bottom right corner of the page, just under the Amount Due, there's a paper clip icon. Click on it and you'll see the XML. Download it. ### Expected behavior As the CompanyID is 20 characters long, the schemeID next to the CompanyID should have the value of 0190. ### Unexpected behavior If you scroll a bit, you'll see that the SchemeID next to the CompanyID has a number of 0106. ## Origin of the issue In the code, the SchemeID will have a value of 0190 if the CompanyID is 9 characters long. __ opw-4943262 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#219424
The Australian localization now treats the GST Only on Imports tax as fully included for customs calculations again. This restores the intended tax setup so import-related accounting reports and transactions calculate GST correctly.
Original PR description
It was price_include before and got removed with the changes from https://github.com/odoo/odoo/commit/be308e106ce9699f99efe133976c40519d6128f9 Re-add them 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
## Versions 18.0+ ## Issue The icon's class is changed from `fa fa-bell` to `fa fa-bell me-2` when rendering making the translation unable to find the spot ## Steps to reproduce - Ensure at least 2 languages (with at least one different from English) are set for the website; - Go to a published product without variants (e.g. "Office Chair"): - Ensure the "Track Inventory" checkbox is checked under "General Information" tab; - Set its stock quantity to 0 or less; - Under the "S
Original PR description
## Versions
18.0+
## Issue
The icon's class is changed from `fa fa-bell` to `fa fa-bell me-2` when rendering making the translation unable to find the spot
## Steps to reproduce
- Ensure at least 2 languages (with at least one different from English) are set for the website;
- Go to a published product without variants (e.g. "Office Chair"):
- Ensure the "Track Inventory" checkbox is checked under "General Information" tab;
- Set its stock quantity to 0 or less;
- Under the "Sales" tab, ensure the "Out-of-Stock" checkbox ("Continue Selling") is unchecked;
- Click the "Go to website" smart button;
- Change the website's language for the non-English one;
- As out of stock, as to get notified when the product is back in stock:
- Submit the email address.
opw-4955314Event reminder emails now follow the language selected by the website visitor during registration. This keeps reminder messages consistent with confirmation emails and avoids sending English reminders to attendees using another installed language.
Original PR description
How to reproduce this bug: 1- Create a db with only one language installed e.g. fr_FR and event app installed 2- Create an event and publish it on the website 3- Register for the event using public user 4- The confirmation email is in fr_FR but the reminders are in English This is caused because partner_id.lang is empty as a public user. The correct way to fetch the visitor lang is by `visitor_id.lang.id`. opw-4794184
This fix makes tests consistently verify that files show an uploading state when they are added in messaging, knowledge, helpdesk, spreadsheet comments, and WhatsApp-related areas. It helps prevent regressions where users might not get clear feedback while attachments are being uploaded.
Original PR description
\* = knowledge, test_mail_enterprise, test_spreadsheet_edition, website_helpdesk_knowledge, whatsapp Enterprise counter-part. https://runbot.odoo.com/odoo/error/230901 https://github.com/odoo/odoo/pull/223367
Fixes product searches by Kenya KRA item code so users no longer hit errors or blank results when using the product search filter. This helps Kenyan companies find products more reliably in sales workflows.
Original PR description
This commit odoo/enterprise@c17ebfc7cdf2b218945280e6e3bd09f2b9ee8adc added a [searchview](https://github.com/odoo/enterprise/blob/17.0/l10n_ke_edi_oscu/views/product_views.xml#L74-L84) for `l10n_ke_item_code` but it never worked. as `l10n_ke_item_code` in `product.template` is non-stored field, we generally get error in console about it. fast forward to newer version e.g. saas-18.3, searching on non-stored fields raises traceback on frontend. Step to reproduce: - install L10N_ke and sale_management - switch to kenya company - go to product in sales app - type something in search bar and select 'kra item code' from autocomplete Observation: - nothing happens on frontend - on backend we receive a error `ERROR odoo.osv.expression: Non-stored field product.template.l10n_ke_item_code cannot be searched.` Fix: - we introduce a search method for l10n_ke_item_code field opw-4985176 Forward-Port-Of: odoo/enterprise#91526
Odoo Studio now handles cases where a button points to a deleted server action without crashing. This keeps users able to reopen and edit forms in Studio even after the related action has been removed.
Original PR description
The error is triggered when a user configures a button to execute a serveraction, deletes the associated server action, and then attempts to edit the button. This causes a failure at the line `self.env.ref(str_action)` due to the missing external ID. **Steps to reproduce:** * Install `crm` and `web_studio` * crm > Form View> Studio > `Add a button`> Run a server Action > Enrich * Settings > Technical > Actions > Server Actions > `Enrich` > Delete it * crm > Form View > Studio `ValueError: External ID not found in the system: crm_iap_enrich.action_enrich_mail` **Solution:** * Return `False` when the referenced server action cannot be found or has been removed. **Sentry-6608495874**
This fix prevents financial report spreadsheet exports from failing when an account code looks like an extremely large number, such as "1E1000". Users can now export Trial Balance and related accounting reports reliably even when account identifiers contain these values.
Original PR description
_set_xlsx_cell_sizes tries to convert each cell into a float if it's possible. If the cell contains "inf", "1e1000" (or any value such that float(value) = float("inf")), then there is an OverflowError which is not catch by the try/except.
To reproduce, set an account code as "1E1000", make this account appearing in the trial balance (by creating a move) and export it as XLSX.
opw-4981385This update fixes how the Indian GST reports determine the month and year for a return period. It helps ensure GST reporting periods are computed consistently, reducing the risk of incorrect report timing or filing data.
Original PR description
Backport of commit: https://github.com/odoo/enterprise/commit/eda621c07393ad8e897503c852a9b00480affc52 Forward-Port-Of: odoo/enterprise#92499
Opening the Journal Audit report no longer fails if the related Journal Report has had all of its lines removed. The system now safely stops processing when there are no lines, preventing an error and improving reliability for accounting users.
Original PR description
Currently, error occurs when user try to open Journal Audit with no lines. Steps to replicate: - Install `accountant`. - Navigate to `Accountant > Configuration > Accounting reports`, search for `Journal Report` and open it. - Under the Lines tab, delete all the records and save. - Open the `Journal Audit` report, and the error will appear. Error: `IndexError: list index out of range` Cause: - An error occurred because the user deleted all the lines from the report, and the code tried to access the first element [1] of those lines (`lines[0]`) which caused the error. Solution: - Added a check if lines are present, if not then returned from the function. [1]: https://github.com/odoo/enterprise/blob/5670a73ef63d313f6c3df2b1ceeec7f7d6cd6a1b/account_reports/models/account_journal_report.py#L167 sentry-6795898305