Monday, April 14, 2025
22 changes · saas-18.2
Resolved issues and error corrections
The restaurant floor editor now shows its background grid clearly when creating additional floors with the default grey background. This makes it easier for users to arrange tables accurately while editing a restaurant plan.
Original PR description
Steps to produce : ==== - Install pos_restaurant - Create a new POS restaurant. - Click on Edit Plan from the sidebar. - Create the first floor, the background grid is visible. - Create second floor. Issue : ==== - Due to default grey color,the background grid is no longer visible. Fix : ==== - The floor-grid css was not applied properly, opacity and little darker solves the issue as floor has default grey backgorund color. task-4619115
Miscellaneous changes
Improve references computation, notably when message history consists mainly in note-like messages (tracking with subtypes, ...). After odoo/odoo#197127 threads are split in email readers are references are missing. Task-4677717 Forward-Port-Of: odoo/odoo#205609 Forward-Port-Of: odoo/odoo#203739
Original PR description
Improve references computation, notably when message history consists mainly in note-like messages (tracking with subtypes, ...). After odoo/odoo#197127 threads are split in email readers are references are missing. Task-4677717 Forward-Port-Of: odoo/odoo#205609 Forward-Port-Of: odoo/odoo#203739
PoS user can't open the product information on the product screen of a PoS session. This is because it will lead to the compute of the quantities. Doing so, we will first go in the override of mrp, in case the product is a kit. This will query the BoM model. However, a PoS user hasn't any access to the module. The fix follows the same logic as - account: https://github.com/odoo/odoo/commit/fe6b351e04b7aa7d311cc07362d82f9843dde862 - purchase: https://github.com/odoo/odoo/commit/e9d809
Original PR description
PoS user can't open the product information on the product screen of a PoS session. This is because it will lead to the compute of the quantities. Doing so, we will first go in the override of mrp, in case the product is a kit. This will query the BoM model. However, a PoS user hasn't any access to the module. The fix follows the same logic as - account: https://github.com/odoo/odoo/commit/fe6b351e04b7aa7d311cc07362d82f9843dde862 - purchase: https://github.com/odoo/odoo/commit/e9d80990e0f907be7799c6449afd6cd19502d604 - sale: at least since https://github.com/odoo/odoo/commit/43977deb713ef8df02690d9000f9becff8d9d610 This commit also reverts: https://github.com/odoo/odoo/commit/98428145c4917bfcf8436569ab7560524d957880 Which is actually the reason why this commit is written: we should not have to give those rights to a PoS user Forward-Port-Of: odoo/odoo#205753 Forward-Port-Of: odoo/odoo#204512
Versions -------- - 18.0+ Steps ----- 1. Open a quotation template; 2. open the Quote Builder tab; 3. click "Download examples". Issue ----- 404 not found Cause ----- For product: - When commit 3e58523 updated the versions of documentation links from 17.0 to 18.0, it overlooked changing the hash part of the url for `pdfquotebuilderexamples.zip`. For sale_pdf_quote_builder: - The version in the url gets added by the `documentation_link` widget, but it doesn't update the ha
Original PR description
Versions -------- - 18.0+ Steps ----- 1. Open a quotation template; 2. open the Quote Builder tab; 3. click "Download examples". Issue ----- 404 not found Cause ----- For product: - When commit 3e58523 updated the versions of documentation links from 17.0 to 18.0, it overlooked changing the hash part of the url for `pdfquotebuilderexamples.zip`. For sale_pdf_quote_builder: - The version in the url gets added by the `documentation_link` widget, but it doesn't update the hash part of the download link. Solution -------- Change it so it links to https://www.odoo.com/documentation/18.0/_downloads/c2c6ce32294dfddffcfefcf2775f7a09/pdfquotebuilderexamples.zip opw-4680248 Forward-Port-Of: odoo/odoo#205433
When adding the new snippets, some of them containing forms were not properly sanitized (i.e. they do not have the `t-forbid-sanitize="form"` attribute), meaning that they can be dropped in sanitized areas where forms should normally be excluded. This commit adds this attribute on them. Related to task-4138795 Related to task-4143414 Related to task-4138250 Forward-Port-Of: odoo/odoo#205741
Original PR description
When adding the new snippets, some of them containing forms were not properly sanitized (i.e. they do not have the `t-forbid-sanitize="form"` attribute), meaning that they can be dropped in sanitized areas where forms should normally be excluded. This commit adds this attribute on them. Related to task-4138795 Related to task-4143414 Related to task-4138250 Forward-Port-Of: odoo/odoo#205741
Versions -------- - 16.0+ Steps ----- 1. Install `website_sale_loyalty` with default configuration; 2. add a payment provider; 3. as a public user, buy a gift card via eCommerce. Issue ----- No email is sent with the gift card's code to the provided email address. Cause ----- The email template doesn't have an `email_from` field added. Without this value, it falls back on the current user, but because we're Public User, this also doesn't have an `email` value. Additionally,
Original PR description
Versions -------- - 16.0+ Steps ----- 1. Install `website_sale_loyalty` with default configuration; 2. add a payment provider; 3. as a public user, buy a gift card via eCommerce. Issue ----- No email…
Versions -------- - 16.0+ Steps ----- 1. Install `website_sale_loyalty` with default configuration; 2. add a payment provider; 3. as a public user, buy a gift card via eCommerce. Issue ----- No email is sent with the gift card's code to the provided email address. Cause ----- The email template doesn't have an `email_from` field added. Without this value, it falls back on the current user, but because we're Public User, this also doesn't have an `email` value. Additionally, if the order gets confirmed as a portal user, the email will be sent from the client's email address. Solution -------- Add a `_get_mail_author` hook to `loyalty.card`, which can be used when an email template lacks an `email_from` value. Mail author precedence for cards without an order: - current internal user > card's company > current company Mail author precedence for cards with an order: - salesperson > order's company opw-4687107 Forward-Port-Of: odoo/odoo#205676 Forward-Port-Of: odoo/odoo#204644
Before this commit, retrieving the QR code from the PoS interface would result in an error due to a missing `cliTrxNumber` in the request. This issue occurs because the `structured_communication` is empty when sending from PoS. opw-4599402 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#200131
Original PR description
Before this commit, retrieving the QR code from the PoS interface would result in an error due to a missing `cliTrxNumber` in the request. This issue occurs because the `structured_communication` is empty when sending from PoS. opw-4599402 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#200131
When printing a delivery order with a kit product that has a BoM with a product template (not a product_id) and a packaging quantity, we encounter a traceback due to the conversion of the quantity from the product's UoM to the order line's UoM. This happens because the product's UoM is not defined. Steps to reproduce the bug: - Create a storage “P1”: - UoM: Kg - Create a storable “Kit 1”: - UoM: unit - BoM: - set only the product template field (not the product_id)
Original PR description
When printing a delivery order with a kit product that has a BoM with a product template (not a product_id) and a packaging quantity, we encounter a traceback due to the conversion of the quantity…
When printing a delivery order with a kit product that has a BoM with a product template (not a product_id) and a packaging quantity, we encounter a traceback due to the conversion of the quantity from the product's UoM to the order line's UoM. This happens because the product's UoM is not defined.
Steps to reproduce the bug:
- Create a storage “P1”:
- UoM: Kg
- Create a storable “Kit 1”:
- UoM: unit
- BoM:
- set only the product template field (not the product_id)
- 1 Kg of P1
- Create a delivery order for 1 unit of Kit 1
- Mark it as to do
- Set the quantity of P1 to 1kg
- try to print
Problem:
A traceback is triggered because we try to convert 1kg to an undefined uom
```
Error while render the template
UserError: The unit of measure Units defined on the order line doesn't
belong to the same category as the unit of measure False defined on
the product. Please correct the unit of measure defined on the order
line or on the product. They should belong to the same category.
```
opw-4619140
Forward-Port-Of: odoo/odoo#205591
Forward-Port-Of: odoo/odoo#205502Fix a bug introduced by: https://github.com/odoo/odoo/pull/200117 ... making a bad handling of the discount during the computation of 'price_unit' / 'price_subtotal'. opw-4679139 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#205680
Original PR description
Fix a bug introduced by: https://github.com/odoo/odoo/pull/200117 ... making a bad handling of the discount during the computation of 'price_unit' / 'price_subtotal'. opw-4679139 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#205680
Currently, an error occurs when importing or testing data from a CSV file, particularly when setting related fields. This results in an unhandled error during the error message creation process. ** Steps to reproduce:** - Open the **Product Variants** list view. - Import the csv file: [file](https://drive.google.com/file/d/1pW9zBWQ0dzFRBHnLUk3DC34YWuK4tUV0/view?usp=drive_link) - Set the Odoo fields as `Name` and `Products / Cost` accordingly. - Click on `Test` or `Import` button. - Obser
Original PR description
Currently, an error occurs when importing or testing data from a CSV file, particularly when setting related fields. This results in an unhandled error during the error message creation process. **…
Currently, an error occurs when importing or testing data from a CSV file, particularly when setting related fields. This results in an unhandled error during the error message creation process. ** Steps to reproduce:** - Open the **Product Variants** list view. - Import the csv file: [file](https://drive.google.com/file/d/1pW9zBWQ0dzFRBHnLUk3DC34YWuK4tUV0/view?usp=drive_link) - Set the Odoo fields as `Name` and `Products / Cost` accordingly. - Click on `Test` or `Import` button. - Observe the error at the backend. **Error:** `ValueError - not enough values to unpack (expected 1, got 0)` The error occurs because `[columns]` attempts to unpack an empty list when `cr.fetchone()` returns `None` at [1]. This commit ensures that if `cr.fetchone()` returns `None`, `columns` is assigned an empty list without causing an unpacking error. [1] - https://github.com/odoo/odoo/blob/30efa3c90226e77fb175b533dd60734f58a4f27c/odoo/orm/models.py#L7374 This issue will also fix Sentry IDs: 6398456413, 6518332727, 6316946127 Sentry - 6278940594 Forward-Port-Of: odoo/odoo#201500
Steps to reproduce: - Enter website edit mode. - Drag and drop the Tabs snippet onto the page. - Click on the third tab to activate it. - Click the minus (-) button to remove the tab. - No other tab is activated after removal, leaving the tab content area empty. This commit ensures that if a tab is removed, the next available tab is activated automatically. This commit fixes another minor issue: When the direction option is set to "vertical", the expected vertical padding was
Original PR description
Steps to reproduce: - Enter website edit mode. - Drag and drop the Tabs snippet onto the page. - Click on the third tab to activate it. - Click the minus (-) button to remove the tab. - No other tab is activated after removal, leaving the tab content area empty. This commit ensures that if a tab is removed, the next available tab is activated automatically. This commit fixes another minor issue: When the direction option is set to "vertical", the expected vertical padding was not applied due to an incorrect selector. Forward-Port-Of: odoo/odoo#205702 Forward-Port-Of: odoo/odoo#204253
Description of the issue/feature this PR addresses: If we try to reload the template, an error is raised. So, we will raise the error if the change has some meaning Current behavior before PR: an Error is raised when updating a German plan Desired behavior after PR is merged: no Error is raised @alialfie --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#205480
Original PR description
Description of the issue/feature this PR addresses: If we try to reload the template, an error is raised. So, we will raise the error if the change has some meaning Current behavior before PR: an Error is raised when updating a German plan Desired behavior after PR is merged: no Error is raised @alialfie --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#205480
Steps to reproduce the issue: - Enter Website edit mode. - Click on the "Theme" tab. - Pick a black color for the website background (4th color button). - Click on a link in the website navbar to make the link popover appear. - Bug: The popover arrow is black. Bug introduced by this commit [1], where popover colors were updated to match the website's theme. It was fixed since version 17.0 by this commit [2]. But during the forward-port to saas-17.4, the fix no longer works because of t
Original PR description
Steps to reproduce the issue: - Enter Website edit mode. - Click on the "Theme" tab. - Pick a black color for the website background (4th color button). - Click on a link in the website navbar to make the link popover appear. - Bug: The popover arrow is black. Bug introduced by this commit [1], where popover colors were updated to match the website's theme. It was fixed since version 17.0 by this commit [2]. But during the forward-port to saas-17.4, the fix no longer works because of the upgrade to Bootstrap 5.3 done in this commit [3]. In this commit, we adapt the CSS code introduced by commit [2], so that it fixes the arrow color in the same way as it does in 17.0. [1]: https://github.com/odoo/odoo/commit/0d96be06faf8aad1a92183bd2b6371253980c7e6 [2]: https://github.com/odoo/odoo/commit/bf59d2aba488931ba89512d5d6489ecb48ef2aa3 [3]: https://github.com/odoo/odoo/commit/058212e12b5079eba870bde9775fe98f27928935 task-4422810 Forward-Port-Of: odoo/odoo#205317
Description of the issue/feature this PR addresses: IOT crashes parsing a response from https://www.odoo.com/odoo-enterprise/iot/x509 not containing 'data' Current behavior before PR: Crash Desired behavior after PR is merged: - Related internal PR: https://github.com/odoo/internal/pull/3480 opw-4711613 Forward-Port-Of: odoo/odoo#205592 Forward-Port-Of: odoo/odoo#205168
Original PR description
Description of the issue/feature this PR addresses: IOT crashes parsing a response from https://www.odoo.com/odoo-enterprise/iot/x509 not containing 'data' Current behavior before PR: Crash Desired behavior after PR is merged: - Related internal PR: https://github.com/odoo/internal/pull/3480 opw-4711613 Forward-Port-Of: odoo/odoo#205592 Forward-Port-Of: odoo/odoo#205168
During post-install tests, run the following code in a python terminal: import socket, time with socket.create_connection(('127.0.0.1', 8069)): time.sleep(6) It opens a socket and connect to the running odoo server, but does nothing. After 5 seconds the odoo server closes the socket with a timeout. The timeout is only set during tests in ``RequestHandler.setup``, and it set to a hardcoded value of 5 seconds. Since Werkzeug 2.1.0[^1], it logs an error in the logs. We wa
Original PR description
During post-install tests, run the following code in a python terminal: import socket, time with socket.create_connection(('127.0.0.1', 8069)): time.sleep(6) It opens a socket and connect to the…
During post-install tests, run the following code in a python terminal:
import socket, time
with socket.create_connection(('127.0.0.1', 8069)):
time.sleep(6)
It opens a socket and connect to the running odoo server, but does nothing. After 5 seconds the odoo server closes the socket with a timeout.
The timeout is only set during tests in ``RequestHandler.setup``, and it set to a hardcoded value of 5 seconds. Since Werkzeug 2.1.0[^1], it logs an error in the logs. We want to get rid of that error log.
Those errors can occur when the test chrome browser is killed while it was performing http requests. Chrome doesn't TCP RST the sockets and just let those sockets die.
The socket timeout error actually cannot occurs in production, as all traffic is routed via nginx, and nginx will only proxy the connection to Odoo once nginx has all the requests headers.
That error log is silly, it is now ignored.
[^1]: pallets/werkzeug:d062807
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#204023
Forward-Port-Of: odoo/odoo#203757Currently, an exception is generated when a user tries to save a product record without a barcode, whether it is a newly created record or an existing one. Steps to reproduce: 1. Install the Inventory module. 2. Go to Inventory settings. 3. Set Barcode Nomenclature to Default GS1 Nomenclature. 4. Go to Inventory -> Products, create a product with a barcode, and save it. 5. Edit the same product, remove the barcode, and save it again. 6. An error occurs. Error: `StopIteration` T
Original PR description
Currently, an exception is generated when a user tries to save a product record without a barcode, whether it is a newly created record or an existing one. Steps to reproduce: 1. Install the…
Currently, an exception is generated when a user tries to save a product record without a barcode, whether it is a newly created record or an existing one. Steps to reproduce: 1. Install the Inventory module. 2. Go to Inventory settings. 3. Set Barcode Nomenclature to Default GS1 Nomenclature. 4. Go to Inventory -> Products, create a product with a barcode, and save it. 5. Edit the same product, remove the barcode, and save it again. 6. An error occurs. Error: `StopIteration` This issue [1] occurs because when a user tries to save the record without a barcode, the value is false, and an false value is not iterable. [1] - https://github.com/odoo/odoo/blob/9eb6c16cd7d4fe9364d043e2af96876bf82a44d4/addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py#L163 This fix resolves an issue where GS1 preprocessing was always applied when checking for duplicate product barcodes. By introducing the skip_preprocess_gs1 context flag, the GS1 preprocessing step is now bypassed when verifying barcode uniqueness. Related Enterprise PR:- https://github.com/odoo/enterprise/pull/80544 sentry-6267124218 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#196438
The demo product 'Drawer' was initially configured to be tracked by quantity, but a lot was incorrectly created, and the stock quant was subsequently created for the 'Drawer' with lot. Steps to reproduce =============== - Install the 'stock' module with demo data. - Navigate to Inventory > Products > Products and search for 'Drawer'. - Observe that 'Drawer' is set to track by quantity (Tracking field). - Check Inventory > Operations > Physical Inventory and locate the stock quant
Original PR description
The demo product 'Drawer' was initially configured to be tracked by quantity, but a lot was incorrectly created, and the stock quant was subsequently created for the 'Drawer' with lot. Steps to reproduce =============== - Install the 'stock' module with demo data. - Navigate to Inventory > Products > Products and search for 'Drawer'. - Observe that 'Drawer' is set to track by quantity (Tracking field). - Check Inventory > Operations > Physical Inventory and locate the stock quant for 'Drawer'. - Note that a lot exists and is linked to the product 'Drawer', despite the quantity tracking setting. This commit modifies the demo data to enable lot tracking for the product, aligning its configuration with the existing lot and stock quant data for consistency. Forward-Port-Of: odoo/odoo#204803
Some website appointment pages are showing the wrong price, always using the price of the first variant it finds, not the current one. The issue was introduced in Odoo 18.0 with commit [1]. - Create a product.template, add it some variants and for each variants have a different price (eg through the variant extra price). - That product should be a service one - Create an appointment, enable "Up-front payment" in the "Options" tab and add it one of the variant product. Note that it's a vari
Original PR description
Some website appointment pages are showing the wrong price, always using the price of the first variant it finds, not the current one. The issue was introduced in Odoo 18.0 with commit [1]. - Create…
Some website appointment pages are showing the wrong price, always using the price of the first variant it finds, not the current one. The issue was introduced in Odoo 18.0 with commit [1]. - Create a product.template, add it some variants and for each variants have a different price (eg through the variant extra price). - That product should be a service one - Create an appointment, enable "Up-front payment" in the "Options" tab and add it one of the variant product. Note that it's a variant product that you set there, not a template. - You should see next to the variant product you just selected a price per booking being displayed. It is correctly showing the product variant price and not the product template price. - Repeat those 2 steps with the other product variants: create a new appointment and select another variant, you can see the price is correct in the form view. - Now, go to the website appointment page `/appointment`, you will see that all those appointments will show the same price which is the one from the first variant. - The same price error will appear once you click on an appointment (you should land on something like `/appointment/4?`) - Note that if you go further in the appointment booking and land on the shop cart page, the price will be correct there, using the correct variant one. (You'll need to assign a user on the appointment in the backend to be able to book a slot) Side note: Commit [1] seems to have broken commit [2] too. [1]: https://github.com/odoo/enterprise/commit/26fb20ace27b7b522a1105c221e4a52cf224a508#diff-5ffc6d13c61e692b22e4c2fec9218cf96c0c86201aeac951ef36e53e7baa7620R4-R9 [2]: https://github.com/odoo/enterprise/commit/5068b0ae7d38cb03318ad1e97124021121fd66cb opw-4678998 Forward-Port-Of: odoo/enterprise#83104
Description ----------- When clicking the sharing button on a knowledge article, the system retrieves all members linked to the article. This includes members directly tied to the article or inherited through parent articles ( stopping at the first desynchronized article). In databases where articles have numerous associated members, the `_get_article_member_permissions` method suffers from severe performance issues. It retrieves *all* articles and their associated members, collects all paren
Original PR description
Description ----------- When clicking the sharing button on a knowledge article, the system retrieves all members linked to the article. This includes members directly tied to the article or…
Description ----------- When clicking the sharing button on a knowledge article, the system retrieves all members linked to the article. This includes members directly tied to the article or inherited through parent articles ( stopping at the first desynchronized article). In databases where articles have numerous associated members, the `_get_article_member_permissions` method suffers from severe performance issues. It retrieves *all* articles and their associated members, collects all parent articles in the hierarchy, and only then applies grouping and filtering based on the `id` of `self`. This process includes a `LEFT OUTER JOIN` on related tables to fetch specific `fields` passed as arguments, resulting in an O(n^2) complexity on large tables such as `res.partner` and `knowledge.article.member` (the latter being a Many2many relationship that typically contains a high volume of rows). This patch improves performance by shifting the grouping and filtering logic to the start of the process, effectively injecting all preconditions at the base of the recursion. This reduces the hierarchy of articles and memberships to explore. Additionally, the computation of inherited permissions—sourced from the "closest" ancestor article—is now handled at the SQL level instead of Python. This eliminates unnecessary rows in the process, avoiding unnecessary work in the business logic afterward. Benchmark --------- On a client's database with around 600 articles, 5k partners and 15k knowledge.article.member in total, for a specific article which has a total of 1.7k members (direct and inherited): | Request | Before | After | Speed-up | |--------------------------------|---------|-------|-----------| | `_get_article_permission_data` | 4.7+min | 150ms | **1880x** | Reference --------- opw-4603551 Forward-Port-Of: odoo/enterprise#81264
**Year to date computation improvements** - Some inputs on the YTD can go to multiple rules. Therefore, we add manual recomputation of the inputs for payslips. It uses opening balances to compute the total payslip YTD values. - A major update is the addition of Income Stream types to Year to Date values. This allows for grouping payslips with income stream type for employees that may have multiple income stream through a single fiscal year. STP requires repo
Original PR description
**Year to date computation improvements** - Some inputs on the YTD can go to multiple rules. Therefore, we add manual recomputation of the inputs for payslips. It uses opening balances to compute the…
**Year to date computation improvements**
- Some inputs on the YTD can go to multiple rules. Therefore,
we add manual recomputation of the inputs for payslips.
It uses opening balances to compute the total payslip YTD
values.
- A major update is the addition of Income Stream types to
Year to Date values. This allows for grouping payslips with
income stream type for employees that may have multiple income
stream through a single fiscal year. STP requires reporting
the year to date values for each income stream type separately.
**Single Touch Payroll Improvements**
- Adds income stream types to the STP report. This
allows for users with multiple income streams in
a single fiscal year to be repored without finalisation.
- Fixes Termination payments for genuine and
non-genuine redundancy payments and how taxes are
reported for taxible and non-taxible components.
- Fixing Full file replacement for STP. This adds
constrains for FFR, allows old payments to auto reconcile
on a changed payslip after resubmission.
- Adds support for missed reporting of payslips.
If a user forgets to report a pay period and continues
with the next pay period, They have 2 options:
1. Create a back dated submit event with the old
year to date values.
2. Create an update event that amends the year to date
values at todays date.
In odoo we go for option 2. For a missed report, we create an Update
event that updates all the ytd values up til today's date.
- Fixes zeroing of YTD on Single touch payroll.
- Adds a correction input type for Basic salary corrections
without having to make any changes to past payslips. This helps
cover under or over-payments
- Improve validation for Single touch payroll. With better
testing and file generation. This adds better error
handling before running the xml validation step. This
lowers the possibility of errors after file generation.
- Improve performance for YTD computation to allow batching and
caching of the values using computes on the payslips. Relies fully
on the ORM using search_fetch to optimize queries for the YTD
computation.
**AU Payroll Payment reconciliation**
- Allows old payments to auto reconcile on a changed
payslip after resubmission.
**Standard Fixes**
- Allow auto install of hr_payroll_account if accounting and Payroll
app are installed. This also subsequently installs localised versions.
- Payment register wizard fails to compute the amount, journal, etc
since the `_compute_from_lines` is not triggered. This is because
partner_id is the only field in the view to trigger that compute before
create. And when a default value is passed for the partner, there is no
need for the compute to trigger on a new record before save.
- Salary attachments with the same code inputs always
used the last input in the sequence for all attachments.
This commit changes the behavior to allow multiple
attachments with the same code inputs.
- Salary rules generate multiple payslip lines for
multi rule lines, but the result_rules in the
local_dict are not updated. This commit fixes that
and sums up the totals and amounts for all the lines
in that rule.
Task# 4201469
Forward-Port-Of: odoo/enterprise#83038
Forward-Port-Of: odoo/enterprise#75695Currently, an exception is generated when a user tries to save a product record without a barcode, whether it is a newly created record or an existing one. Steps to reproduce: 1. Install the Inventory module. 2. Go to Inventory settings. 3. Set Barcode Nomenclature to Default GS1 Nomenclature. 4. Go to Inventory -> Products, create a product with a barcode, and save it. 5. Edit the same product, remove the barcode, and save it again. 6. An error occurs. Error: `StopIteration` T
Original PR description
Currently, an exception is generated when a user tries to save a product record without a barcode, whether it is a newly created record or an existing one. Steps to reproduce: 1. Install the…
Currently, an exception is generated when a user tries to save a product record without a barcode, whether it is a newly created record or an existing one. Steps to reproduce: 1. Install the Inventory module. 2. Go to Inventory settings. 3. Set Barcode Nomenclature to Default GS1 Nomenclature. 4. Go to Inventory -> Products, create a product with a barcode, and save it. 5. Edit the same product, remove the barcode, and save it again. 6. An error occurs. Error: `StopIteration` This issue [1] occurs because when a user tries to save the record without a barcode, the value is false, and an false value is not iterable. [1] - https://github.com/odoo/odoo/blob/9eb6c16cd7d4fe9364d043e2af96876bf82a44d4/addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py#L163 This fix resolves an issue where GS1 preprocessing was always applied when checking for duplicate product barcodes. By introducing the skip_preprocess_gs1 context flag, the GS1 preprocessing step is now bypassed when verifying barcode uniqueness. Related Community PR:- https://github.com/odoo/odoo/pull/196438 sentry-6267124218 Forward-Port-Of: odoo/enterprise#80544
Before this commit, the `/iot/get_handlers` endpoint was using the `text/html` mime type, even though it was sending a binary zip response. This was mostly harmless, however it could potentially cause issues if there was some service between the IoT box and DB that assumed it was safe to modify the "text" response in some way. opw-4718821 Forward-Port-Of: odoo/enterprise#83315
Original PR description
Before this commit, the `/iot/get_handlers` endpoint was using the `text/html` mime type, even though it was sending a binary zip response. This was mostly harmless, however it could potentially cause issues if there was some service between the IoT box and DB that assumed it was safe to modify the "text" response in some way. opw-4718821 Forward-Port-Of: odoo/enterprise#83315