Daily updates from Odoo
Navigate
Branch
Friday, April 5, 2024
115 changes
42 changes
New functionality added to Odoo
Updates Ecuador localization to support the 2024 SRI tax changes, including new income withholding rates and 5% and 15% VAT purchase taxes. This helps Ecuadorian companies keep tax setup, electronic documents, and ATS reporting aligned with current legal requirements.
Original PR description
- In 2024 the SRI changes income withholding taxes. We update minor data and create new taxes for the new percentages ( merged the new WH taxes in PR #160014) - Set up tax support configuration for new VAT purchase taxes of 5% and 15%. - Add rate and tax group codes for electronic documents - Add unit test for VAT 5% and 15% - Fix ATS report to declare VAT taxes inactive - Add tax support configuration migration for new VAT taxes in 2024 - Cover base and tax amounts scenario for the ATS, including new tax percentages - Fix missing tax support configuration for taxes with xml_ids: tax_vat_545_sup_08_vat0, tax_vat_545_sup_08_vat_exempt, tax_vat_545_sup_08_vat_not_charged - Add default company configuration for sale and purchase taxes, with new 15% tax --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Enhancements to existing features
Error messages for automated web tour checks now combine the tour and step details with the specific failure reason. This makes it easier for teams to identify which tour failed and why, reducing investigation time in test environments.
Original PR description
In this commit, we make the error message more explicit to avoid to get the same error message for differents tours in runbot. e.g.
- Error: Tour ${tour.name} failed at step ${describeStep(step)}.
- Error: Element has been found. The error seems to be in run() To reach that, we just concatenate the two error messages in only one. e.g.
- Error: Tour ${tour.name} failed at step ${describeStep(step)}. Element has been found. The error seems to be in run()Resolved issues and error corrections
Fixes spreadsheet list and pivot drilldown options so users can reliably open the related records from cells, including cells whose formulas return blank values. It also improves navigation fallback when a requested view is not available, reducing dead ends when opening reports or records.
Original PR description
Since e210809e, the concept of empty cell was altered. Before the aforementioned commit, an evaluated cell with the type "empty" could be empty or have a formula whose result is an empty string. Now, only really empty cells (no content) have the evaluated type "empty". Empty string result is now mapped to the "text" type. The menu actions to drilldown records were relying on the previous logic and were not properly adapted. Task: 3827310 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
Users working in debug mode who switch away from a company can now be redirected cleanly when the current record is no longer accessible. This avoids a confusing access error and keeps behavior consistent with the standard non-debug experience.
Original PR description
… in debug mode Be logged in multiple companies (A and B) with debug mode. Be on a form view of some record which is visible only on company B via ir.rules. With the company switcher, unlog from company B. Before this commit, the user ends up on the multi-record view of that model and received an AccessError. The behaviour is different from the one when the user is not in debug mode. The user should be redirected to the multi-record view but without the AccessError.
This fixes grid scrolling for right-to-left languages, so content displays and moves correctly for users working in those layouts. It improves the experience for international users without changing existing features.
Original PR description
If an element's direction is rtl (right-to-left), then scrollLeft is 0 when the scrollbar is at its rightmost position (at the start of the scrolled content), and then increasingly negative as you scroll towards the end of the content. **Before this commit** The useVirtualGrid hook did not take that into account. **After this commit** Now it does, making use of the ABS math operator.
Changing the language from My Profile could fail when a new sales order screen was open, interrupting users with an error. This fix makes the profile language change handle unsaved records safely, so users can update their preferences without disrupting their workflow.
Original PR description
An error occurred when attempting to change the language in my profile. Steps to reproduce: - Install the ``sale_management`` and ``hr`` module - Settings / Translations / Languages - Activate any…
An error occurred when attempting to change the language in my profile.
Steps to reproduce:
- Install the ``sale_management`` and ``hr`` module
- Settings / Translations / Languages
- Activate any Language
- Open Sales / Click New / Click the profile icon / click ``My Profile``
- Change the language
Traceback:
``` ValueError: too many values to unpack (expected 1)
File "odoo/models.py", line 5848, in ensure_one
_id, = self._ids
ValueError: Expected singleton: sale.order('n', 'e', 'w')
File "odoo/http.py", line 2251, in __call__
response = request._serve_db()
File "odoo/http.py", line 1827, in _serve_db
return self._transactioning(_serve_ir_http, readonly=ro)
File "odoo/http.py", line 1847, in _transactioning
return service_model.retrying(func, env=self.env)
File "odoo/service/model.py", line 134, in retrying
result = func()
File "odoo/http.py", line 1825, in _serve_ir_http
return self._serve_ir_http(rule, args)
File "odoo/http.py", line 1832, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "odoo/http.py", line 2057, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
File "odoo/addons/base/models/ir_http.py", line 220, in _dispatch
result = endpoint(**request.params)
File "odoo/http.py", line 739, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "addons/web/controllers/action.py", line 67, in load_breadcrumbs
display_names.append(request.env[act['res_model']].browse(record_id).display_name)
File "odoo/fields.py", line 1202, in __get__
record.ensure_one()
File "odoo/models.py", line 5851, in ensure_one
raise ValueError("Expected singleton: %s" % self)
```
In line[1] we are getting the record ID as ('n', 'e', 'w') while trying to
change the language.
This commit resolves the mentioned issue by checking the type of record ID
[1] : https://github.com/odoo/odoo/blob/853bd97eda1f4eca5f9f63ef1c5909fddaa98d27/addons/web/controllers/action.py#L67
sentry - 5135218331
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update fixes an issue where default list values in the mail module could be unintentionally shared across multiple records. Each record now gets its own default values, reducing unexpected behavior and improving reliability in messaging-related features.
Original PR description
Before this commit, the default value definition of a Record.attr() was saved once and given to all records of the given model at record creation. This meant that lists were shared between records, which is definitely an undesireable side-effect of the implementation. This commit fixes the issue by instead getting default value from usual lifecyle as a class instance.
This fix ensures invoice and bill audit hashes are created in the correct chronological order, even when documents are sent or printed later. It also separates audit chains by invoice numbering prefix and warns accounting users when journal entries still need hashing, improving legal integrity reporting and reducing confusing audit results.
Original PR description
Entreprise PR: https://github.com/odoo/enterprise/pull/59243
This update brings the spreadsheet component to its latest 17.2 version with several fixes for charts, menus, data validation, exports, and sheet handling. Users should see more reliable spreadsheet behavior, better performance with large datasets, and fewer interface glitches across common spreadsheet actions.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/c15836d72 [REL] 17.2.2 https://github.com/odoo/o-spreadsheet/commit/87b7e625d [FIX] Checkbox: unused className prop in…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/c15836d72 [REL] 17.2.2 https://github.com/odoo/o-spreadsheet/commit/87b7e625d [FIX] Checkbox: unused className prop in checkbox https://github.com/odoo/o-spreadsheet/commit/da05049bf [FIX] chart: preserve label order when aggregate https://github.com/odoo/o-spreadsheet/commit/e3a29bf40 [PERF] helpers: faster default cell height Task: 3845472 https://github.com/odoo/o-spreadsheet/commit/d9630b071 [IMP] package: update owl to version 2.2.10 https://github.com/odoo/o-spreadsheet/commit/d393330db [FIX] *: Compute max/min on huge arrays Task: 3802691 https://github.com/odoo/o-spreadsheet/commit/94b0703de [FIX] menu: non-aligned menu items Task: 3814222 https://github.com/odoo/o-spreadsheet/commit/baaba22c2 [FIX] SplitIntoColumnsPanel: Panel closes instantly Task: 3829192 https://github.com/odoo/o-spreadsheet/commit/90bd1b55f [FIX] EditionPlugin: data validation duplicate values https://github.com/odoo/o-spreadsheet/commit/8c7f35e51 [FIX] Composer: weird behavior of autocomplete dropdown https://github.com/odoo/o-spreadsheet/commit/39eba8ca5 [FIX] BottomBarSheet: Rename a sheet with style content on Firefox Task: 3754944 https://github.com/odoo/o-spreadsheet/commit/95ff322a9 [FIX] bottom_bar: disable sheet drag & drop in readonly Task: 3820888 https://github.com/odoo/o-spreadsheet/commit/88f98a919 [FIX] export: export non-Excel formulas as value https://github.com/odoo/o-spreadsheet/commit/1aa3f0310 [FIX] headers_overlay: unhide cols/rows icon position broken
This fixes a timing issue where mail and Discuss updates could be missed during page startup. Users should see more reliable real-time notifications, counters, and conversation updates when opening Odoo.
Original PR description
Waiting for init messaging to subscribe could lead to notifications being lost, because the bus dispatches them as soon as it receives them, even if no handler is registered yet. 1. delay in…
Waiting for init messaging to subscribe could lead to notifications being lost, because the bus dispatches them as soon as it receives them, even if no handler is registered yet. 1. delay in subscribe This delay in subscribe was necessary in the past, because some notification handlers assumed the initial state was received, to make "diff" on the inital state (example: incrementing counter). We now explicitly check if the state is "ready" to receive the "diff", by comparing the current bus id to the last one known when the state was received. This is further improved in this commit as a generic init bus id cannot possibly work when different pieces of data are received at different times. Each data that should receive diff from the bus should have its own memory of bus id. 2. init data dependency Some others handlers relied on some initial data that was previously received from init messaging, but these are now received from session info at page load. Related runbot issues: https://runbot.odoo.com/web/#id=60477&menu_id=424&cids=1&action=573&model=runbot.build.error&view_type=form https://runbot.odoo.com/web/#id=60550&menu_id=424&cids=1&action=573&model=runbot.build.error&view_type=form https://runbot.odoo.com/web/#id=60551&menu_id=424&cids=1&action=573&model=runbot.build.error&view_type=form https://runbot.odoo.com/web/#id=60613&menu_id=424&cids=1&action=573&model=runbot.build.error&view_type=form https://runbot.odoo.com/web/#id=60614&menu_id=424&cids=1&action=573&model=runbot.build.error&view_type=form https://runbot.odoo.com/web/#id=60615&menu_id=424&cids=1&action=573&model=runbot.build.error&view_type=form https://runbot.odoo.com/web/#id=60637&menu_id=424&cids=1&action=573&model=runbot.build.error&view_type=form https://runbot.odoo.com/web/#id=60638&menu_id=424&cids=1&action=573&model=runbot.build.error&view_type=form https://runbot.odoo.com/web/#id=60672&menu_id=424&cids=1&action=573&model=runbot.build.error&view_type=form https://runbot.odoo.com/web/#id=60673&menu_id=424&cids=1&action=573&model=runbot.build.error&view_type=form https://runbot.odoo.com/web/#id=60727&menu_id=424&cids=1&action=573&model=runbot.build.error&view_type=form https://runbot.odoo.com/web/#id=60988&menu_id=424&cids=1&action=573&model=runbot.build.error&view_type=form https://runbot.odoo.com/web/#id=60989&menu_id=424&cids=1&action=573&model=runbot.build.error&view_type=form https://runbot.odoo.com/web/#id=61029&menu_id=424&cids=1&action=573&model=runbot.build.error&view_type=form https://runbot.odoo.com/web/#id=61050&menu_id=424&cids=1&action=573&model=runbot.build.error&view_type=form https://runbot.odoo.com/web/#id=61131&menu_id=424&cids=1&action=573&model=runbot.build.error&view_type=form https://runbot.odoo.com/web/#id=61132&menu_id=424&cids=1&action=573&model=runbot.build.error&view_type=form https://runbot.odoo.com/web/#id=61135&menu_id=424&cids=1&action=573&model=runbot.build.error&view_type=form https://runbot.odoo.com/web/#id=61150&menu_id=424&cids=1&action=573&model=runbot.build.error&view_type=form https://runbot.odoo.com/web/#id=61160&menu_id=424&cids=1&action=573&model=runbot.build.error&view_type=form https://runbot.odoo.com/web/#id=61161&menu_id=424&cids=1&action=573&model=runbot.build.error&view_type=form https://runbot.odoo.com/web/#id=61163&menu_id=424&cids=1&action=573&model=runbot.build.error&view_type=form https://runbot.odoo.com/web/#id=61164&menu_id=424&cids=1&action=573&model=runbot.build.error&view_type=form https://runbot.odoo.com/web/#id=61166&menu_id=424&cids=1&action=573&model=runbot.build.error&view_type=form https://runbot.odoo.com/web/#id=61168&menu_id=424&cids=1&action=573&model=runbot.build.error&view_type=form https://runbot.odoo.com/web/#id=61261&menu_id=424&cids=1&action=573&model=runbot.build.error&view_type=form https://runbot.odoo.com/web/#id=61295&menu_id=424&cids=1&action=573&model=runbot.build.error&view_type=form https://runbot.odoo.com/web/#id=61306&menu_id=424&cids=1&action=573&model=runbot.build.error&view_type=form https://runbot.odoo.com/web/#id=61349&menu_id=424&cids=1&action=573&model=runbot.build.error&view_type=form https://runbot.odoo.com/web/#id=61421&menu_id=424&cids=1&action=573&model=runbot.build.error&view_type=form
This fix restores the ability to issue partial refunds for point of sale orders. It addresses an incorrect order total calculation that was blocking valid partial refund workflows, helping staff process customer returns more accurately.
Original PR description
This reverts commit https://github.com/odoo/odoo/commit/3d26099621f113b041b0f38b9604494b5a19c620 to allow partial refunding of pos order as the total_amount is not correct anymore. opw-3827876
PDF viewer files now use a more widely supported file type so documents load correctly on common web server setups such as Nginx. The update also prevents problematic PDFs from unexpectedly opening the print dialog, improving the viewing experience for users.
Original PR description
Follow-up of #151714 To avoid error like "Loading module from “/web/static/lib/pdfjs/build/pdf.mjs” was blocked because of a disallowed MIME type (“application/octet-stream”)." when JavaScript Modules using .mjs file extension are served from some common HTTP server (i.e. Nginx [1]), this commit renames PDF.js assets who uses this extension (introduced in commit [2]) to a more traditional .js extension. opw-3844829 opw-3850119 [1]: https://trac.nginx.org/nginx/ticket/2216 [2]: odoo/odoo@0216dc4f9ecef49e8b799bb0d52b59250f5f23e8
Miscellaneous changes
[[BUG][17.0] viin_sales_unlink- Xảy ra lỗi khi xóa SO](https://viindoo.com/web#id=51865&cids=1&menu_id=289&model=viin.helpdesk.ticket&view_type=form) - This PR - - Fix bug when delete SO **Step** - Create SO - Confirm SO, add delivered If the product is a warehouse product - Create Invoice - Delete Invoice - Cancel SO - Delete SO **Output** - Displays the error totals.subtotals order is not iterable **Reason** - When unlink SO, tax value no longer exists, so, return
Original PR description
[[BUG][17.0] viin_sales_unlink- Xảy ra lỗi khi xóa SO](https://viindoo.com/web#id=51865&cids=1&menu_id=289&model=viin.helpdesk.ticket&view_type=form) - This PR - - Fix bug when delete SO **Step** - Create SO - Confirm SO, add delivered If the product is a warehouse product - Create Invoice - Delete Invoice - Cancel SO - Delete SO **Output** - Displays the error totals.subtotals order is not iterable **Reason** - When unlink SO, tax value no longer exists, so, return value of totals is false, and when try loop totals.subtotals_order (undefine value) will be display this error **Solution** - Check the total input value. If there is no value or the return value is false, return it --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#159018
…arch view Description of the issue/feature this PR addresses: The closed ("paid") filter in the search view does not consider the reversed state and is technically closed. Current behavior before PR: Currently, when you select the "paid" and "unpaid" filters on the invoices list, it does not provide a complete view of all the universe of invoices as the reversed status is not reflected within its domain. Desired behavior after PR is merged: I propose that the closed ("paid") filter
Original PR description
…arch view
Description of the issue/feature this PR addresses:
The closed ("paid") filter in the search view does not consider the reversed state and is technically closed.
Current behavior before PR:
Currently, when you select the "paid" and "unpaid" filters on the invoices list, it does not provide a complete view of all the universe of invoices as the reversed status is not reflected within its domain.
Desired behavior after PR is merged:
I propose that the closed ("paid") filter takes into account the reversed state. Consequently, upon selecting both "paid" and "unpaid" filters, it should present a complete universe of invoices.
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#154204Add a bunch of QOL improvements in the results page design: NB: In order to stay stable-compatible, using "d-none" to hide elements and using the "fs-x" class to resize the texts instead of changing the header tags. - Display the survey results page in half page size to prevent having too much blank space between the tables columns - The filter buttons are now displayed under the survey title - Show the leaderboard bar on the print preview - Changing the eye dropdown icon to a caret for
Original PR description
Add a bunch of QOL improvements in the results page design: NB: In order to stay stable-compatible, using "d-none" to hide elements and using the "fs-x" class to resize the texts instead of changing…
Add a bunch of QOL improvements in the results page design: NB: In order to stay stable-compatible, using "d-none" to hide elements and using the "fs-x" class to resize the texts instead of changing the header tags. - Display the survey results page in half page size to prevent having too much blank space between the tables columns - The filter buttons are now displayed under the survey title - Show the leaderboard bar on the print preview - Changing the eye dropdown icon to a caret for fold/unfold - Align questions to the left to be on the same level as the sections - Add an horizontal scroll to the matrix and simple/multiple choices tables when the screen is not wide enough to display all the data - Reduce vertical spacing between elements to gain space - Reduce simple/multiple choices tables line height - Reduce survey title, section title and KPIs font size - Display the "Correct", "Partial", "Responded" and "Skipped" badges on a single line and set a rounded border around. - Removing the "Result Overview" title - Removing survey description, section description and question description Task-3707687 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#152263
Currently, a traceback appears when you attempt to generate a Facturae document for a credit note created manually. ### Steps to reproduce * install `l10n_es_edi_facturae` * create a credit not manually (not from an invoice) * confirm and attempt to generate the Facturae EDI file You should be me with a traceback: `ValueError: not enough values to unpack (expected 1, got 0)` ### Cause To generate the EDI document, the system needs the credit note to have a link to the refunded
Original PR description
Currently, a traceback appears when you attempt to generate a Facturae document for a credit note created manually. ### Steps to reproduce * install `l10n_es_edi_facturae` * create a credit not manually (not from an invoice) * confirm and attempt to generate the Facturae EDI file You should be me with a traceback: `ValueError: not enough values to unpack (expected 1, got 0)` ### Cause To generate the EDI document, the system needs the credit note to have a link to the refunded invoice. However, in this case, there's no invoice since the credit note was created manual. opw-3786219 opw-3772085 opw-3811170 Forward-Port-Of: odoo/odoo#158283
Steps to reproduce: - Open the project in mobile view - go to the kanban view enable task stages - add one new staged with large name you can see name is misaligned Issue: - In mobile view task stage name is misaligned Solution: - Adding class 'o_text_overflow' to not overflow name in kanban view task-3602610 Forward-Port-Of: odoo/odoo#145915
Original PR description
Steps to reproduce: - Open the project in mobile view - go to the kanban view enable task stages - add one new staged with large name you can see name is misaligned Issue: - In mobile view task stage name is misaligned Solution: - Adding class 'o_text_overflow' to not overflow name in kanban view task-3602610 Forward-Port-Of: odoo/odoo#145915
Add a test for exporting the source terms of modules. This will allow automated scripts to fetch latest terms Backport save_test_file with a parameter on date_format to have predictable filenames Forward-Port-Of: odoo/odoo#159846 Forward-Port-Of: odoo/odoo#154624
Original PR description
Add a test for exporting the source terms of modules. This will allow automated scripts to fetch latest terms Backport save_test_file with a parameter on date_format to have predictable filenames Forward-Port-Of: odoo/odoo#159846 Forward-Port-Of: odoo/odoo#154624
Description of the issue/feature this PR addresses: module: hr_recruitment_survey Current behavior before PR: when retaking the survey, the survey input not map with the applicant id, so if you retake 5 time, only the 1st survey has value of applicant_id Desired behavior after PR is merged: all survey retakes have the same applicant id --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#159833
Original PR description
Description of the issue/feature this PR addresses: module: hr_recruitment_survey Current behavior before PR: when retaking the survey, the survey input not map with the applicant id, so if you retake 5 time, only the 1st survey has value of applicant_id Desired behavior after PR is merged: all survey retakes have the same applicant id --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#159833
At the moment, the partner being used to get the information for the efaktur module is the partner set on the invoice. This is wrong, since if the partner set on the invoice is a child record of a company partner you cannot set most of these fields. To fix this issue, we will update in order to fetch the efaktur related fields from the commercial partner instead. (vat, along with all efaktur specific information used in the process) --- I confirm I have signed the CLA and read the PR g
Original PR description
At the moment, the partner being used to get the information for the efaktur module is the partner set on the invoice. This is wrong, since if the partner set on the invoice is a child record of a company partner you cannot set most of these fields. To fix this issue, we will update in order to fetch the efaktur related fields from the commercial partner instead. (vat, along with all efaktur specific information used in the process) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#160192 Forward-Port-Of: odoo/odoo#160108
Currently when a time off using an overtime is written to for any reason, it will compare the duration of the overtime with the number_of_hours_display. However, the duration check will always be triggered since overtime duration is number_of_hours_display * -1 This causes problems if an overtime time off is modified for any reason and the employee does not have enough total_overtime --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of:
Original PR description
Currently when a time off using an overtime is written to for any reason, it will compare the duration of the overtime with the number_of_hours_display. However, the duration check will always be triggered since overtime duration is number_of_hours_display * -1 This causes problems if an overtime time off is modified for any reason and the employee does not have enough total_overtime --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#160055
-Before this commit the url is like /blog/1/feed then it will become a redirect 301 url to /blog/travel-1/feed which is not good for SEO. Therefore we change to slug(blog) to ensure no redirect occur 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#160503 Forward-Port-Of: odoo/odoo#160438
Original PR description
-Before this commit the url is like /blog/1/feed then it will become a redirect 301 url to /blog/travel-1/feed which is not good for SEO. Therefore we change to slug(blog) to ensure no redirect occur 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#160503 Forward-Port-Of: odoo/odoo#160438
Before this commit: Using the "Download logs" button from the IoT box form view will fail every time due to an Internal Server Error on the IoT side. ```py File "/home/pi/odoo/odoo/tools/misc.py", line 189, in file_path FileNotFoundError: File not found: /var/log/odoo/odoo-server.log ``` This happened due to changes introduced in: https://github.com/odoo/odoo/pull/99658 The changes enforced to double check that the file path was in an odoo addons (for security reasons). However, it
Original PR description
Before this commit: Using the "Download logs" button from the IoT box form view will fail every time due to an Internal Server Error on the IoT side. ```py File "/home/pi/odoo/odoo/tools/misc.py", line 189, in file_path FileNotFoundError: File not found: /var/log/odoo/odoo-server.log ``` This happened due to changes introduced in: https://github.com/odoo/odoo/pull/99658 The changes enforced to double check that the file path was in an odoo addons (for security reasons). However, it is generally not the case, thus the error After this commit: The log file is downloaded as intended opw-3827121 Forward-Port-Of: odoo/odoo#159186
Current behaviour: --- When you generate a Delivery Slip for a list of kit and non kit products with no backorder, kit and non kit products get mixed. ie: there are kit products in the section "products not associated with a kit" Steps to reproduce: --- 1. Create 4 products (K1,P1,P2,C1,C2) 2. Create a Bills of Materials for K1 3. Set Type as Kit 4. Add C1 and C2 as components 5. Create a sale quotation for K1, P1, P2 6. Set the quantity at 4 for all products 7. On the quotation,
Original PR description
Current behaviour: --- When you generate a Delivery Slip for a list of kit and non kit products with no backorder, kit and non kit products get mixed. ie: there are kit products in the section…
Current behaviour: --- When you generate a Delivery Slip for a list of kit and non kit products with no backorder, kit and non kit products get mixed. ie: there are kit products in the section "products not associated with a kit" Steps to reproduce: --- 1. Create 4 products (K1,P1,P2,C1,C2) 2. Create a Bills of Materials for K1 3. Set Type as Kit 4. Add C1 and C2 as components 5. Create a sale quotation for K1, P1, P2 6. Set the quantity at 4 for all products 7. On the quotation, click on Delivery 8. In Done, put 4 for P1 and 3 for C1,C2,P2 9. Validate and select No Backorder 10. Click on Print, Delivery Slip 11. In the document: 12. P2 is in the kit section (K1) 13. C1,C2 in the "not associated with a kit" section Expected behaviour: --- Only C1 and C2 should be in the K1 section Only P1 and P2 should be in the "Products not associated with a kit" section opw-3568390 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#159138 Forward-Port-Of: odoo/odoo#144276
**Steps to reproduce the bug:** - Create a storable product “P1” and "P2": - Weight "P1": 1kg - Weight "P2": 2kg - Create a picking with the product “P1” - Change the product of the move to “P2” Problem: The picking weight is not updated opw-[3754884](https://www.odoo.com/web#id=3754884&view_type=form&model=project.task) Forward-Port-Of: odoo/odoo#159997 Forward-Port-Of: odoo/odoo#159722
Original PR description
**Steps to reproduce the bug:**
- Create a storable product “P1” and "P2":
- Weight "P1": 1kg
- Weight "P2": 2kg
- Create a picking with the product “P1”
- Change the product of the move to “P2”
Problem:
The picking weight is not updated
opw-[3754884](https://www.odoo.com/web#id=3754884&view_type=form&model=project.task)
Forward-Port-Of: odoo/odoo#159997
Forward-Port-Of: odoo/odoo#159722Currently some VAT examples that contain other terms than only the number are always displayed in English. This commit makes sure they can be translated. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#159724 Forward-Port-Of: odoo/odoo#158629
Original PR description
Currently some VAT examples that contain other terms than only the number are always displayed in English. This commit makes sure they can be translated. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#159724 Forward-Port-Of: odoo/odoo#158629
- replace order summary by a dropdown like mobile view - remove 'Pay With' title - match 'Choose delivery method' style with 'Choose payment method' - make order summary sticky so that 'Pay now' is always accessible task-3741412 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#160415 Forward-Port-Of: odoo/odoo#154035
Original PR description
- replace order summary by a dropdown like mobile view - remove 'Pay With' title - match 'Choose delivery method' style with 'Choose payment method' - make order summary sticky so that 'Pay now' is always accessible task-3741412 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#160415 Forward-Port-Of: odoo/odoo#154035
- menu combo will not ask to select an item, if there only one in the category. - self-order do not show last screen with order number, when prices = 0.00. - kiosk: close button too small: we don't notice it on large screens as it's not where we look. before:  after:  - 30 sec to close
Original PR description
- menu combo will not ask to select an item, if there only one in the category. - self-order do not show last screen with order number, when prices = 0.00. - kiosk: close button too small: we don't…
- menu combo will not ask to select an item, if there only one in the category. - self-order do not show last screen with order number, when prices = 0.00. - kiosk: close button too small: we don't notice it on large screens as it's not where we look. before:  after:  - 30 sec to close the "ticket number" screen since 5 minutes is too long. - self: My Orders outline with semi transparent background. before:  after:  - self: order date on closed orders. - fix: when you select a product with a variant but do not choose a variant and click on "discard" it is no longer possible to cancel the order and return to the home page. Task-3801901 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#159623
Currently, in Russian, the variable 'field' is translated into Russian as 'поле' which causes an error. Error: `KeyError: 'поле'` This commit fixes this issue by updating the translated variable into the original variable. sentry-5141195219
Original PR description
Currently, in Russian, the variable 'field' is translated into Russian as 'поле' which causes an error. Error: `KeyError: 'поле'` This commit fixes this issue by updating the translated variable into the original variable. sentry-5141195219
Before this commit, when the clickbot detected an error dialog, it stopped the test and throw an error saying that an error dialog was detected. This information is not enough to check why, and how, the error dialog was produced. Now, we also log the content of the error dialog as well as all the information of the last rpc that was in error. closes odoo/odoo#160103 X-original-commit: 4f26b324a30c5120ea60b6b42fef6cd6000d2859 Forward-Port-Of: odoo/odoo#160336 Forward-Port-Of: odoo/odoo#
Original PR description
Before this commit, when the clickbot detected an error dialog, it stopped the test and throw an error saying that an error dialog was detected. This information is not enough to check why, and how, the error dialog was produced. Now, we also log the content of the error dialog as well as all the information of the last rpc that was in error. closes odoo/odoo#160103 X-original-commit: 4f26b324a30c5120ea60b6b42fef6cd6000d2859 Forward-Port-Of: odoo/odoo#160336 Forward-Port-Of: odoo/odoo#160272
**Steps to reproduce:** 1- Create a purchase order and assign a project to its Analytic distribution 2- Go to the assigned project's 'Project Updates' 3- Click on Purchase order smart button **Current behavior before PR:** When trying to view the purchase orders linked to a project you will either get a message saying this ID doesn't exist or you will get an empty list view. This is happening because we are fetching the purchase order line ids and passing those ids to the view not the
Original PR description
**Steps to reproduce:** 1- Create a purchase order and assign a project to its Analytic distribution 2- Go to the assigned project's 'Project Updates' 3- Click on Purchase order smart button **Current behavior before PR:** When trying to view the purchase orders linked to a project you will either get a message saying this ID doesn't exist or you will get an empty list view. This is happening because we are fetching the purchase order line ids and passing those ids to the view not the ids for the purchase order itself https://github.com/odoo/odoo/blob/saas-17.1/addons/project_purchase/models/project_project.py#L31:L33 **Desired behavior after PR is merged:** We are now passing the ids of the purchase order to the view. opw-3794848 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#159345
The aim of this commit is to prevent the statistical error detection to interupt automated flow. From now on, the error detection wizard on `action_post` will only be triggered for manually created invoice. Context: Payments made through our website wouldn't be reconcile with their invoice because the flow supposed to post the invoice silently failed due to the `validate.account.move` wizard being returned by `action_post`. Before this commit: To be able to pass the error detection te
Original PR description
The aim of this commit is to prevent the statistical error detection to interupt automated flow. From now on, the error detection wizard on `action_post` will only be triggered for manually created invoice. Context: Payments made through our website wouldn't be reconcile with their invoice because the flow supposed to post the invoice silently failed due to the `validate.account.move` wizard being returned by `action_post`. Before this commit: To be able to pass the error detection test with an automated flow, you needed to setup a context key. That meant setting the context key anywhere an automated action could take place. After this commit: The automated detection error wizard `validate.account.move` will only be brought up through the `action_post` where the key is explicitely set. opw-3830725 Forward-Port-Of: odoo/odoo#160384
- Create a Partner who is a valid Peppol participant - Clear their UBL format - they are still displayed as valid (Bug 1) - Create an invoice for that partner and confirm it. The Peppol state changes to 'ready' - Erase eas or endpoint on that partner and verify - the partner is now not a valid Peppol participant - Reset the invoice to draft, confirm again: the peppol move state is still `ready` (Bug 2) 1. Do not set a participant as valid if a peppol-incompatible edi format has been selec
Original PR description
- Create a Partner who is a valid Peppol participant - Clear their UBL format - they are still displayed as valid (Bug 1) - Create an invoice for that partner and confirm it. The Peppol state changes to 'ready' - Erase eas or endpoint on that partner and verify - the partner is now not a valid Peppol participant - Reset the invoice to draft, confirm again: the peppol move state is still `ready` (Bug 2) 1. Do not set a participant as valid if a peppol-incompatible edi format has been selected 2. Only save Peppol move state if it's processing/done already. Otherwise, let users clear it by resetting to draft. (until we implement giving them control over this field) opw-3784945 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#160591 Forward-Port-Of: odoo/odoo#159852
**Current behavior:** Creating an ewallet loyalty program and removing the default value for `trigger_product_ids` without adding another in its place will result in any ewallet created using that program to not have its balance deducted after being used in a sale order. **Expected behavior:** The default product should not be required here, nor should any product, seeing as there is no `required` constraint on this field nor any related ones. **Steps to reproduce:** 1. Create an e
Original PR description
**Current behavior:** Creating an ewallet loyalty program and removing the default value for `trigger_product_ids` without adding another in its place will result in any ewallet created using that…
**Current behavior:**
Creating an ewallet loyalty program and removing the default
value for `trigger_product_ids` without adding another in its
place will result in any ewallet created using that program to
not have its balance deducted after being used in a sale order.
**Expected behavior:**
The default product should not be required here, nor should any
product, seeing as there is no `required` constraint on this
field nor any related ones.
**Steps to reproduce:**
1. Create an ewallet loyalty program and remove the Top-up
ewallet product
2. Create an ewallet, give it some balance, and use it in an
order
3. Check the balance of the wallet to see the erroneous behavior
**Cause of the issue:**
In the _program_check_compute_points() method of `sale.order` in
`sale_loyalty`, the conditional block:
`if not products_per_rule.get(rule):
continue`
will normally prevent rules belonging to ewallet program types
from going further in the method because they have the default
ewallet top-up product in their domain. When the continue is not
reached, they will reach this line:
`amount_paid = sum(max(0, line.price_total) for
line in order_lines if line.product_id in rule_products)`
which will end up offsetting the actual subtraction of a SOLs
`points_cost` from an ewallet `loyalty.card`'s balance.
**Fix:**
Add another check prior to the calculation of order points which
prevents orders with applied ewallet coupons without any top-up
products from reaching the problematic code. If an ewallet
program doesn't have any `trigger_product_ids`, it shouldn't
ever need to perform such calculations.
opw-3756134
Forward-Port-Of: odoo/odoo#157421This is done together with an enterprise commit in order to avoid creating mail alias automatically on journals imported via FEC files, in France. Indeed, such files could contain journals with different codes but same name, each of which would try creating an alias with the same name, raising an error. OPW 3813584 Forward-Port-Of: odoo/odoo#160168 Forward-Port-Of: odoo/odoo#159455
Original PR description
This is done together with an enterprise commit in order to avoid creating mail alias automatically on journals imported via FEC files, in France. Indeed, such files could contain journals with different codes but same name, each of which would try creating an alias with the same name, raising an error. OPW 3813584 Forward-Port-Of: odoo/odoo#160168 Forward-Port-Of: odoo/odoo#159455
[FIX] portal: display avatar when read access right are fulfilled Steps to reproduce the bug: - Enable the comments on a blog. - Add a comment. -> Problem: The avatar of the comment is the default placeholder image. The problem appears since [1]. This commit was created to bypass the read access of an image if a correct `token` was provided in the dataset of the `.o_portal_chatter` element. The problem is that since [1], if the `.o_portal_chatter` element does not have a `token` (o
Original PR description
[FIX] portal: display avatar when read access right are fulfilled Steps to reproduce the bug: - Enable the comments on a blog. - Add a comment. -> Problem: The avatar of the comment is the default…
[FIX] portal: display avatar when read access right are fulfilled Steps to reproduce the bug: - Enable the comments on a blog. - Add a comment. -> Problem: The avatar of the comment is the default placeholder image. The problem appears since [1]. This commit was created to bypass the read access of an image if a correct `token` was provided in the dataset of the `.o_portal_chatter` element. The problem is that since [1], if the `.o_portal_chatter` element does not have a `token` (or a `hash` and a `pid` since [2]) in its dataset, the avatar images are displayed as the default placeholder image by default. The goal of this commit is to correct this behavior; if there is no token provided, the previously used `/web/image` route is used to show the avatar. Thanks to this route, the avatar is displayed if the read access is fulfilled. If it is not the case, the default placeholder image is displayed. [1]: https://github.com/odoo/odoo/commit/d4eb996cd3caea3fbb822437057a6a5a8a722293 [2]: https://github.com/odoo/odoo/commit/7f69708bcce3b3c4b096d89cb0ec354998eac191 opw-3749422 Forward-Port-Of: odoo/odoo#160240 Forward-Port-Of: odoo/odoo#157652
Steps: - Install project app. - Share a project which contains a task and sub-task and project should have allow milestone - Go to task form in project sharing. - Go to milestone field of sub-task page. Issue: - Milestone field has can create and can open options enable and because of that portal user able to create edit or open milestone and which leads to tracebacks Cause: - There was no options added to prevent those attribute from that field for project sharing views. Fix: -
Original PR description
Steps: - Install project app. - Share a project which contains a task and sub-task and project should have allow milestone - Go to task form in project sharing. - Go to milestone field of sub-task page. Issue: - Milestone field has can create and can open options enable and because of that portal user able to create edit or open milestone and which leads to tracebacks Cause: - There was no options added to prevent those attribute from that field for project sharing views. Fix: - Added option to prevent those operation for project sharing view. Note: Add this options in blockby page in FW port. task-3764782 Forward-Port-Of: odoo/odoo#160514 Forward-Port-Of: odoo/odoo#155358
At the moment, duplicating a website is not possible in the sense of duplicating content, pages, etc. It is still available as an action from the form view, and it could make sense to start up a new website with a few common values (social media? etc?)... but many of website fields are technical fields that should not be copied and many are dubious to copy and not even visible in the form view. Really, duplicating a website at the moment is misleading. This commit disables the possibility from t
Original PR description
At the moment, duplicating a website is not possible in the sense of duplicating content, pages, etc. It is still available as an action from the form view, and it could make sense to start up a new website with a few common values (social media? etc?)... but many of website fields are technical fields that should not be copied and many are dubious to copy and not even visible in the form view. Really, duplicating a website at the moment is misleading. This commit disables the possibility from the form view. In the future, we want to focus on the ability to export / import a full website, but that's not for now. opw-3782830 Forward-Port-Of: odoo/odoo#160463
Problem: When the user sets a warning message for a product, the message will always display even if the warning type is no-message. Purpose: The product's warning message should not display if the warning type is no message. Steps to Reproduce on Runbot17: 1.Install Sales 2.Enable Sale Warnings in Setting > Sales 3.Modify the sale warnings for a product 4.Create a quotation 5.Click on the catalog and look for the modified product 6.Observe the warning opw-3806520 Description of
Original PR description
Problem: When the user sets a warning message for a product, the message will always display even if the warning type is no-message. Purpose: The product's warning message should not display if the warning type is no message. Steps to Reproduce on Runbot17: 1.Install Sales 2.Enable Sale Warnings in Setting > Sales 3.Modify the sale warnings for a product 4.Create a quotation 5.Click on the catalog and look for the modified product 6.Observe the warning opw-3806520 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#159795
### Issue When handling a non-200 reponse with a large payload (>65536 bytes), download.js fails to decode the payload properly on Chrome/WebKit. This is because the content is parsed using WebKit's `DOMParser.parseFromString`, which creates several Text nodes if the text would exceed 65536 bytes. Then, only the textContent of the second Text node is passed to `JSON.parse()`, which fails because it is not valid JSON. See [this StackOverflow comment](https://stackoverflow.com/questions/6
Original PR description
### Issue When handling a non-200 reponse with a large payload (>65536 bytes), download.js fails to decode the payload properly on Chrome/WebKit. This is because the content is parsed using WebKit's…
### Issue When handling a non-200 reponse with a large payload (>65536 bytes), download.js fails to decode the payload properly on Chrome/WebKit. This is because the content is parsed using WebKit's `DOMParser.parseFromString`, which creates several Text nodes if the text would exceed 65536 bytes. Then, only the textContent of the second Text node is passed to `JSON.parse()`, which fails because it is not valid JSON. See [this StackOverflow comment](https://stackoverflow.com/questions/67738121/in-what-cases-do-browsers-create-multiple-adjacent-text-nodes/67774415#67774415) and [the WebKit code](https://github.com/WebKit/WebKit/blob/68ae0fde5f959e056fbd6700f1ca7fa652cd1ffa/Source/WebCore/html/parser/HTMLConstructionSite.cpp#L584-L592) ### Steps to reproduce This example works only in 17.1 and master due to the larger files now generated by the Romanian SAF-T export. However, you can reproduce it in any version by raising an InternalServerError with a response content larger than 65536 bytes in any controller called by `download()`. 1. Install l10n_ro_saft on a 17.1 database 2. Switch to 'RO Company' 3. Go to partner 'Azure Interior' and remove the address details (this will make the report generation return an error containing the report content) 4. Go to Accounting -> Reports -> General Ledger 5. Click on the arrow next to 'PDF' and click on 'SAF-T'. taskid: 3790302 Forward-Port-Of: odoo/odoo#160577 Forward-Port-Of: odoo/odoo#156672
- Add new tax groups for VAT at 5%, 13%, and 15% - Add taxes of 5% and 15% - Archive VAT taxes of 5% in sales and 12% - Configure tax group accounts for the new tax groups - Add new foreign account tax position tax template at 15% VAT 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#160020 F
Original PR description
- Add new tax groups for VAT at 5%, 13%, and 15% - Add taxes of 5% and 15% - Archive VAT taxes of 5% in sales and 12% - Configure tax group accounts for the new tax groups - Add new foreign account tax position tax template at 15% VAT 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#160020 Forward-Port-Of: odoo/odoo#159596
In 2024 the SRI changes income withholding taxes. We update minor data and create new taxes for the new percentages Forward-Port-Of: odoo/odoo#157912 Forward-Port-Of: odoo/odoo#156740
Original PR description
In 2024 the SRI changes income withholding taxes. We update minor data and create new taxes for the new percentages Forward-Port-Of: odoo/odoo#157912 Forward-Port-Of: odoo/odoo#156740
1 change
Resolved issues and error corrections
This update fixes an issue where a duplicate error popup appeared when saving website pages. The change ensures that error messages are displayed correctly and consistently, providing a better user experience. This improves the reliability of the website editor.
Original PR description
If an error happens when a website page is being saved, the error message is displayed as a popup on the edited block. Unfortunately, an error dialog is also displayed. This commit prevents that dialog from being displayed when the error is already shown to the user. task-3599890 Forward-Port-Of: odoo/odoo#154050
27 changes
Enhancements to existing features
Customer batch payments are easier to find with new search options for reference and amount, and payment statuses are clearer thanks to badge styling. Batch payment reports now use vendor wording where appropriate and include the account holder name, improving clarity for payment review and reconciliation.
Original PR description
+ new search criteria to the customer batch payments(Reference, Amount) + Moved state column to the end on the tree view + Replaced status by badge widgets + Replaced 'customer' by 'vendor' on the batch payment report + Added a 'Account Holder Name' column to the batch payment report task: 3743909
The Knowledge app's automated tests were updated to match a related change that uses YouTube's privacy-enhanced domain for embedded videos. This helps ensure the app continues to validate video behavior correctly while supporting improved privacy practices.
Original PR description
This commit adjusts the tests in response to a community pull request [1], which revises the YouTube video URL to utilize "youtube-nocookie" for enhanced privacy measures. [1]: https://github.com/odoo/odoo/pull/153411 Requires: - https://github.com/odoo/odoo/pull/153411 task-3724858
The Documents module metadata now uses the standard company author name, Odoo S.A. This is a small administrative cleanup that keeps module information consistent with company naming conventions and has no expected impact on users.
Original PR description
### Specification This PR changes the author of documents module from "Odoo" to "Odoo S.A." ### Technical "Odoo S.A." is by default author, so removing author from the manifest file. Task - 3834770
Adds automated checks for the Documents activity view, including the behavior when archiving documents. This helps prevent regressions and keeps document management workflows stable for users.
Original PR description
Purpose ======= Add unit tests for the documents activity view Test the fix of documents archiving in the activity view PR: https://github.com/odoo/odoo/pull/151741 Task: 3704340 Task-3714544
Swiss payroll now better separates family allowance employer costs by renaming the related setup area to “CP Family” and adding a company-rate field for family allowance rates. This helps payroll teams calculate and track company-related family allowance contributions more accurately.
Original PR description
This commit makes adjustments to the handling of Family Allowances in the payroll module including: - Renaming the existing "Work addresses" to "CP Family" - Introducing a new field company rate to Family Allowance Rate. - Adding a new rule to keep the calculations related to the company rate Task-3710171
Resolved issues and error corrections
Helpdesk email templates now use the correct website domain for each helpdesk team when multiple websites are configured. This prevents customers from being sent links with the wrong base address, while still falling back to the main web address when no website domain is set.
Original PR description
Issue: - Addressed an issue where email templates in the helpdesk were acquiring domains from the website instead of the web base URL. Multiple websites with unique helpdesk teams were affected, causing links associated with separate teams to incorrectly revert back to the web base URL. This fix ensures that email template links now correctly refer to the domain entered in the settings > website. In cases where no domain is declared, the links appropriately revert to the web base URL. Solution: - Modified the code to enforce the correct handling of domains and web base URLs for email template links in multiple website scenarios. task-3597611
This update improves how popovers, dropdowns, and other on-screen overlays appear, preventing menus from opening behind other elements. It also corrects visual issues in dark mode and the report editor image cropping tool, making the interface clearer and more consistent for users.
Original PR description
This PR: - Adapts enterprise tests that would fail due to the added wrapping div around overlays. - Fixes properties field style in dark mode - Fixes the style of the report editor image cropping overlay Community: https://github.com/odoo/odoo/pull/153068 Task: [3729376](https://www.odoo.com/mail/view?model=project.task&res_id=3729376)
Miscellaneous changes
…bles In a report (DIN5008 layout for example), have an invalid table -- containing "t" nodes where HTML doesn't expect them, within another invalid table. Before this commit, all the tables were not converted to classic div elements, and other conversions were wrongly applied. After this commit, all tables are converted, leaving other irrelevant nodes untouched. opw-3741137 Forward-Port-Of: odoo/enterprise#60090
Original PR description
…bles In a report (DIN5008 layout for example), have an invalid table -- containing "t" nodes where HTML doesn't expect them, within another invalid table. Before this commit, all the tables were not converted to classic div elements, and other conversions were wrongly applied. After this commit, all tables are converted, leaving other irrelevant nodes untouched. opw-3741137 Forward-Port-Of: odoo/enterprise#60090
Steps to reproduce: ------------------- - in My Timesheet, click on start; - add a project, a task and a description; - click on search icon in the grid (magnifying glass); Issue: ------ The list view never opens. Cause: ------ When the component performs the `onWillStart` hook, we add the timesheet with the current timer and put it into edit mode. This will have the effect of making a new render (destroy the component and create a new one). This will create a new component and re
Original PR description
Steps to reproduce: ------------------- - in My Timesheet, click on start; - add a project, a task and a description; - click on search icon in the grid (magnifying glass); Issue: ------ The list view never opens. Cause: ------ When the component performs the `onWillStart` hook, we add the timesheet with the current timer and put it into edit mode. This will have the effect of making a new render (destroy the component and create a new one). This will create a new component and repeat the process. Solution: --------- Let the component load the timesheet during the `onWillStart` but manage the edit mode during the `onMounted` hook. opw-3788661 Forward-Port-Of: odoo/enterprise#59896
Before this commit, the `helpdesk_ticket_id` field in `account.analytic.line` model was not defined in the list view used in `My Timesheets` menu. This commit updates the list view to correctly display the `helpdesk_ticket_id` field in `My Timesheets` and `All Timesheets`. Forward-Port-Of: odoo/enterprise#59255
Original PR description
Before this commit, the `helpdesk_ticket_id` field in `account.analytic.line` model was not defined in the list view used in `My Timesheets` menu. This commit updates the list view to correctly display the `helpdesk_ticket_id` field in `My Timesheets` and `All Timesheets`. Forward-Port-Of: odoo/enterprise#59255
Added a high z-index to o_invoice_extract_box_layer css class to make the extract box layer on top and clickable again. This was caused by an added z-index to textLayer class in odoo/odoo@5c238950bbf6 Forward-Port-Of: odoo/enterprise#60066
Original PR description
Added a high z-index to o_invoice_extract_box_layer css class to make the extract box layer on top and clickable again. This was caused by an added z-index to textLayer class in odoo/odoo@5c238950bbf6 Forward-Port-Of: odoo/enterprise#60066
Deleting a partner may take a long time because odoo has to check an entire table to find few records or no records at all that reference the partner and set it to null. So we are adding an index btree not null to speed up the deletion of partners. TASK-ID: 3759406 Forward-Port-Of: odoo/enterprise#60047 Forward-Port-Of: odoo/enterprise#59932
Original PR description
Deleting a partner may take a long time because odoo has to check an entire table to find few records or no records at all that reference the partner and set it to null. So we are adding an index btree not null to speed up the deletion of partners. TASK-ID: 3759406 Forward-Port-Of: odoo/enterprise#60047 Forward-Port-Of: odoo/enterprise#59932
Steps to reproduce: ------------------- 1. Assume a user without "Project" access rights (but with "Sale" access rights) 2. Create an SO containing a service product which generates a Project & Task (or Project) on order 3. Confirm the SO 4. An access error should appear: "You are not allowed to modify 'Project' (project.project) records." ------------------- To trigger the same access error but for "Documents" access, repeat the same process but remove the "Documents" access rights of t
Original PR description
Steps to reproduce: ------------------- 1. Assume a user without "Project" access rights (but with "Sale" access rights) 2. Create an SO containing a service product which generates a Project & Task (or Project) on order 3. Confirm the SO 4. An access error should appear: "You are not allowed to modify 'Project' (project.project) records." ------------------- To trigger the same access error but for "Documents" access, repeat the same process but remove the "Documents" access rights of the user. In this case, the service product must have its "Working Template" set. task-3646545 version-16.0 Forward-Port-Of: odoo/enterprise#59794 Forward-Port-Of: odoo/enterprise#58004
If a `studio.approval.rule` refers to a non-existing model (e.g. the model was removed, or renamed, or it's a custom model that is not present during an upgrade), then while attempting to patch the rule's method the registry will [return](https://github.com/odoo/enterprise/blob/961f67d776a8ec1d9293ed599f284807930496d5/web_studio/models/studio_approval.py#L200) a `None` model, which then causes an AttributeError. We add a check for the Model's existence, so that any None models are skipped. Th
Original PR description
If a `studio.approval.rule` refers to a non-existing model (e.g. the model was removed, or renamed, or it's a custom model that is not present during an upgrade), then while attempting to patch the…
If a `studio.approval.rule` refers to a non-existing model (e.g. the model was removed, or renamed, or it's a custom model that is not present during an upgrade), then while attempting to patch the rule's method the registry will [return](https://github.com/odoo/enterprise/blob/961f67d776a8ec1d9293ed599f284807930496d5/web_studio/models/studio_approval.py#L200) a `None` model, which then causes an AttributeError.
We add a check for the Model's existence, so that any None models are skipped. This follows the approach in [base_automation](https://github.com/odoo/odoo/blob/d11ece23e97189f38040254917a3517e21386e47/addons/base_automation/models/base_automation.py#L847-L857), which was the technical inspiration for the [commit](https://github.com/odoo/enterprise/commit/3db107ae481a8da85aa356c729bae5fc246e655b) that implemented the approval rule logic.
Ticket: [3754939](https://www.odoo.com/web#id=3754939&cids=1&menu_id=4720&action=333&active_id=70&model=project.task&view_type=form), [3777251](https://www.odoo.com/web#id=3754939&cids=1&menu_id=4720&action=333&active_id=70&model=project.task&view_type=form)
```
Traceback (most recent call last):
File "/home/odoo/src/odoo/17.0/odoo/service/server.py", line 1302, in preload_registries
registry = Registry.new(dbname, update_module=update_module)
File "<decorator-gen-16>", line 2, in new
File "/home/odoo/src/odoo/17.0/odoo/tools/func.py", line 87, in locked
return func(inst, *args, **kwargs)
File "/home/odoo/src/odoo/17.0/odoo/modules/registry.py", line 113, in new
odoo.modules.load_modules(registry, force_demo, status, update_module)
File "/home/odoo/src/odoo/17.0/odoo/modules/loading.py", line 606, in load_modules
model._register_hook()
File "/home/odoo/src/enterprise/17.0/web_studio/models/studio_approval.py", line 203, in _register_hook
_patch(Model, approval.method, approval_method)
File "/home/odoo/src/enterprise/17.0/web_studio/models/studio_approval.py", line 132, in _patch
ModelClass = model.env.registry[model._name]
AttributeError: 'NoneType' object has no attribute 'env'
```
Forward-Port-Of: odoo/enterprise#59457
Forward-Port-Of: odoo/enterprise#58688An internal transfer must not be signed in the SAT. Odoo does not allow generating a EDI document in that process, but shows all the MX fields to EDI documents. Now, the fields are not in the view for internal transfers. Forward-Port-Of: odoo/enterprise#42569
Original PR description
An internal transfer must not be signed in the SAT. Odoo does not allow generating a EDI document in that process, but shows all the MX fields to EDI documents. Now, the fields are not in the view for internal transfers. Forward-Port-Of: odoo/enterprise#42569
Before this commit, the test changes the project_id inside a ticket with the id of helpdesk team instead of altering the `team_id` field of that ticket. This commit fixes the issue to correctly change the `team_id` field instead of `project_id` since the id given is the one of a helpdesk team. runbot-61010 Forward-Port-Of: odoo/enterprise#59939
Original PR description
Before this commit, the test changes the project_id inside a ticket with the id of helpdesk team instead of altering the `team_id` field of that ticket. This commit fixes the issue to correctly change the `team_id` field instead of `project_id` since the id given is the one of a helpdesk team. runbot-61010 Forward-Port-Of: odoo/enterprise#59939
[This first commit] fixed an issue with the website menu cache. The menu is not cached anymore if there is a record like URL in the it. When `website_helpdesk` module is installed, since `saas-16.3`, the menu contains a record like URL which disable the menu cache and increase the number of queries. The solution is to increase the max number of queries even if a better solution would be to remove the `Help` link from the menu but we can't do that because `appointment_hr` doesn't depend on `websi
Original PR description
[This first commit] fixed an issue with the website menu cache. The menu is not cached anymore if there is a record like URL in the it. When `website_helpdesk` module is installed, since `saas-16.3`, the menu contains a record like URL which disable the menu cache and increase the number of queries. The solution is to increase the max number of queries even if a better solution would be to remove the `Help` link from the menu but we can't do that because `appointment_hr` doesn't depend on `website`. [This first commit]: https://github.com/odoo/odoo/commit/43576cd424b6d0fc7da01142b5e6550e371ad1ff runbot-60956 runbot-59981 Forward-Port-Of: odoo/enterprise#59905 Forward-Port-Of: odoo/enterprise#59618
Versions -------- - 16.0+ Steps ----- 1. Create a subscription SO; 2. confirm, invoice, and upsell; 3. on upsell, add a non-subscription item; 4. create invoice. Issue ----- On the invoice, the non-subscription item gets labeled with a duration, as if it's supposed to be returned afterwards. Cause ----- When preparing invoice lines, the conditional checks whether the line has a subscription item, or the order is an upsell. The latter part was added in c8b79afe1bf2971a7ac7709e
Original PR description
Versions -------- - 16.0+ Steps ----- 1. Create a subscription SO; 2. confirm, invoice, and upsell; 3. on upsell, add a non-subscription item; 4. create invoice. Issue ----- On the invoice, the non-subscription item gets labeled with a duration, as if it's supposed to be returned afterwards. Cause ----- When preparing invoice lines, the conditional checks whether the line has a subscription item, or the order is an upsell. The latter part was added in c8b79afe1bf2971a7ac7709e7165b863969d6a3d to store subscription id, start_date and end_date on upsell invoice lines. Solution -------- Add an additional conditional to format the description, only displaying duration for items that are subscription-based. opw-3687626 Forward-Port-Of: odoo/enterprise#59865 Forward-Port-Of: odoo/enterprise#58303
This commit fixes a race condition in the following test tour: `test_inventory_adjustment_dont_update_location` Runbuild error: 60324 Forward-Port-Of: odoo/enterprise#59900
Original PR description
This commit fixes a race condition in the following test tour: `test_inventory_adjustment_dont_update_location` Runbuild error: 60324 Forward-Port-Of: odoo/enterprise#59900
In the system parameters, switch account_online_synchronization.proxy_mode to sandbox Add a bank with plaid for example and follow the different steps Have a user [DEMO] with Accounting access set to 'Read-only' Log in with [DEMO] Try to access the Accounting App Dashboard Issue: Access Error """ You are not allowed to access 'Bank Connection' (account.online.link) records. This operation is allowed for the following groups: - Accounting/Accountant - Accounting/Boo
Original PR description
In the system parameters, switch account_online_synchronization.proxy_mode to sandbox
Add a bank with plaid for example and follow the different steps
Have a user [DEMO] with Accounting access set to 'Read-only'
Log in with [DEMO]
Try to access the Accounting App Dashboard
Issue:
Access Error
"""
You are not allowed to access 'Bank Connection' (account.online.link) records.
This operation is allowed for the following groups:
- Accounting/Accountant
- Accounting/Bookkeeper
Contact your administrator to request access if necessary.
"""
This occurs because the read access to the account.online.link
and account.online.account records is granted only to users having at
least the account.group_account_user group
But, as those accesses are defined to be read only, it should be
greanted also to account.group_account_readonly users
opw-3821540
Forward-Port-Of: odoo/enterprise#59984### Steps to reproduce issue: 1. Go to _Field Service > All Tasks > To Invoice_ - If no task is shown, remove To Invoice filter 3. Click on the checkbox of a task 4. The button Create Invoice should appear next to the Print and Actions buttons but it does not ### Explanation: The context key used to show the element contains a `search_default` prefix. Keys with this prefix are specifically used to create a search filter and are deleted in the process. https://github.com/odoo/odoo
Original PR description
### Steps to reproduce issue: 1. Go to _Field Service > All Tasks > To Invoice_ - If no task is shown, remove To Invoice filter 3. Click on the checkbox of a task 4. The button Create Invoice should appear next to the Print and Actions buttons but it does not ### Explanation: The context key used to show the element contains a `search_default` prefix. Keys with this prefix are specifically used to create a search filter and are deleted in the process. https://github.com/odoo/odoo/blob/71c81e605b2f06889ad8031f021863638edab268/addons/web/static/src/search/search_model.js#L291-L300 ### Suggested fix: No existing key in the context is specific to the action nor is their value. Adding a new specific context key prevents unintended behaviours. opw-3773005 Forward-Port-Of: odoo/enterprise#59368
Issue: ------ Some tests of `TestSaleReport` introduced with the fix [^1], do not pass if the module `website_sale` is installed. This is due to the fact that the sale order flush does not flush all the fields of the sale order line model that are used in the tests (`price_subtotal` for example). Solution: --------- Use `flush_all` to flush the `sale.order` and `sale.order.line` models. opw-3818584 [^1]: https://github.com/odoo/enterprise/commit/f886e65ce123f06ee8a5a2f149330864bcdb
Original PR description
Issue: ------ Some tests of `TestSaleReport` introduced with the fix [^1], do not pass if the module `website_sale` is installed. This is due to the fact that the sale order flush does not flush all the fields of the sale order line model that are used in the tests (`price_subtotal` for example). Solution: --------- Use `flush_all` to flush the `sale.order` and `sale.order.line` models. opw-3818584 [^1]: https://github.com/odoo/enterprise/commit/f886e65ce123f06ee8a5a2f149330864bcdb3254 Forward-Port-Of: odoo/enterprise#59915
Before this commit, the lowest shipping rate was used as the delivery cost, as in: https://github.com/odoo/enterprise/blob/8c40ba77b23c4ccd24c3785bc1e6cf5b3fbe0e51/delivery_sendcloud/models/sendcloud_service.py#L91 However, the prices received from the Sendcloud are strings, and as a result, this line returned the rate with the lowest lexicographical order. As a result, sometimes the rates with a higher value were chosen. The issue happens when a shipping product costs a single digit amount (
Original PR description
Before this commit, the lowest shipping rate was used as the delivery cost, as in: https://github.com/odoo/enterprise/blob/8c40ba77b23c4ccd24c3785bc1e6cf5b3fbe0e51/delivery_sendcloud/models/sendcloud_service.py#L91 However, the prices received from the Sendcloud are strings, and as a result, this line returned the rate with the lowest lexicographical order. As a result, sometimes the rates with a higher value were chosen. The issue happens when a shipping product costs a single digit amount (e.g. `9.00`) but a second product costs in double digits (e.g. `11.00`). In this case the latter is used which is wrong. This commit, converts the prices to float before comparing them to get the actual best price. opw-3815117 Forward-Port-Of: odoo/enterprise#59536
The background for the sample data has been removed in the following commit, thus it's not visible in the grid, and the opacity of the record exceeds that of the view. Additionally, the 'o-sample-data-disabled' class is not set in the grid view and also is applied in another view like Kanban. We have set the 'o-sample-data-disabled' class in the grid view in this commit Effect commit: This commit resolves the issue with the background display of sample data in the grid view, ensuring that t
Original PR description
The background for the sample data has been removed in the following commit, thus it's not visible in the grid, and the opacity of the record exceeds that of the view. Additionally, the 'o-sample-data-disabled' class is not set in the grid view and also is applied in another view like Kanban. We have set the 'o-sample-data-disabled' class in the grid view in this commit Effect commit: This commit resolves the issue with the background display of sample data in the grid view, ensuring that the background is now visible and properly. this commit is the refactoring of the content helper and sample data behavior- https://github.com/odoo/odoo/commit/05819e8b4a4ebcb68f085353cd299303619cdbf0 task-3764514 Forward-Port-Of: odoo/enterprise#59956
Since https://github.com/odoo/odoo/pull/127353, the web client only asks for the aggregatable field, making the read_group override of 'account.bank.statement.line' becomes ineffective. Remove the check done on fields, and return the latest running_balance by group when 'show_running_balance_latest' is in the context. Forward-Port-Of: odoo/enterprise#59936
Original PR description
Since https://github.com/odoo/odoo/pull/127353, the web client only asks for the aggregatable field, making the read_group override of 'account.bank.statement.line' becomes ineffective. Remove the check done on fields, and return the latest running_balance by group when 'show_running_balance_latest' is in the context. Forward-Port-Of: odoo/enterprise#59936
It happens that the alerts message returns by UPS doesn't contains a descirption. In that case the dictionary has no key and traceback. Only returns alerts with description Forward-Port-Of: odoo/enterprise#59606
Original PR description
It happens that the alerts message returns by UPS doesn't contains a descirption. In that case the dictionary has no key and traceback. Only returns alerts with description Forward-Port-Of: odoo/enterprise#59606
Currently, the article emoji is too small and appears under the topbar of the Knowledge editor on mobile devices. This commit fixes these two issues and simplifies the CSS to ensure that the emoji is correctly placed on all devices. task-3525618 Forward-Port-Of: odoo/enterprise#59541 Forward-Port-Of: odoo/enterprise#54522
Original PR description
Currently, the article emoji is too small and appears under the topbar of the Knowledge editor on mobile devices. This commit fixes these two issues and simplifies the CSS to ensure that the emoji is correctly placed on all devices. task-3525618 Forward-Port-Of: odoo/enterprise#59541 Forward-Port-Of: odoo/enterprise#54522
30 changes
Enhancements to existing features
The bank reconciliation report has been restored and significantly improved after user feedback, particularly from audit teams in English-speaking countries. The report now features a consistent display with other reports, improved warning messages, and new sections to help users identify differences between accounting records and bank statements.
Original PR description
In this https://github.com/odoo/enterprise/commit/76caf5f5675f97128b88fbcffedaf1e85da516d5, it was decided to remove the report. But we received a lot of feedbacks about users missing the report, especially from anglo-saxon countries, where this report is often used in Audit processes to report on the differences between the Accounting and Bank reported amounts on bank accounts. In this pr we decided to put it back and improve it. What has been improved: - The display of the report is now consistent with the different reports - Use of custom engine - New sections added - Rework of the warnings task: 3756179
This update adds a unique identifier to a dashboard element in the accounting module, enabling more precise automation and testing capabilities. This internal improvement helps the development team better interact with and test the account journal dashboard interface.
Original PR description
This pr will add an id on a div to be able to do a xpath on it. task: 3756179 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
When creating a new company with a duplicate Tax ID, the warning message now displays only the company name instead of showing company name, address, and VAT information that appeared broken across multiple lines. The warning text has also been slightly improved for clarity.
Original PR description
When creating a new company from a move, if the tax ID is repeated, a warning is displayed. The warning includes the company name, address and VAT, if those have been added. In this case, address is shown in an extra line, which looks broken. This commit removes additional partner information by updating the context, displaying only the partner name. It also slightly rewords the warning, from "are you sure to create a new one?" to "are you sure you want to create a new one?". To replicate the issue: 1. Create an invoice 2. Click on the empty field next to Customer, type a new name and click "Create and edit..." 3. Add a Tax ID that is already in use (e.g. US12345673) 4. Warning of duplicate Tax ID shows, displaying company name, address and VAT task-3829641 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update improves the website crawler's efficiency by refining how it identifies and processes web pages, reducing redundant crawling by up to 97%. The changes include smarter URL matching, better handling of URL parameters, and removal of duplicate admin crawling, which significantly speeds up the crawling process from several minutes down to under 30 seconds.
Original PR description
Related to previous commit: a9a9d2f12740b02c025f992d62c0d4f5feeaab1d From initial PR: #158843 Improve Regexp to match double slugs /blog/blog-1/post-2 or /blog/1/2 Ignore param order:…
Related to previous commit: a9a9d2f12740b02c025f992d62c0d4f5feeaab1d From initial PR: #158843 Improve Regexp to match double slugs /blog/blog-1/post-2 or /blog/1/2 Ignore param order: `?a=<param>&b=<param>` == `?b=<param>&a=<param>` Remove trailing / from base url when querystring is present Ignore '/en' url instead of '/en_US' since the default url_code has been updated meanwhile (269aa594111a152ad4b7714856ea745bfef57155). Add a new test to check that urls are cleaned as expected Remove crawl as admin, since the demo user already have all groups and so we will check the same urls. The overlap is important for a really low value. _**after** this pr https://github.com/odoo/odoo/pull/159370_ public crawled 68 urls in 6.44s 3167 queries, 0.095s 46.57q per request demo crawled 271 urls in 21.93s 13365 queries, 0.081s 49.32q per request _**currently**_ public crawled 92 urls in 8.74s 4233 queries, 0.095s 46.01q per request demo crawled 819 urls in 68.03s 36603 queries, 0.083s 44.69q per request admin crawled 813 urls in 67.46s 36441 queries, 0.083s 44.82q per request _**before** pr https://github.com/odoo/odoo/pull/158843_ public crawled 185 urls in 12.62s 7526 queries, 0.068s 40.68q per request demo crawled 6691 urls in 443.84s 342327 queries, 0.066s 51.16q per request admin crawled 6605 urls in 417.36s 336151 queries, 0.063s 50.89q per request So, it should reduce the crawling from 872" => 27" for the v16. Forward-Port-Of: odoo/odoo#159525 Forward-Port-Of: odoo/odoo#159370
This update fixes how blog feed URLs are generated to prevent unnecessary redirects that can harm search engine optimization. Previously, blog feed URLs would redirect from a numeric format to a slug-based format, which negatively impacts SEO. The change ensures URLs are generated correctly from the start, eliminating these redirects and improving website performance in search results.
Original PR description
-Before this commit the url is like /blog/1/feed then it will become a redirect 301 url to /blog/travel-1/feed which is not good for SEO. Therefore we change to slug(blog) to ensure no redirect occur 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#160503 Forward-Port-Of: odoo/odoo#160438
This update improves how invoices are filtered in the accounting module by adding a new "Reversed" filter option. Previously, reversed invoices were hidden from view when using the paid/unpaid filters, making it impossible to see all invoices at once. Now users can select the new "Reversed" filter to view reversed invoices separately, ensuring they can see the complete picture of all invoice statuses.
Original PR description
…arch view
Description of the issue/feature this PR addresses:
The closed ("paid") filter in the search view does not consider the reversed state and is technically closed.
Current behavior before PR:
Currently, when you select the "paid" and "unpaid" filters on the invoices list, it does not provide a complete view of all the universe of invoices as the reversed status is not reflected within its domain.
Desired behavior after PR is merged:
I propose that the closed ("paid") filter takes into account the reversed state. Consequently, upon selecting both "paid" and "unpaid" filters, it should present a complete universe of invoices.
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#154204Resolved issues and error corrections
The partner ledger report was consuming excessive memory when processing large numbers of partners, causing the system to crash with memory errors. This fix optimizes how partner data is retrieved and cached, reducing peak memory usage by approximately 32% (from 1.9GB to 1.3GB) when handling 150,000+ partner records.
Original PR description
Issue --> Method `_query_partners` does a search on `res.partner` which is used in the return value. This return value is then looped over in the method `_build_partner_dicts` to create the rows on the partner ledger. If the number of returned `res.partner` records exceed a certain number, there is an overutilzation of memory when getting fields id, name and trust in method `_get_report_line_partners` leading to a MemoryError when loading the partner ledger report. Solution --> Replace the `search` call with a `search_fetch` call and store the specific field values in cache. This prevents the fetch of the field values. Flamegraph before  After  Peak memory utilization reduced from 1.9GB to 1.3GB for about 150k `res.partner` records opw-3785731
This fix ensures that Mexican invoices are only marked as cancelled in Odoo after receiving explicit approval from the SAT (Mexican tax authority), not just from the PAC (payment processor). Previously, invoices could be cancelled prematurely if the PAC approved the cancellation, even if the SAT or the business partner rejected it, leading to accounting inconsistencies.
Original PR description
…the SAT - Create an invoice in prod PAC environment - Sign it - Cancel it Even if the PAC approved the cancellation, the SAT could reject it. This is because, in some cases, the partner could reject the cancellation. opw-3745401 Forward-Port-Of: odoo/enterprise#58657
This fix resolves an issue where users without Project or Documents access rights were unable to confirm sales orders that automatically generate projects and tasks. Previously, these users would encounter access denied errors even though they had the necessary Sales permissions. The fix ensures that the system properly handles access rights when creating related projects and documents during order confirmation.
Original PR description
Steps to reproduce: ------------------- 1. Assume a user without "Project" access rights (but with "Sale" access rights) 2. Create an SO containing a service product which generates a Project & Task (or Project) on order 3. Confirm the SO 4. An access error should appear: "You are not allowed to modify 'Project' (project.project) records." ------------------- To trigger the same access error but for "Documents" access, repeat the same process but remove the "Documents" access rights of the user. In this case, the service product must have its "Working Template" set. task-3646545 version-16.0 Forward-Port-Of: odoo/enterprise#59794 Forward-Port-Of: odoo/enterprise#58004
Fixed an issue where helpdesk ticket replies weren't properly grouped in Outlook's conversation view. The system now sends replies with the original ticket title instead of adding the ticket number to the subject line, ensuring Outlook recognizes them as part of the same conversation thread. The ticket reference is still visible in the email body, so no information is lost.
Original PR description
Some MUA allow users to group messages 'by thread', so that all emails that share some specific headers are bundled together in a 'conversation' view. In general, using the 'References' header to…
Some MUA allow users to group messages 'by thread', so that all emails that share some specific headers are bundled together in a 'conversation' view. In general, using the 'References' header to point to the original message in the thread is enough for most MUAs to properly group emails together. This is not the case for Outlook, which also wants the title to somewhat match the original title - some changes are accepted (typically at the start of the subject header) but others aren't. For example, if a ticket is submitted by email alias with the title 'Important issue', then replies with titles like 'Re: Important issue' or '(#123) Important issue' are recognized as being from the same thread, but others like 'Important issue (#123)' are not. Since the helpdesk override of the display name is mostly there for the backend and not for email communications, this commit forces the helpdesk app to send emails with the exact same title as the initial ticket instead of including the ticket reference in the reply's title. The ticket reference is still included in the mail body for the customer so no information is lost. opw-3748509
This update fixes an issue in the Web Studio report editor where improperly formatted tables (particularly in DIN5008 layouts) were not being converted correctly. The fix ensures that all invalid nested tables are properly transformed into standard div elements, while preserving other content. This resolves display and formatting problems users may have encountered when editing reports with complex table structures.
Original PR description
…bles In a report (DIN5008 layout for example), have an invalid table -- containing "t" nodes where HTML doesn't expect them, within another invalid table. Before this commit, all the tables were not converted to classic div elements, and other conversions were wrongly applied. After this commit, all tables are converted, leaving other irrelevant nodes untouched. opw-3741137 Forward-Port-Of: odoo/enterprise#60090
This update fixes a visual bug where dropdown menus were being clipped (cut off) when using Firefox in list views. The fix adjusts how dropdowns are positioned and displayed, ensuring they appear correctly across different browsers. This improves the user experience by making all interface elements fully visible and accessible.
Original PR description
Adapt tests related to changes in community. task-3696473 Related PR: https://github.com/odoo/odoo/pull/153952 Forward-Port-Of: odoo/enterprise#60079
This fix resolves an issue where invoices for recurring subscription products using make-to-order (MTO) inventory routes could not be posted successfully. The problem was caused by conflicting context variables with the same name being used in different parts of the system. The fix cleans up the context before posting invoices to ensure the correct values are used throughout the process.
Original PR description
**Steps to reproduce:** 1- Navigate to Inventory > Configuration > Warehouses and select the warehouse 2- Click on the Routes smart button and filter by archived routes 3- Unarchive the Replenish on…
**Steps to reproduce:** 1- Navigate to Inventory > Configuration > Warehouses and select the warehouse 2- Click on the Routes smart button and filter by archived routes 3- Unarchive the Replenish on Order (MTO) route 4- Navigate to Sales > Products > Products and create a new product 5- Make the product a Recurring product that has the product type set to storable and the invoicing policy set to ordered quantities 6- Navigate to the Inventory tab and enable the Replenish on Order (MTO) and Manufacture Routes 7- Navigate to Sales and create a new quote and confirm it with the newly created product 8- Click on Create Invoice and then Create Draft Invoice 9- Click on Confirm **Current behavior before PR:** This is happening because while creating the draft invoice we pass the default move type for the invoice in the context and because the attribute 'move_type' has the same name in 'account.move' and 'procurement.group' so when getting the default value to create the procurement group it gets the value in the context which is for the account move so this value is incorrect for the move_type in procurement group **Desired behavior after PR is merged:** We clean the context that was stored for creating the invoice before posting it as this context will not be used anymore opw-3718420 Forward-Port-Of: odoo/enterprise#59164
Fixed an issue where embedded views in knowledge articles could expand to excessive heights, causing layout problems and blank spaces in certain views like Gantt charts. The fix adds a maximum height limit (80% of window height) to embedded views, ensuring they remain scrollable and properly contained within the article layout.
Original PR description
This commit fixes an issue with the embedded views of the knowledge article view: the embedded could take as much height as they needed which could result in excessive place taken by a single embedded view and this also had issues with the virtual hook which is not adapted to embedded views without scroll (this could result in completly blank space inside embedded gantt views when they would take too much space). To solve this issue, the commit adds a fixed maximum height to the embedded views (80% of the window height). task-3834795 Forward-Port-Of: odoo/enterprise#59629
This update converts text-based inline templates in the HR Payroll Holidays module to standard templates, making all user-facing messages translatable into different languages. Previously, text strings embedded in inline templates could not be translated, limiting the system's ability to support international users.
Original PR description
*: hr_payroll_holidays Strings within inline templates are not translatable, so we convert these templates into standard templates so that they can be. Task-3761551 community pr: https://github.com/odoo/odoo/pull/159892 Forward-Port-Of: odoo/enterprise#60127 Forward-Port-Of: odoo/enterprise#59877
This fix reverts a previous change that was causing reorder points to be calculated too early for businesses using just-in-time inventory management. The change was breaking workflows for companies that want to consider future deliveries when placing orders all at once. Users can now use security days or lead time settings to achieve the desired behavior instead.
Original PR description
This reverts commit 8a5541d16caa793c7549d78c082f7879d3aba233. It's a too big change for stable. It breaks the flow for poeple that want to be in just in time but want to consider the future deliveries to order all at once. Due to reverted commit they see their reorder in advance. The fixed use case, could be achieve with the security days or the global lead days system parameter. opw-crl Forward-Port-Of: odoo/odoo#157218
A bug in the web editor's font-size dropdown was causing "NaN" (invalid number) to appear instead of the actual font size. This fix restores a missing variable definition in the styling code to ensure font sizes display correctly when users adjust text formatting in the editor toolbar.
Original PR description
Description of the issue/feature this PR addresses: Commit [1] resolved an issue related to the behavior of small font sizes, which caused 'NaN' to appear in the font-size dropdown within the floating toolbar. This occurred due to the removal of a variable definition, resulting in the inability to compute the font size. This commit rectifies the problem by reintroducing the variable in the SCSS file to ensure correct rendering. [1]: https://github.com/odoo/odoo/commit/7931d1a14a3e4e65463cc101536061fa259b615d task-3801894 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix ensures that product tax displays are calculated correctly based on the specific company being used, rather than showing an incorrect combined total. Previously, when a product had different tax rates set for multiple companies, the displayed tax amount would be wrong. Now the system shows the accurate tax-inclusive price for each company.
Original PR description
Description of the issue/feature this PR addresses: When product has set two taxes (one for MyCompany San Fransisco and the other one for BE Company - thats an example) the field tax_string doesn´t discriminate each ones Current behavior before PR: Configure a product with Sales Price = $100 Add a 21% tax for the first company Add a 21% tax for the second company The tax_string is (= $ 142.00 Incl. Taxes) Desired behavior after PR is merged: The tax_string depend on company where i stay. So, tax_string must be (= $ 121.00 Incl. Taxes) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix resolves a bug where e-wallet loyalty programs without a top-up product would fail to properly deduct the wallet balance when used in sales orders. The change ensures that e-wallet programs skip unnecessary payment calculations, allowing wallet balances to be correctly reduced after purchase.
Original PR description
**Current behavior:** Creating an ewallet loyalty program and removing the default value for `trigger_product_ids` without adding another in its place will result in any ewallet created using that…
**Current behavior:**
Creating an ewallet loyalty program and removing the default
value for `trigger_product_ids` without adding another in its
place will result in any ewallet created using that program to
not have its balance deducted after being used in a sale order.
**Expected behavior:**
The default product should not be required here, nor should any
product, seeing as there is no `required` constraint on this
field nor any related ones.
**Steps to reproduce:**
1. Create an ewallet loyalty program and remove the Top-up
ewallet product
2. Create an ewallet, give it some balance, and use it in an
order
3. Check the balance of the wallet to see the erroneous behavior
**Cause of the issue:**
In the _program_check_compute_points() method of `sale.order` in
`sale_loyalty`, the conditional block:
`if not products_per_rule.get(rule):
continue`
will normally prevent rules belonging to ewallet program types
from going further in the method because they have the default
ewallet top-up product in their domain. When the continue is not
reached, they will reach this line:
`amount_paid = sum(max(0, line.price_total) for
line in order_lines if line.product_id in rule_products)`
which will end up offsetting the actual subtraction of a SOLs
`points_cost` from an ewallet `loyalty.card`'s balance.
**Fix:**
Add another check prior to the calculation of order points which
prevents orders with applied ewallet coupons without any top-up
products from reaching the problematic code. If an ewallet
program doesn't have any `trigger_product_ids`, it shouldn't
ever need to perform such calculations.
opw-3756134
Forward-Port-Of: odoo/odoo#157421This fix corrects how Odoo calculates component quantities when using Kit Bills of Materials (BoM) with finished product quantities other than 1. Previously, when a BoM was set to produce 5 units but a sales order was for 3 units, the delivery quantity would be calculated incorrectly. Now the system properly accounts for the BoM's base quantity, ensuring accurate delivery amounts that match customer orders.
Original PR description
Use case: - Create a Kit BoM with finished qty to 5 consuming 10 components - Do a sale order for 3 units (3/5 of BoM) - Update the sale order line to 4 units Current behavior: The delivery has a huge amount to deliver Expected: The delivery is for 8 units It happens because the method `_compute_kit_quantities` always expect a BoM for 1 units. `bom_line_data['original_qty']` always contains the number of times the BoM will be needed and not the quantity of finished products. In order to have the number of component by unit of finished product we have to introduce the BoM quantity in the formula 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
This fix corrects a display issue in the project portal where the 'View Task' button for sub-tasks was incorrectly hidden after saving. Users can now consistently see and access the 'View Task' button for sub-tasks in the portal, improving the user experience when managing project tasks.
Original PR description
… portal Steps to reproduce: - Open project share any project which has task. - My account > project > open that project you can see task . - Open any task and add new sub-task you can see once the sub-task is saved 'task view' button is displayed. Issue: - Sub-tasks notebook > add a line > 'view task' is displayed at the creation but is then hidden once the task is saved. Solution: - Correct the attrs and change the condition in able to invisible 'view task' once the sub-task is saved task-3602610 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#159806 Forward-Port-Of: odoo/odoo#145214
This fix resolves an issue where user avatars in blog comments were showing as placeholder images instead of actual profile pictures. The system now properly displays avatars when users have the appropriate access permissions, while still respecting security restrictions for unauthorized users.
Original PR description
[FIX] portal: display avatar when read access right are fulfilled Steps to reproduce the bug: - Enable the comments on a blog. - Add a comment. -> Problem: The avatar of the comment is the default…
[FIX] portal: display avatar when read access right are fulfilled Steps to reproduce the bug: - Enable the comments on a blog. - Add a comment. -> Problem: The avatar of the comment is the default placeholder image. The problem appears since [1]. This commit was created to bypass the read access of an image if a correct `token` was provided in the dataset of the `.o_portal_chatter` element. The problem is that since [1], if the `.o_portal_chatter` element does not have a `token` (or a `hash` and a `pid` since [2]) in its dataset, the avatar images are displayed as the default placeholder image by default. The goal of this commit is to correct this behavior; if there is no token provided, the previously used `/web/image` route is used to show the avatar. Thanks to this route, the avatar is displayed if the read access is fulfilled. If it is not the case, the default placeholder image is displayed. [1]: https://github.com/odoo/odoo/commit/d4eb996cd3caea3fbb822437057a6a5a8a722293 [2]: https://github.com/odoo/odoo/commit/7f69708bcce3b3c4b096d89cb0ec354998eac191 opw-3749422 Forward-Port-Of: odoo/odoo#158953 Forward-Port-Of: odoo/odoo#157652
This fix ensures that when a product in a delivery picking is changed to a different product, the total picking weight is automatically recalculated to reflect the new product's weight. Previously, the weight would remain unchanged even after swapping products, which could cause incorrect shipping cost calculations and logistics planning.
Original PR description
**Steps to reproduce the bug:**
- Create a storable product “P1” and "P2":
- Weight "P1": 1kg
- Weight "P2": 2kg
- Create a picking with the product “P1”
- Change the product of the move to “P2”
Problem:
The picking weight is not updated
opw-[3754884](https://www.odoo.com/web#id=3754884&view_type=form&model=project.task)
Forward-Port-Of: odoo/odoo#159997
Forward-Port-Of: odoo/odoo#159722Fixed a bug in the HR holidays module where modifying an overtime time off request would incorrectly fail validation. The system was comparing overtime duration values incorrectly, preventing employees from making any changes to overtime time off requests even when they had sufficient overtime balance. This fix ensures overtime time off can be properly edited without unnecessary validation errors.
Original PR description
Currently when a time off using an overtime is written to for any reason, it will compare the duration of the overtime with the number_of_hours_display. However, the duration check will always be triggered since overtime duration is number_of_hours_display * -1 This causes problems if an overtime time off is modified for any reason and the employee does not have enough total_overtime --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#160055
This update fixes a bug in the Point of Sale system where searching for a customer by name could incorrectly match partial text in the middle of formatted address data, causing the wrong customer to be selected. The fix ensures searches only match customer names at the beginning of the search field, preventing errors and improving the reliability of customer lookups.
Original PR description
Before this commit, when adding two columns to the address, the search string would become formatted as such: "47:abigail peterson|address Belgium address0: 12, |abigail..." Searching for "abigail" would incorrectly match with "0: 12, |abigail", leading to the addition of the partner with ID 0 and causing an error. With this commit, we have refined the search to match only at the beginning of a line. This prevents incorrect matches and the subsequent errors, improving the reliability of the partner search. opw-3847934 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update removes the ability to duplicate websites from the website form view. The duplication feature was misleading because it couldn't properly copy website content, pages, and other important data—only technical fields that shouldn't be duplicated anyway. The team plans to focus on a proper export/import feature for websites in the future instead.
Original PR description
At the moment, duplicating a website is not possible in the sense of duplicating content, pages, etc. It is still available as an action from the form view, and it could make sense to start up a new website with a few common values (social media? etc?)... but many of website fields are technical fields that should not be copied and many are dubious to copy and not even visible in the form view. Really, duplicating a website at the moment is misleading. This commit disables the possibility from the form view. In the future, we want to focus on the ability to export / import a full website, but that's not for now. opw-3782830 Forward-Port-Of: odoo/odoo#160463
This fix resolves a bug in the accounting module where updating multiple journals at once would cause the system to crash. The issue occurred because the code was trying to access a single journal ID when multiple journals were being modified. The fix ensures the system properly handles bulk journal updates and displays the appropriate error message to users when restrictions apply.
Original PR description
A partner found a bug, when `write` (public method) is called on a recordset of more than one journal then the restriction will traceback, as the `id` can only be called on one journal. Simplest solution is to simply get `id` on the loop variable instead, and let the code normally block the user with a UserError. Credits to: https://github.com/juppe Old PR: https://github.com/odoo/odoo/pull/150888 Forward-Port-Of: odoo/odoo#158536
The "Download logs" button on IoT devices was failing with an error. This fix restores the ability to download log files from IoT boxes as intended. Users can now successfully retrieve diagnostic logs from their IoT devices without encountering server errors.
Original PR description
Before this commit: Using the "Download logs" button from the IoT box form view will fail every time due to an Internal Server Error on the IoT side. ```py File "/home/pi/odoo/odoo/tools/misc.py", line 189, in file_path FileNotFoundError: File not found: /var/log/odoo/odoo-server.log ``` This happened due to changes introduced in: https://github.com/odoo/odoo/pull/99658 The changes enforced to double check that the file path was in an odoo addons (for security reasons). However, it is generally not the case, thus the error After this commit: The log file is downloaded as intended opw-3827121 Forward-Port-Of: odoo/odoo#159186
This update fixes a display problem where dropdown menus for optional columns were getting cut off or hidden when scrolling horizontally in list views on Firefox and Safari browsers. The fix repositions the dropdown menu to ensure it remains visible and accessible at all times, improving the user experience when working with tables that require horizontal scrolling.
Original PR description
On firefox and safari applying a position-sticky on an element inside an other element with an overflow is causing a rendering issue. This was occuring with the dropdown…
On firefox and safari applying a position-sticky on an element inside an other element with an overflow is causing a rendering issue. This was occuring with the dropdown `.o_optional_columns_dropdown` making it unusable as soon as the `overflow-x` triggered the horizontal scroll in the table. This PR moves the `o_optional_columns_dropdown` out of the natural DOM flow with a position-absolute, removing the position-relative on each parents until the `.o_field_x2many.o_field_x2many_list` which is out of the horizontal scroll applied by `table-responsive`. This ensures the dropdown-toggle is always displayed on the top right of the table. task-3696473 Will close tickets: 3682280 and 3697814 | Before | After | | ---- | ---- | |  | | Forward-Port-Of: odoo/odoo#153952 Forward-Port-Of: odoo/odoo#151570
This update fixes display issues in the "My Dashboard" view where embedded reports and charts could become too large or display incorrectly. The fix adds scrolling capability and proper sizing constraints to embedded views, ensuring they fit better on the screen and display content correctly without excessive blank spaces.
Original PR description
This commit fixes an issue with the embedded views of "My dashboard" view: the embedded could take as much height as they needed which could result in excessive place taken by a single embedded view and this also had issues with the virtual hook which is not adapted to embedded views without scroll (this could result in completly blank space inside embedded gantt views when they would take too much space). To solve this issue, the commit adds a fixed maximum height to the embedded views (80% of the window height) and also adds a minimum width to their content so that it will be horizontally scrollable instead of being weirdly squished. Also tweaks a bit the padding of the embedded view so that it looks a bit better even with the added scroll bars. task-3834795 Forward-Port-Of: odoo/odoo#159663