Monday, May 12, 2025
41 changes · saas-18.2
Resolved issues and error corrections
This update fixes an issue where users could encounter an error when using the browser or app back action from a page with a search bar. It improves navigation reliability and prevents an avoidable interruption in day-to-day use.
Original PR description
Before this commit a traceback was occurring on going back from a view with search bar. After this commit the traceback will not occur anymore on going back from a view with search bar. task-4735022 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
Point of Sale now skips all receipt printing preparation when no printer is available. This avoids unnecessary image loading and rendering work, helping keep automated tests more reliable without changing the cashier experience.
Original PR description
the code that tried to print would do some preparation (render a full component node, load related images) witout checking if there even was a device to print the ticket. The preparation steps (specifically loading images), could be a source of indeteriminism when running test tours since we don't await properly the printing step (see https://github.com/odoo/odoo/pull/201578/files#diff-10ebe5a60b7906fdb3a686b58676079783540b2c91b3423faadc27a0267ba393R33) the revision cuts short the printing when there is no printing device and therefore avoids the tests issues. runbot errors: https://runbot.odoo.com/odoo/error/181566 https://runbot.odoo.com/odoo/error/160941 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
The Discuss app's right-side panel now uses the same background color as the header and left sidebar. This makes sections like channel member lists easier to distinguish from the message area and improves readability.
Original PR description
The bg color of the right panel in discuss app, e.g. channel member list, lack same bg color as header and left sidebar. As a result, the bg was the same as the message list, which made it hard to read due to being separated by only slight border in-between. This commit puts the same bg color on this panel in discuss app as header and left sidebar.
Message bubbles in the Mail app now use a lighter border in dark mode. This makes grouped messages look cleaner and avoids the misleading impression that there is extra spacing between them.
Original PR description
Before this commit, message bubble border was too dark. This gave the impression that squashed messages had too much spacing.
Automated checks for spreadsheet documents are made more reliable by ensuring the expected folder appears where the test can find it. This reduces random test failures and helps keep releases moving smoothly without changing everyday user behavior.
Original PR description
Following the investigation made in https://github.com/odoo/enterprise/pull/83486 the tours can sometimes fail as they try to click on a folder which is not present in the kanban view. The fix in the PR above should fix the issue but we could also go a step further and set a sequence on the folder to ensure its presence on the first page of folders. Task-4781898
Miscellaneous changes
Before PRs https://github.com/odoo/odoo/pull/154912 and https://github.com/odoo/odoo/pull/177079, _free_reservation preserved MTO links by retaining move_orig_ids, allowing Manufacturing Orders (MOs) to reserve components from replenishment pickings. PR https://github.com/odoo/odoo/pull/149054 added replenishment moves to the MO’s procurement.group and assigned move_dest_ids to link them to component moves, supporting 2-step manufacturing flows. PR https://github.com/odoo/odoo/pull/154912
Original PR description
Before PRs https://github.com/odoo/odoo/pull/154912 and https://github.com/odoo/odoo/pull/177079, _free_reservation preserved MTO links by retaining move_orig_ids, allowing Manufacturing Orders (MOs)…
Before PRs https://github.com/odoo/odoo/pull/154912 and https://github.com/odoo/odoo/pull/177079, _free_reservation preserved MTO links by retaining move_orig_ids, allowing Manufacturing Orders (MOs) to reserve components from replenishment pickings. PR https://github.com/odoo/odoo/pull/149054 added replenishment moves to the MO’s procurement.group and assigned move_dest_ids to link them to component moves, supporting 2-step manufacturing flows. PR https://github.com/odoo/odoo/pull/154912 introduced the stock.break_mto parameter to conditionally preserve move_orig_ids, while PR https://github.com/odoo/odoo/pull/177079 removed it, making move_orig_ids clearing unconditional for MTO-to-MTS transitions, reintroducing a regression due to the move_dest_ids assignment. Steps to Reproduce =================== 1. Create an MO with a component qty of 20 units and confirm it. 2. Scrap 5 units of the component with Replenish enabled. 3. Validate the replenishment transfer. 4. Check the MO component line. The component qty is reduced to 5. Issue ===== The move_dest_ids assignment to replenishment moves (from https://github.com/odoo/odoo/pull/149054) prevents _trigger_assign from reserving correct MO component quantities when move_orig_ids are cleared (per https://github.com/odoo/odoo/pull/177079), as the link to the original MO requirements is broken. Fix === Removed the move_dest_ids assignment for replenish moves enabling trigger_assign to automatically reserve the correct component quantities, while maintaining the MTO-to-MTS transition (cleared move_orig_ids) and the procurement.group assignment. Task: https://github.com/odoo/odoo/commit/44437975bdaf1e7c4f5540a5cb789d9db0ec0b0b Forward-Port-Of: odoo/odoo#204211
### Steps to reproduce: - install "l10n_de" and switch to a German company - Go to a contact, in the page Accounting > Electronic Invoicing change the format to "Factur-X (CII)" - Create an invoice for this contact - Add a start and end date on the line of this invoice - Confirm and send to Factur-X - In the generated XML there is no trace of the start or end dates ### Solution: Set the variables to add the `BillingSpecifiedPeriod` in the XML. Put `invoice_date` as start date and `invo
Original PR description
### Steps to reproduce: - install "l10n_de" and switch to a German company - Go to a contact, in the page Accounting > Electronic Invoicing change the format to "Factur-X (CII)" - Create an invoice for this contact - Add a start and end date on the line of this invoice - Confirm and send to Factur-X - In the generated XML there is no trace of the start or end dates ### Solution: Set the variables to add the `BillingSpecifiedPeriod` in the XML. Put `invoice_date` as start date and `invoice_date_due` as end date. opw-4680890 Forward-Port-Of: odoo/odoo#209102 Forward-Port-Of: odoo/odoo#208088
Currently, an error occurs on reopening a POS session if its 'Login Number Sequence' record has been deleted. This results in preventing the user from accessing the session. **Steps to produce:** - Install the `point_of_sale` module (with demo data). - Open the register of the **Furniture Shop** from the POS dashboard. - Now, without closing the register of shop, Navigate to: `Settings > Technical > Sequences & Identifiers > Sequences (list)`. - Delete the `Login Number Sequence of Sess
Original PR description
Currently, an error occurs on reopening a POS session if its 'Login Number Sequence' record has been deleted. This results in preventing the user from accessing the session. **Steps to produce:** -…
Currently, an error occurs on reopening a POS session if its 'Login Number Sequence' record has been deleted. This results in preventing the user from accessing the session.
**Steps to produce:**
- Install the `point_of_sale` module (with demo data).
- Open the register of the **Furniture Shop** from the POS dashboard.
- Now, without closing the register of shop, Navigate to:
`Settings > Technical > Sequences & Identifiers > Sequences (list)`.
- Delete the `Login Number Sequence of Session 3` sequence record.
- Reopen that shop session again.
- Observe the error at the backend.
**Error:**
```
UndefinedFunction
operator does not exist: integer = boolean
LINE 1: SELECT number_next FROM ir_sequence WHERE id=false FOR UPDAT...
^
HINT: No operator matches the given name and argument types. You might need
to add explicit type casts.
```
The error occurs because the system attempts to access the `login_number_seq_id` of the POS session at [1], but it is unavailable as the user has already deleted it.
This commit adds validation to prevent deletion of the 'Login Number Sequence' if the associated POS session is not closed.
[1] - https://github.com/odoo/odoo/blob/948f6c5afdf76b9a25daa120fec1edd21c5c08d6/addons/point_of_sale/models/pos_session.py#L404-L406
Sentry-6276299189
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#197715lot_id was column that needs stock.group_production_lot group to be visible to admin user, so it was not visible in the list view of stock.picking.tour and the tour depends on it visibility build_error-111685 Forward-Port-Of: odoo/odoo#206959
Original PR description
lot_id was column that needs stock.group_production_lot group to be visible to admin user, so it was not visible in the list view of stock.picking.tour and the tour depends on it visibility build_error-111685 Forward-Port-Of: odoo/odoo#206959
- Fix issue where combo price were not recomputed when changing the pricelist of the order. - The issue was due to the fact that in the `pos_order.set_pricelist()` method we were only recopute the combo line that have a `price_type === "original"`, and that the combo line `price_type` was undefined. Now when a adding a combo product to the cart, all of its lines have a `price_type` set to `automatic` initially, and inside `pos_order.set_pricelist()` we now recompute the price of the combo line
Original PR description
- Fix issue where combo price were not recomputed when changing the pricelist of the order. - The issue was due to the fact that in the `pos_order.set_pricelist()` method we were only recopute the combo line that have a `price_type === "original"`, and that the combo line `price_type` was undefined. Now when a adding a combo product to the cart, all of its lines have a `price_type` set to `automatic` initially, and inside `pos_order.set_pricelist()` we now recompute the price of the combo line that have a `price_type === "automatic"`. Steps to reproduct: - Create pricelists and add it to pos config - Open PoS - Add combo product to cart - Change pricelist - => Price is not recomputed based on the pricelist as it should task-id: 4707663 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#208605 Forward-Port-Of: odoo/odoo#204981
Currently, an exception is raised when a user attempts to import an attachment with an invalid TypeCode in the XML file. Steps to Reproduce: 1. Install the `account_edi_ubl_cii` module. 2. Navigate to Invoice Module -> Customers -> Invoices. 3. Attempt to upload an attachment with an invalid TypeCode in the XML file. 4. An error occurs. Error: `TypeError cannot unpack non-iterable NoneType object ` This issue [1] occurs when a user imports an attachment with an invalid TypeCode
Original PR description
Currently, an exception is raised when a user attempts to import an attachment with an invalid TypeCode in the XML file. Steps to Reproduce: 1. Install the `account_edi_ubl_cii` module. 2. Navigate…
Currently, an exception is raised when a user attempts to import an attachment with an invalid TypeCode in the XML file. Steps to Reproduce: 1. Install the `account_edi_ubl_cii` module. 2. Navigate to Invoice Module -> Customers -> Invoices. 3. Attempt to upload an attachment with an invalid TypeCode in the XML file. 4. An error occurs. Error: `TypeError cannot unpack non-iterable NoneType object ` This issue [1] occurs when a user imports an attachment with an invalid TypeCode in the XML file [2]. The function returns None, which cannot be assigned to multiple variables, leading to an error. [1] - https://github.com/odoo/odoo/blob/29206fb5f9c733ec8751d8d4910e4df686f29506/addons/account_edi_ubl_cii/models/account_edi_common.py#L262 [2] - https://drive.google.com/file/d/1Ww1D302rvMwM2OQBAZJNnTcI0n0xUGWQ/view This fix resolves the issue by ensuring that if an invalid move_type_code is found, it returns None, None, preventing the error. sentry-6303716506 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#208821 Forward-Port-Of: odoo/odoo#197927
This commit removes the z-index priority of kanban groups, headers and quick create over the no-content helper since it became useless with https://github.com/odoo/odoo/pull/148138 and can now cause display issues when these elements are on top of each other (which can happen with the quick create column). task-4778356 Forward-Port-Of: odoo/odoo#209059 Forward-Port-Of: odoo/odoo#208795
Original PR description
This commit removes the z-index priority of kanban groups, headers and quick create over the no-content helper since it became useless with https://github.com/odoo/odoo/pull/148138 and can now cause display issues when these elements are on top of each other (which can happen with the quick create column). task-4778356 Forward-Port-Of: odoo/odoo#209059 Forward-Port-Of: odoo/odoo#208795
Description of the issue/feature this PR addresses: Some of our clients have reported that the company logo on printed invoices is too small. This PR slightly increases its size and adds a small bottom margin. Current behavior before PR: The height in logo is 45px Desired behavior after PR is merged: Increases to 65px --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#209155
Original PR description
Description of the issue/feature this PR addresses: Some of our clients have reported that the company logo on printed invoices is too small. This PR slightly increases its size and adds a small bottom margin. Current behavior before PR: The height in logo is 45px Desired behavior after PR is merged: Increases to 65px --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#209155
Currently, when we are accessing the `parent_ids` of an archived company with code `company.sudo().parent_ids`, it will return an empty record, and an error will be generated when code tries to access `max()` from that empty record at code line [1]. ``` >>> company = self.env['res.company'].browse(2) >>> company res.company(2,) >>> company.active False >>> company.sudo().parent_ids res.company() >>> max(c.hard_lock_date or date.min for c in company.sudo().parent_ids
Original PR description
Currently, when we are accessing the `parent_ids` of an archived company with code `company.sudo().parent_ids`, it will return an empty record, and an error will be generated when code tries to…
Currently, when we are accessing the `parent_ids` of an archived company
with code `company.sudo().parent_ids`, it will return an empty record, and an
error will be generated when code tries to access `max()` from that empty
record at code line [1].
```
>>> company = self.env['res.company'].browse(2)
>>> company
res.company(2,)
>>> company.active
False
>>> company.sudo().parent_ids
res.company()
>>> max(c.hard_lock_date or date.min for c in company.sudo().parent_ids)
Traceback (most recent call last):
File "/usr/lib/python3.12/code.py", line 90, in runcode
exec(code, self.locals)
File "<console>", line 1, in <module>
ValueError: max() iterable argument is empty
>>> max(c.hard_lock_date or date.min for c in
company.sudo().with_context(active_test=False).parent_ids)
datetime.date(1, 1, 1)
>>>
>>>
```
This commit fixes the above issue by setting `active_test=False`, which
allows access to `archived (inactive)` parent companies, ensuring that
`company.sudo().parent_ids` includes them and avoids passing an empty
sequence to max()
[1] - https://github.com/odoo/odoo/blob/ac3924508016178427c7962fa3b8e645e7e03835/addons/account/models/company.py#L393
sentry-6581609140
Forward-Port-Of: odoo/odoo#208526**Current behavior before PR:** - When the height option is passed to the editor and the content exceeds that fixed height, the bottom border scrolls along with the content instead of staying anchored at the bottom. - When Enter was pressed at the bottom of a fixed-height editor, the newly inserted block was positioned outside the editable area. As a result, power buttons were also shown outside the editor until the block was scrolled into view. **Desired behavior after PR is merged:**
Original PR description
**Current behavior before PR:** - When the height option is passed to the editor and the content exceeds that fixed height, the bottom border scrolls along with the content instead of staying anchored at the bottom. - When Enter was pressed at the bottom of a fixed-height editor, the newly inserted block was positioned outside the editable area. As a result, power buttons were also shown outside the editor until the block was scrolled into view. **Desired behavior after PR is merged:** - The bottom border now remains fixed at the bottom of the editor when the height option is set, even if the content overflows and becomes scrollable. - Power buttons are no longer displayed while the block is outside the visible editable area. task: 4718217 Forward-Port-Of: odoo/odoo#206081
**Behavior before this PR:** - Create a bold or italic tag using keyboard when selection is collapsed, leave it empty. - Change selection using arrow key. - Put cursor back where format tag was created. Notice that empty element is not removed and text is formatted when writing something. **Behavior after PR is merged:** - This PR makes sure that empty format element gets removed when changing selection. - Tag will not get removed if it's parent block element is empty. task-424
Original PR description
**Behavior before this PR:** - Create a bold or italic tag using keyboard when selection is collapsed, leave it empty. - Change selection using arrow key. - Put cursor back where format tag was created. Notice that empty element is not removed and text is formatted when writing something. **Behavior after PR is merged:** - This PR makes sure that empty format element gets removed when changing selection. - Tag will not get removed if it's parent block element is empty. task-4240818 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#195018
**Current behaviour before PR:** When there is a text having background color, inserting a tab at the beginning of text creates a tab with background color. **Desired behaviour after PR is merged:** Now, if there is a text having background color, - Inserting tab at the beginning of text, tab will not have background color. - Inserting tab in the middle of a text, tab will have a background color corresponding to the text. - Inserting tab in the end of text, tab will have a backgro
Original PR description
**Current behaviour before PR:** When there is a text having background color, inserting a tab at the beginning of text creates a tab with background color. **Desired behaviour after PR is merged:** Now, if there is a text having background color, - Inserting tab at the beginning of text, tab will not have background color. - Inserting tab in the middle of a text, tab will have a background color corresponding to the text. - Inserting tab in the end of text, tab will have a background color corresponding to the text. task-4381135 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#199733
Prior to this commit, if an inline embedded component block was put as a direct child of the editable, it was removed during `initElementForEdition`, because `isVisible` returned false. However at that point, the `embedded_component_plugin` did not yet have the opportunity to fill that embedded component. Therefore, as a prevention measure, all elements with `data-embedded` attribute will always be considered `visible`, as their removal should be at the discretion of the `embedded_component_p
Original PR description
Prior to this commit, if an inline embedded component block was put as a direct child of the editable, it was removed during `initElementForEdition`, because `isVisible` returned false. However at…
Prior to this commit, if an inline embedded component block was put as a direct child of the editable, it was removed during `initElementForEdition`, because `isVisible` returned false. However at that point, the `embedded_component_plugin` did not yet have the opportunity to fill that embedded component. Therefore, as a prevention measure, all elements with `data-embedded` attribute will always be considered `visible`, as their removal should be at the discretion of the `embedded_component_plugin`. If they happen to have an `inline` style and they are direct children of the editable, they should be wrapped in a baseContainer `div` or `p`, but never removed. Issues of the type were observed when loading a Knowledge template containing a `div` with `data-embedded="file"` since embedded files have since been refactored to use an `inline-block` display style which made them eligible to be removed by `initElementForEdition` prior to the changes introduced in this commit. task-4745902 Forward-Port-Of: odoo/odoo#206971
Compute the delta for base amounts in '_round_base_lines_tax_details' from the total instead of from the base amounts only. See test in this commit. task-4457168 Forward-Port-Of: odoo/odoo#207297 Forward-Port-Of: odoo/odoo#196383
Original PR description
Compute the delta for base amounts in '_round_base_lines_tax_details' from the total instead of from the base amounts only. See test in this commit. task-4457168 Forward-Port-Of: odoo/odoo#207297 Forward-Port-Of: odoo/odoo#196383
Somehow, translations files were lacking for this module. Done by Larissa (lman) 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#208579
Original PR description
Somehow, translations files were lacking for this module. Done by Larissa (lman) 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#208579
During `retrying` method we still don't have any uid on the current env (the authentification is inside the `func` -> `_serve_ir_http`). If there is an Integrity Error coming from the method/controller called, the error is catch by `retrying` and call `_sql_error_to_message` leading to a traceback: ``` ... File "/home/odoo/src/odoo/saas-18.2/odoo/http.py", line 2016, in _transactioning return service_model.retrying(func, env=self.env) File "/home/odoo/src/odoo/saas-18.2/odoo/service
Original PR description
During `retrying` method we still don't have any uid on the current env (the authentification is inside the `func` -> `_serve_ir_http`). If there is an Integrity Error coming from the…
During `retrying` method we still don't have any uid on the
current env (the authentification is inside the `func` ->
`_serve_ir_http`). If there is an Integrity Error coming from the
method/controller called, the error is catch by `retrying` and call
`_sql_error_to_message` leading to a traceback:
```
...
File "/home/odoo/src/odoo/saas-18.2/odoo/http.py", line 2016, in _transactioning
return service_model.retrying(func, env=self.env)
File "/home/odoo/src/odoo/saas-18.2/odoo/service/model.py", line 186, in retrying
message = env._("The operation cannot be completed: %s", model._sql_error_to_message(exc))
File "/home/odoo/src/odoo/saas-18.2/odoo/orm/models.py", line 2916, in _sql_error_to_message
cons_rec = self.env['ir.model.constraint'].search_fetch([
File "/home/odoo/src/odoo/saas-18.2/odoo/orm/models.py", line 1390, in search_fetch
query = self._search(domain, offset=offset, limit=limit, order=order or self._order)
File "/home/odoo/src/odoo/saas-18.2/odoo/orm/models.py", line 4993, in _search
self.browse().check_access('read')
File "/home/odoo/src/odoo/saas-18.2/odoo/orm/models.py", line 3719, in check_access
if not self.env.su and (result := self._check_access(operation)):
File "/home/odoo/src/odoo/saas-18.2/odoo/orm/models.py", line 3752, in _check_access
if not Access.check(self._name, operation, raise_exception=False):
File "/home/odoo/src/odoo/saas-18.2/odoo/addons/base/models/ir_model.py", line 2051, in check
has_access = model in self._get_allowed_models(mode)
File "decorator.py", line 232, in fun
return caller(func, *(extras + args), **kw)
File "/home/odoo/src/odoo/saas-18.2/odoo/tools/cache.py", line 125, in lookup
value = d[key] = self.method(*args, **kwargs)
File "/home/odoo/src/odoo/saas-18.2/odoo/addons/base/models/ir_model.py", line 2023, in _get_allowed_models
group_ids = self.env.user._get_group_ids()
File "decorator.py", line 232, in fun
return caller(func, *(extras + args), **kw)
File "/home/odoo/src/odoo/saas-18.2/odoo/tools/cache.py", line 125, in lookup
value = d[key] = self.method(*args, **kwargs)
File "/home/odoo/src/odoo/saas-18.2/odoo/addons/base/models/res_users.py", line 1026, in _get_group_ids
self.ensure_one()
File "/home/odoo/src/odoo/saas-18.2/odoo/orm/models.py", line 5497, in ensure_one
raise ValueError("Expected singleton: %s" % self)
```
It actually hides the legit constraint message error.
Fix it by adding a sudo() to the constraint search, since whatever the
user (public or not), the error message should be accessible and
returned.
Forward-Port-Of: odoo/odoo#207244**Current behavior before PR:** - Clicking the reset color button did not remove the applied gradient color. **Desired behavior after PR is merged:** - The reset color button now correctly removes the gradient color when clicked. task: 4735054 Forward-Port-Of: odoo/odoo#206778
Original PR description
**Current behavior before PR:** - Clicking the reset color button did not remove the applied gradient color. **Desired behavior after PR is merged:** - The reset color button now correctly removes the gradient color when clicked. task: 4735054 Forward-Port-Of: odoo/odoo#206778
Issue ----- Batch applying quantity adjustments creates duplicated journal entries. Steps to reproduce ----- - Create two products with automated valuation and 10 on hand quantity - Go to Inventory > Operations > Physical inventory and create an inventory adjustment for the two products (one positive, one negative) - Select both lines and click on "Adjust All" - Go to accounting > Accounting > Journal items -> Duplicated entries with one using the inventory valuation account and sto
Original PR description
Issue ----- Batch applying quantity adjustments creates duplicated journal entries. Steps to reproduce ----- - Create two products with automated valuation and 10 on hand quantity - Go to Inventory > Operations > Physical inventory and create an inventory adjustment for the two products (one positive, one negative) - Select both lines and click on "Adjust All" - Go to accounting > Accounting > Journal items -> Duplicated entries with one using the inventory valuation account and stock input and the other using the valuation account with stock output account Fix ----- This issue has been fixed by commit ce5d303 so just adding a small test to round things up. ----- Tickets: opw-4672011 opw-4677147 opw-4670069 Forward-Port-Of: odoo/odoo#205667
# Context Building on a recent PR (https://github.com/odoo/odoo/pull/188697), we introduce multiple small tweaks to enhance the life of support agents and system admins that work a lot with the log files in the the context of email related issues. # Changes * A given `mail.mail` record being processed by the `_send` method can end up sending multiple emails under the hood ( if `recipient_ids` points to muliple ids). This means that the ratio between one `mail.mail` record and the number
Original PR description
# Context Building on a recent PR (https://github.com/odoo/odoo/pull/188697), we introduce multiple small tweaks to enhance the life of support agents and system admins that work a lot with the log…
# Context Building on a recent PR (https://github.com/odoo/odoo/pull/188697), we introduce multiple small tweaks to enhance the life of support agents and system admins that work a lot with the log files in the the context of email related issues. # Changes * A given `mail.mail` record being processed by the `_send` method can end up sending multiple emails under the hood ( if `recipient_ids` points to muliple ids). This means that the ratio between one `mail.mail` record and the number of email sent through SMTP is not always 1:1. We added a new log line that counts the total emails processed in the loop which should give a more precise estimation of the real number of emails attempted through SMTP * Given the above, we the usual log line was not reporting all the (redacted) list of email addresses but only the `email_to` of the last `msg` value created during the inner loops. We now correctly show a comma seperated list of all recipients in a given batch. * The historical log line `Sent batch %s emails via mail server ID #%s` could be missleading as it was not counting the number of emails but the number of `mail.mail` records processed. It was reformulated to account for this. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#209314 Forward-Port-Of: odoo/odoo#206657
When an image is added in a website page by using the `/image` command of the Powerbox, it is not optimized like when the media dialog is used to replace an image. Also, when an image is replaced, the auto-optimization is not always included in the last history step - which makes operations like inserting a new paragraph remove the optimization. This commit makes sure that the `image_changed` event is: - triggered after the new image is inside the DOM - completed before considering we
Original PR description
When an image is added in a website page by using the `/image` command of the Powerbox, it is not optimized like when the media dialog is used to replace an image. Also, when an image is replaced,…
When an image is added in a website page by using the `/image` command of the Powerbox, it is not optimized like when the media dialog is used to replace an image. Also, when an image is replaced, the auto-optimization is not always included in the last history step - which makes operations like inserting a new paragraph remove the optimization. This commit makes sure that the `image_changed` event is: - triggered after the new image is inside the DOM - completed before considering we are done - included in the same history step that applied the media dialog's change. It also avoids recomputing the auto-optimization several times for a single trigger of the event. Steps to reproduce: Scenario 1: - Drop a three columns snippet - Put your cursor after "Feature 1" - Press ENTER - Use the "/image" Powerbox command to add an image that should be resized by the auto-optimization => Image was the original uploaded image. Scenario 2: - Drop a three columns snippet - Double click on an image - Upload/select an image that will be resized by the auto-optimization - Put your cursor after "Feature 1" - Press ENTER => Image's optimization was lost because it happened after the history step was completed. task-4129429 Forward-Port-Of: odoo/odoo#205294 Forward-Port-Of: odoo/odoo#177433
In this PR: ## [FIX] tools: don't export attributes that aren't translated anyway PR #162079 made the list of translated attributes shared between QWeb and OWL templates. In hindsight, this was not a good idea, since: - some attributes are exclusive to QWeb (e.g.: string) - t-attf- variants of attributes are not translated in OWL - it does not reflect the list of attributes that OWL actually translates ## [IMP] tools: add missing ARIA attributes to OWL_TRANSLATED_ATTRS https://github
Original PR description
In this PR: ## [FIX] tools: don't export attributes that aren't translated anyway PR #162079 made the list of translated attributes shared between QWeb and OWL templates. In hindsight, this was not a…
In this PR: ## [FIX] tools: don't export attributes that aren't translated anyway PR #162079 made the list of translated attributes shared between QWeb and OWL templates. In hindsight, this was not a good idea, since: - some attributes are exclusive to QWeb (e.g.: string) - t-attf- variants of attributes are not translated in OWL - it does not reflect the list of attributes that OWL actually translates ## [IMP] tools: add missing ARIA attributes to OWL_TRANSLATED_ATTRS https://github.com/odoo/owl/pull/1679 made human-readable ARIA attributes translated by Owl. This commit updates OWL_TRANSLATED_ATTRS so that ARIA attributes are also correctly exported for translation, and will therefore be fully translatable when the next version of Owl is released. ## [IMP] tools: make 'confirm-label' and 'cancel-label' translatable 'cancel-label' and 'confirm-label' are missing from the list of attributes to export for translation. This commit adds them to the list. Forward-Port-Of: odoo/odoo#208861 Forward-Port-Of: odoo/odoo#204692
Problem: In a multi-company environment with multiple companies from India, users are getting access right errors about being unable to read employees from Company B when viewing the Salary Register from Company A and vice versa. Steps to Reproduce on Runbot: 1. Install accounting,employee, payroll, India payroll 2. Create 2 Indian companies with India fiscal package 3. Create an employee per company and create payslips per employee and pay them 4. View the salary register in Payroll > Re
Original PR description
Problem: In a multi-company environment with multiple companies from India, users are getting access right errors about being unable to read employees from Company B when viewing the Salary Register from Company A and vice versa. Steps to Reproduce on Runbot: 1. Install accounting,employee, payroll, India payroll 2. Create 2 Indian companies with India fiscal package 3. Create an employee per company and create payslips per employee and pay them 4. View the salary register in Payroll > Reporting --> access right error thrown opw-4677551 Forward-Port-Of: odoo/enterprise#83199
This reverts FW #82587. The functionality of `action_send_documents_share_link` was changed as of #65655 in 18+, which no longer requires the`company.documents_hr_folder` setting. opw-4559772 Forward-Port-Of: odoo/enterprise#84469
Original PR description
This reverts FW #82587. The functionality of `action_send_documents_share_link` was changed as of #65655 in 18+, which no longer requires the`company.documents_hr_folder` setting. opw-4559772 Forward-Port-Of: odoo/enterprise#84469
Commit e33522cdc8fcc52 wrongly fixed the first domain of the three. `departure_reason_id` clause disapeared and the active=False was changed to active in [true,false] Forward-Port-Of: odoo/enterprise#85252
Original PR description
Commit e33522cdc8fcc52 wrongly fixed the first domain of the three. `departure_reason_id` clause disapeared and the active=False was changed to active in [true,false] Forward-Port-Of: odoo/enterprise#85252
…queryCount Extra query made by the tax engine to retrieve the country from the company. Forward-Port-Of: odoo/enterprise#85092
Original PR description
…queryCount Extra query made by the tax engine to retrieve the country from the company. Forward-Port-Of: odoo/enterprise#85092
When updating a parent product, the MPS view will load ALL the components on the page even if it breaks the pager limit. Previously, there was a refresh at every change. It was annoying so it was removed. However this refresh made sure to reduce the number of records shown to the pager limit. The solution is to simply slice the received array of lines to the n first records, n being the value of `this.env.config.limit`. opw-4778588 Forward-Port-Of: odoo/enterprise#85159
Original PR description
When updating a parent product, the MPS view will load ALL the components on the page even if it breaks the pager limit. Previously, there was a refresh at every change. It was annoying so it was removed. However this refresh made sure to reduce the number of records shown to the pager limit. The solution is to simply slice the received array of lines to the n first records, n being the value of `this.env.config.limit`. opw-4778588 Forward-Port-Of: odoo/enterprise#85159
Steps: - Have a main company C with a branch B - Select B in company selector, but have C checkbox checked too - Create a user U with `company_id == B` - Create and confirm an invoice I for user U, company_id should be B, amount X - Go back to accounting dashboard, and open reconciliation widget - Create a new transaction, amout X - Select it, select line from I and click on Validate -> UserError: "Incompatible companies on records" This reason is, even if we have Branch company sele
Original PR description
Steps: - Have a main company C with a branch B - Select B in company selector, but have C checkbox checked too - Create a user U with `company_id == B` - Create and confirm an invoice I for user U, company_id should be B, amount X - Go back to accounting dashboard, and open reconciliation widget - Create a new transaction, amout X - Select it, select line from I and click on Validate -> UserError: "Incompatible companies on records" This reason is, even if we have Branch company selected as `env.company`, as we have Main company checked too, the statement line is created with `company_id == main company` With this commit, we unset the partner from the statement line's move if it is from an accessible branch but not the main company. We also test different usecases to secure the flow. opw-4626664 Forward-Port-Of: odoo/enterprise#84951 Forward-Port-Of: odoo/enterprise#82896
This update is done without an upgrade because the old format will still work. But for cleanliness, templates should reflect what the editor will actually do, and since [This commit], files are `span` elements, not `div` anymore, and they are wrapped in a baseContainer (`div` or `p`). [This commit]: https://github.com/odoo/odoo/commit/96c8c398c0fbef519b56edf4941691d11372eac0 task-4745902 Forward-Port-Of: odoo/enterprise#83899
Original PR description
This update is done without an upgrade because the old format will still work. But for cleanliness, templates should reflect what the editor will actually do, and since [This commit], files are `span` elements, not `div` anymore, and they are wrapped in a baseContainer (`div` or `p`). [This commit]: https://github.com/odoo/odoo/commit/96c8c398c0fbef519b56edf4941691d11372eac0 task-4745902 Forward-Port-Of: odoo/enterprise#83899
The system failed to retrieve `company.l10n_ar_afip_ws_key_id.pem_key` because of quick create. Steps to Reproduce: 1. Switch to `(AR) Exento Company`. 2. Navigate to `Settings `> `Invoicing`. 3. Search for `Argentinean Localization`. 4. In `Primary Key`, clear the field, enter any value, and click Create. 5. Click `Generate Renewal Request`. Error: `TypeError: argument should be a bytes-like object or ASCII string, not 'bool'` Solution: Add `no_quick_create : True` for l10n_ar
Original PR description
The system failed to retrieve `company.l10n_ar_afip_ws_key_id.pem_key` because of quick create. Steps to Reproduce: 1. Switch to `(AR) Exento Company`. 2. Navigate to `Settings `> `Invoicing`. 3. Search for `Argentinean Localization`. 4. In `Primary Key`, clear the field, enter any value, and click Create. 5. Click `Generate Renewal Request`. Error: `TypeError: argument should be a bytes-like object or ASCII string, not 'bool'` Solution: Add `no_quick_create : True` for l10n_ar_afip_ws_key_id field. Sentry - 5999498377 Forward-Port-Of: odoo/enterprise#83233
The mx payment method on a payment should be the one from the pos payment method. Steps: - Have a PoS payment method with `l10n_mx_edi_payment_method_id` != `payment_method_transferencia` - Open a PoS session, make an order with this payment method and close the session - Look for the related payment --> `l10n_mx_edi_payment_method_id` == `payment_method_transferencia` With this commit, we override the compute to get the payment way from the pos payment method. opw-4699064 Forward-Port-
Original PR description
The mx payment method on a payment should be the one from the pos payment method. Steps: - Have a PoS payment method with `l10n_mx_edi_payment_method_id` != `payment_method_transferencia` - Open a PoS session, make an order with this payment method and close the session - Look for the related payment --> `l10n_mx_edi_payment_method_id` == `payment_method_transferencia` With this commit, we override the compute to get the payment way from the pos payment method. opw-4699064 Forward-Port-Of: odoo/enterprise#85043 Forward-Port-Of: odoo/enterprise#83323
when the option is not set key error is raised , this due to when onchange is called the default value is not set but being also called with empty option build_error-107919 Forward-Port-Of: odoo/enterprise#82825
Original PR description
when the option is not set key error is raised , this due to when onchange is called the default value is not set but being also called with empty option build_error-107919 Forward-Port-Of: odoo/enterprise#82825
- Create a vendor bill with two lines at the exact same price. - Set the start and end dates to the same day, but in a different month than the bill date. Then confirm the bill. - In the Deferred Entries, there are only the deferral_moves and no moves_fully_deferred. The method _generate_deferred_entries was refactored by a71c38fa6325cd18c686352d8f68d350461d37d0 . However, inside the loop to remove deferred entries in the same month, the filter is used on move_fully_deferred.deferred_ori
Original PR description
- Create a vendor bill with two lines at the exact same price. - Set the start and end dates to the same day, but in a different month than the bill date. Then confirm the bill. - In the Deferred Entries, there are only the deferral_moves and no moves_fully_deferred. The method _generate_deferred_entries was refactored by a71c38fa6325cd18c686352d8f68d350461d37d0 . However, inside the loop to remove deferred entries in the same month, the filter is used on move_fully_deferred.deferred_original_move_ids.deferred_move_ids which contains deferral_moves + moves_fully_deferred. This means that when there are two lines with the same price, the current moves_fully_deferred is matched with the other in the filtered. This causes both moves_fully_deferred to be removed. opw-4698646 Forward-Port-Of: odoo/enterprise#84776 Forward-Port-Of: odoo/enterprise#83791
* quality_mrp, stock_barcode ### Steps to reproduce: - Create a product FP with a bom: - 1 x comp - Create a control check point per product for FP for the manufacturing operation type - Go to the barcode app - Scan the manufacturing operation type - Scan FP and set the qty_producing - Click quality check #### > Traceback ### Cause of the issue: By scanning the manufacturing operation in the barcode we create a "New" manufacturing order that does not have a set id yet. As
Original PR description
* quality_mrp, stock_barcode ### Steps to reproduce: - Create a product FP with a bom: - 1 x comp - Create a control check point per product for FP for the manufacturing operation type - Go to the…
* quality_mrp, stock_barcode
### Steps to reproduce:
- Create a product FP with a bom:
- 1 x comp
- Create a control check point per product for FP for the manufacturing operation type
- Go to the barcode app
- Scan the manufacturing operation type
- Scan FP and set the qty_producing
- Click quality check
#### > Traceback
### Cause of the issue:
By scanning the manufacturing operation in the barcode we create a "New" manufacturing order that does not have a set id yet. As such, the `resId` the barcode `MainComponent` is `false`. However, this "id" is used in the orm call of the `checkQuality`:
https://github.com/odoo/enterprise/blob/79f98e924d2f425535a7ac1919f96ff7ec4a34d8/stock_barcode_quality_control/static/src/components/main.js#L15-L19 As such, we launch a call of the `check_quality`:
https://github.com/odoo/enterprise/blob/79f98e924d2f425535a7ac1919f96ff7ec4a34d8/quality_mrp/models/mrp_production.py#L70-L72 that ends up raising an traceback since the `product_uom` is `False` on the "unexpected" record `mrp.production(False,)`.
### Fix:
Since we just saved the record and hence created the record prior to this call:
https://github.com/odoo/enterprise/blob/79f98e924d2f425535a7ac1919f96ff7ec4a34d8/stock_barcode_quality_control/static/src/components/main.js#L12-L15 we should rather rely on the new created id.
opw-4644128
Forward-Port-Of: odoo/enterprise#84601
Forward-Port-Of: odoo/enterprise#82688The system fails when `ir. qweb. _ render ()` is called with a `values` argument that is not a dictionary but a `Response ' object. Steps to Produce: 1. Open `Sign` Module > Templates > Click on the `Sign Now` button of any template. 2. Copy url > delete sign reques > paste url in websie 3. The error will be visible on the terminal. Error: `AttributeError: 'Response' object has no attribute 'copy'` Solution: - Updated `get_document()` to check if `context` is not a `dict`. - If no
Original PR description
The system fails when `ir. qweb. _ render ()` is called with a `values` argument that is not a dictionary but a `Response ' object. Steps to Produce: 1. Open `Sign` Module > Templates > Click on the `Sign Now` button of any template. 2. Copy url > delete sign reques > paste url in websie 3. The error will be visible on the terminal. Error: `AttributeError: 'Response' object has no attribute 'copy'` Solution: - Updated `get_document()` to check if `context` is not a `dict`. - If not, the method now safely returns `request.not_found()`. sentry - 6521023695 Forward-Port-Of: odoo/enterprise#82936
- With l10n_mx_edi, create an invoice and send it to the cfdi. Download the cfdi xml. - Import the xml as a vendor bill. Confirm and click on Update SAT. - The vendor bill list view the l10n_mx_edi_cfdi_sat_state is set to false despite the l10n_mx_edi.document.sat_state being set. https://github.com/odoo/enterprise/commit/b34a4d105c67807628284257be51295e33da6bf0 added the ability to import cfdi xml as vendor bills and updated the selection for l10n_mx_edi.document.state with invoice_receiv
Original PR description
- With l10n_mx_edi, create an invoice and send it to the cfdi. Download the cfdi xml. - Import the xml as a vendor bill. Confirm and click on Update SAT. - The vendor bill list view the l10n_mx_edi_cfdi_sat_state is set to false despite the l10n_mx_edi.document.sat_state being set. https://github.com/odoo/enterprise/commit/b34a4d105c67807628284257be51295e33da6bf0 added the ability to import cfdi xml as vendor bills and updated the selection for l10n_mx_edi.document.state with invoice_received. However the compute _compute_l10n_mx_edi_cfdi_state_and_attachment which depends on l10n_mx_edi.document.state was not updated to take into account that new possible selection. opw-4673134 Forward-Port-Of: odoo/enterprise#84764 Forward-Port-Of: odoo/enterprise#83629
Extension of l10n_co_edi to allow creation of mandate invoices. - Adding mandate-related fields for product_template. - Adding relevant EDI XML section for mandate products. Task [link](https://www.odoo.com/odoo/project/967/tasks/4302423) task-4302423 Forward-Port-Of: odoo/enterprise#77673
Original PR description
Extension of l10n_co_edi to allow creation of mandate invoices. - Adding mandate-related fields for product_template. - Adding relevant EDI XML section for mandate products. Task [link](https://www.odoo.com/odoo/project/967/tasks/4302423) task-4302423 Forward-Port-Of: odoo/enterprise#77673