Tuesday, April 29, 2025
54 changes · saas-18.3
Enhancements to existing features
Demo records for fleet, employee fleet, and timesheet-related sales have been adjusted to better demonstrate the new ESG module workflows. A new app category was also added so the ESG module is easier to organize and present in demonstrations.
Original PR description
In this PR, we adapt existing demo data to showcase the flows of the new ESG module. We also create a category for this new module. [task-4517841](https://www.odoo.com/odoo/project.task/4517841) Related to https://github.com/odoo/enterprise/pull/79004
The live chat sessions report now opens with a line chart instead of a bar chart, using the total record count as the default measure. This makes trend analysis over time more immediate and easier for teams to interpret without changing chart settings first.
Original PR description
**Current behavior before PR:** Prior to this PR, the chart type was by default a bar chart, and the default measure was sessions with calls. **Desired behavior after PR is merged:** Now, the default chart type is changed to a line chart, and the default measure is set to count (number of records). task-[4752951](https://www.odoo.com/odoo/project.task/4752951) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Tax return checks now also verify the country set on fiscal positions. This helps businesses catch configuration mismatches earlier and improves the reliability of tax reporting.
When creating a new partner from a bank statement line, the name supplied by the bank is now filled in automatically. This reduces manual typing during reconciliation and helps users create missing partners faster with fewer data entry errors.
Original PR description
When a bank statement line has a partner name (from the bank), that is not in our database, we have a button to create it. Add the partner name from the bank as the default for the new partner. task-4749340
Resolved issues and error corrections
The update ensures website sales tests explicitly enable price lists before relying on them. This keeps automated checks aligned with recent behavior changes and helps prevent false test failures in online shop pricing scenarios.
Original PR description
After e1145d56162a5b88fe56b78abf70f7bd104ead00 we do not compute pricelists unless they are enabled which caused some tests to fail as they expected pricelists to be activated.
Miscellaneous changes
## Version: 18.0+ ## Issue: PDF quotes on multiple pages having only the total table on the last page encounter a display issue. The total table is cut and partially displayed at the bottom of the penultimate page. ## Steps to reproduce: - Install Sales app; - Navigate to the Settings app: - Under the `Companies` section, configure the document layout: - Ensure the `Bubble` (or `Boxed`) layout is selected; - Navigate to the Sales app: - Create a new quote with 8x `Chair floo
Original PR description
## Version: 18.0+ ## Issue: PDF quotes on multiple pages having only the total table on the last page encounter a display issue. The total table is cut and partially displayed at the bottom of the…
## Version:
18.0+
## Issue:
PDF quotes on multiple pages having only the total table on the last page encounter a display issue. The total table is cut and partially displayed at the bottom of the penultimate page.
## Steps to reproduce:
- Install Sales app;
- Navigate to the Settings app:
- Under the `Companies` section, configure the document layout: - Ensure the `Bubble` (or `Boxed`) layout is selected;
- Navigate to the Sales app:
- Create a new quote with 8x `Chair floor protection`;
- Via the `Actions` gear button, print the `PDF Quote`.
## Cause:
Complete code refactoring for documents layouts styles introduced by https://github.com/odoo/odoo/pull/169512 has probably not been tested on that use case.
## Fix:
<img width="1105" alt="Capture d’écran 2025-04-03 à 10 25 58" src="https://github.com/user-attachments/assets/67bce15e-c5e9-40f8-9fbf-7721afc98ae5" />
opw-4624623
opw-4627809
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#204575The Live Chat agents report now shows its pivot table measures in the intended order. This makes reporting easier to read and helps users find the right metrics more quickly without changing the underlying data.
Original PR description
This PR fixes the order of the reporting measures in the pivot view of the livechat agents report. task-4753008 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Fixes an issue where clicking an existing calendar event while adding multiple new entries could refresh the calendar and prevent the event popover from appearing. This makes calendar scheduling more reliable for users working with multiple event creations.
Original PR description
In this commit, we avoid the calendar view to redraw if we click on an event in the "multi create add mode". task-4751083 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue that prevented users from adding section or note lines to quotation templates. Sales teams can now organize quote templates as intended without running into save errors.
Original PR description
### Issue: Numerous SO views were recently cleaned up in PR #167023. However, removing `display_type` from the Quotation Template Form no longer adds the key into the `web_save`, so we'll eventually fail the SQL constraint `_accountable_product_id_required` if we try to add a Section or Note to the Template. ### Solution: Add the hidden `display_type` field back to the view. opw-4757060
This update fixes an automated test for the VoIP Do Not Disturb selector that could fail because different environments format the AM/PM time spacing differently. It improves test reliability without changing the customer-facing VoIP behavior.
Original PR description
"Do not disturb selector changes state correctly with limited time" is failing with this error: ``` 9. [toBe] Failed to find 1 of "p" with text "Until Jan 1, 2025, 1:15 AM" (Timeout of 3 seconds). Found 0 instead. > Expected: true > Received: false ``` Depending on the environment, it seems that the time is sometimes formatted with a nonbreaking space before the AM, and sometimes not. This is likely the reason for the failure. This commit adapts the test in order to exclude the problematic space from the selector.
This update fixes internal test setup issues for fleet-related disallowed expense checks by ensuring the test user has the right fleet permissions. It helps prevent false test failures during validation without changing day-to-day product behavior.
Original PR description
Creating fleet objects requires being a fleet administrator or sudo. However because copying fleet objects (specifically vehicles) as well as posting moves *also* requires those rights, using sudo requires about 20 changes throughout the setup and tests. Maybe fleet will eventually want some more specificity in their test ACL management, but just setting the current user as fleet admin seems to do a good job while avoiding most of the mess. https://runbot.odoo.com/odoo/error/163135 https://runbot.odoo.com/odoo/error/181531 Backport of odoo/enterprise#84108
test_01_beacon was disabled to allow an easier forwardport of #207720 This commit fixes the issue by providing a correct substitution for the external call. Runbot error: 182085 Forward-Port-Of: odoo/odoo#207874
Original PR description
test_01_beacon was disabled to allow an easier forwardport of #207720 This commit fixes the issue by providing a correct substitution for the external call. Runbot error: 182085 Forward-Port-Of: odoo/odoo#207874
Currently, an exception is generated when the system tries to find the product category after all product categories have been deleted. Steps to reproduce: 1. Install the `point_of_sale` module without demo data. 2. Navigate to Inventory -> Configuration -> Categories. 3. Delete all categories. 4. Navigate to Point of Sale -> load sample of furniture, bakery or restaurant shop 5. An error occurs. Error: ``` ParseError while parsing /home/odoo/src/odoo/saas-18.2/addons/product/dat
Original PR description
Currently, an exception is generated when the system tries to find the product category after all product categories have been deleted. Steps to reproduce: 1. Install the `point_of_sale` module…
Currently, an exception is generated when the system tries to find the product category after all product categories have been deleted. Steps to reproduce: 1. Install the `point_of_sale` module without demo data. 2. Navigate to Inventory -> Configuration -> Categories. 3. Delete all categories. 4. Navigate to Point of Sale -> load sample of furniture, bakery or restaurant shop 5. An error occurs. Error: ``` ParseError while parsing /home/odoo/src/odoo/saas-18.2/addons/product/data/product_demo.xml:10, somewhere inside ``` This issue[1] occurs because when the system tries to reference the missing product category, it results in a ParseError due to a missing required record. [1] - https://github.com/odoo/odoo/blob/6c01e3994fab23ff1b23da807ecb0bf551066816/addons/product/data/product_demo.xml#L10-L16 This fix resolves the issue by returning False when the reference product category is missing. sentry-6251128895 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#202516
This commit changed the way to give the render_model to the model fleet_vehicle_send_mail (introduced by this commit : #61221b2e6552b21508a6a36ab69352e6793d70c5) 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#207749
Original PR description
This commit changed the way to give the render_model to the model fleet_vehicle_send_mail (introduced by this commit : #61221b2e6552b21508a6a36ab69352e6793d70c5) 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#207749
In 80ff2d2 hooks were added so that we can guarantee currency exchange diff journal entries & items in the proper journal & account- but an accountant doesn't necessarily have a group that permits access to the `Stock.valuation.layer` model (which is checked raw, without sudo, when `stock_account` is installed) -> AccessError So we will always allow access to an SVL record in this context via `sudo()`. Forward-Port-Of: odoo/odoo#207897
Original PR description
In 80ff2d2 hooks were added so that we can guarantee currency exchange diff journal entries & items in the proper journal & account- but an accountant doesn't necessarily have a group that permits access to the `Stock.valuation.layer` model (which is checked raw, without sudo, when `stock_account` is installed) -> AccessError So we will always allow access to an SVL record in this context via `sudo()`. Forward-Port-Of: odoo/odoo#207897
Before this PR, real user name was displayed in the message reaction summary. We should use the custom live chat name if any not to leak the real name of the agent. This PR fixes this issue. 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#207398
Original PR description
Before this PR, real user name was displayed in the message reaction summary. We should use the custom live chat name if any not to leak the real name of the agent. This PR fixes this issue. 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#207398
To reproduce: - Install both `hr_contract_salary` and `project_timesheet_holidays` - Create a public holiday for the company (ex. on May 01) - Create a employee => This create leaves for employee's company public holidays - Create a contract for that employee - Send a signing request to both employee and HR responsible - The employee sign the document - The responsible sign the document => At that time, we're going to update the contract after both parties signed the contract and f
Original PR description
To reproduce: - Install both `hr_contract_salary` and `project_timesheet_holidays` - Create a public holiday for the company (ex. on May 01) - Create a employee => This create leaves for employee's company public holidays - Create a contract for that employee - Send a signing request to both employee and HR responsible - The employee sign the document - The responsible sign the document => At that time, we're going to update the contract after both parties signed the contract and force unarchiving the employee even if it's already active. This commit ensure that unarchiving an already active employee does not create duplicate *future* public holidays. opw-4134712 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#207243 Forward-Port-Of: odoo/odoo#206997
- SaveLastPreparationChangesTour To fix the error, add the three last steps to ensure floor plan is well rendered before close the browser. runbot-error-id~114344 - FinishResidualOrder Wait the screen floor is completely loaded before clicking on table 5 or the order can sometimes not be well loaded. runbot-error-id~161595 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed th
Original PR description
- SaveLastPreparationChangesTour To fix the error, add the three last steps to ensure floor plan is well rendered before close the browser. runbot-error-id~114344 - FinishResidualOrder Wait the screen floor is completely loaded before clicking on table 5 or the order can sometimes not be well loaded. runbot-error-id~161595 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#207573 Forward-Port-Of: odoo/odoo#207469
Steps to reproduce - Have a bank account in the accounting tab of the current company partner - Create an invoice for a customer - Confirm it - Send&Print - Reset the invoice to draft Issue: In 'Other Info' tab, the Recipient Bank (`partner_bank_id`) is still red-only. It occurs since 5c7eefed412e676c6ddf67f62bce514e5bade44c The bank account is now editable even when the invoice is posted but become readonly once the invoice is sent. This means that if a wrong bank account has been s
Original PR description
Steps to reproduce - Have a bank account in the accounting tab of the current company partner - Create an invoice for a customer - Confirm it - Send&Print - Reset the invoice to draft Issue: In 'Other Info' tab, the Recipient Bank (`partner_bank_id`) is still red-only. It occurs since 5c7eefed412e676c6ddf67f62bce514e5bade44c The bank account is now editable even when the invoice is posted but become readonly once the invoice is sent. This means that if a wrong bank account has been set by mistake it is impossible to change it, and a credit note is needed. opw-4683997 Forward-Port-Of: odoo/odoo#206965
Previously, when using a payment method integrated with the Bank App (QR code), a QR code was shown on the customer display. This functionality was lost during the refactoring of the customer display into a standalone OWL app: https://github.com/odoo/odoo/commit/acf78c27b12cf014cd80d20ea5853e63ab9ca03f It was later removed entirely with the deletion of the point_of_sale.CustomerFacingQR template: https://github.com/odoo/odoo/commit/49116abd0916ac835e0ad1f6ba1714b8e80c4272 This commit
Original PR description
Previously, when using a payment method integrated with the Bank App (QR code), a QR code was shown on the customer display. This functionality was lost during the refactoring of the customer display into a standalone OWL app: https://github.com/odoo/odoo/commit/acf78c27b12cf014cd80d20ea5853e63ab9ca03f It was later removed entirely with the deletion of the point_of_sale.CustomerFacingQR template: https://github.com/odoo/odoo/commit/49116abd0916ac835e0ad1f6ba1714b8e80c4272 This commit reintroduces the QR code on the customer display. Forward-Port-Of: odoo/odoo#207627 Forward-Port-Of: odoo/odoo#206872
Removes low value logs in order to have lighter log files and less confusing messages 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#207051
Original PR description
Removes low value logs in order to have lighter log files and less confusing messages 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#207051
In [1], a mechanism was introduced to detect lost notifications when the bus table is cleared during socket disconnection. However, this relies on the "reconnect" event. The "reconnect" event is not triggered when the connection is closed cleanly. In such cases, the next connection is treated as a new one and triggers the "connect" event, which does not check for missed notifications. As a result, any notifications sent while the socket was disconnected can be missed. This commit ensures t
Original PR description
In [1], a mechanism was introduced to detect lost notifications when the bus table is cleared during socket disconnection. However, this relies on the "reconnect" event. The "reconnect" event is not triggered when the connection is closed cleanly. In such cases, the next connection is treated as a new one and triggers the "connect" event, which does not check for missed notifications. As a result, any notifications sent while the socket was disconnected can be missed. This commit ensures that the missed notification check is performed on all connections after the initial one, not only during a "reconnect". [1]: https://github.com/odoo/odoo/pull/206106 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#207557 Forward-Port-Of: odoo/odoo#207392
Steps to reproduce: Using POS configs in french company with l10n_fr_post_cert module installed. - Checkout 1: Prepare an order with several lines held in stock, to ensure that Odoo takes sufficient time for payment. - Cash desk 2: Prepare an order - Cash-desk 1: Start order payment. - Cash-desk 2: Start order payment while cash-desk 1 is still paying. Issue: When writing 'paid' in a pos_order the l10n_fr_post_cert sets the l10n_fr_pos_cert_sequence_id field. A competition error occurs
Original PR description
Steps to reproduce: Using POS configs in french company with l10n_fr_post_cert module installed. - Checkout 1: Prepare an order with several lines held in stock, to ensure that Odoo takes sufficient…
Steps to reproduce: Using POS configs in french company with l10n_fr_post_cert module installed. - Checkout 1: Prepare an order with several lines held in stock, to ensure that Odoo takes sufficient time for payment. - Cash desk 2: Prepare an order - Cash-desk 1: Start order payment. - Cash-desk 2: Start order payment while cash-desk 1 is still paying. Issue: When writing 'paid' in a pos_order the l10n_fr_post_cert sets the l10n_fr_pos_cert_sequence_id field. A competition error occurs on cash desk 2 during payment: could not obtain lock on row in relation “ir_sequence”. The odoo.service.model retries to create the order and since the ir_sequence of pos_config used in the pos_order name is not set to "no_gap", the pos_order names have a gap equal to the number of retries. Task-4708543 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#207555 Forward-Port-Of: odoo/odoo#205935
After clearing the cache you can have inconsistent reward lines that have no coupon associated with them. Steps to reproduce: ------------------- * Create an order and add any reward (Buy X Get Y for example) * Go to the backend to make sure the order is saved in the database * Go back to the POS and clear the cache > Observation: You are stuck on the loading screen Why the fix: ------------ To avoid having inconsistent reward lines that have no coupon associated with them, we delet
Original PR description
After clearing the cache you can have inconsistent reward lines that have no coupon associated with them. Steps to reproduce: ------------------- * Create an order and add any reward (Buy X Get Y for example) * Go to the backend to make sure the order is saved in the database * Go back to the POS and clear the cache > Observation: You are stuck on the loading screen Why the fix: ------------ To avoid having inconsistent reward lines that have no coupon associated with them, we delete all the lines of an order that contains wrong data. As this is not supposed to happen (clearing the cache is a debug functionality), we can safely delete the lines because it's wont impact the real workflow of the users. opw-4655422 Forward-Port-Of: odoo/odoo#206740 Forward-Port-Of: odoo/odoo#202752
When a partner's receivable account is set with a secondary currency, and an invoice is duplicated and its currency is changed, Odoo currently allows the invoice to be validated even though the account's currency no longer matches the invoice currency. that was because the order of calling ```_check_constrains_account_id_journal_id ``` in move line write function. This creates inconsistencies, as the account currency should match the invoice currency when posted. task-4684038 Descrip
Original PR description
When a partner's receivable account is set with a secondary currency, and an invoice is duplicated and its currency is changed, Odoo currently allows the invoice to be validated even though the account's currency no longer matches the invoice currency. that was because the order of calling ```_check_constrains_account_id_journal_id ``` in move line write function. This creates inconsistencies, as the account currency should match the invoice currency when posted. task-4684038 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#207430 Forward-Port-Of: odoo/odoo#204164
This commit fixes an issue with the slide.slide and slide.channel models from website_slides. When a user tries to send a message via the chatter the default_recipients and suggested_recipients added the attendees for slides and courses. This means that everytime someone sends a message on slide.channel or slide.slide potentially hundreds of people would be spammed. To fix this, we override in both models _mail_get_partner_fields. This method is supposed to return the name of the fields link
Original PR description
This commit fixes an issue with the slide.slide and slide.channel models from website_slides. When a user tries to send a message via the chatter the default_recipients and suggested_recipients added…
This commit fixes an issue with the slide.slide and slide.channel models from website_slides. When a user tries to send a message via the chatter the default_recipients and suggested_recipients added the attendees for slides and courses. This means that everytime someone sends a message on slide.channel or slide.slide potentially hundreds of people would be spammed. To fix this, we override in both models _mail_get_partner_fields. This method is supposed to return the name of the fields linked to customers. In the case of the above models, we don't want to send a message to all the attendees (they were stored in partner_ids which is the default field read). Thus by returning an empty list we block the computation of suggested_recipients and default_recipients. Letting full control to the user sending the email which people to notify. task-4736015 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#207155 Forward-Port-Of: odoo/odoo#206474
The default rounding method of '_compute_quantity' function is "UP" while the rounding method used for stock quantities is "HALF-UP". Hence, small discrepancies in the valuation would be introduced over time. ## How to reproduce - Create product P, storable, tracked in Kg - Create a receipt/delivery move for 14g of P -> Stock Quant is updated by 0.01Kg -> Stock Valuation is updated by 0.02Kg OPW-4734980 --- Test result without fix: ``` 2025-04-22 13:40:45,088 38626 ERROR oes_tes
Original PR description
The default rounding method of '_compute_quantity' function is "UP" while the rounding method used for stock quantities is "HALF-UP". Hence, small discrepancies in the valuation would be introduced…
The default rounding method of '_compute_quantity' function is "UP" while the rounding method used for stock quantities is "HALF-UP". Hence, small discrepancies in the valuation would be introduced over time.
## How to reproduce
- Create product P, storable, tracked in Kg
- Create a receipt/delivery move for 14g of P -> Stock Quant is updated by 0.01Kg
-> Stock Valuation is updated by 0.02Kg
OPW-4734980
---
Test result without fix:
```
2025-04-22 13:40:45,088 38626 ERROR oes_test_16 odoo.addons.stock_account.tests.test_stockvaluation: FAIL: TestStockValuation.test_valuation_rounding_method
Traceback (most recent call last):
File "/home/odoo/projects/odoo-src/multiverse/src/16.0/odoo/addons/stock_account/tests/test_stockvaluation.py", line 4397, in test_valuation_rounding_method
self.assertEqual(receipt.move_ids.stock_valuation_layer_ids.quantity, 0.01)
AssertionError: 0.02 != 0.01
```
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#207401
Forward-Port-Of: odoo/odoo#206884Versions -------- - saas-17.4+ Steps ----- 1. Create a SO for non-user client; 2. add a product that isn't published on the website; 3. confirm SO; 4. create downpayment; 5. copy share SO link; 6. open link in private window. Issue ----- > 500: Internal Server Error > Error while render the template > ValueError: Expected singleton: product.product() Cause ----- Commit 9aa52dd6418e removed the creation of a "Down payment" product. Before it, order lines were either of typ
Original PR description
Versions -------- - saas-17.4+ Steps ----- 1. Create a SO for non-user client; 2. add a product that isn't published on the website; 3. confirm SO; 4. create downpayment; 5. copy share SO link; 6.…
Versions -------- - saas-17.4+ Steps ----- 1. Create a SO for non-user client; 2. add a product that isn't published on the website; 3. confirm SO; 4. create downpayment; 5. copy share SO link; 6. open link in private window. Issue ----- > 500: Internal Server Error > Error while render the template > ValueError: Expected singleton: product.product() Cause ----- Commit 9aa52dd6418e removed the creation of a "Down payment" product. Before it, order lines were either of type `display_section` or they had a `product_id` value. After the commit, a third option is for `is_downpayment` to be true. This regressed the fix to this issue added by 34d4ffa01d57d, as instead of ensuring lines have a `product_id` value before checking if reorder is allowed, it decided to check whether they're not of `display_type`. Solution -------- Ensure there's a `product_id` in `sale.order.line` instead of only relying on the caller to filter those out beforehand. opw-4711297 Forward-Port-Of: odoo/odoo#207772 Forward-Port-Of: odoo/odoo#206435
[FIX] accounting: missing chart line "758 Indemnités et autres produits" was missing Steps to reproduce: ------------------- * French Fiscal Localization * Open the Chart of Accounts * Line 758 missing Why the fix: ------------ Based on French government documentation https://www.anc.gouv.fr/files/anc/files/1_Normes_fran%C3%A7aises/Plans%20comptables/Plan-de-comptes-PCG-2025.pdf opw-4699235 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/
Original PR description
[FIX] accounting: missing chart line "758 Indemnités et autres produits" was missing Steps to reproduce: ------------------- * French Fiscal Localization * Open the Chart of Accounts * Line 758 missing Why the fix: ------------ Based on French government documentation https://www.anc.gouv.fr/files/anc/files/1_Normes_fran%C3%A7aises/Plans%20comptables/Plan-de-comptes-PCG-2025.pdf opw-4699235 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#207312 Forward-Port-Of: odoo/odoo#205552
Problem --------- SPV requires the CIUS-RO xml. However, when selecting the "sending to SPV" uniquely in the move send wizard, it fails becuase it's missing the XML. Solution --------- When sending to SPV, generate the XML by default instead of doing nothing if it's not present. task-4720583 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#207574 Forward-Port-Of: odoo/odoo#206828
Original PR description
Problem --------- SPV requires the CIUS-RO xml. However, when selecting the "sending to SPV" uniquely in the move send wizard, it fails becuase it's missing the XML. Solution --------- When sending to SPV, generate the XML by default instead of doing nothing if it's not present. task-4720583 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#207574 Forward-Port-Of: odoo/odoo#206828
Currently an exception was generated when the user tries to save the new employee record after clicking on call icon. Steps to reproduce: 1) Install HR module 2) Create a new employee record by giving employee name 3) Click on the call icon of work phone 4) Now tries to save the new employee record Error: `KeyError: name` This issue occurs because, while clicking the call widget, it creates the record but does not update it in the browser. As a result, when the user tries to sa
Original PR description
Currently an exception was generated when the user tries to save the new employee record after clicking on call icon. Steps to reproduce: 1) Install HR module 2) Create a new employee record by…
Currently an exception was generated when the user tries to save the new employee record after clicking on call icon. Steps to reproduce: 1) Install HR module 2) Create a new employee record by giving employee name 3) Click on the call icon of work phone 4) Now tries to save the new employee record Error: `KeyError: name` This issue occurs because, while clicking the call widget, it creates the record but does not update it in the browser. As a result, when the user tries to save manually, It again creates the record with an empty vals_list. So it will leads to the above traceback from the below lines https://github.com/odoo/odoo/blob/2d64d94487d24278dc3c6615343a793e1ec94daf/addons/hr/models/hr_employee.py#L386 This fix resolves the issue by ensuring that clicking the call icon before saving retains the user input. Additionally, I have added a test to verify this behavior. sentry-6234873849 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#206710 Forward-Port-Of: odoo/odoo#195278
**Steps to Reproduce:** - Go to Sales - Make a user-defined filter and make it the default filter - Try to access the JSON link (/json/sales) - You will see an error **Issue:** - When users apply default filters like 'My Quotations' or 'My Documents', Odoo saves 'uid' in the filter's domain to represent the logged-in user. - However, when the system tries to process this filter, it fails because 'uid' is just a placeholder and not a valid value. This results in an **internal server erro
Original PR description
**Steps to Reproduce:** - Go to Sales - Make a user-defined filter and make it the default filter - Try to access the JSON link (/json/sales) - You will see an error **Issue:** - When users apply…
**Steps to Reproduce:**
- Go to Sales
- Make a user-defined filter and make it the default filter
- Try to access the JSON link (/json/sales)
- You will see an error
**Issue:**
- When users apply default filters like 'My Quotations' or 'My Documents', Odoo saves 'uid' in the filter's domain to represent the logged-in user.
- However, when the system tries to process this filter, it fails because 'uid' is just a placeholder and not a valid value. This results in an **internal server error**, preventing users from applying these filters correctly.
**Cause:**
This issue is caused after this commit: https://github.com/odoo/odoo/pull/182196
- The domain string stored in 'ir.filters' includes 'uid' instead of the actual user ID.
- When Odoo('ast.literal_eval()') tries to evaluate the filter, it doesn’t know what 'uid' means, causing an error.
**Fix:**
- Replace 'uid' with `str(model.env.uid)` before evaluating the domain.
- This ensures 'ast.literal_eval()' processes a valid domain.
**Affected version:** 18.0~master
**opw**-4645608
Forward-Port-Of: odoo/odoo#202890Issue Before This Commit: ------------------------------ The 'company' field was required but not validated in relevant triggers for scrap orders. This allowed operations to proceed even when the 'company' field was unset, leading to unexpected issues and inconsistent behavior. Steps to reproduce: ------------------------------ 1. Enable multi-step routes. 2. Create a new scrap order and add a product. 3. Remove the company from the company field. With This Commit: -----------------
Original PR description
Issue Before This Commit: ------------------------------ The 'company' field was required but not validated in relevant triggers for scrap orders. This allowed operations to proceed even when the 'company' field was unset, leading to unexpected issues and inconsistent behavior. Steps to reproduce: ------------------------------ 1. Enable multi-step routes. 2. Create a new scrap order and add a product. 3. Remove the company from the company field. With This Commit: ------------------------------ - Added a check for 'company' in relevant triggers to ensure that operations only proceed if a company is set. - This fix guarantees that the 'company' field is always set (required), preventing errors and maintaining consistent behavior in scrap orders. task-4497387 Forward-Port-Of: odoo/odoo#206930 Forward-Port-Of: odoo/odoo#194702
Before this commit: - Changing the state via the GST warning did not update the fiscal position. After this commit: - Changing the state via the GST warning correctly update the fiscal position. Task-4681566 Forward-Port-Of: odoo/odoo#207078 Forward-Port-Of: odoo/odoo#205000
Original PR description
Before this commit: - Changing the state via the GST warning did not update the fiscal position. After this commit: - Changing the state via the GST warning correctly update the fiscal position. Task-4681566 Forward-Port-Of: odoo/odoo#207078 Forward-Port-Of: odoo/odoo#205000
Steps: === - Open Restaurant in POS system. - Create an order with preset as `Takeout` and select desired time. - validate it. - open that order in backend. - Observe the takeout date & time—it differs from the originally selected time. Issue: === - The POS system stores the preset_time in local time directly to the database, but the backend consider it as UTC, leading to mismatched times when displayed. Fix: === - The frontend now sets preset_time in UTC before saving, ensuring
Original PR description
Steps: === - Open Restaurant in POS system. - Create an order with preset as `Takeout` and select desired time. - validate it. - open that order in backend. - Observe the takeout date & time—it differs from the originally selected time. Issue: === - The POS system stores the preset_time in local time directly to the database, but the backend consider it as UTC, leading to mismatched times when displayed. Fix: === - The frontend now sets preset_time in UTC before saving, ensuring consistent time handling across the system. Task: 4477402 Related: odoo/enterprise#77558 Forward-Port-Of: odoo/odoo#207571 Forward-Port-Of: odoo/odoo#194058
As per the ATO guidelines, the BAS should be rounded down to whole dollars. task-4734528 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#206380
Original PR description
As per the ATO guidelines, the BAS should be rounded down to whole dollars. task-4734528 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#206380
The controller extended in the PR https://github.com/odoo/odoo/pull/194090 is not added in to the view. Adding into project kanban view. Forward-Port-Of: odoo/odoo#207712
Original PR description
The controller extended in the PR https://github.com/odoo/odoo/pull/194090 is not added in to the view. Adding into project kanban view. Forward-Port-Of: odoo/odoo#207712
Partial forwardport, mainly to increase the request default timeout and lower the logging level for some catched requests. Forward-Port-Of: odoo/odoo#206933 Forward-Port-Of: odoo/odoo#206006
Original PR description
Partial forwardport, mainly to increase the request default timeout and lower the logging level for some catched requests. Forward-Port-Of: odoo/odoo#206933 Forward-Port-Of: odoo/odoo#206006
XLS(X) allows to store in cells date/datetimes values as date/datetime objects. Meaning, instead of having a string with the date in some format, the cell value can hold an actual date/datetime object, which are automatically converted into the `datetime.date`/`datetime.datetime` when the xls(x) file is parsed in python. When an xls(X) file contains at the same time date values under date/datetime objects and under strings with the user format `%d/%m/%Y` (rather than the server format `%Y-%m-
Original PR description
XLS(X) allows to store in cells date/datetimes values as date/datetime objects. Meaning, instead of having a string with the date in some format, the cell value can hold an actual date/datetime…
XLS(X) allows to store in cells date/datetimes values as date/datetime objects. Meaning, instead of having a string with the date in some format, the cell value can hold an actual date/datetime object, which are automatically converted into the `datetime.date`/`datetime.datetime` when the xls(x) file is parsed in python. When an xls(X) file contains at the same time date values under date/datetime objects and under strings with the user format `%d/%m/%Y` (rather than the server format `%Y-%m-%d`), the import was failing with the error `time data '06/30/2025' does not match format '%Y-%m-%d'` This error normally happens when the user tries to do an import with different kind of date formats under strings in the same file e.g. `06/30/2025` and `2025-07-01` and this is understandable that Odoo doesn't know what to do in such a case. But, if you stick to the same format, either only `%d/%m/%Y` either only '%Y-%m-%d'`, Odoo supports it. However the case here is trickier: it's when the file contains at the same time dates under a string format, e.g. `06/30/2025` and under date objects, e.g. `datetime.date(2025, 6, 30)`. Which can happen quite easily, as Google Spreadsheet for instance tends to automatically convert the cells holding a date value into date object. And it's then easy to have a file containing both date objects and strings for date, which looks visually the same in the Google Spreadsheet interface. In addition Google Spreadsheet tends to convert automatically only dates below the 12 of the month because of the american format. e.g. if you set `01/06/2025`, it gets converted into a datetime object if you set `13/06/2025`, it doesn't get converted into a datetime object, the value stays as a string. The goal of this revision is to support to have the possibility of having date values under date objects and string in a user format The problem lied in the fact, during the xls parsing, date objects were converted into strings using the server date format. And then you could finish with data containing both the user format and the server format. The idea is to no longer automatically convert date objects and to support having date objects in the import parsing. And when trying to guess the date/datetime format of the file, date objects are simply ignored, as they do not need to be parsed. Forward-Port-Of: odoo/odoo#206876
The exception for the second trimester for 2024 has been redone for 2025. task-4734827 Forward-Port-Of: odoo/enterprise#84024
Original PR description
The exception for the second trimester for 2024 has been redone for 2025. task-4734827 Forward-Port-Of: odoo/enterprise#84024
Forward-Port-Of: odoo/enterprise#84058 Forward-Port-Of: odoo/enterprise#83244
Original PR description
Forward-Port-Of: odoo/enterprise#84058 Forward-Port-Of: odoo/enterprise#83244
Before this commit, achievement were performed using records on account_move, sale_order and sale_order_log tables (+ move lines, order lines, products etc). Reading those table is extermely costly. We tried to limit what we fetched using context depending on the current action: - https://github.com/odoo/enterprise/commit/7c8621e71b1e8267cd6e0e7968cbb46705568e32 - https://github.com/odoo/enterprise/pull/80043 And we had to revert it here: https://github.com/odoo/enterprise/commit/c
Original PR description
Before this commit, achievement were performed using records on account_move, sale_order and sale_order_log tables (+ move lines, order lines, products etc). Reading those table is extermely costly.…
Before this commit, achievement were performed using records on account_move, sale_order and sale_order_log tables (+ move lines, order lines, products etc). Reading those table is extermely costly. We tried to limit what we fetched using context depending on the current action: - https://github.com/odoo/enterprise/commit/7c8621e71b1e8267cd6e0e7968cbb46705568e32 - https://github.com/odoo/enterprise/pull/80043 And we had to revert it here: https://github.com/odoo/enterprise/commit/c6ee48faa967342c958b4410e71b49bf453cd316 Using a period_domain in the context computed on fly in _where_calc was a bad idea. The record were correctly fetched but the following flow was broken: Go to an approved commission plan --> click on the commissions stat button --> everything is correct Now click on details for a commission line with non empty achived amount All the achievements are correct but when we click on "Details" of sale.commission.achievement.report (id=42) account_move (142), we may end up on another record. Because when the ORM does the fetch query, it will fetch sale.commission.achievement.report where id=42 and at that moment, the context is lost when we click on the line. Therefore as ids are recomputed, the line 42 is not the one corresponding to the account move 142 anymore. This commit ensure we avoid doing a cross join on account_move or sale_order or sale_order_log because these are really bad for performance and we select the record in a CTE. - We select them based on current users, teams if defined - We avoid fetching records outside of plan date values Forward-Port-Of: odoo/enterprise#82518
### Step to reproduce: - In the settings enable Multi-step routes - Inventory > Configuration > Warehouse Management > Warehouses - Put you warehouse in manufacturing in 2 steps - Create a bill of material for a final product FP with one raw: - 3 x COMP (storable product with 10 units in stock) - Create and confirm an MO for 1 unit of FP. > This create a picking from stock to preprod for 3 unit of COMP - In the shopfloor on your MO click on the 3 dots and add components - Register
Original PR description
### Step to reproduce: - In the settings enable Multi-step routes - Inventory > Configuration > Warehouse Management > Warehouses - Put you warehouse in manufacturing in 2 steps - Create a bill of…
### Step to reproduce:
- In the settings enable Multi-step routes
- Inventory > Configuration > Warehouse Management > Warehouses
- Put you warehouse in manufacturing in 2 steps
- Create a bill of material for a final product FP with one raw:
- 3 x COMP (storable product with 10 units in stock)
- Create and confirm an MO for 1 unit of FP.
> This create a picking from stock to preprod for 3 unit of COMP
- In the shopfloor on your MO click on the 3 dots and add components
- Register a new unit of COMP
> The picking from stock to pre-prod was updated twice, hence for 5 units
### Cause of the issue:
When you add a product from the shopfloor, we create a new move from pre-prod to virtual/production with the corresponding `product_uom_qty` of 1 and confirm it:
https://github.com/odoo/enterprise/blob/fc1fb4c56da916b165c43d8f6b6a4b903733a12f/mrp_workorder/wizard/additional_product.py#L63-L68 Since the procure method of this move has been adjusted, this confirmation will correctly create and run a procurement to generate a move from stock to pre-prod. Note that this part of the flow is strictly necessary if the additional product is not already part of the component raw of the MO. However, since in the present case there is already move raw from pre-prod to virtual/production associated to that product, the action confirm will also merge our additional move with the current existing one and hence modify its `product_uom_qty`. However, an override of mrp ensures that when such modification happen, we should also run the procurement to ensure that modifying the demand of a move will also update the related pickings:
https://github.com/odoo/odoo/blob/7def831bea18a91e4fa0f9c6aa6de34f4d6d18c8/addons/mrp/models/stock_move.py#L413-L419 Since we already run that same procurement we should bypass this call in our case.
opw-4562965
Forward-Port-Of: odoo/enterprise#83555
Forward-Port-Of: odoo/enterprise#81818### Issue: Although Fedex's API shoud accept GBP's UK currency for rate requests, you will raise a `CURRENCY.TYPE.INVALID` error from Fedex if you try to get the shipping rate for an order whose currency is GBP. ### Steps to reproduce: - Install UK accounting and select UK's company: the currency will be GBP - Install and set up Fedex Integration - Configure the Fedex in the delivery method, FEDEX_YOU_PACKAGE and Fedex priority for package type and service type - Create a sale order,
Original PR description
### Issue: Although Fedex's API shoud accept GBP's UK currency for rate requests, you will raise a `CURRENCY.TYPE.INVALID` error from Fedex if you try to get the shipping rate for an order whose…
### Issue: Although Fedex's API shoud accept GBP's UK currency for rate requests, you will raise a `CURRENCY.TYPE.INVALID` error from Fedex if you try to get the shipping rate for an order whose currency is GBP. ### Steps to reproduce: - Install UK accounting and select UK's company: the currency will be GBP - Install and set up Fedex Integration - Configure the Fedex in the delivery method, FEDEX_YOU_PACKAGE and Fedex priority for package type and service type - Create a sale order, add shipping and get the shipping rate for your set up fedex UK. #### > Fedex request error: `CURRENCY.TYPE.INVALID` ### Cause of the issue: The currency used in the fedex request is the currency of the order: https://github.com/odoo/enterprise/blob/07845988daad911b10de3b7199b81cc4ed3cfba9/delivery_fedex_rest/models/delivery_fedex.py#L133-L141 that is GBP, however since 44e32359bb79eed08a41861e155c98f664c6d09a we do not automatically convert the GBP currency in UKL. Since Fedex API does not seem to support the GBP we raise the error. ### Fix: We should use the currency conversion available between GBP and UKL. opw-4712354 Forward-Port-Of: odoo/enterprise#83388
Before this commit, the function _generate_deferred_entries was basically a big for-loop in which a lot of account.moves and lines are created in each iteration. This was extremely inefficient because it wasn't leveraging any batch optimization of the ORM. This PR breaks down the for-loop into smaller ones that aggregate vals and performs a single call to create records, instead of individual creations. Same approach was taken for unlinked records and posting moves. The assumption is that rec
Original PR description
Before this commit, the function _generate_deferred_entries was basically a big for-loop in which a lot of account.moves and lines are created in each iteration. This was extremely inefficient…
Before this commit, the function _generate_deferred_entries was basically a big for-loop in which a lot of account.moves and lines are created in each iteration. This was extremely inefficient because it wasn't leveraging any batch optimization of the ORM. This PR breaks down the for-loop into smaller ones that aggregate vals and performs a single call to create records, instead of individual creations. Same approach was taken for unlinked records and posting moves.
The assumption is that records are created in the same order of the values list. This allows for breaking the for-loop because consecutive for-loops can simply inherit the order from the lists created in the loop just before. Another leverage point is that simply adding move_id to account.move.line(s) before creation is equivalent to `move.write({'line_ids': \[...\]})`. Based on the 2 assumptions, we could decouple the creation of moves and their lines into separate loops to aggregate their values.
After this PR creations, unlinks and posting operations are all batched to leverage the power of ORM optimization.
Benchmarks:
|Num deferred expenses | Time before | Time After | Num queries before | Num queries After |
|--------------------- | ----------- | ---------- | ------------------ | ----------------- |
| 100 | 23.9s | 13.1s | 3768 | 2918 |
| 1,000 |181.4s | 66.5s | 17885 | 9530 |
| 10,000 |TIMEOUT(>1200s)| 616,7s | 1379 | 1010 |
opw-4480919
opw-4403217
Forward-Port-Of: odoo/enterprise#81440
Forward-Port-Of: odoo/enterprise#79255Forward-Port-Of: odoo/enterprise#84237
Original PR description
Forward-Port-Of: odoo/enterprise#84237
Forward-Port-Of: odoo/enterprise#84038 Forward-Port-Of: odoo/enterprise#83992
Original PR description
Forward-Port-Of: odoo/enterprise#84038 Forward-Port-Of: odoo/enterprise#83992
Currently, when validating multiple deliveries at once for which at least two are from the same sale order, the related shipping labels are getting printed multiple times. Steps to reproduce: ------------------- * Install fedex * In operation types, select Delivery Orders then hardware * In print on validation, enable Carrier Labels * In the shipping methods, select fedex international * Change Label format to ZPL11 * Connect the database to an iot box * Set up the shipping labels to
Original PR description
Currently, when validating multiple deliveries at once for which at least two are from the same sale order, the related shipping labels are getting printed multiple times. Steps to reproduce:…
Currently, when validating multiple deliveries at once for which at least two are from the same sale order, the related shipping labels are getting printed multiple times. Steps to reproduce: ------------------- * Install fedex * In operation types, select Delivery Orders then hardware * In print on validation, enable Carrier Labels * In the shipping methods, select fedex international * Change Label format to ZPL11 * Connect the database to an iot box * Set up the shipping labels to be send on zebra printer * Create a sale order, using fedex international as shipping * Confirm the SO * Select the delivery * Duplicate the delivery * Validate both deliveries delivery > Observation: I have 4 jobs send for printing instead of 2 Why the fix: ------------ Actually the issue has the same explanation as this commit https://github.com/odoo/enterprise/commit/34267c4fa8c9aaa7c0216de13111a81fb53a67f1 as the IoT overrides `message_post` to send printing jobs each time a message is posted in the chatter. https://github.com/odoo/enterprise/blob/8075101192fb81a78f2a984cf2adf67fc77c0194/delivery_iot/models/stock_picking.py#L30-L46 opw-4526013 Forward-Port-Of: odoo/enterprise#82091
In this commit, --------------- When multi-domains are configured in Odoo, it will generate various webhooks at UrbanPiper, which leads to the creation of duplicate draft orders along with the original order. Added a check to restrict duplicate orders with the same delivery ID and the same delivery provider. task - 4727174 Forward-Port-Of: odoo/enterprise#84182 Forward-Port-Of: odoo/enterprise#83583
Original PR description
In this commit, --------------- When multi-domains are configured in Odoo, it will generate various webhooks at UrbanPiper, which leads to the creation of duplicate draft orders along with the original order. Added a check to restrict duplicate orders with the same delivery ID and the same delivery provider. task - 4727174 Forward-Port-Of: odoo/enterprise#84182 Forward-Port-Of: odoo/enterprise#83583
Currently, an error is raised when the system tries to load non-existent XML files via a scheduled action. **Steps to produce:** - Install `l10n_lu_hr_payroll` module. - Navigate to `Settings > Technical > Scheduled Actions`. - Run action manually for **Payroll: Update data**. - Observe the error. `ValueError: FileNotFoundError('File not found: l10n_lu_hr_payroll/data/hr_salary_rule_data.xml') while evaluating 'model._update_payroll_data()'` Here, `_get_data_files_to_update` method
Original PR description
Currently, an error is raised when the system tries to load non-existent XML files via a scheduled action.
**Steps to produce:**
- Install `l10n_lu_hr_payroll` module.
- Navigate to `Settings > Technical > Scheduled Actions`.
- Run action manually for **Payroll: Update data**.
- Observe the error.
`ValueError: FileNotFoundError('File not found: l10n_lu_hr_payroll/data/hr_salary_rule_data.xml') while evaluating 'model._update_payroll_data()'`
Here, `_get_data_files_to_update` method at [1] attempts to load the `hr_salary_rule_data.xml` and `hr_gratification_rule_data.xml` files, which are not present in the codebase.
[1] - https://github.com/odoo/enterprise/blob/809fda39b439edf6259ade445e396e722c1bb53a/l10n_lu_hr_payroll/models/hr_payslip.py#L219-L220
This commit ensures the removal of invalid file references to prevent errors when executing the scheduled action.
Sentry - 6316151728
Forward-Port-Of: odoo/enterprise#83968
Forward-Port-Of: odoo/enterprise#83893When the user tries to reply a whatsapp message, a traceback will appear. Steps to reproduce the Error: - Install ``whatsapp`` and ``contacts`` module - Go to WhatsApp > Configuration > WhatsApp Business Account > create a new account > Default Users: Mitchell Admin > Save - Go to Contacts > Open Mitchell Admin > Set Phone > Click on Whatsapp > Send a message with any template - Contact will receive the message > Reply to that whatsapp message Traceback: ``` UniqueViolation d
Original PR description
When the user tries to reply a whatsapp message, a traceback will appear. Steps to reproduce the Error: - Install ``whatsapp`` and ``contacts`` module - Go to WhatsApp > Configuration > WhatsApp…
When the user tries to reply a whatsapp message, a traceback will appear. Steps to reproduce the Error: - Install ``whatsapp`` and ``contacts`` module - Go to WhatsApp > Configuration > WhatsApp Business Account > create a new account > Default Users: Mitchell Admin > Save - Go to Contacts > Open Mitchell Admin > Set Phone > Click on Whatsapp > Send a message with any template - Contact will receive the message > Reply to that whatsapp message Traceback: ``` UniqueViolation duplicate key value violates unique constraint "discuss_channel_member_partner_unique" DETAIL: Key (channel_id, partner_id)=(84, 175) already exists. ``` https://github.com/odoo/enterprise/blob/daac4da302e63f87fe3f244099e26b47d08d7cfb/whatsapp/models/discuss_channel.py#L250 At lines [1] and [2], the same partner(s) (e.g., Mitchell Admin) are added to ``partners_to_notify`` multiple times. Channel members should be unique. So, when it tries to create ``channel_member_ids`` with same partners, It will lead to the above traceback. 1- https://github.com/odoo/enterprise/blob/daac4da302e63f87fe3f244099e26b47d08d7cfb/whatsapp/models/discuss_channel.py#L219 2- https://github.com/odoo/enterprise/blob/daac4da302e63f87fe3f244099e26b47d08d7cfb/whatsapp/models/discuss_channel.py#L249 sentry-6252537579 Forward-Port-Of: odoo/enterprise#83908
current implementation of `_get_linked_record_action` searches in `ir.actions.act_window` model to fetch data to create action for `Back button`, a user might not have access to the this model which comes from "Settings/Administration" group, this leads to Access Error steps to reproduce: 1. install sign and sales module 2. login with demo user 3. create a sign template 4. open a sale order and request a sign 5. sign the document 6. Access error (though the document is signed properly)
Original PR description
current implementation of `_get_linked_record_action` searches in `ir.actions.act_window` model to fetch data to create action for `Back button`, a user might not have access to the this model which comes from "Settings/Administration" group, this leads to Access Error steps to reproduce: 1. install sign and sales module 2. login with demo user 3. create a sign template 4. open a sale order and request a sign 5. sign the document 6. Access error (though the document is signed properly) [opw-4575288](https://www.odoo.com/odoo/project/49/tasks/4575288) Forward-Port-Of: odoo/enterprise#83138
Steps: === - Open Restaurant in POS system. - Create an order with preset as Takeout and select desired time. - validate it. - open that order in backend. - Observe the takeout date & time—it differs from the originally selected time. Issue: === - The POS system stores the preset_time in local time, but the backend consider it as UTC, leading to mismatched times when displayed. Fix: === - The frontend now sets preset_time in UTC before saving, ensuring consistent time handling ac
Original PR description
Steps: === - Open Restaurant in POS system. - Create an order with preset as Takeout and select desired time. - validate it. - open that order in backend. - Observe the takeout date & time—it differs from the originally selected time. Issue: === - The POS system stores the preset_time in local time, but the backend consider it as UTC, leading to mismatched times when displayed. Fix: === - The frontend now sets preset_time in UTC before saving, ensuring consistent time handling across the system. Task: 4477402 Related: odoo/odoo#194058 Forward-Port-Of: odoo/enterprise#84183 Forward-Port-Of: odoo/enterprise#77558
This is a fix for a bug that happens from time to time. It was reported more than once that another user was viewed as a caller instead of the actual caller. This happened because when someone calls from a local number, they have a `0` at the beginning of their number. For that case, we use a wildcard that matches anything that the phone number is a suffix to. So, it happened that it matched more than one number when the calling local number is a suffix to more than one international number.
Original PR description
This is a fix for a bug that happens from time to time. It was reported more than once that another user was viewed as a caller instead of the actual caller. This happened because when someone calls from a local number, they have a `0` at the beginning of their number. For that case, we use a wildcard that matches anything that the phone number is a suffix to. So, it happened that it matched more than one number when the calling local number is a suffix to more than one international number. Then, the code just picks the first one randomly, which may be incorrect. This commit fixes this bug by removing the logic of using a wildcard when the call is made through a local number. Instead, we use an exact match. Task-4707543 Forward-Port-Of: odoo/enterprise#84129