Wednesday, April 30, 2025
16 changes · 17.0
Resolved issues and error corrections
Swiss QR bill printouts now use the creditor bank account address, ZIP code, and city when available, matching the information encoded in the QR code. This prevents mismatched payment details and reduces confusion for customers and finance teams.
Original PR description
Description of the issue/feature this PR addresses: Wrong address/zip/city in Swiss QR bill template. Current behavior before PR: The template for Swiss QR bills uses the company address, zip code and city. Desired behavior after PR is merged: The template for Swiss QR bills uses the address/zip/city of the creditor's bank account, if available. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Odoo now handles missing asset path matches safely when users add custom asset paths. Instead of failing with an error when opening a POS session, the system logs a warning so the issue can be reviewed without interrupting use.
Original PR description
This error occurs when a user adds a custom path to assets. Steps to Reproduce : 1. Install moudule POS. 2. Activate the developer mode (with tests assets) 3. Go to Settings > Techncial > Database Structer > Assets 4. Create a new asset. Set the path as `custom_pos_receipt/static/src/**/*`, Bundle name as `point_of_sale._assets_pos`. 5. Open POS Session. `TypeError: 'NoneType' object is not iterable` This error happens when the system tries to append paths and encounters a `None` value for the `paths` variable. This commit resolves the error by ensuring that a logger warning is raised when paths is not found. Sentry: 6499122709
Manufacturing users will now see a clear warning if an expected work order duration is too large to process. This prevents a confusing system error when marking work orders as done and helps users correct the entered duration.
Original PR description
Currently, an exception is raised when a user enters an excessively long Expected Duration for a work order. Steps to Reproduce: 1. Install `mrp_workorder` module 2. Create MO with product(eg: Screw)…
Currently, an exception is raised when a user enters an excessively long Expected Duration for a work order. Steps to Reproduce: 1. Install `mrp_workorder` module 2. Create MO with product(eg: Screw) 3. Now add a line in Work Orders and set Expected Duration(2122105303.16) 4. Go to Operations -> Work Orders -> Open Work Order of Created MO 5. Click Action -> Mark as Done. 6. An error occurs Error: ```ValueError year -2010 is out of range ``` This issue [1] occurs when the Expected Duration is too large, causing the computed timestamp to result in a negative year, which is outside the valid range for datetime calculations. [1]- https://github.com/odoo/enterprise/blob/ed956dd63e041ada964a60a7669df57811aab6d7/mrp_workorder/models/mrp_workorder.py#L847 This fix resolves the issue by raising a `UserError` when the Expected Duration is too long. Related Enterprise PR:- https://github.com/odoo/enterprise/pull/82041 sentry-6450643998 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The blog page now handles invalid blog parameters gracefully instead of showing an error. Visitors who use malformed blog links will receive a proper not found response, improving site stability and user experience.
Original PR description
Currently, an exception is raised when a user accesses the blog page with an invalid blog parameter. Steps to Reproduce: 1. Go to the blog page using a URL with a query parameter: ``` http://localhost:8069/blog?blog=1 ``` 2. The page fails to load, and an error occurs. Error: `AttributeError 'str' object has no attribute 'id' ` The issue [1] occurs when the blog value is passed as string instead of an Odoo model instance, causing an error when trying to access blog.id. [1] - https://github.com/odoo/odoo/blob/2ad5a0d0229c774ba45e5d8e7ad325c9131b2895/addons/website_blog/controllers/main.py#L78 This fix ensures that if blog has a value, the system first checks whether it is an instance of models.Model. If it is not, it raises a NotFound() error. sentry - 6378662116 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Users without Inventory permissions can now duplicate products without hitting an access error related to repair settings. This keeps product duplication consistent with normal product creation and avoids unnecessary disruption for users with limited access rights.
Original PR description
Steps to reproduce the bug: - install Inventory app - remove any access rights from the logged in user to the inventory app - copy any product Traceback is thrown that the user doesn't have any access on the field create_repair on the product.template model. The user still can create a product normally, but he can't copy it anymore. The field has group scope to stock.group_stock_user so the user can't set the field on creating a product, but with default copy=True on the field, the copy operation fails. opw-4563733 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
Accounting reports no longer show an error when users return from the report configuration screen using the breadcrumb in debug mode. This keeps report navigation stable and avoids interruptions for users reviewing financial reports.
Original PR description
Steps: - Go to any accounting report, ie. balance sheet - Activate debug mode - Click on the configuration button on top of the report - Go back to the report via the breadcrumb -> Traceback, props validation's failing This happens because we use action service to navigate through the breadcrumb, so we need to use the `standardActionServiceProps` opw-4701182
When an invoice is created for an individual contact linked to another company, the matching intercompany bill now receives the generated PDF attachment. This keeps invoice and bill records aligned across synced companies and avoids missing documents in the receiving company.
Original PR description
- Turn on Inter-company transactions. Select to sync invoices and bills in two companies. - Create an invoice in company A for an individual contact belonging to company B, then send and print the invoice. - In the corresponding bill in Company B, the draft bill is created without any attachment_ids. In the method _process_send_and_print from account_inter_company_rule the moves_with_attachements does not check if a partner belong to a synced company. opw-4675654
Resource images on appointment pages now keep their intended size when descriptions are long. This improves readability and gives customers a cleaner booking experience by preventing logos or avatars from appearing squeezed.
Original PR description
Issue: Congested Images when using resources in an appointment with more text as a description. Steps to reproduce: 1. Install appointment 2. Appointment > edit > Resources(with long description) 3. Go to appointment page(review) > Congested Logo Solution: Added flex-shrink-0 with .o_appointment_user_avatar class to prevent the avatar from shrinking in flex layouts. Updated the template to: Add margin to the avatar container for proper spacing. Removed align-items-center to allow the content to align naturally from the top. opw-4668023
This change prevents an error when creating or editing an asset without assigning a company. The asset now uses the default company currency when no company is set, allowing users to continue their accounting workflow without interruption.
Original PR description
Currently, an exception is raised when a user tries to create an asset without a company. Steps to Reproduce: 1. Install 'account_asset` module. 2. Create new Company. 3. Go to Accounting -> Configuration -> Asset Models 4. Create new Asset models 5. Go to Accounting -> Accounting -> Assets 6. Create new Assets without company and select Assets Model 7. An Error Occurs Error: ```AssertionError precision_rounding must be positive, got 0.0 ``` The issue [1] occurs because when a company is not provided, the currency is not set, causing the rounding precision to be 0. This results in an error since the rounding precision must be a positive value. [1]- https://github.com/odoo/odoo/blob/ba252c9accca1c586a41b3bf6c077de650e0bb9d/odoo/tools/float_utils.py#L29-L30 This fix resolves the issue by ensuring that if a company is not assigned to an asset, the currency will be taken from the company's default currency. sentry-6435763207
This update prevents manufacturing work orders from failing with a confusing system error when an unrealistically long expected duration is entered. Users will now see a clear validation message instead, helping them correct the value and continue their workflow.
Original PR description
Currently, an exception is raised when a user enters an excessively long Expected Duration for a work order. Steps to Reproduce: 1. Install `mrp_workorder` module 2. Create MO with product(eg: Screw) 3. Now add a line in Work Orders and set Expected Duration(2122105303.16) 4. Go to Operations -> Work Orders -> Open Work Order of Created MO 5. Click Action -> Mark as Done. 6. An error occurs Error: ```ValueError year -2010 is out of range ``` This issue [1] occurs when the Expected Duration is too large, causing the computed timestamp to result in a negative year, which is outside the valid range for datetime calculations. [1]- https://github.com/odoo/enterprise/blob/ed956dd63e041ada964a60a7669df57811aab6d7/mrp_workorder/models/mrp_workorder.py#L847 This fix resolves the issue by raising a `UserError` when the Expected Duration is too long. Related Community PR:- https://github.com/odoo/odoo/pull/203207 sentry-6450643998
This fix prevents an error when a user deletes an approval rule in Web Studio and later marks a related activity as done in the Chatter. It keeps the workflow running smoothly by safely handling approval requests linked to rules that no longer exist.
Original PR description
This error occurs when a user deletes an approval rule in Web Studio and then attempts to mark an activity as done in the Chatter. Step to reproduce : - Install modules Sales and Web Studio. - Log in…
This error occurs when a user deletes an approval rule in Web Studio and then attempts to mark an activity as done in the Chatter. Step to reproduce : - Install modules Sales and Web Studio. - Log in as an `Admin`. - Open `any sales orders` and `Web Studio`. - Select the `Preview button` and configure `Approval Rules`. - Set `Allowed Groups` to `Administration / Access Rights`. - Assign the `Responsible user` as an `administrator` (e.g., Mitchell Admin). - Log in as a `Demo User`, open a `Sales Order`, and click on `Preview`. -`Delete` the `Approval Rule` for Preview using `Web Studio`. - In `Chatter`, click on `Mark Done` under `Planned Activities`, then confirm by clicking `Done`. Syntax Error: SELECT id FROM studio_approval_rule WHERE id IN () FOR UPDATE This error occurs when the system attempts to execute an SQL query with an empty `IN ()` clause, causing a `SyntaxError. This commit fixes the issue by searching whether rule_id is active or not on approval_requests. Sentry - 6306636466
Users without Sales app access can now copy products without encountering an error related to subscription pricing rules. This keeps product management consistent: if a user is allowed to create a product, they can also duplicate it when subscription pricing is not available to them.
Original PR description
Steps to reproduce the bug: - install sales - install subscription - remove any access right to sale from the logged in user - copy a product Traceback is thrown because the product_subscription_pricings have a problem in the access rules as they require sales app access. The user with no sales app can still create a product but not copy it. This is a bug because the user when creating can't set the pricings, so he can create without them but even without them being set he can't copy. opw-4563733
Miscellaneous changes
odoo/odoo#203874 broke compatibility with Python 3.8 and Python 3.9 due to the typing annotations, leading `test_pylint` to fail on Focal and Bullseye: - `list[int]` requires Python 3.9 (PEP 585) - type-wise `a | b` requires Python 3.10 (PEP 604) Making annotations lazy works around the issue (and changes less stuff than removing the annotations). Forward-Port-Of: odoo/odoo#208110
Original PR description
odoo/odoo#203874 broke compatibility with Python 3.8 and Python 3.9 due to the typing annotations, leading `test_pylint` to fail on Focal and Bullseye: - `list[int]` requires Python 3.9 (PEP 585) - type-wise `a | b` requires Python 3.10 (PEP 604) Making annotations lazy works around the issue (and changes less stuff than removing the annotations). Forward-Port-Of: odoo/odoo#208110
The base test class `TestSaleCouponCommon` does not allow to pass a specific CoA in the setup, which its parent class allows. In order to simplify extending that test class for custom addons, add the argument to `setupClass` and propagate it to the parent test case. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#207909
Original PR description
The base test class `TestSaleCouponCommon` does not allow to pass a specific CoA in the setup, which its parent class allows. In order to simplify extending that test class for custom addons, add the argument to `setupClass` and propagate it to the parent test case. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#207909
Forward-Port-Of: odoo/odoo#208076
Original PR description
Forward-Port-Of: odoo/odoo#208076
When checking out `saas-18.3`, IoT Box images until `25.01` are missing `iot_base`, resulting in odoo not being able to start. Forward-Port-Of: odoo/odoo#207947
Original PR description
When checking out `saas-18.3`, IoT Box images until `25.01` are missing `iot_base`, resulting in odoo not being able to start. Forward-Port-Of: odoo/odoo#207947