Search
Navigate
Branch
Tuesday, June 11, 2024
69 changes
28 changes
Resolved issues and error corrections
Public visitors could trigger an error when selecting text or double-clicking in certain forum posts. This update checks that the toolbar option exists before changing it, preventing the page from breaking for forum users.
Original PR description
HOW TO REPRODUCE: ================= - website_helpdesk_forum addon shall be installed - Do not login (navigate as a public user) - Go to the Website > Forum > Help > any post - Double-click anywhere…
HOW TO REPRODUCE: ================= - website_helpdesk_forum addon shall be installed - Do not login (navigate as a public user) - Go to the Website > Forum > Help > any post - Double-click anywhere in the post body or select some text - You should get the following client error from `OdooEditor._updateToolbar: Cannot read properties of null (reading 'classList')` HOW TO FIX: =========== By ensuring the wysiwig toolbar unlink button is present in the page before adding classes to it. The bug seems to be in relation to the following PR odoo/odoo#147919, where the `OdooEditor._updateToolbar` method is slightly modified to ensure the toolbar unlink button is not visible initially, but forgets to check whether the element exists before hiding it. The bug can be spotted when `website_helpdesk_forum` is installed as it sets to 0 the level of karma required to answer a post while keeping the full edit rights (image and link) to 30 pts. As a consequence, the WYSIWYG is included in the post page even when requested by the public users, but the WYSIWYG toolbar does not include the unlink button. task-3932751 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update brings the spreadsheet component to the latest version for Odoo 17.2 and fixes issues affecting charts, spreadsheet sizing, and paste behavior. Users should see more reliable spreadsheet interactions and fewer errors when working with charts or pasting content.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/14317eeae [REL] 17.2.10 Task: 0 https://github.com/odoo/o-spreadsheet/commit/2e5e95105 [FIX] chart: deepCopy support…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/14317eeae [REL] 17.2.10 Task: 0 https://github.com/odoo/o-spreadsheet/commit/2e5e95105 [FIX] chart: deepCopy support object without prototype Task: 3950324 https://github.com/odoo/o-spreadsheet/commit/146b0a0ae [FIX] spreadsheet: fix `useSpreadsheetRect` Task: 3965147 https://github.com/odoo/o-spreadsheet/commit/1217b1e83 [FIX] composer: Prevent default paste in composer Task: 3864000 https://github.com/odoo/o-spreadsheet/commit/f7df2fd33 [DOC] update integration minimal setup Task: 3918013 Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Mehdi Rachico (mera) <mera@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com>
This fixes occasional failures in automated tests that verify Discuss channel subscriptions. The change makes the tests reliably detect when users join or leave channels, helping keep release validation stable without changing user-facing behavior.
Original PR description
Before this PR, some bus subscription tests were occasionally failing. These tests open Discuss and assert that bus subscriptions are correctly handled in different scenarios, such as joining/leaving a channel. To achieve this, they use the `waitForChannel` helper. Sometimes, the subscription is made before calling `waitForChannel`, which causes the test to fail. This PR replaces the `waitForChannel` method by adding a step when `bus_service.addChannel` is called. Since this setup can be done before opening Discuss, we ensure that the subscription is not missed. fixes runbot-61294,65319,61969
Miscellaneous changes
**Steps:** - Go to project > task > archive a task - Open portal view of project > go to the same project - Filter the search view by choosing 'Archived' - Click on the archived task **Issue:** - Session error when trying to open the archive task **Cause:** - By clicking on the archived task, page is refreshed and it tries to open the kanban view again and hence gives session expire error **Fix:** - Hiding the archived filter as suggested by the specs of the task because it seems
Original PR description
**Steps:** - Go to project > task > archive a task - Open portal view of project > go to the same project - Filter the search view by choosing 'Archived' - Click on the archived task **Issue:** - Session error when trying to open the archive task **Cause:** - By clicking on the archived task, page is refreshed and it tries to open the kanban view again and hence gives session expire error **Fix:** - Hiding the archived filter as suggested by the specs of the task because it seems to be irrelevant in project sharing - Passing the correct context so that it will take all the tasks in counting and not just the active tasks. **Affected version**: saas-16.3 - master **Task**-3690536 Forward-Port-Of: odoo/odoo#150866
26 changes
Enhancements to existing features
The Planning app’s guided mobile tour has been updated so it works with the mobile layout. It now accounts for the default mobile view and hidden options, helping users complete the tour reliably on phones.
Original PR description
Before this commit the problem with the mobile tour not working in mobile is due to the fact that mobile default view is kanban and planning requires to switch to gantt view and some options are put under a dropdown button in mobile. Added the steps required to make the tour functional. task-3705287
15 changes
Enhancements to existing features
This update adds the ability to include gratification bonuses in Luxembourg employee payslips as an input type. When a gratification is added to other inputs, it will be automatically calculated and processed the same way as the 13th month bonus, simplifying payroll management for companies operating in Luxembourg.
Original PR description
This will add an input type: gratification for the luxembourg payslips. If there is a gratification in the other inputs, the rules will be added to the payslip and the gratification is computed in the same way as the 13th month. Task: 3794333 Forward-Port-Of: odoo/enterprise#63920 Forward-Port-Of: odoo/enterprise#63800
Current behavior: --- When logged as a mass mailing user, in a mailing, using the editor, when applying a shape to an image, the image disappears. Steps to reproduce: --- 1. Make sure Marc Demo has the role User 2. Log in as Marc Demo 3. Create a new mailing 4. Select a template 5. Insert a picture 6. Select the picture 7. Change its shape to round 8. (preview works fine) 9. Save the mailing 10. Picture disappears Cause of the issue: --- When applying a shape to an image,
Original PR description
Current behavior: --- When logged as a mass mailing user, in a mailing, using the editor, when applying a shape to an image, the image disappears. Steps to reproduce: --- 1. Make sure Marc Demo has…
Current behavior: --- When logged as a mass mailing user, in a mailing, using the editor, when applying a shape to an image, the image disappears. Steps to reproduce: --- 1. Make sure Marc Demo has the role User 2. Log in as Marc Demo 3. Create a new mailing 4. Select a template 5. Insert a picture 6. Select the picture 7. Change its shape to round 8. (preview works fine) 9. Save the mailing 10. Picture disappears Cause of the issue: --- When applying a shape to an image, the resulting file is of mimetype 'image/svg+xml', when sending it to the server, the attachment is going to go through _check_contents https://github.com/odoo/odoo/blob/d752abb24d9b25bb6d10e411961447c8c8e28bba/odoo/addons/base/models/ir_attachment.py#L364 and if the mimetype is "xml_like", it will check for views write rights, without what the mimetype will be forced to text/plain. But in web_editor, when computing the image src https://github.com/odoo/odoo/blob/b6392e2c7dbc8e1ece326e28a9698801142714b7/addons/web_editor/models/ir_attachment.py#L34 if the mimetype is not a supported image type, src will be False. Fix: --- Override of _writeShape to use canvas to convert the image from svg to png. opw-3672798 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#164703 Forward-Port-Of: odoo/odoo#159497
PURPOSE Fix various issues related to automatic source creation and naming involving auto increment to avoid uniqueness constraint issues. Notably * avoid always incrementing (e.g. same name should not increment); * do not fail to start counters at 0 when possible; * improve write / batch bad support; * correctly check uniqueness in utm.source.mixin currently done on wrong model; * fill holes in counter sequence instead of continuing above higher found counter;
Original PR description
PURPOSE
Fix various issues related to automatic source creation and naming involving
auto increment to avoid uniqueness constraint issues.
Notably
* avoid always incrementing (e.g. same name should not increment);
* do not fail to start counters at 0 when possible;
* improve write / batch bad support;
* correctly check uniqueness in utm.source.mixin currently done on wrong
model;
* fill holes in counter sequence instead of continuing above higher found
counter;
See sub commits for more details.
LINKS
Task-3874538 (odoo/odoo#162229) Do not create endless copies
Task-3837272 (odoo/odoo#159699) Incorrect UTM source enumeration
Forward-Port-Of: odoo/odoo#168439
Forward-Port-Of: odoo/odoo#164287Current behavior before PR: - Cannot select projects with `company_id` = `False` when creating sale orders.  Desired behavior after PR is merged: - Allow to select projects with `company_id` = `False`.  --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port
Original PR description
Current behavior before PR: - Cannot select projects with `company_id` = `False` when creating sale orders.  Desired behavior after PR is merged: - Allow to select projects with `company_id` = `False`.  --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#167144
prior this PR, when a user selects an option from the HSN autocomplete widget using the keyboard, the selected value is not reflected in the input field. Technical Reason: The `onSelect()` method in the HSN autocomplete widget calls `this.props.record.update()`, followed by a call to `commitChanges()` in `input_field_hook.js` due to the `keydown` event. Consequently, the update method is called twice: first with the selected option value and then with the user's typed input value. This
Original PR description
prior this PR, when a user selects an option from the HSN autocomplete widget using the keyboard, the selected value is not reflected in the input field. Technical Reason: The `onSelect()` method in the HSN autocomplete widget calls `this.props.record.update()`, followed by a call to `commitChanges()` in `input_field_hook.js` due to the `keydown` event. Consequently, the update method is called twice: first with the selected option value and then with the user's typed input value. This sequence results in the input field displaying the typed value instead of the selected option. With this PR, selecting an option from the HSN autocomplete widget using the keyboard correctly updates the input field with the selected value. task-3961406 Forward-Port-Of: odoo/odoo#167501
With the update of ace to 1.32.3, the lib is formatting her cells by getting them with hardcoded position in a array (here: 0, 1 and 2). On our side we are adding our o_info as first element, so the lib returns a traceback because her elements are shifted. After this commit, our info node is added after the lib nodes to not shift the all bunch. runbot issue 55085 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#168
Original PR description
With the update of ace to 1.32.3, the lib is formatting her cells by getting them with hardcoded position in a array (here: 0, 1 and 2). On our side we are adding our o_info as first element, so the lib returns a traceback because her elements are shifted. After this commit, our info node is added after the lib nodes to not shift the all bunch. runbot issue 55085 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#168264
**Current behavior:** Depending on the created picking type and product costing method, unlocking a validated picking and changing the quantity field of a move will not update the qty_received field of the respective purchase order line. **Expected behavior:** These values will be synchronized. **Steps to reproduce:** 1. Make a purchase order with a following combination: A) `picking_type = receipt` `product cost_method != standard` B) `picking_type = dropship`
Original PR description
**Current behavior:** Depending on the created picking type and product costing method, unlocking a validated picking and changing the quantity field of a move will not update the qty_received field…
**Current behavior:**
Depending on the created picking type and product costing
method, unlocking a validated picking and changing the quantity
field of a move will not update the qty_received field of the
respective purchase order line.
**Expected behavior:**
These values will be synchronized.
**Steps to reproduce:**
1. Make a purchase order with a following combination:
A) `picking_type = receipt`
`product cost_method != standard`
B) `picking_type = dropship`
(product cost_method is arbitrary)
2. Confirm the order, validate the picking
3. Unlock the picking and change the quantity value of the stock
move
4. Observe that the purchase order's qty_received value does not
change
**Cause of the issue:**
In the case of the receipt picking type, when creating a stock
valuation layer for the related move with a 'standard' product
costing method we do not call `_get_price_unit()`. This method
will compute the qty_received value of a purchase order line.
After we unlock the picking and change the move quantity, this
field will not be recomputed (because it is stored). Thus, it is
not updated.
The dropship case is similar, except in the creation of a
dropship SVL, `_get_price_unit()` is called before checking the
product's cost method- so the bug always occurs.
**Fix:**
Make the purchase order line's qty_received field depend on it's
stock moves' quantities.
Reorder the conditional in the dropship SVL creation so it
matches that of the incoming SVL creation- this is for
improving consistency rather than a necessary modification for
the fix.
opw-3863510
Forward-Port-Of: odoo/odoo#166366Small fix on commit 71ab15e4 to remove the `required` attribute on `currency_field` in the form view, which makes it impossible to save the form if the field is not set and editing something unrelated on a monetary field, for ex. the field label or the translations. The checks in the constraint `_check_currency_field()` added in the same commit should be enough to ensure the `currency_field` is set as needed. Impacted branches: `17.0` and `master` Steps to reproduce: 1. Go to the
Original PR description
Small fix on commit 71ab15e4 to remove the `required` attribute on `currency_field` in the form view, which makes it impossible to save the form if the field is not set and editing something…
Small fix on commit 71ab15e4 to remove the `required` attribute on `currency_field` in the form view, which makes it impossible to save the form if the field is not set and editing something unrelated on a monetary field, for ex. the field label or the translations. The checks in the constraint `_check_currency_field()` added in the same commit should be enough to ensure the `currency_field` is set as needed. Impacted branches: `17.0` and `master` Steps to reproduce: 1. Go to the Technical menu -> Fields and select a monetary type field 2. Try to update the Field Label or any field translation Current behavior: The editing is blocked by the required 'Currency field'. Expected behavior: Allow editing the form view or the related translations. 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#168504
Since Babel issue 621 [0] searching the week number of a date alongside with the year can lead to a wrong year in the result. e.g.: `2023-01-01` gives `W1 2022` Before the present commit, the tests were surprisingly expecting the wrong result. An attempt was made [1] to fix the upstream issue but was never merged. In the meanwhile, Debian reverted the Babel issue 621 [2] in their package. It means that our test would fail with the patched Debian package like in Ubuntu Noble or Debian
Original PR description
Since Babel issue 621 [0] searching the week number of a date alongside with the year can lead to a wrong year in the result. e.g.: `2023-01-01` gives `W1 2022` Before the present commit, the tests…
Since Babel issue 621 [0] searching the week number of a date alongside with the year can lead to a wrong year in the result. e.g.: `2023-01-01` gives `W1 2022` Before the present commit, the tests were surprisingly expecting the wrong result. An attempt was made [1] to fix the upstream issue but was never merged. In the meanwhile, Debian reverted the Babel issue 621 [2] in their package. It means that our test would fail with the patched Debian package like in Ubuntu Noble or Debian Bookworm. On the other hand, if we fix the test to expect the correct value, it would fail on unpatched version of the Babel lib. So, this commit mitigate the issue by guessing the expected value even if the result is wrong. [0]: https://github.com/python-babel/babel/pull/621 [1]: https://github.com/python-babel/babel/pull/887 [2]: https://sources.debian.org/patches/python-babel/2.10.3-1/ For reference (from @Xavier-Do ) Pip version and Jammy ```python In [1]import babel.dates In [2]: import datetime In [3]: babel.dates.format_date(datetime.datetime(2023, 1, 1), "EEE w YYYY", "fr_BE") Out[3]: 'dim. 52 2022' In [4]: babel.dates.format_date(datetime.datetime(2023, 1, 1), "EEE w YYYY", "en_US") Out[4]: 'Sun 1 2022' ``` It looks like the week year used is actually not localized, adding a cornercase on Sunday Noble version ```python In [1]import babel.dates In [2]: import datetime In [3]: babel.dates.format_date(datetime.datetime(2023, 1, 1), "EEE w YYYY", "fr_BE") Out[3]: 'dim. 52 2022' In [4]: babel.dates.format_date(datetime.datetime(2023, 1, 1), "EEE w YYYY", "en_US") Out[4]: 'Sun 1 2023' ``` Forward-Port-Of: odoo/odoo#168132
We recently renamed `o-sidePanelButton` to `o-button` in the library but did not change it inside Odoo. 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#144139
Original PR description
We recently renamed `o-sidePanelButton` to `o-button` in the library but did not change it inside Odoo. 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#144139
-PROPBLEM: one of the common onboarding step is setup company data where we will fill street, country or phone,... . Currently, when doing that step, the system always considers done eventhough we just open it and do nothing, unlike behavior in v16 where we will need to fill 'street' at least to be able to consider done -Solution is to do same like in 16.0, check if 'street' then we will consider the setup company data onboarding is finish https://github.com/odoo/odoo/blob/16.0/odoo/addons/b
Original PR description
-PROPBLEM: one of the common onboarding step is setup company data where we will fill street, country or phone,... . Currently, when doing that step, the system always considers done eventhough we just open it and do nothing, unlike behavior in v16 where we will need to fill 'street' at least to be able to consider done -Solution is to do same like in 16.0, check if 'street' then we will consider the setup company data onboarding is finish https://github.com/odoo/odoo/blob/16.0/odoo/addons/base/models/res_company.py#L336-L338 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#167941
Problem: Combo product can have a price that is not the expected one Steps to reproduce: - Install "Point of Sale" app - Go to POS settings and go to the Tax settings - In the tab "Advanced Options", check "Included in Price" - Create a product of type "Combo", set the price to $7.00 - Add 3 combo choices with products prices as $7.00, $2.50 and $1.50 with no extra price - In the shop, sell this combo - The total price is $6.99 rather than $7.00 Cause: The condition supposed to fi
Original PR description
Problem: Combo product can have a price that is not the expected one Steps to reproduce: - Install "Point of Sale" app - Go to POS settings and go to the Tax settings - In the tab "Advanced Options", check "Included in Price" - Create a product of type "Combo", set the price to $7.00 - Add 3 combo choices with products prices as $7.00, $2.50 and $1.50 with no extra price - In the shop, sell this combo - The total price is $6.99 rather than $7.00 Cause: The condition supposed to fill the remaining price in the last orderline was always false opw-3897431 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#167472
Currently administrators for the POS app don't see margins and costs when the setting is disabled. The setting should only affect simple POS users and admins should always see the margins and costs. Steps to reproduce: ------------------- * Connect as admin * Go to the current user settings and make sure he is a POS administrator * Go the **Point of Sale** App * Go to setting, make sure **Margins and Costs** is disabled * Open a shop session * Select the information icon on a product
Original PR description
Currently administrators for the POS app don't see margins and costs when the setting is disabled. The setting should only affect simple POS users and admins should always see the margins and costs. Steps to reproduce: ------------------- * Connect as admin * Go to the current user settings and make sure he is a POS administrator * Go the **Point of Sale** App * Go to setting, make sure **Margins and Costs** is disabled * Open a shop session * Select the information icon on a product > Margins and Costs are not shown Why the fix: ------------ Data loaded is different since using the new relational model https://github.com/odoo/odoo/commit/28b7d698be8255f933ba5314e44e7059746fc234 opw-3897694 Forward-Port-Of: odoo/odoo#166294
Issue: ------ The use case in which certain employees, who work part-time over several days (and not part-time with full days with one or more days off), want to take leaves distributed via allocations given in days is unfortunately not taken into account. For example: - monday morning: duration = 0.4 - monday afternoon: duration = 0.4 allocation duration = round(0.8 * 16) / 16 = round(12.8) / 16 = 13 / 16 = 0.8125 ~= 0.81 Note: It's strange to round up to the sixteenth of an 8-hou
Original PR description
Issue: ------ The use case in which certain employees, who work part-time over several days (and not part-time with full days with one or more days off), want to take leaves distributed via allocations given in days is unfortunately not taken into account. For example: - monday morning: duration = 0.4 - monday afternoon: duration = 0.4 allocation duration = round(0.8 * 16) / 16 = round(12.8) / 16 = 13 / 16 = 0.8125 ~= 0.81 Note: It's strange to round up to the sixteenth of an 8-hour day. It makes sense to have half-hour intervals, but it is does not work correctly with calendars that differ from the standard 8-hour calendar. opw-3957459 Forward-Port-Of: odoo/odoo#168517
Currently, when buying products with variants the attribute values are not reflected on the backend order. Steps to reproduce: ------------------- * Go to the **Point of Sale** app * Open a shop session * Make an order for the product `Desk Organizer` * Select any option from the product configuration popup * Pay and Validate the order * Go in the backend * Navigate to **Orders** * Select the last order > Observation: Selected options for the product are not reflected Why the fix
Original PR description
Currently, when buying products with variants the attribute values are not reflected on the backend order. Steps to reproduce: ------------------- * Go to the **Point of Sale** app * Open a shop…
Currently, when buying products with variants the attribute values are not reflected on the backend order. Steps to reproduce: ------------------- * Go to the **Point of Sale** app * Open a shop session * Make an order for the product `Desk Organizer` * Select any option from the product configuration popup * Pay and Validate the order * Go in the backend * Navigate to **Orders** * Select the last order > Observation: Selected options for the product are not reflected Why the fix: ------------ The function `set_full_product_name()` was changed with https://github.com/odoo/odoo/commit/672c853ab7d77ac1cebd2f4d16bd98fc454b2d55 It basically changed the behavior to set the `full_product_name` to `display_name` where it was previously computed with the attribute values. The fix is based on the fix made for the `pos_retaurant` module. https://github.com/odoo/odoo/commit/3b6455eb979078354e3b1009a354ca7010e5fec9 This will re-introduce a feature removed from the first commit mentioned which is to show the attribute values in full name of the product. This has already been re-introduced in later versions https://github.com/odoo/odoo/blob/8e00b5337a2ee30e667b0b2e6ff26b7df9fef2e3/addons/point_of_sale/static/src/app/store/models.js#L315-L320 This is in sass-17.2 opw-3950366 Forward-Port-Of: odoo/odoo#168697 Forward-Port-Of: odoo/odoo#168121
Steps: - Create a quotation template with 2+ products and optional products. - Create a new quotation using the template. - Add an optional product from the template. Issue: - Optional product is not added at the end of the quotation. Cause: - Optional product sequence defaults to 10 instead of continuing the sequence. Fix: - Adjust the sequence of added optional products in add_order_button to be the max sequence + 1. opw-3932966 I confirm I have signed the CLA and read the P
Original PR description
Steps: - Create a quotation template with 2+ products and optional products. - Create a new quotation using the template. - Add an optional product from the template. Issue: - Optional product is not added at the end of the quotation. Cause: - Optional product sequence defaults to 10 instead of continuing the sequence. Fix: - Adjust the sequence of added optional products in add_order_button to be the max sequence + 1. opw-3932966 I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#168311
Steps: - Install Ecom. - Buy a product without login and set different address for billing and shipping. Issue: - SO email sent to both billing and shipping emails it should only be sent to billing (main address). Cause: - In Ecom address controller it set both shipping and billing partner record to follower of SO and because of that SO sent to both emails. Fix: - Only set main address partner to follower of SO so it'll only send email to Customer's main email like it do for normal
Original PR description
Steps: - Install Ecom. - Buy a product without login and set different address for billing and shipping. Issue: - SO email sent to both billing and shipping emails it should only be sent to billing (main address). Cause: - In Ecom address controller it set both shipping and billing partner record to follower of SO and because of that SO sent to both emails. Fix: - Only set main address partner to follower of SO so it'll only send email to Customer's main email like it do for normal Sales flow. opw-3714686 Forward-Port-Of: odoo/odoo#168259
## Description As an internal user one has access to many timesheets as if from the backend. If the group by option of the portal view `/my/timesheets` is set to `None`, on a large database with millions of timesheets, the computation for the aggregate of the `unit_amount` is really slow, and it faces an internal limitation of the ORM when the `mapped` hitting fields out of cache. The code path used to fetch the missing records `expands_ids` has a bad space complexity and with millions of reco
Original PR description
## Description As an internal user one has access to many timesheets as if from the backend. If the group by option of the portal view `/my/timesheets` is set to `None`, on a large database with millions of timesheets, the computation for the aggregate of the `unit_amount` is really slow, and it faces an internal limitation of the ORM when the `mapped` hitting fields out of cache. The code path used to fetch the missing records `expands_ids` has a bad space complexity and with millions of records, this leads to an Memory Error (OOM). ## Benchmark On a database with over 4+M of timesheets matching the domain: | | Before | After | |--------|-----------|-------| | Timing | N/A (OOM) | 0.7s | ## Reference task-3977971 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#168549
### Issue: When in firm mode, it is possible to change manually the name of an invoice, so it is possible to change its sequence number when the invoice is in draft. If the invoice sequence is more than 1, it is impossible to change the journal afterward. The client need to reset the name to nothing, change the journal and then rechange the name if he wants to change the journal. The same thing happens with Vendor Bills when the firm setting is activated. ### Steps to reproduce: - In Set
Original PR description
### Issue: When in firm mode, it is possible to change manually the name of an invoice, so it is possible to change its sequence number when the invoice is in draft. If the invoice sequence is more…
### Issue: When in firm mode, it is possible to change manually the name of an invoice, so it is possible to change its sequence number when the invoice is in draft. If the invoice sequence is more than 1, it is impossible to change the journal afterward. The client need to reset the name to nothing, change the journal and then rechange the name if he wants to change the journal. The same thing happens with Vendor Bills when the firm setting is activated. ### Steps to reproduce: - In Settings > Accounting > 'Accounting Firms Mode' select "Customer Invoices and Vendor Bills" - In Accounting > Customers > Invoices create a new Invoice - Choose a name, for example 'INV234' and a journal - Save the record - Change the journal - When saving a popup indicates it is impossible to change the journal when a sequence number is assigned ### Cause: When not in firm mode the invoice can't be filled (displays as Draft) and will be generated from the previous invoice name (In fact the user can only modify the name of the first invoice created in the journal, not the next ones). With the firm mode activated, the user can always modify the name of the draft invoice, giving it a sequence number. Then when changing the journal, it is blocked because the user is not supposed to change the journal of an invoice with a sequence number greater than 1. The check: https://github.com/odoo/odoo/blame/16.0/addons/account/models/account_move.py#L2303 ### Solution: Modify the condition of the UserError so that it is not triggered when the 'Firm Mode' is active. opw-3925402 Forward-Port-Of: odoo/odoo#168319
As the selection badge is not checking if a badge is selected to set the value, when clicking to a badge that is selected yet, is updating the value to itself, so the value does not change.  By checking if the badge is trying to assign the same value, we can set the badge to false.  cc @Te
Original PR description
As the selection badge is not checking if a badge is selected to set the value, when clicking to a badge that is selected yet, is updating the value to itself, so the value does not change.  By checking if the badge is trying to assign the same value, we can set the badge to false.  cc @Tecnativa --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#167191 Forward-Port-Of: odoo/odoo#140544
Prior to this PR, colors of "Today" were inconsistent depending on the view in calendar, sometimes red, sometimes purple. There was also a contrast issue when switching to dark mode. This PR adjusts the color of "Today" to maintain color consistency and to provide contrast in bright mode and dark mode. task-3754159 Part of task-3575827 | Before | After | |--------|--------| |  |  |  | |  |  | |  |  | |  |  | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#154856
The field is translatable, but the default value wasn't being translated so new projects' tasks labels were always defaulting to English regardless of language. opw-3976888 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#168567 Forward-Port-Of: odoo/odoo#168482
Original PR description
The field is translatable, but the default value wasn't being translated so new projects' tasks labels were always defaulting to English regardless of language. opw-3976888 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#168567 Forward-Port-Of: odoo/odoo#168482
When the user performs a mass produce, the generated serial numbers will only be created if they do not already exist in the database Forward-Port-Of: odoo/odoo#168141
Original PR description
When the user performs a mass produce, the generated serial numbers will only be created if they do not already exist in the database Forward-Port-Of: odoo/odoo#168141
Before this fix, undoing a command MOVE_GLOBAL_FILTER broke the history because the inverse command was missing from the inverse registry. This fix adds the missing inverse command. OWP: 3966053 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#168744
Original PR description
Before this fix, undoing a command MOVE_GLOBAL_FILTER broke the history because the inverse command was missing from the inverse registry. This fix adds the missing inverse command. OWP: 3966053 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#168744
Steps to reproduce: - Install eCommerce and `l10n_be` (to get a second company) - Enable online payment in the settings - Go to the payment provider and duplicate it for belgium company - Publish the payment provider - Make an invoice for a customer - Send or generate the link - Open the link in incognito - Pay the invoice Issues: When we create the `temp_move` we don't provide the `company_id` as such we will go in the compute which will fail. https://github.com/odoo/odoo/blob/f1
Original PR description
Steps to reproduce: - Install eCommerce and `l10n_be` (to get a second company) - Enable online payment in the settings - Go to the payment provider and duplicate it for belgium company - Publish the…
Steps to reproduce: - Install eCommerce and `l10n_be` (to get a second company) - Enable online payment in the settings - Go to the payment provider and duplicate it for belgium company - Publish the payment provider - Make an invoice for a customer - Send or generate the link - Open the link in incognito - Pay the invoice Issues: When we create the `temp_move` we don't provide the `company_id` as such we will go in the compute which will fail. https://github.com/odoo/odoo/blob/f1d6ad2645fcc206b43454400e2c70d1d23a4ee3/addons/account/models/account_journal.py#L363 https://github.com/odoo/odoo/blob/17d85347f92d813704d3f8faef366166bbbaa730/addons/account/models/account_move.py#L693 In this line we call the `_accessible_branches` method on the belgium company as expected, in this method we use `self.env.companies` (default company) and we do an intersection with the current company (belgium). This results in an empty recordset for the company. Later in the stock we face this instruction which ends up in an empty recordset error as we have an ensure one at the beggining of `_get_violated_lock_dates`. https://github.com/odoo/odoo/blob/f1d6ad2645fcc206b43454400e2c70d1d23a4ee3/addons/account/models/account_move.py#L4394 https://github.com/odoo/odoo/blob/f1d6ad2645fcc206b43454400e2c70d1d23a4ee3/addons/account/models/company.py#L370 Website solve it by copying the `public_user` and affecting it to the desired company. https://github.com/odoo/odoo/blob/9079b7038754ca4fe547086d3fe8947a4bb6ddce/addons/website/models/res_company.py#L43-L57 A potential approach to solve this problem could be to allow `public_user` to access all of the companies (possibly problematic w.r.t. security). The solution chosen for this PR is a local solution as it makes more sense for stable. opw-3859791 Forward-Port-Of: odoo/odoo#162058
Helpdesk dashboards and reports now use clearer wording for time, SLA, and rating measures, making the figures easier for business users to interpret consistently. Kanban progress bars also show plain status labels like in progress, ready, and blocked instead of relying on color names.
Original PR description
-* = helpdesk_timesheet
After this merge:
- Display in progress/ready/blocked in the Kanban progress bar instead of grey/green/red.
- Unify the labels of the measures in all tickets, tickets analysis, and SLA analysis as per below:
hours spent -> hours spent (timesheets)
hours to assign -> working hours to assign
hours to close -> working hours to close
hours to respond -> average hours to respond
hours until SLA deadline / working hours to reach SLA -> working hours
until SLA deadline
rating (/5) -> rating (1-5)
task-3827128The Belgian payroll setup now stores the fiscal voluntarism rate on the employee record instead of each contract. This makes the rate easier to manage consistently when an employee has contract changes, reducing duplicate updates and improving payroll data reliability.
Original PR description
This will move the fiscal voluntarism rate from the contract to the employee. Task: 3877405
Administrators can now set default follower subscription preferences from the activity wizard. These defaults apply to new followers and new records for the same model, helping teams keep future notifications consistent without changing existing records.
Original PR description
From the activity wizard: "Default subscription"
1. "Edit default subscription" as action, after "Add follower";
2. Should be available with admin rights for the model;
3. This default subscription should apply to all new followers,
not existing ones;
4. This default subscription should apply to all records of the same
model;
5. Need a pop-up to confirm the action;
From the activity wizard:
1. Toggle to apply the selection to all records of the same model;
2. Should be applied to new records only, not existing ones;
task-3954970Resolved issues and error corrections
The report editor in Odoo Studio is adjusted so newly created reports can accept content and layout blocks more reliably. It also avoids duplicating embedded report content, reducing editing issues and unexpected output for users building reports.
Code cleanup and technical improvements
The India localization test suite now uses a shared setup for common test data used across multiple tax report checks. This reduces duplicated work in the codebase and helps make future changes to India reporting tests faster and more consistent, without changing user-facing behavior.
Original PR description
Because a lot of indian test cases create similar fields and functions this commit creates a common test class that sets up the bulk of data needed for all indian test cases. - Task: 3892508 - [Community PR](https://github.com/odoo/odoo/pull/167991)
Miscellaneous changes
Before this PR: The 8-column report for the "current year earnings" account type (equity_unaffected) incorrectly included the previous balance. This caused inconsistencies in reports, leading to imbalances between debit/credit and debtor/creditor columns, as well as assets/liabilities. Previously, this issue could be addressed by modifying the include_initial_balance boolean in the "account.user.type" model. However, this boolean is now computed and resides in the "account.account" model, ma
Original PR description
Before this PR: The 8-column report for the "current year earnings" account type (equity_unaffected) incorrectly included the previous balance. This caused inconsistencies in reports, leading to imbalances between debit/credit and debtor/creditor columns, as well as assets/liabilities. Previously, this issue could be addressed by modifying the include_initial_balance boolean in the "account.user.type" model. However, this boolean is now computed and resides in the "account.account" model, making it uneditable. After this PR: This fix ensures the "current year earnings" account reflects only the activity for the current period, excluding the previous balance. This change eliminates the need to rely on the include_initial_balance state for this account, leading to a consistent and accurate 8-column report. Forward-Port-Of: odoo/enterprise#64138 Forward-Port-Of: odoo/enterprise#60713
When removing the date_scope normal in 6e607e662dd2, we missed an occurrence of it in the Aged Receivable report. As a result, auditing the Aged Receivable is currently broken:  Solution: since this domain is on Accounts Receivable / Accounts Payable, which are Balance Sheet accounts, the `normal` date_scope is equivalent to `from_beginning` in this case. taskid: 3177283 Forward-Port-
Original PR description
When removing the date_scope normal in 6e607e662dd2, we missed an occurrence of it in the Aged Receivable report. As a result, auditing the Aged Receivable is currently broken:  Solution: since this domain is on Accounts Receivable / Accounts Payable, which are Balance Sheet accounts, the `normal` date_scope is equivalent to `from_beginning` in this case. taskid: 3177283 Forward-Port-Of: odoo/enterprise#64270
We recently renamed `o-sidePanelButton` to `o-button` in the library but did not change it inside Odoo. Forward-Port-Of: odoo/enterprise#64199 Forward-Port-Of: odoo/enterprise#51744
Original PR description
We recently renamed `o-sidePanelButton` to `o-button` in the library but did not change it inside Odoo. Forward-Port-Of: odoo/enterprise#64199 Forward-Port-Of: odoo/enterprise#51744
Forward-Port-Of: odoo/enterprise#63968
Original PR description
Forward-Port-Of: odoo/enterprise#63968
Before this commit, when we canceled a sign request, a traceback would occurs: ``` UncaughtPromiseError > TypeError Uncaught Promise > Cannot read properties of undefined (reading 'doAction') TypeError: Cannot read properties of undefined (reading 'doAction') ``` Even if goBackToKanban is correctly binded, controlPanelProps was not calling it properly. taskid: 3932003 Forward-Port-Of: odoo/enterprise#62772
Original PR description
Before this commit, when we canceled a sign request, a traceback would occurs: ``` UncaughtPromiseError > TypeError Uncaught Promise > Cannot read properties of undefined (reading 'doAction') TypeError: Cannot read properties of undefined (reading 'doAction') ``` Even if goBackToKanban is correctly binded, controlPanelProps was not calling it properly. taskid: 3932003 Forward-Port-Of: odoo/enterprise#62772
Document fields in the salary configurator now check for existing files on the current contract. Fields are set to required only if no associated file is detected on the contract, otherwise we just show the already existed file. Task-3468245 Forward-Port-Of: odoo/enterprise#55641
Original PR description
Document fields in the salary configurator now check for existing files on the current contract. Fields are set to required only if no associated file is detected on the contract, otherwise we just show the already existed file. Task-3468245 Forward-Port-Of: odoo/enterprise#55641
Increase window size for previously active employees Forward-Port-Of: odoo/enterprise#63995
Original PR description
Increase window size for previously active employees Forward-Port-Of: odoo/enterprise#63995
Versions -------- - 17.0+ Steps ----- 1. Go to an employee w/ a running contract; 2. open their working schedule; 3. change lunch breaks from the default 12:00 to 12:30; 4. go to the Payroll app; 5. check the work entries of the employee. Issue ----- Each work entry has two rows: 1. first half of working day, pill takes up the entire column; 2. second half of working day, pill takes up half a column. Cause ----- Commit 19c957264ed reworked how gantt pills get rounded, maki
Original PR description
Versions -------- - 17.0+ Steps ----- 1. Go to an employee w/ a running contract; 2. open their working schedule; 3. change lunch breaks from the default 12:00 to 12:30; 4. go to the Payroll app; 5.…
Versions -------- - 17.0+ Steps ----- 1. Go to an employee w/ a running contract; 2. open their working schedule; 3. change lunch breaks from the default 12:00 to 12:30; 4. go to the Payroll app; 5. check the work entries of the employee. Issue ----- Each work entry has two rows: 1. first half of working day, pill takes up the entire column; 2. second half of working day, pill takes up half a column. Cause ----- Commit 19c957264ed reworked how gantt pills get rounded, making it so that a if a record extends on a day/half-day/hour/month for even a minute, the pill includes it. Because the half-day is hardcoded to 12:00, this means that a lunch break that's one minute later than that will display the first shift as a full day in work entry gantt view. Solution -------- Partially re-introduce the old pill rounding logic for this specific view/module. Add it to the hr_gantt module so the same visual issue gets resolved in hr_attendance_gantt views. opw-3895160 Forward-Port-Of: odoo/enterprise#63768 Forward-Port-Of: odoo/enterprise#62390
Currently, when a user has 2 pos preparation displays, one set on some categories the other on all, if you add on the order a product that is not in the categories of the first display, the order will show no changes. Steps to reproduce: ------------------- * Go to the **Kitchen display** App * Have two displays created * Display 1: `Product Categories`: Food * Display 2: `Product Categories`: All (Leave blank) * Go to the **Point of Sale** App * Open restaurant session * Select a
Original PR description
Currently, when a user has 2 pos preparation displays, one set on some categories the other on all, if you add on the order a product that is not in the categories of the first display, the order…
Currently, when a user has 2 pos preparation displays, one set on some categories the other on all, if you add on the order a product that is not in the categories of the first display, the order will show no changes. Steps to reproduce: ------------------- * Go to the **Kitchen display** App * Have two displays created * Display 1: `Product Categories`: Food * Display 2: `Product Categories`: All (Leave blank) * Go to the **Point of Sale** App * Open restaurant session * Select a table and add a drink to the order > Observations: The order button is not highlighted. Why the fix: ------------ Before the refactoring, the categories loaded for each display would use the function `_get_pos_category_ids()`. This function would return a list of all possible categories (ex: `[1, 2, 3, 4, 5]`) when the setting was set on all categories. After the refactoring, the categories loaded correspond to the setting of the display. Thus, in the case of a display on all categories it would return `[]`. At the end, we would end up concatenating stuff like `([5], [])` instead of `([5], [1, 2, 3, 4, 5])`. Only displays with categories set would be taken into account. opw-3923383 Forward-Port-Of: odoo/enterprise#63315
In the reports, the groups called '(No Group)' fold and unfold together. ### Steps to reproduce: - in Accounting app go in Configuration > Account Groups and create an account group for the current company - Go in Reporting > Profit and Loss - All '(No Group)' lines fold and unfold together ### Cause: Line ids are duplicate for (No Group) lines: '\~account.group\~'. The hierarchy is ignored for these ids, there is no reference to the parent line. ### Solution: Integrate the parent
Original PR description
In the reports, the groups called '(No Group)' fold and unfold together. ### Steps to reproduce: - in Accounting app go in Configuration > Account Groups and create an account group for the current company - Go in Reporting > Profit and Loss - All '(No Group)' lines fold and unfold together ### Cause: Line ids are duplicate for (No Group) lines: '\~account.group\~'. The hierarchy is ignored for these ids, there is no reference to the parent line. ### Solution: Integrate the parent line in the ids to take the hierarchy into consideration. ### opw-3885400 Forward-Port-Of: odoo/enterprise#63804 Forward-Port-Of: odoo/enterprise#62647
**Version:** - master **Steps to reproduce:**: - open 'subscription: payment reminder' template - click on preview **Issue:** - preview payment reminder template it is giving error because it is not getting payment link for 'pay now' button. **Solution:** - added a fallback value for 'pay now' button if it not get payment link value. task-3956795 Forward-Port-Of: odoo/enterprise#63444
Original PR description
**Version:** - master **Steps to reproduce:**: - open 'subscription: payment reminder' template - click on preview **Issue:** - preview payment reminder template it is giving error because it is not getting payment link for 'pay now' button. **Solution:** - added a fallback value for 'pay now' button if it not get payment link value. task-3956795 Forward-Port-Of: odoo/enterprise#63444
With this commit whenever utm.source name is written it will check its uniquness (generating a unique name if necessary). [Reproduce] - Install marketing_automation - Have Campaign with a Template: - Access the Campaign's Template and go to the Settings tab. - Note down the NAME of the `utm.source` (found in the Advanced section, under the field "Name"). - Delete this template (which will also delete associated `mailing.mailing` records.) - Create new template (by returning to the Campaign
Original PR description
With this commit whenever utm.source name is written it will check its uniquness (generating a unique name if necessary). [Reproduce] - Install marketing_automation - Have Campaign with a Template: -…
With this commit whenever utm.source name is written it will check its uniquness (generating a unique name if necessary). [Reproduce] - Install marketing_automation - Have Campaign with a Template: - Access the Campaign's Template and go to the Settings tab. - Note down the NAME of the `utm.source` (found in the Advanced section, under the field "Name"). - Delete this template (which will also delete associated `mailing.mailing` records.) - Create new template (by returning to the Campaign form, opening an activity, creating template) - Open the Campaign's Template: - Disable read-only on the Name field in Advanced section (modify the `mailing.mailing.form` view). - Change its name to the previously noted `utm.source` NAME. - Save -> BUG: Trackback "The name must be unique" [Why this bug happens?] When you delete a template (`mailing.mailing`) related to a `utm.source`, the `utm.source` will still exist. Then, when attempting to change the `utm.source` name, the system is supposed to detect if the name already exists and generate a new unique name if necessary. However, due to the mechanism utilized in the function (ref.1), which searches for existing names based on existing templates (`mailing.mailing`), which you have deleted, the existing `utm.source` NAME won't be found. Consequently, the function mistakenly believes the name is unique and doesn't generate a new name, leading to the encountered error. (ref.1) `UtmMixin._get_unique_names` https://github.com/odoo/odoo/blob/205caa3d6539187009a8b8bbd1557e75fe045ff3/addons/utm/models/utm_mixin.py#L77 opw-3835704 Forward-Port-Of: odoo/enterprise#64240 Forward-Port-Of: odoo/enterprise#63360
For Greece, the ISO 3166 code (GR) and European Union code (EL) is not the same. Since this is a european report, we need the European Union code. opw-3890635 Forward-Port-Of: odoo/enterprise#64151 Forward-Port-Of: odoo/enterprise#64087
Original PR description
For Greece, the ISO 3166 code (GR) and European Union code (EL) is not the same. Since this is a european report, we need the European Union code. opw-3890635 Forward-Port-Of: odoo/enterprise#64151 Forward-Port-Of: odoo/enterprise#64087
Following odoo/odoo@0bc65a8, the empty domain [] is normalized as True, which means that used with expression.OR, as it is the case in appointment portal, it will accept all records, leading to a useless search. Instead, append appropriate domains and use OR on the whole list, before using AND on the default domain, to restrict records to the search, as expected. Task-3976616 Forward-Port-Of: odoo/enterprise#64028
Original PR description
Following odoo/odoo@0bc65a8, the empty domain [] is normalized as True, which means that used with expression.OR, as it is the case in appointment portal, it will accept all records, leading to a useless search. Instead, append appropriate domains and use OR on the whole list, before using AND on the default domain, to restrict records to the search, as expected. Task-3976616 Forward-Port-Of: odoo/enterprise#64028
User using the filters in the bank reco widget want to be able to save them for next time. In the implementation of the search view of the kanban, we only added the filter. This commit will add the favorite section. task-3871505 Forward-Port-Of: odoo/enterprise#60860
Original PR description
User using the filters in the bank reco widget want to be able to save them for next time. In the implementation of the search view of the kanban, we only added the filter. This commit will add the favorite section. task-3871505 Forward-Port-Of: odoo/enterprise#60860
In a multi-company environment, the Analytic Plans "Departments" and "Internal" are optional but have no analytic account. Because analytic account had a default on the env company. We want the analytic account to be available for every company. task-3970078 communtiy: https://github.com/odoo/odoo/pull/167995 Forward-Port-Of: odoo/enterprise#63898
Original PR description
In a multi-company environment, the Analytic Plans "Departments" and "Internal" are optional but have no analytic account. Because analytic account had a default on the env company. We want the analytic account to be available for every company. task-3970078 communtiy: https://github.com/odoo/odoo/pull/167995 Forward-Port-Of: odoo/enterprise#63898
Purpose ------- Let's say a user works a lot on a spreadsheet and performs a lot of heavy operations generating very large revisions (with lots of commands), such as copy-pasting a very large zone (there's one UPDATE_CELL command per copy-pas cell) If the user does multiple such very large revision, one after the other, every thing is fine client side. The next time the spreadsheet is open though: the server needs to load all those revisions to send them to the client. The revisions ca
Original PR description
Purpose ------- Let's say a user works a lot on a spreadsheet and performs a lot of heavy operations generating very large revisions (with lots of commands), such as copy-pasting a very large zone…
Purpose ------- Let's say a user works a lot on a spreadsheet and performs a lot of heavy operations generating very large revisions (with lots of commands), such as copy-pasting a very large zone (there's one UPDATE_CELL command per copy-pas cell) If the user does multiple such very large revision, one after the other, every thing is fine client side. The next time the spreadsheet is open though: the server needs to load all those revisions to send them to the client. The revisions can be so large it can blow up the server memory limit. The spreadsheet cannot be open anymore. Solution -------- In this commit, we increase the number of snapshot by snapshotting more often. Previously, we used to snapshot when opening a spreadsheet and no activity was done in the spreadsheet in the last 12 hours. It's reduced to 2 hours in this commit. The reason we don't want to snapshot too often is that it kills the local history (CTRL+Z) of connected users. Task: 3940465 Forward-Port-Of: odoo/enterprise#63741
Fix the share availabilities button elevation happening on lower screen sizes. related PR: odoo/enterprise#51755 Task-3975976 Forward-Port-Of: odoo/enterprise#63990
Original PR description
Fix the share availabilities button elevation happening on lower screen sizes. related PR: odoo/enterprise#51755 Task-3975976 Forward-Port-Of: odoo/enterprise#63990
Currently, a traceback with `KeyError: 'emisor'` occurs when attempting to update payments after creating and signing a PPD and external trade invoice, and registering a payment. opw-3904458 Forward-Port-Of: odoo/enterprise#62976
Original PR description
Currently, a traceback with `KeyError: 'emisor'` occurs when attempting to update payments after creating and signing a PPD and external trade invoice, and registering a payment. opw-3904458 Forward-Port-Of: odoo/enterprise#62976
When a user in US/Pacific generates a file after 17:00 the File Creation Date field incorrectly has tomorrow's date. To fix it use the localized timestamp for the File Creation Date as well. opw-3942095 Forward-Port-Of: odoo/enterprise#64188 Forward-Port-Of: odoo/enterprise#64172
Original PR description
When a user in US/Pacific generates a file after 17:00 the File Creation Date field incorrectly has tomorrow's date. To fix it use the localized timestamp for the File Creation Date as well. opw-3942095 Forward-Port-Of: odoo/enterprise#64188 Forward-Port-Of: odoo/enterprise#64172
The map view has been improved to handle grouping operations gracefully. Previously, when users attempted to group records by a property in the map view, the system would crash. Now, the grouping feature is disabled in the map view (similar to how it works in the gantt view), preventing errors and providing a better user experience.
Original PR description
Purpose ======= Do not crash when grouping by a property, instead we want to disable the group by like it has been done for the gantt view. Clean a test about the group by in the gantt view. Task-3876726
Customers can now edit optional products on their active subscriptions (in progress, paused, or churned) when their recurring plan allows renewals or product additions. Previously, the optional products tab was hidden after subscription confirmation, preventing customers from making changes to optional items even though they could add them during renewal or upsell processes.
Original PR description
Before this commit, when recurring plan allow customer to renew or add product then customer can create upsell or renew subscription from portal and they can add or remove product which are added as optional product in subscription and in upsell or renew quotation optional products from parent subscription are copied in new quotation. optional product tab is getting hidden from user when subscription is confirmed so user will not able to edit optional product value anymore. after this commit, make optional product tab visible to user when subscription is 'in progress', 'paused' or 'churned' state and recurring plan allow customer to renew or add product so user will able to edit optional products for subscription. task-3858850
Resolved issues and error corrections
This fix resolves an issue where marketing campaign templates could fail with a "name must be unique" error when renaming tracking sources. The system now properly checks for existing tracking source names across all records, not just active templates, and automatically generates unique names when needed to prevent conflicts.
Original PR description
With this commit whenever utm.source name is written it will check its uniquness (generating a unique name if necessary). [Reproduce] - Install marketing_automation - Have Campaign with a Template: -…
With this commit whenever utm.source name is written it will check its uniquness (generating a unique name if necessary). [Reproduce] - Install marketing_automation - Have Campaign with a Template: - Access the Campaign's Template and go to the Settings tab. - Note down the NAME of the `utm.source` (found in the Advanced section, under the field "Name"). - Delete this template (which will also delete associated `mailing.mailing` records.) - Create new template (by returning to the Campaign form, opening an activity, creating template) - Open the Campaign's Template: - Disable read-only on the Name field in Advanced section (modify the `mailing.mailing.form` view). - Change its name to the previously noted `utm.source` NAME. - Save -> BUG: Trackback "The name must be unique" [Why this bug happens?] When you delete a template (`mailing.mailing`) related to a `utm.source`, the `utm.source` will still exist. Then, when attempting to change the `utm.source` name, the system is supposed to detect if the name already exists and generate a new unique name if necessary. However, due to the mechanism utilized in the function (ref.1), which searches for existing names based on existing templates (`mailing.mailing`), which you have deleted, the existing `utm.source` NAME won't be found. Consequently, the function mistakenly believes the name is unique and doesn't generate a new name, leading to the encountered error. (ref.1) `UtmMixin._get_unique_names` https://github.com/odoo/odoo/blob/205caa3d6539187009a8b8bbd1557e75fe045ff3/addons/utm/models/utm_mixin.py#L77 opw-3835704
This update corrects an incorrect file path used by the Mexican EDI system for validating foreign trade documents (ComercioExterior20). The fix ensures that the system can properly locate and use the correct validation rules, preventing potential errors when processing Mexican electronic invoices related to foreign trade transactions.
Original PR description
ComercioExterior20 has wrong path for its xsd runbot-55568 Forward-Port-Of: odoo/enterprise#63429
This fix corrects how payment amounts are rounded when processing Mexican electronic invoices (CFDI) in multiple currencies. Previously, rounding inconsistencies could occur when payments were made in Mexican Pesos (MXN) but invoices were in different currencies, leading to discrepancies between calculated totals and tax amounts. The fix ensures consistent rounding calculations across all payment sections.
Original PR description
The 'Totales' section is computed by aggregating amounts then rounding. The 'ImpuestosP' section is computed by making the sum of rounded values. So when the payment is expressed in MXN but not the invoices, we could have a rounding issue here.
This update prevents administrators from accidentally modifying critical spreadsheet revision records, which could break the spreadsheet's history and functionality. Only the active status can now be changed; other fields are locked to maintain data integrity.
Original PR description
Revisions are technical records that are never supposed to be changed (except the `active` field). If any of `res_model`, `res_id`, `revision_uuid` is changed, the spreadsheet history will be broken. Changing field `commands` could also break the spreadsheet if the json is malformed or the command is made invalid. In this commit, we prevent the admin to make any changes.
This fix addresses a compliance issue with Mexican tax filings (CFDI) where payments created in Odoo before submission can now be properly dated with the current submission date instead of the payment creation date. Mexican tax law allows payments to be submitted up to 10 days into the following month, and this change ensures the filing date reflects when the document is actually sent to the government rather than when the payment was initially recorded.
Original PR description
Issue: Sometimes payments are created in Odoo prior to sending the CFDI, by law payments don't have to be necessarily sent to the government on the same month and can sometimes be sent up to the first 10 days of the next month. Solution: fill the 'fecha' field with the current datetime for the cfdi of the payments, Then send it. Task-3885769
This fix resolves a crash that occurred when users tried to add optional columns to the balance sheet report in the accounting module. The issue was caused by a missing technical identifier that prevented the column selection dropdown from displaying properly. Users can now successfully customize their balance sheet reports by adding new columns without encountering errors.
Original PR description
Steps to reproduce ================== - Enable debug mode - Go to accounting app - reporting - balance sheet - three wheels on top right - click on the icon to show new columns -> Invalid portal target Cause of the issue ================== The uniqueRendererClass is used to target a portal for the dropdown, but that class isn't applied in the AccountReportListRenderer. https://github.com/odoo/odoo/pull/160566 opw-3974195
A recent change to the Point of Sale preparation display feature has been reverted due to an issue identified in the code review. This fix restores the previous working version of the bill screen and preparation display functionality to ensure the restaurant ordering system operates correctly.
Original PR description
This reverts commit f7f0317a1d6d129a847e09c3ccd0df19ae99d3e5. Cause: https://github.com/odoo/enterprise/pull/63268#issuecomment-2160019128 Linked with https://github.com/odoo/odoo/pull/168815
This fix resolves an error that occurred when loading demo data for the Belgian-US consolidation module. The issue was caused by invoice records being created with mismatched company assignments between the invoice header and its line items. By ensuring all parts of the invoice use the same company, the demo data now installs successfully without errors.
Original PR description
When installing the l10n_be_us_consolidation_demo module, there is a traceback and invoice data is not installed. ### Steps to reproduce: - Create a new DB with nothing installed and demo data not active - Install l10n_be_us_consolidation_demo - 'Activate the developer mode' in settings page - 'Load Demo Data' in settings page and confirm - Check logs and see traceback ### Cause: The account.move is created with the default company and the account.move.line if forced to be created with an account from the company "l10n_be.demo_company_be". In the end the move and its lines does not have the same company, so the record creation fails in check_company(). ### Solution: Specify the company of the account.move in the record to be the same as the lines. opw-3952634
This fix corrects an issue where Fulfillment by Merchant (FBM) orders from Amazon were incorrectly being assigned to FBA (Fulfillment by Amazon) warehouses. The change ensures that FBM orders use the correct warehouse, improving order fulfillment accuracy and preventing inventory management conflicts.
Original PR description
opw-3958044 opw-3948546
Fixed an issue in the salary configurator where meal voucher amounts were not being copied from the employee's existing contract. Previously, the system would default to a fixed amount of 7.45€ per worked day instead of using the actual amount specified in the contract. This fix ensures the correct meal voucher amount is carried over when configuring salaries.
Original PR description
In the salary configurator, we use a meal voucher amount by default: 7 .45€/worked day. It should really copy the meal voucher amount from the contract instead. Task: Forward-Port-Of: odoo/enterprise#63797 Forward-Port-Of: odoo/enterprise#61655
This fix resolves an issue in the Profit and Loss report where ungrouped account lines (labeled as "(No Group)") were folding and unfolding together instead of individually. The problem occurred because these lines shared duplicate identifiers without considering their parent-child relationships. The fix now properly incorporates parent line information into the line identifiers, allowing each ungrouped account to be expanded or collapsed independently.
Original PR description
In the reports, the groups called '(No Group)' fold and unfold together. ### Steps to reproduce: - in Accounting app go in Configuration > Account Groups and create an account group for the current company - Go in Reporting > Profit and Loss - All '(No Group)' lines fold and unfold together ### Cause: Line ids are duplicate for (No Group) lines: '\~account.group\~'. The hierarchy is ignored for these ids, there is no reference to the parent line. ### Solution: Integrate the parent line in the ids to take the hierarchy into consideration. ### opw-3885400 Forward-Port-Of: odoo/enterprise#63804 Forward-Port-Of: odoo/enterprise#62647
This update prevents administrators from accidentally modifying critical revision records in spreadsheets, which could break the spreadsheet history and functionality. The system now locks down revision records so only the active status can be changed, protecting the integrity of spreadsheet data and its historical tracking.
Original PR description
Revisions are technical records that are never supposed to be changed (except the `active` field). If any of `res_model`, `res_id`, `revision_uuid` is changed, the spreadsheet history will be broken. Changing field `commands` could also break the spreadsheet if the json is malformed or the command is made invalid. In this commit, we prevent the admin to make any changes.