Daily updates from Odoo
Friday, December 6, 2024
141 changes
22 changes
Resolved issues and error corrections
The project burndown chart now correctly applies open and closed task filters. This ensures teams can accurately review task progress without missing expected results in project reports.
Original PR description
Steps to reproduce: - open burndown chart of any project - add open/closed task filter Issue: - filters don't return anything in the burndown chart even though project contains open/closed tasks Sol: - add correct domain in open/closed task filter task-4295668
Miscellaneous changes
The issue: Starting with version 17.4, the Odoo banner displaying the invoice name on original bills is only added if the attached PDF uses US Letter paper size and is oriented vertically. How to reproduce the issue: -Upload any invoice with a non-standard format -Print -> Original Bills Explanation: Since saas-17.4, the PyPDF2 library version was upgraded from 1.26.0 to 2.12.1. In version 1.26.0, the canvas dimensions were automatically adjusted when merging with non-standard page siz
Original PR description
The issue: Starting with version 17.4, the Odoo banner displaying the invoice name on original bills is only added if the attached PDF uses US Letter paper size and is oriented vertically. How to reproduce the issue: -Upload any invoice with a non-standard format -Print -> Original Bills Explanation: Since saas-17.4, the PyPDF2 library version was upgraded from 1.26.0 to 2.12.1. In version 1.26.0, the canvas dimensions were automatically adjusted when merging with non-standard page sizes. However, in version 2.12.1, this behavior no longer occurs, resulting in the banner not appearing correctly on non-standard formats. opw-4278031 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#186947
Commit 1e0183d506d265c978de61e5316e8d35fcbacb05 made sure that child addresses where the commercial fields (vat, company name, ...) are not displayed are considered valid since those fields will be taken from the commercial partner (parent contact). Nevertheless, the code in the argentinian localization doesn't handle the cases where those values are not provided, which led to a traceback being displayed to the customers, which shouldn't ever happen in the ecommerce checkout: > if afip_res
Original PR description
Commit 1e0183d506d265c978de61e5316e8d35fcbacb05 made sure that child addresses where the commercial fields (vat, company name, ...) are not displayed are considered valid since those fields will be taken from the commercial partner (parent contact). Nevertheless, the code in the argentinian localization doesn't handle the cases where those values are not provided, which led to a traceback being displayed to the customers, which shouldn't ever happen in the ecommerce checkout: > if afip_resp.code not in ['5', '9'] and id_type != cuit_id_type 'bool' object has no attribute 'code' This commit skips the validation in case those fields are not given. Either they are required and the main validation ensures they are provided (and they'll be verified by the override), or they are not provided and shouldn't be, in which case the validation can be skipped here. opw-4373610 Fixes #189227 Forward-Port-Of: odoo/odoo#189312
When `location_id` is None in `_get_rule` the line `while locations[-1].location_id` raises an IndexError. This commit fixes that by returning early with an empty recordset of stock.rule in case location_id is None. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#188953
Original PR description
When `location_id` is None in `_get_rule` the line `while locations[-1].location_id` raises an IndexError. This commit fixes that by returning early with an empty recordset of stock.rule in case location_id is None. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#188953
For `l10n_cg`, some taxes are unarchived. For `l10n_syscohada`, the type of some accounts is changed from Equity to Current liabilities or Current Asset. A missing account is also added. task-3848455 Forward-Port-Of: odoo/odoo#163380
Original PR description
For `l10n_cg`, some taxes are unarchived. For `l10n_syscohada`, the type of some accounts is changed from Equity to Current liabilities or Current Asset. A missing account is also added. task-3848455 Forward-Port-Of: odoo/odoo#163380
Versions -------- - 16.0+ Steps (18.0+) ------------- 1. Have the `account_tax_python` module installed; 2. define a sales tax using "Custom Formula"; 3. define a formula based on `product.standard_price`; 4. have the tax enabled for products in eCommerce; 5. as a Public User, go to the eCommerce page. Issue ----- > 403: Forbidden Cause ----- Commit de302c2 changed the way company dependent fields are handled. Instead of computing them via `_compute_company_dependent`, they
Original PR description
Versions -------- - 16.0+ Steps (18.0+) ------------- 1. Have the `account_tax_python` module installed; 2. define a sales tax using "Custom Formula"; 3. define a formula based on `product.standard_price`; 4. have the tax enabled for products in eCommerce; 5. as a Public User, go to the eCommerce page. Issue ----- > 403: Forbidden Cause ----- Commit de302c2 changed the way company dependent fields are handled. Instead of computing them via `_compute_company_dependent`, they are now stored in the database. Before this this change, any `groups` restriction added to a field wasn't actually checked. After this change, it does get checked, leading to the 403 error. Solution -------- When computing taxes, use `sudo` to access any required product field. opw-4354321 Forward-Port-Of: odoo/odoo#189378 Forward-Port-Of: odoo/odoo#189186
Versions -------- - 16.0+ Steps ----- 1. Activate a second language; 2. create a new quotation template; 3. add a note & save change; 4. add a translation for the note & save change; 5. create a new sales order; 6. select the created quotation template; 7. set customer to a partner using the second language. Issue ----- The note is still displayed in English. Cause ----- The translation is saved on the `sale.order.template.line` model, so it has to get fetched from there.
Original PR description
Versions -------- - 16.0+ Steps ----- 1. Activate a second language; 2. create a new quotation template; 3. add a note & save change; 4. add a translation for the note & save change; 5. create a new sales order; 6. select the created quotation template; 7. set customer to a partner using the second language. Issue ----- The note is still displayed in English. Cause ----- The translation is saved on the `sale.order.template.line` model, so it has to get fetched from there. Currently there is no logic in place to do this when changing the customer. Solution -------- Add an `onchange` method which reloads the template if no lines were added or removed. opw-4260006 Forward-Port-Of: odoo/odoo#188038
Since [1], the `tel://` protocol was adopted instead of `tel:`. However, URIs cannot contain space characters, which can lead to invalid URIs in certain cases. Steps to reproduce: - Open the website editor. - Attempt to edit the phone number in the header. - The URI becomes invalid due to the presence of a space character. This commit resolves the issue by removing space characters from the URI, ensuring it remains valid. [1]: https://github.com/odoo/odoo/commit/6d4a3b3ab5c0f3
Original PR description
Since [1], the `tel://` protocol was adopted instead of `tel:`. However, URIs cannot contain space characters, which can lead to invalid URIs in certain cases.
Steps to reproduce:
- Open the website editor.
- Attempt to edit the phone number in the header.
- The URI becomes invalid due to the presence of a space character.
This commit resolves the issue by removing space characters from the URI, ensuring it remains valid.
[1]:
https://github.com/odoo/odoo/commit/6d4a3b3ab5c0f3361d1d681d05b974e295dcbabe
opw-4354614
Forward-Port-Of: odoo/odoo#188964Version: - 17.0 Steps to reproduce: - Click on the Connect button, which redirects to the authentication wizard. - On the authorization page, click on the Cancel button. issue: - Clicking on the Cancel button does not return an authorization code, causing a traceback error. solution: - Added a condition to handle the Cancel action. If the user clicks Cancel, redirect to the provider form view without causing an error. opw-4377802 Forward-Port-Of: odoo/odoo#189526
Original PR description
Version: - 17.0 Steps to reproduce: - Click on the Connect button, which redirects to the authentication wizard. - On the authorization page, click on the Cancel button. issue: - Clicking on the Cancel button does not return an authorization code, causing a traceback error. solution: - Added a condition to handle the Cancel action. If the user clicks Cancel, redirect to the provider form view without causing an error. opw-4377802 Forward-Port-Of: odoo/odoo#189526
### Steps to reproduce: - Inventory > Configuration > Warehouse Management > Warehouses - Create a second warehouse - Go to Inventory > Products > Products - In the search bar type `foo` string > Search Warehouse for `foo` - Click on any product Kandan record - Click on the Forecast smart button of the product #### > Traceback ### Cause of the issue: Thanks to the dummy `warehouse_id` field of the `product.template` model a `warehouse` context key can be set in the context from th
Original PR description
### Steps to reproduce: - Inventory > Configuration > Warehouse Management > Warehouses - Create a second warehouse - Go to Inventory > Products > Products - In the search bar type `foo` string >…
### Steps to reproduce: - Inventory > Configuration > Warehouse Management > Warehouses - Create a second warehouse - Go to Inventory > Products > Products - In the search bar type `foo` string > Search Warehouse for `foo` - Click on any product Kandan record - Click on the Forecast smart button of the product #### > Traceback ### Cause of the issue: Thanks to the dummy `warehouse_id` field of the `product.template` model a `warehouse` context key can be set in the context from the search bar: https://github.com/odoo/odoo/blob/a72763acfc4d83ae2aadad2e807547c5b1819002/addons/stock/models/product.py#L685 https://github.com/odoo/odoo/blob/a72763acfc4d83ae2aadad2e807547c5b1819002/addons/stock/views/product_views.xml#L78 This trick is notably used in order to take the warehouse into account in the computation of the various quantity fields associated to products by generating custom location domains: https://github.com/odoo/odoo/blob/a72763acfc4d83ae2aadad2e807547c5b1819002/addons/stock/models/product.py#L136-L137 https://github.com/odoo/odoo/blob/a72763acfc4d83ae2aadad2e807547c5b1819002/addons/stock/models/product.py#L250-L255 However, since that context key was added via the search bar, it type might be: a string, an integerId or a list of either/both other types. (E.g. to create a list of a string and integer type and select a string and then type a string allowing you to find a real warehouse id that you can select after clicking on the dropdown arrow). Therefore, in order to be properly used, this context key needs to be parsed to be used properly as done in the `_get_domain_locations` for instance. However, the `warehouse` context key is used at many other places in the code, each time expecting a single integer id, and since the warehouse context key is not cleaned from one action to an other you are technically able to provide a string where the code is expecting a an integer. ### Fix: The proper fix of this use case would be to change the context key name used by the search view to only match flows expecting such a context. However, this change is not stable as it requires to modify a view and hence can't be applied before master (18.1). As such, in prior versions, we add a context parser for to extract a single integer id from the `warehouse` context key where it is used but unexpected to match something else. ### Note: This patch will improve other fixes and hopefully prevent yet unoticed error raised by this issue: 903d8beeea5d332e556ef81e231a3b8b4c51cd45 and afa7c6bf25c9de5fc0c878faa29e1cc35bc11805 opw-4290818 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#187808 Forward-Port-Of: odoo/odoo#187413
Steps to reproduce: - Enable 'Reception Report' in Inventory Configuration - Make an outgoing shipment for a storable product - Make an incoming shipment for that same product - Open the allocation report - Reload the page Issue: The context is lost when reloading the page, meaning that we lose the the `default_picking_ids`/`default_production_ids` in the context, making it unable to open the report. To avoid this, we add the key and values to the router (and thus the URL) so it can
Original PR description
Steps to reproduce: - Enable 'Reception Report' in Inventory Configuration - Make an outgoing shipment for a storable product - Make an incoming shipment for that same product - Open the allocation report - Reload the page Issue: The context is lost when reloading the page, meaning that we lose the the `default_picking_ids`/`default_production_ids` in the context, making it unable to open the report. To avoid this, we add the key and values to the router (and thus the URL) so it can be properly picked up when reloading the report. opw-4321072 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#189694 Forward-Port-Of: odoo/odoo#189560
In some business case when the invoice is done before the receipt, the `stock.valuation.layer` currency rate will be taken on the bill rather than the current date. To reproduce the issue: (Need account_accountant) 1. Create a product category PC - Costing method: FIFO - Inventory valuation: Automated 2. Create a product P - Type: Storable - Category: PC 3. On 10/11/2024, confirm a PO with 1 x P at Є10 4. On 11/11/2024, bill it with currency rate of 1.06 at $10.6 4. On 1
Original PR description
In some business case when the invoice is done before the receipt, the `stock.valuation.layer` currency rate will be taken on the bill rather than the current date. To reproduce the issue: (Need account_accountant) 1. Create a product category PC - Costing method: FIFO - Inventory valuation: Automated 2. Create a product P - Type: Storable - Category: PC 3. On 10/11/2024, confirm a PO with 1 x P at Є10 4. On 11/11/2024, bill it with currency rate of 1.06 at $10.6 4. On 12/11/2024, receive P with currency rate of 1.07 at $10.7 Errors: The price SVL is different from the bill Solution: Use currency rate at bill date rather than the current date when invoice before receipt --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#189210 Forward-Port-Of: odoo/odoo#187015
The tax report (KMD report) and annex to the tax report (KMD INF report) for Estonia needed to be reworked to correct errors and fix rounding issues. In this commit, the 'balance_from_tags' label is added to the tax report, allowing a better audit of the report lines. Furthermore, the tax tags are edited to differentiate between tax and base tax lines. These changes are necessary to improve auditing of the tax report lines. task-3997203 --- I confirm I have signed the CLA and read t
Original PR description
The tax report (KMD report) and annex to the tax report (KMD INF report) for Estonia needed to be reworked to correct errors and fix rounding issues. In this commit, the 'balance_from_tags' label is added to the tax report, allowing a better audit of the report lines. Furthermore, the tax tags are edited to differentiate between tax and base tax lines. These changes are necessary to improve auditing of the tax report lines. task-3997203 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#180856
This commit fixes the wrong use of the contenteditable attribute inside the useSpellcheck implementation. Now, the isContentEditable attribute is used to find the right element. A test has been added too, using the contenteditable='true' attribute. Forward-Port-Of: odoo/odoo#189728
Original PR description
This commit fixes the wrong use of the contenteditable attribute inside the useSpellcheck implementation. Now, the isContentEditable attribute is used to find the right element. A test has been added too, using the contenteditable='true' attribute. Forward-Port-Of: odoo/odoo#189728
**Current behavior:** Having a manufactured product with components, all with 'average' costing, a series of receiptions for the components at difference price points, followed by an MO, followed by another reception at (again) a new price point will result in an imbalanced "Cost of Production" journal if the aforementioned MO is unbuilt. **Expected behavior:** The unbuild operation doesn't leave the journal imbalanced. **Steps to reproduce:** 1. Create a stored product with averag
Original PR description
**Current behavior:** Having a manufactured product with components, all with 'average' costing, a series of receiptions for the components at difference price points, followed by an MO, followed by…
**Current behavior:** Having a manufactured product with components, all with 'average' costing, a series of receiptions for the components at difference price points, followed by an MO, followed by another reception at (again) a new price point will result in an imbalanced "Cost of Production" journal if the aforementioned MO is unbuilt. **Expected behavior:** The unbuild operation doesn't leave the journal imbalanced. **Steps to reproduce:** 1. Create a stored product with average, real_time costing 2. Create a BoM for this product, with 2 stored components (also with average, real_time costing) 3. Create a PO for the components (price is arbitrary), confirm and receive the product 4. Create another PO for the components with a different price from the previous PO, confirm and receive 5. Create an MO for the final product, confirm and consume/produce all 6. Create a final PO for the components with prices different from the previous two orders, confirm and receive 7. Create a second MO for the final product and confirm/consume/produce-all 8. Unbuild the MO from step 5 -> in the "Cost of Production" journal, observe that there is an outstanding balance **Cause of the issue:** When the unbuild operation happens, the current price of the final product informs the SVL's `value` and `unit_price` fields- which of course is not the same as when the MO was completed. We end up with a `unit_price` on the SVL for the final product which is not equal to the sum of the component SVLs' `unit_price` which leads to the generation of account move lines that won't be balanced. **Fix:** During an ubuild operation, stock moves for finished products which may have this issue (i.e., have non-standard costing) with linked SVL records will use that SVL's unit cost for the unbuild SVL (and ensuing journal entries) as opposed to taking the current cost. opw-4062415 Forward-Port-Of: odoo/odoo#188016
**Steps to reproduce:** - Install Accounting and l10n_de - Switch to a German company - Configure the customer invoice journal to enable "XRechnung UBL (Germany)" - Create a German contact: * with a complete address * with an email address * without a VAT number - Create an invoice for the created contact - Confirm the invoice - Generate the electronic invoice - Validate the generated XML on an online XRechnung ValidationError **Issue:** The XRechnung (UBL Invoice) is not va
Original PR description
**Steps to reproduce:** - Install Accounting and l10n_de - Switch to a German company - Configure the customer invoice journal to enable "XRechnung UBL (Germany)" - Create a German contact: * with a…
**Steps to reproduce:** - Install Accounting and l10n_de - Switch to a German company - Configure the customer invoice journal to enable "XRechnung UBL (Germany)" - Create a German contact: * with a complete address * with an email address * without a VAT number - Create an invoice for the created contact - Confirm the invoice - Generate the electronic invoice - Validate the generated XML on an online XRechnung ValidationError **Issue:** The XRechnung (UBL Invoice) is not valid because the buyer electronic address is missing (cbc:EndpointID). **Cause:** `<cbc:EndpointID>` gets its value from contact's VAT, but the contact has no VAT. **Solution:** Since XRechnung 3.0.1, the email address can be used as electronic address with "EM" as schemeID. So, fallback on email address if contact has no VAT. **Reference:** https://www.e-rechnung-bund.de/standard-xrechnung-3-0-1/ https://blog.seeburger.com/xrechnung-version-3-0-1-comes-into-force-on-february-1-2024/ https://erechnungsvalidator.service-bw.de/ opw-4261026 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#189183
The DIN 5008 layout was not properly addressing reports on invoices and delivery slips. On invoices/pro-forma, the reports were not addressed to the correct partners (commercial partner instead of invoice partner). In the delivery slips the reports were not addressed to the delivery partner. This led to functionally and legally incorrect reports. task-4089521 Forward-Port-Of: odoo/odoo#183775
Original PR description
The DIN 5008 layout was not properly addressing reports on invoices and delivery slips. On invoices/pro-forma, the reports were not addressed to the correct partners (commercial partner instead of invoice partner). In the delivery slips the reports were not addressed to the delivery partner. This led to functionally and legally incorrect reports. task-4089521 Forward-Port-Of: odoo/odoo#183775
Steps to reproduce the bug (only on Safari): - Drag and drop 4-5 "Text" blocks onto the page. - Hide all of them in desktop view by clicking the "Hide on desktop" button for each one. This should create a list of "Invisible Elements" at the bottom of the right panel. - Drag and drop a "Text - Image" block onto the page. - Click the image in the "Text - Image" block. - In the image options, click the "Shape" selector. - Bug: The "Shape" selector is partially hidden behind the "Invisible E
Original PR description
Steps to reproduce the bug (only on Safari): - Drag and drop 4-5 "Text" blocks onto the page. - Hide all of them in desktop view by clicking the "Hide on desktop" button for each one. This should create a list of "Invisible Elements" at the bottom of the right panel. - Drag and drop a "Text - Image" block onto the page. - Click the image in the "Text - Image" block. - In the image options, click the "Shape" selector. - Bug: The "Shape" selector is partially hidden behind the "Invisible Elements" list, and it is not possible to scroll to the bottom of the "shapes" list to access the last shapes. After investigation, we found that the issue comes from the backdrop, which is positioned as sticky behind the shape selector. Since the backdrop isn't needed for the "shape selector" (it covers the entire right panel), we simply disabled it for the "shape selector". opw-4357397 Forward-Port-Of: odoo/odoo#189591
current behaviour: when buggy server action is introduced, we don't handle it well, eg: ``` name = record.name if name != record.partner_id: raise UserError("Datatype") ``` here, comparing `name` and `record.partner_id` doesn't make sense, therefore our ORM default behaviour is to return false and rise `AttributeError`, but the problem occurs when pypdf2 attempts to format the warning message, which rises an error which isn't being handled: ``` File "/home/odoo/.local/lib/python3.
Original PR description
current behaviour: when buggy server action is introduced, we don't handle it well, eg: ``` name = record.name if name != record.partner_id: raise UserError("Datatype") ``` here, comparing `name` and…
current behaviour:
when buggy server action is introduced, we don't handle it well, eg:
```
name = record.name
if name != record.partner_id:
raise UserError("Datatype")
```
here, comparing `name` and `record.partner_id` doesn't make sense, therefore our ORM default behaviour is to return false and rise `AttributeError`, but the problem occurs when pypdf2 attempts to format the warning message, which rises an error which isn't being handled:
```
File "/home/odoo/.local/lib/python3.10/site-packages/PyPDF2/pdf.py", line 1069, in _showwarning
file.write(formatWarning(message, category, filename, lineno, line))
File "/home/odoo/.local/lib/python3.10/site-packages/PyPDF2/utils.py", line 69, in formatWarning
file = filename.replace("/", "\\").rsplit("\\", 1)[1] # find the file name
IndexError: list index out of range
```
it is problematic since it is server action.
expected behaviour:
Even when buggy code is introduced, comparision should return False and error should be handled well.
steps to reproduce:
1) Create new database from scratch and create server action with the buggy code above, set model to `sale.orde` and add it to `contextual action`
2) Go to any `sale.order` record and trigger the action. 3) it outputs the error.
4) please note that, if you restart the server, error doesn't happen, because places where override happens doesn't get invoked.
task-4365106
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#189688Versions -------- - 16.0+ Steps (18.0+) ------------- 1. Enable credit limits via Accounting settings; 2. log in as a user with access to Sales but not Accounting; 3. create a Sales Order; 4. add a product. Issue ----- Access Error. Cause ----- Commit de302c2 changed the way company dependent fields are handled. Instead of computing them via `_compute_company_dependent`, they are now stored in the database. Before this this change, any `groups` restriction added to a field
Original PR description
Versions -------- - 16.0+ Steps (18.0+) ------------- 1. Enable credit limits via Accounting settings; 2. log in as a user with access to Sales but not Accounting; 3. create a Sales Order; 4. add a product. Issue ----- Access Error. Cause ----- Commit de302c2 changed the way company dependent fields are handled. Instead of computing them via `_compute_company_dependent`, they are now stored in the database. Before this this change, any `groups` restriction added to a field wasn't actually checked. After this change, it does get checked, leading to the access error. Solution -------- 1. Use `sudo` to access `partner_id.credit`. 2. When calling the `_build_credit_warning_message`, pass the sales order with `sudo`. opw-4367393 Forward-Port-Of: odoo/odoo#189803 Forward-Port-Of: odoo/odoo#189209
[FIX] base: interval_type is required Steps: - Install CRM - Open Settings/CRM - "Rule-Based Assignment" is disabled - Go to open the scheduled action: "CRM: Lead Assignment" - No interval type defined - Enable it Other steps: - Install CRM - Open Settings/CRM - Enable "Rule-Based Assignment" Repeatedly - Go to open the scheduled action: "CRM: Lead Assignment" - Change the interval to nothing Actual result: - Scheduled actions will not run anymore (cron) - KeyEr
Original PR description
[FIX] base: interval_type is required
Steps:
- Install CRM
- Open Settings/CRM
- "Rule-Based Assignment" is disabled
- Go to open the scheduled action: "CRM: Lead Assignment"
- No interval type defined
- Enable it
Other steps:
- Install CRM
- Open Settings/CRM
- Enable "Rule-Based Assignment" Repeatedly
- Go to open the scheduled action: "CRM: Lead Assignment"
- Change the interval to nothing
Actual result:
- Scheduled actions will not run anymore (cron)
- KeyError: None
- `interval = _intervalTypes[job['interval_type']](job['interval_number'])`
Expected result:
- You cannot enable a scheduled action without an interval_type defined
opw-4370139
opw-4318230
Forward-Port-Of: odoo/odoo#189684Before this fix: As the default log level if set to INFO, having a 400 on mercado pago notification log does not help to further investigate the case After this fix: Unusual situatution logs that were in debug level were increased to WARNING level instead to be by default in logs files opw-4349957 Forward-Port-Of: odoo/odoo#189894
Original PR description
Before this fix: As the default log level if set to INFO, having a 400 on mercado pago notification log does not help to further investigate the case After this fix: Unusual situatution logs that were in debug level were increased to WARNING level instead to be by default in logs files opw-4349957 Forward-Port-Of: odoo/odoo#189894
30 changes
Enhancements to existing features
Grid views now validate date range settings more strictly, so only supported time periods can be used. This helps prevent configuration mistakes that could lead to incorrect grid displays or data loading issues.
Original PR description
Before this commit, `range` tag can be defined as child of field, that range is used if the parent field is a column and a Date/Datetime field to know the number of grid columns to display and how to fetch data to fill in those columns. However, the content of `span` and `step` attributes defined in the `range` xml tag is not really checked during the xml validation of the grid view. This commit makes sure `span` attribute only contains `day`, `week`, `month` or `year` and `step` attribute is either `day` or `month`. task-4373526
Shift times in the Planning kanban view now hide unnecessary seconds, making schedules easier to read at a glance. Single-day shifts show the date once with start and end times, while multi-day shifts show both full dates and times for clarity.
Original PR description
Removed seconds from the planned date display for shifts in the kanban view, it will improves readability and provides a cleaner display of shift times in the kanban view - for multiple days it will show the full date and time e.g., '10/10/2024 8:00 - 10/12/2024 17:00'. - For the single day it will show only the start date with start time and end time '10/10/2024 8:00 - 17:00'.. task- 4247327
Subscription renewals now update the contract end date only once instead of briefly setting it to today first. This avoids temporary date inconsistencies that could disrupt custom business processes during renewals.
Original PR description
Before this commit, the end_date in set_close was always set to today. During a renewal, it was later updated. Unfortunately, it could break customization when the parent end_date was set to today during a shrt amount of time. During that time, it would be earlier than the start_date and this could lead to issues on some customizations. This change aimes to avoid setting the end_date twice and have single update of the end_date during the renewal process.
This update adds automated test coverage for expanding resources in the Planning app. It helps ensure this scheduling behavior remains reliable in future updates, reducing the risk of regressions for users who manage resource planning.
Original PR description
In this commit: planning expand resource is tested task-4367703
The interview scheduling email template was updated to use a simpler layout that improves alignment. This helps recruitment-related appointment emails look cleaner and more consistent for candidates and recruiters.
Original PR description
- Remove the table structure from "Recruitment: Schedule interview" email template and go for just div to fix the alignment Task: 4363968
The Indian GST reporting module now uses a standard Odoo grouping method instead of custom grouping logic. This cleanup should improve performance and maintainability without changing how users work with the reports.
Original PR description
Before this commit: We created a manual method to group by the journal items After this commit: We cleanup the manual created method and use the orm `grouped` method for better performance
Rental-related website pages are now marked so they can be served by read-only database replicas where appropriate. This helps distribute traffic more efficiently and can improve scalability without changing the customer-facing shopping experience.
Original PR description
Mark readonly routes/methods so that those requests can be handled by readonly database replicas. task-4167831 See also: odoo/odoo#187616
Resolved issues and error corrections
Manufacturing work orders now use the Google Slides viewer for embedded documents, replacing the previous viewer setup. This improves consistency with the wider platform change and helps operators view related instructions more reliably.
Original PR description
Following odoo/odoo#189309, clean the previous 'embed_viewer'.
Belgian payroll payslips now count half-day work entries as 0.5 days instead of a full day. This improves payroll accuracy and helps employees and payroll teams see the correct worked time on payslips.
Original PR description
half-day work entries should appear on the payslip as being 0.5 days instead of 1 task-4269240
Features or functions removed from Odoo
The Belgian salary package configuration was cleaned up by removing an old field that is no longer used. This reduces maintenance overhead without changing the employee-facing salary offer process.
Original PR description
Since the field new_car is now used as show_new_car was, the field show_new_car is not used anymore and can be removed.
Code cleanup and technical improvements
The timer app's automated tests were converted to a newer testing approach, helping maintain reliability without changing how users work. This supports smoother future updates for timer and timesheet-related features by keeping internal quality checks current.
Original PR description
In this commit Quint test cases are converted into hoot test cases task-4354271 Note: `timer/static/tests/timer_start_field_tests.js` has already been done in PR https://github.com/odoo/enterprise/pull/68780
Miscellaneous changes
This commit improves the UX of the Lock Dates Wizard with the following changes: - Reworded the tooltips of all 5 lock date fields - Change label for "Lock Everyone" to "Lock Everything" - Move the Exception to the bottom and highlight it in an alert - Make it so that the relevant field of the exceptions are highlighted with an info class (using `decoration-info`) In addition, it also changes the help and string of other related invisible fields (even though it's not needed) to keep it
Original PR description
This commit improves the UX of the Lock Dates Wizard with the following changes: - Reworded the tooltips of all 5 lock date fields - Change label for "Lock Everyone" to "Lock Everything" - Move the Exception to the bottom and highlight it in an alert - Make it so that the relevant field of the exceptions are highlighted with an info class (using `decoration-info`) In addition, it also changes the help and string of other related invisible fields (even though it's not needed) to keep it the same everywhere in the code. related community-PR: https://github.com/odoo/odoo/pull/188017 task-id: 4297145 Forward-Port-Of: odoo/enterprise#74262
The Profit&Loss and Balance Sheet have now a "Note" column, that contains a code that will help cross reference the Note Report (currently not implemented in odoo). Also, "Gross" and "Depreciation" columns are added to the Balance Sheet. Community PR: https://github.com/odoo/odoo/pull/163380 task-3848455 Forward-Port-Of: odoo/enterprise#75087 Forward-Port-Of: odoo/enterprise#61473
Original PR description
The Profit&Loss and Balance Sheet have now a "Note" column, that contains a code that will help cross reference the Note Report (currently not implemented in odoo). Also, "Gross" and "Depreciation" columns are added to the Balance Sheet. Community PR: https://github.com/odoo/odoo/pull/163380 task-3848455 Forward-Port-Of: odoo/enterprise#75087 Forward-Port-Of: odoo/enterprise#61473
Versions -------- - 17.0+ Steps ----- 1. Create an appointment type with availability base on resources; 2. have multiple resources to select from; 3. copy share URL; 4. open URL; 5. select a different resource. Issue ----- The resource name in the right column doesn't update to the selected resource. Cause ----- There's no logic in place to update it after selecting a different resource. Solution -------- For user-based appointments, this part isn't shown as long as th
Original PR description
Versions -------- - 17.0+ Steps ----- 1. Create an appointment type with availability base on resources; 2. have multiple resources to select from; 3. copy share URL; 4. open URL; 5. select a different resource. Issue ----- The resource name in the right column doesn't update to the selected resource. Cause ----- There's no logic in place to update it after selecting a different resource. Solution -------- For user-based appointments, this part isn't shown as long as there's multiple options available. Expand this logic to also work for resource-based appointments. Also modify it to now show details on date selection step unless there's only one option to select from (instead of unless pictures should be shown). With `website_appointment`, this is also the case when a separate selection screen was shown beforehand. opw-4355438 Forward-Port-Of: odoo/enterprise#75247 Forward-Port-Of: odoo/enterprise#75006
Reverts 9ae263696efff17a872e848b03a7b08ba84cdca2 Community PR: odoo/odoo#189440 task-3977961 Forward-Port-Of: odoo/enterprise#75054
Original PR description
Reverts 9ae263696efff17a872e848b03a7b08ba84cdca2 Community PR: odoo/odoo#189440 task-3977961 Forward-Port-Of: odoo/enterprise#75054
[FIX] account_reports, l10n_*_reports: add explicit ORDER BY to report engines for consistent LIMIT and OFFSET behavior As stated here https://www.postgresql.org/docs/current/queries-limit.html , postgresql requires an explicit ORDER by within the query for LIMIT and OFFSET to work properly and consistently between query executions. We hence add one to each engine not having one already. ======================================= [FIX] account_reports: properly handle groupby in account_co
Original PR description
[FIX] account_reports, l10n_*_reports: add explicit ORDER BY to report engines for consistent LIMIT and OFFSET behavior As stated here https://www.postgresql.org/docs/current/queries-limit.html ,…
[FIX] account_reports, l10n_*_reports: add explicit ORDER BY to report engines for consistent LIMIT and OFFSET behavior
As stated here https://www.postgresql.org/docs/current/queries-limit.html , postgresql requires an explicit ORDER by within the query for LIMIT and OFFSET to work properly and consistently between query executions. We hence add one to each engine not having one already.
=======================================
[FIX] account_reports: properly handle groupby in account_codes engine for grouping keys used with multiple accounts
// TO REPRODUCE
1) Create a report with a single line, whose computation uses the account_codes engine, with formula "1". Set "partner_id" as the groupby value for that line. Setup a "load more limit" of 2 on your report.
2) Create 3 accounts, with codes 11, 12, 13
3) Create 3 partners: A, B, and C
4) Create journal entries, with the following lines (all balancing lines must use other accounts as the ones defined in 2) ), in that order:
- on account 11, with partner A, debit=10
- on account 11, with partner A, debit=20
- on account 12, with partner A, debit=25
- on account 11, without partner, debit=30
- on account 11, without partner, debit=40
- on account 12, with partner B, debit=50
- on account 13, with partner C, debit=60
5) Open the report for a period covering all the created journal entries, and have a look at the sublines generated for the groupby.
=> With the limit being 2, you'd expect to see "A", "B", and a "Load more..." line allowing to visualize the rest (namely a line for "C", and "Unknown"). Instead of that, you see no "Load more ...", and line "A"'s amount is wrong.
// EXPLANATION
The SQL query of the account_codes engine is grouping not only by groupby key (here, partner_id), but also by account_id, to be able to process the "C" and "D" suffixes of the formula later on. Because of that, the LIMIT passed by the load_more_limit is applied on that grouping.
With a load_more_limit of 2, we try to load 3 lines. If we manage to load 3, we only display 2, but know we need to display the "Load more..." line. Else, we know there are no more results, so no need for that additional line.
So, with our example, the query runs with a LIMIT of 3, returning
- 30 for A on account 11
- 25 for A on account 12
- 70 for no partner on account 11
Then, another issue happens:
The results returned by the SQL query (hence, by the engine) contain two times the same partner_id. From an engine perspective, the grouping key is only partner_id, not account_id (which is only used for an inner computation, with the SQL query). So that means the same grouping key has two different values. This is not legit, and causes one of them to shadow the other.
The report computation then receives 1 result for A, and 1 for "Unknown", so it renders them, and since there is no third result, it does not display the "Load more ...".
Forward-Port-Of: odoo/enterprise#75168
Forward-Port-Of: odoo/enterprise#74784The second level already configured in demo has been moved in data because having only one follow-up level in a new database is a bit weird. Not only does it look weird, but in practice it also leads to a weird situation that by default the invoices will only be reminded once and never after. + we're failing to convey the usefuleness of the feature of building gradually harded reminders for the partner. Also added forcecreate="False" in snailmail demo data, because we don't waznt to recreate
Original PR description
The second level already configured in demo has been moved in data because having only one follow-up level in a new database is a bit weird. Not only does it look weird, but in practice it also leads to a weird situation that by default the invoices will only be reminded once and never after. + we're failing to convey the usefuleness of the feature of building gradually harded reminders for the partner. Also added forcecreate="False" in snailmail demo data, because we don't waznt to recreate the missing xml ids (if people deleted it) in every module's update. task-4334758 Forward-Port-Of: odoo/enterprise#74236
**Steps to reproduce the bug:** - Create a storable product: - "Finished Product" with the following BoM: - Component: 1 unit of "C1" - Byproducts: - 1 unit of "By-product 1" - 1 unit of "By-product 2" - Create a manufacturing order to produce 5 units of the finished product. - Confirm the MO. - Set the quantity produced to 5 units. - Set the quantity of byproducts to: - By-product 1: 4 units - By-product 2: 3 units - Validate the MO. - Print
Original PR description
**Steps to reproduce the bug:**
- Create a storable product:
- "Finished Product" with the following BoM:
- Component: 1 unit of "C1"
- Byproducts:
- 1 unit of "By-product 1"
- 1 unit of "By-product 2"
- Create a manufacturing order to produce 5 units of the finished product.
- Confirm the MO.
- Set the quantity produced to 5 units.
- Set the quantity of byproducts to:
- By-product 1: 4 units
- By-product 2: 3 units
- Validate the MO.
- Print the cost analysis.
**Problem:**
The reported quantity does not show the actual quantity produced but
instead shows the "to produce" quantity.
opw-4312292
Forward-Port-Of: odoo/enterprise#75020
Forward-Port-Of: odoo/enterprise#73666Issue ===== When tracked product setting was disabled, the "Group by products" barcode setting for operation type was ignored. How to reproduce ================ - Install `stock_barcode_picking_batch`; - Ensure "Lots & Serial Numbers" is disabled, to be sure, go in Inventory > Configuration > Settings; - Now, go in Configuration > Operation Type > Receipts > Barcode App, and check "Group batch lines"; - Create a receipt for a product and confirm it; - Duplicate this receipt and co
Original PR description
Issue ===== When tracked product setting was disabled, the "Group by products" barcode setting for operation type was ignored. How to reproduce ================ - Install `stock_barcode_picking_batch`; - Ensure "Lots & Serial Numbers" is disabled, to be sure, go in Inventory > Configuration > Settings; - Now, go in Configuration > Operation Type > Receipts > Barcode App, and check "Group batch lines"; - Create a receipt for a product and confirm it; - Duplicate this receipt and confirm it aswell; - Add these two pickings in a batch and open it in the Barcode app -> You can see the lines for the same product are not grouped. Cause ===== The issue was, in the `BarcodeModel` code, we skip the method who group the lines if tracking is disabled. [task-4291149](https://www.odoo.com/odoo/project.task/4353554) Forward-Port-Of: odoo/enterprise#74821 Forward-Port-Of: odoo/enterprise#74696
### Before this PR: If you create new internal transfer with src location WH/Stock and than you scan a package that is on a sublocation of WH/Stock , the source location on the line is not set as the location of the package so when you validate in this situation an error pops because Odoo try to take the package from a different location of the package ### After this PR: The right location id is taken from the stock.quant and put on the line created Forward-Port-Of: odoo/enterprise#75212 F
Original PR description
### Before this PR: If you create new internal transfer with src location WH/Stock and than you scan a package that is on a sublocation of WH/Stock , the source location on the line is not set as the location of the package so when you validate in this situation an error pops because Odoo try to take the package from a different location of the package ### After this PR: The right location id is taken from the stock.quant and put on the line created Forward-Port-Of: odoo/enterprise#75212 Forward-Port-Of: odoo/enterprise#74704
*: web_grid, web_map This commit contains the enterprise adaptations, using the new props 'toggler' for the SearchBar component. This will make the component automatically be focused on mobile devices. task-4269494 Forward-Port-Of: odoo/enterprise#75173
Original PR description
*: web_grid, web_map This commit contains the enterprise adaptations, using the new props 'toggler' for the SearchBar component. This will make the component automatically be focused on mobile devices. task-4269494 Forward-Port-Of: odoo/enterprise#75173
steps to reproduce: - Install documents_account - In Settings -> File centralization -> Activate "Accounting" - Then click on Journals below - Then add Jounal: Vendor Bill, Workspace: Finance - Then upload a file in the app Documents, in the workspace Finance - Select that file and update the partner to Azure Interior - Click on the action "Create Vendor Bill" The partner "Azure Interior" is not set on the created account move while it should. For fixing this adding ``partner_id`` o
Original PR description
steps to reproduce: - Install documents_account - In Settings -> File centralization -> Activate "Accounting" - Then click on Journals below - Then add Jounal: Vendor Bill, Workspace: Finance - Then…
steps to reproduce: - Install documents_account - In Settings -> File centralization -> Activate "Accounting" - Then click on Journals below - Then add Jounal: Vendor Bill, Workspace: Finance - Then upload a file in the app Documents, in the workspace Finance - Select that file and update the partner to Azure Interior - Click on the action "Create Vendor Bill" The partner "Azure Interior" is not set on the created account move while it should. For fixing this adding ``partner_id`` of document if present. Now question may arise why account.move having null partner_id. because it being [set](https://github.com/odoo/enterprise/blob/64fc38a80520cfeeb81c0bb329c6b24c3e9454e1/documents_account/models/documents_workflow_rule.py#L77) after creating [attachment](https://github.com/odoo/enterprise/blob/64fc38a80520cfeeb81c0bb329c6b24c3e9454e1/documents_account/models/documents_workflow_rule.py#L76) and during create attachment ``document.partner_id`` is set to null and issue is raised. opw-4077356 Forward-Port-Of: odoo/enterprise#75240 Forward-Port-Of: odoo/enterprise#74875
Since `xlrd >= 2.0` dropped XLSX support, we use `openpyxl` to open XLSX files if the `xlrd >= 2.0` is installed.[^1] However, the tests in `account_base_import` are skipped unless `xlrd.xlsx` can be imported. As a result, they are not run on runbot, where `xlrd >= 2.0` is installed. We therefore need to avoid skipping them if openpyxl is installed. runbot-108001 [^1]: https://github.com/odoo/odoo/pull/169245 Forward-Port-Of: odoo/enterprise#74790 Forward-Port-Of: odoo/enterprise#74
Original PR description
Since `xlrd >= 2.0` dropped XLSX support, we use `openpyxl` to open XLSX files if the `xlrd >= 2.0` is installed.[^1] However, the tests in `account_base_import` are skipped unless `xlrd.xlsx` can be imported. As a result, they are not run on runbot, where `xlrd >= 2.0` is installed. We therefore need to avoid skipping them if openpyxl is installed. runbot-108001 [^1]: https://github.com/odoo/odoo/pull/169245 Forward-Port-Of: odoo/enterprise#74790 Forward-Port-Of: odoo/enterprise#74608
Add basic support for South Korean financial reports: - Profit and Loss - Balance Sheet Task ID: 4018370 Forward-Port-Of: odoo/enterprise#74143
Original PR description
Add basic support for South Korean financial reports: - Profit and Loss - Balance Sheet Task ID: 4018370 Forward-Port-Of: odoo/enterprise#74143
In a production setup: - Create an invoice and sign it - Ask for a cancellation rejected by the customer => an invoice_request_cancel document is created - Ask for another cancellation request => another invoice_request_cancel document is created - Trigger the SAT to approve the second cancellation request => The first invoice_request_cancel document is unlink. Forward-Port-Of: odoo/enterprise#74753
Original PR description
In a production setup: - Create an invoice and sign it - Ask for a cancellation rejected by the customer => an invoice_request_cancel document is created - Ask for another cancellation request => another invoice_request_cancel document is created - Trigger the SAT to approve the second cancellation request => The first invoice_request_cancel document is unlink. Forward-Port-Of: odoo/enterprise#74753
LNE Certification (scales certification) requires not to be able to reboot the IoT Box with a simple button. We removed it from the IoT Box form view. Community PR: [https://github.com/odoo/odoo/pull/189467](https://github.com/odoo/odoo/pull/189467) Task: 4345731 Forward-Port-Of: odoo/enterprise#75161 Forward-Port-Of: odoo/enterprise#75074
Original PR description
LNE Certification (scales certification) requires not to be able to reboot the IoT Box with a simple button. We removed it from the IoT Box form view. Community PR: [https://github.com/odoo/odoo/pull/189467](https://github.com/odoo/odoo/pull/189467) Task: 4345731 Forward-Port-Of: odoo/enterprise#75161 Forward-Port-Of: odoo/enterprise#75074
Since [1], the export wizard default export data domain has changed but it was not at all in the scope of the faulty commit. This leads to a validation error when a new wizard is created if there is multiple 'ir.model.data' records created in the context of Studio and pointing to the same records. This is often the case for instance for 'ir.model.inherit' records. This commit reintroduces the missing domain part, while adding a test. [1]: https://github.com/odoo/enterprise/commit/99f35
Original PR description
Since [1], the export wizard default export data domain has changed but it was not at all in the scope of the faulty commit. This leads to a validation error when a new wizard is created if there is multiple 'ir.model.data' records created in the context of Studio and pointing to the same records. This is often the case for instance for 'ir.model.inherit' records. This commit reintroduces the missing domain part, while adding a test. [1]: https://github.com/odoo/enterprise/commit/99f3591316891e1c2373ed0b3b7e786c0a6b8457 Forward-Port-Of: odoo/enterprise#75078
In this commit, we fix knowledge_article_commands_tour by adapting the steps that concern the odoo editor in order to reactivate this tour. Forward-Port-Of: odoo/enterprise#75174
Original PR description
In this commit, we fix knowledge_article_commands_tour by adapting the steps that concern the odoo editor in order to reactivate this tour. Forward-Port-Of: odoo/enterprise#75174
Steps: - Create a new helpdesk team. - Open tickets of that team. - Delete all ticket stages Issue: - If all the stages are deleted then the blank screen appears instead of shadow data. Cause: - Only `helpdesk.ticket` was being validated, but `helpdesk.stage.delete.wizard` was not included in the check. Fix: - The issue has been fixed by replacing active_model with default_team_id. task-4290529 Forward-Port-Of: odoo/enterprise#75251 Forward-Port-Of: odoo/enterprise#72954
Original PR description
Steps: - Create a new helpdesk team. - Open tickets of that team. - Delete all ticket stages Issue: - If all the stages are deleted then the blank screen appears instead of shadow data. Cause: - Only `helpdesk.ticket` was being validated, but `helpdesk.stage.delete.wizard` was not included in the check. Fix: - The issue has been fixed by replacing active_model with default_team_id. task-4290529 Forward-Port-Of: odoo/enterprise#75251 Forward-Port-Of: odoo/enterprise#72954
Withholding tax information is missing when printing report 'Delivery Guide SII DTE 52 (CL)' from a delivery Steps to reproduce: - With a CL Company setup - Have a product with main 19% tax and a withholding tax - Create a SO with the product - Confirm - Open Delivery - Validate - Print menu > Delivery Guide SII DTE 52 (CL) Issue: Only VAT 19% tax is present in the report, withholding tax is missing (even if the total is correct) This occurs because the 'withholding' var is inside
Original PR description
Withholding tax information is missing when printing report 'Delivery Guide SII DTE 52 (CL)' from a delivery Steps to reproduce: - With a CL Company setup - Have a product with main 19% tax and a withholding tax - Create a SO with the product - Confirm - Open Delivery - Validate - Print menu > Delivery Guide SII DTE 52 (CL) Issue: Only VAT 19% tax is present in the report, withholding tax is missing (even if the total is correct) This occurs because the 'withholding' var is inside another dict Issue2: 'tax_name' is not present in the rendered data, so we need to add it Issue3: withholding amount will be shown without associated currency opw-4214377 Forward-Port-Of: odoo/enterprise#75196 Forward-Port-Of: odoo/enterprise#73926
48 changes
Enhancements to existing features
The emoji picker has received small visual refinements to make it cleaner and more pleasant to use. This improves the everyday messaging experience without changing how users interact with the feature.
Resolved issues and error corrections
This fixes an issue in Point of Sale where opening a shared restaurant table from another session could fail because the system looked for currency details in an order that was not fully loaded. The checkout flow now uses the current Point of Sale configuration currency, helping staff access shared tables reliably.
Original PR description
Before this commit, when opening a shared table from another session, it tried to get the currency from the other order while the session and config record were not loaded, causing an error. opw-4381857 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue where the cursor could appear in the wrong place after inserting a line break near linked text in Chrome. Users editing website or document content should now see the cursor remain where expected, reducing confusion while typing.
Original PR description
Steps:
- place the cursor at the end of a paragraph containing a link among other text, e.g.:
`<p>abc <a href="#">some link</a> def[]</p>`
- press shift + enter
- the cursor is displayed in an odd position, e.g.: `<p>abc <a href="#">some link</a>[] def<br><br></p>`
There seems to be a bug in Chrome that renders the selection in a different position than the one returned by document.getSelection() in some cases. Setting the selection (even if it's the same as the current one) seems to solve the issue.
In the example above involving a link, after updating ZWNBSP (zero-width non-breaking space) nodes around the link, preserveSelection's restore is called but, when about to set the document selection, setBaseAndExtent is skipped because the selection is the same as the current one. This commit ensures that setBaseAndExtent is always called when restoring the selection.
task-4360915This fix updates the Kazakhstan localization so product categories use an expense account instead of a current asset account. This ensures related costs are reflected correctly in profit and loss reporting.
Original PR description
Before this commit the account that was set was a current assets but this prevents its impact on the P/L. task: 4369691 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
A code update script was corrected so it no longer changes web addresses that contain the word “tree.” This prevents valid links from being accidentally rewritten during upgrade-related code changes.
Original PR description
[FIX] cli/*: fix script converting tree to list (don't change urls) issue: https://example.com/base/server/tree/master => https://example.com/base/server/list/master
Mobile users can now start typing immediately after tapping the search button, without needing an extra tap inside the search field. This removes a small but noticeable friction point when searching records on smaller devices, while keeping the existing behavior on larger touch screens.
Original PR description
This commit fixes the desired behavior when touching the SearchBarToggler. Before the fix, the input was not focused, and the user had to touch the search input once after having touched the toggler, which makes one step redundant. Now, the input is automatically focused when the search bar is mounted on small devices (the only one having the toggler), to keep the current behavior that don't focus the input on touch devices when using the medium/large UI. task-4269494
Creating or linking a candidate to a recruitment application now preserves any tags already added to that application. This prevents recruiters from losing classification details during candidate setup and keeps application tracking more reliable.
Original PR description
Issue: When creating an Application, creating a new Candidate removes all tags already in use. Steps to reproduce: - Install Recruitment app - Create a new Application - Add a tag - Create a new Candidate Cause: The tags of an Application are stored in the 'categ_ids' variable. This variable is changed by the '_compute_categ_ids' method, which sets them to those of the Candidate. Since categ_ids is empty for new Candidates, as of right now, this method is effectively removing all tags for new Candidates. Desired Behaviour: Adding a Candidate should add it's tags to the Applicant's. Removing a Candidate should not change the Applicant's tags. Ticket: opw-4351837 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Adds a safeguard test to ensure financial reports calculate average currency rates correctly when a reporting period starts without a specific rate range. This helps prevent inaccurate report figures from returning in future updates.
Original PR description
If a period containing some res.currency.rate object starts by some sub-period without any range, the average rate computation considered this sub-period as having a rate of 0. It's wrong; it should be 1. The fix itself is in the corresponding community commit ; this one adds a check ensuring this doesn't break again in the future.
The search button now places the cursor directly in the search field on mobile screens for Gantt, Grid, and Map views. This removes an extra tap and makes searching faster and smoother for users working on smaller devices.
Original PR description
*: web_grid, web_map This commit contains the enterprise adaptations, using the new props 'toggler' for the SearchBar component. This will make the component automatically be focused on mobile devices. task-4269494
Knowledge's automated guidance now handles cases where the email composer adds a user signature at the end. This prevents the related Knowledge tour from failing, improving reliability for users and testers without changing day-to-day functionality.
Original PR description
The full mail composer now appends the user's signature at the end of the editor. Currently, parts of the Knowledge tour rely on the selector `.odoo-editor-editable > p:last-child` to select the last paragraph in the mail composer editable zone. Due to the addition of the signature, the last direct child of the editable zone is no longer a `p` element, causing the selector to fail and breaking the tour. To resolve this issue, we will replace the `:last-child` pseudo class with `:last-of-type`, ensuring it targets the last `p` element within the editable zone. This adjustment will allow the signature to be ignored, so it no longer interferes with the tour. see: https://github.com/odoo/odoo/pull/184695 task-4273520
Miscellaneous changes
Before this fix: As the default log level if set to INFO, having a 400 on mercado pago notification log does not help to further investigate the case After this fix: Unusual situatution logs that were in debug level were increased to WARNING level instead to be by default in logs files opw-4349957 Forward-Port-Of: odoo/odoo#189894
Original PR description
Before this fix: As the default log level if set to INFO, having a 400 on mercado pago notification log does not help to further investigate the case After this fix: Unusual situatution logs that were in debug level were increased to WARNING level instead to be by default in logs files opw-4349957 Forward-Port-Of: odoo/odoo#189894
Added base localization package for Lebanon 🇱🇧 , it includes the following: - Chart of Accounts - Taxes - Fiscal Positions Task: - 3927914 --- Forward-Port-Of: odoo/odoo#184602
Original PR description
Added base localization package for Lebanon 🇱🇧 , it includes the following: - Chart of Accounts - Taxes - Fiscal Positions Task: - 3927914 --- Forward-Port-Of: odoo/odoo#184602
Steps to reproduce: - open burndown chart of any project - add open/closed task filter Issue: - filters don't return anything in the burndown chart even though project contains open/closed tasks Sol: - add correct domain in open/closed task filter task-4295668 Forward-Port-Of: odoo/odoo#185850
Original PR description
Steps to reproduce: - open burndown chart of any project - add open/closed task filter Issue: - filters don't return anything in the burndown chart even though project contains open/closed tasks Sol: - add correct domain in open/closed task filter task-4295668 Forward-Port-Of: odoo/odoo#185850
current behaviour: when buggy server action is introduced, we don't handle it well, eg: ``` name = record.name if name != record.partner_id: raise UserError("Datatype") ``` here, comparing `name` and `record.partner_id` doesn't make sense, therefore our ORM default behaviour is to return false and rise `AttributeError`, but the problem occurs when pypdf2 attempts to format the warning message, which rises an error which isn't being handled: ``` File "/home/odoo/.local/lib/python3.
Original PR description
current behaviour: when buggy server action is introduced, we don't handle it well, eg: ``` name = record.name if name != record.partner_id: raise UserError("Datatype") ``` here, comparing `name` and…
current behaviour:
when buggy server action is introduced, we don't handle it well, eg:
```
name = record.name
if name != record.partner_id:
raise UserError("Datatype")
```
here, comparing `name` and `record.partner_id` doesn't make sense, therefore our ORM default behaviour is to return false and rise `AttributeError`, but the problem occurs when pypdf2 attempts to format the warning message, which rises an error which isn't being handled:
```
File "/home/odoo/.local/lib/python3.10/site-packages/PyPDF2/pdf.py", line 1069, in _showwarning
file.write(formatWarning(message, category, filename, lineno, line))
File "/home/odoo/.local/lib/python3.10/site-packages/PyPDF2/utils.py", line 69, in formatWarning
file = filename.replace("/", "\\").rsplit("\\", 1)[1] # find the file name
IndexError: list index out of range
```
it is problematic since it is server action.
expected behaviour:
Even when buggy code is introduced, comparision should return False and error should be handled well.
steps to reproduce:
1) Create new database from scratch and create server action with the buggy code above, set model to `sale.orde` and add it to `contextual action`
2) Go to any `sale.order` record and trigger the action. 3) it outputs the error.
4) please note that, if you restart the server, error doesn't happen, because places where override happens doesn't get invoked.
task-4365106
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#189688This commit fixes the wrong use of the contenteditable attribute inside the useSpellcheck implementation. Now, the isContentEditable attribute is used to find the right element. A test has been added too, using the contenteditable='true' attribute. Forward-Port-Of: odoo/odoo#189784 Forward-Port-Of: odoo/odoo#189728
Original PR description
This commit fixes the wrong use of the contenteditable attribute inside the useSpellcheck implementation. Now, the isContentEditable attribute is used to find the right element. A test has been added too, using the contenteditable='true' attribute. Forward-Port-Of: odoo/odoo#189784 Forward-Port-Of: odoo/odoo#189728
For `l10n_cg`, some taxes are unarchived. For `l10n_syscohada`, the type of some accounts is changed from Equity to Current liabilities or Current Asset. A missing account is also added. task-3848455 Forward-Port-Of: odoo/odoo#189491 Forward-Port-Of: odoo/odoo#163380
Original PR description
For `l10n_cg`, some taxes are unarchived. For `l10n_syscohada`, the type of some accounts is changed from Equity to Current liabilities or Current Asset. A missing account is also added. task-3848455 Forward-Port-Of: odoo/odoo#189491 Forward-Port-Of: odoo/odoo#163380
Normally, when using document versioning, the attachments linked to a record are re-attached to the document when changing the version. This is not compatible with the requirement for audit trail in Germany (GoBD) as we want to be sure that the document won't be deleted. This is ensure by making sure all the attachments stay attached, and can't be deleted. To reproduce: * Install Accounting and Documents, as well as l10n_de * Select/configure a German company * Create new document folder s
Original PR description
Normally, when using document versioning, the attachments linked to a record are re-attached to the document when changing the version. This is not compatible with the requirement for audit trail in Germany (GoBD) as we want to be sure that the document won't be deleted. This is ensure by making sure all the attachments stay attached, and can't be deleted. To reproduce: * Install Accounting and Documents, as well as l10n_de * Select/configure a German company * Create new document folder settings for Customer Invoices * Create a new invoice * Send & Print * Delete it from the attachments (it should "detach it") * Send & Print again [opw-4095549](https://www.odoo.com/odoo/project.task/4095549) Forward-Port-Of: odoo/odoo#189197 Forward-Port-Of: odoo/odoo#176360
Versions -------- - 16.0+ Steps (18.0+) ------------- 1. Have the `account_tax_python` module installed; 2. define a sales tax using "Custom Formula"; 3. define a formula based on `product.standard_price`; 4. have the tax enabled for products in eCommerce; 5. as a Public User, go to the eCommerce page. Issue ----- > 403: Forbidden Cause ----- Commit de302c2 changed the way company dependent fields are handled. Instead of computing them via `_compute_company_dependent`, they
Original PR description
Versions -------- - 16.0+ Steps (18.0+) ------------- 1. Have the `account_tax_python` module installed; 2. define a sales tax using "Custom Formula"; 3. define a formula based on `product.standard_price`; 4. have the tax enabled for products in eCommerce; 5. as a Public User, go to the eCommerce page. Issue ----- > 403: Forbidden Cause ----- Commit de302c2 changed the way company dependent fields are handled. Instead of computing them via `_compute_company_dependent`, they are now stored in the database. Before this this change, any `groups` restriction added to a field wasn't actually checked. After this change, it does get checked, leading to the 403 error. Solution -------- When computing taxes, pass `product` with `sudo` to ensure access to all necessary fields. opw-4354321 Forward-Port-Of: odoo/odoo#189490 Forward-Port-Of: odoo/odoo#189186
Steps to reproduce the bug (only on Safari): - Drag and drop 4-5 "Text" blocks onto the page. - Hide all of them in desktop view by clicking the "Hide on desktop" button for each one. This should create a list of "Invisible Elements" at the bottom of the right panel. - Drag and drop a "Text - Image" block onto the page. - Click the image in the "Text - Image" block. - In the image options, click the "Shape" selector. - Bug: The "Shape" selector is partially hidden behind the "Invisible E
Original PR description
Steps to reproduce the bug (only on Safari): - Drag and drop 4-5 "Text" blocks onto the page. - Hide all of them in desktop view by clicking the "Hide on desktop" button for each one. This should create a list of "Invisible Elements" at the bottom of the right panel. - Drag and drop a "Text - Image" block onto the page. - Click the image in the "Text - Image" block. - In the image options, click the "Shape" selector. - Bug: The "Shape" selector is partially hidden behind the "Invisible Elements" list, and it is not possible to scroll to the bottom of the "shapes" list to access the last shapes. After investigation, we found that the issue comes from the backdrop, which is positioned as sticky behind the shape selector. Since the backdrop isn't needed for the "shape selector" (it covers the entire right panel), we simply disabled it for the "shape selector". opw-4357397 Forward-Port-Of: odoo/odoo#189591
When having Accounting installed with a company without chart template, we can not create a partner as bot `property_account_payable_id` and `property_account_receivable_id` are required. With this commit we add a non stored computed field to handle the `required` attribute on the partner view. Note: a computed field with an `api.depends_context('company')` could no be used, because it wasn't not triggered at partner creation. It's a known ORM limitation. opw-4323694 Forward-Port-Of
Original PR description
When having Accounting installed with a company without chart template,
we can not create a partner as bot `property_account_payable_id` and
`property_account_receivable_id` are required.
With this commit we add a non stored computed field to handle the
`required` attribute on the partner view.
Note: a computed field with an `api.depends_context('company')` could no be used, because it wasn't not triggered at partner creation. It's a known ORM limitation.
opw-4323694
Forward-Port-Of: odoo/odoo#189487
Forward-Port-Of: odoo/odoo#189341Commit a94321b7e3eb5d056ca58d3d1b81c22999292ffb introduced a bug where purchase DIN 5008 templates for RFQs and purchase orders failed to render `din5008_document_information`, `din5008_address_block`, `din5008_document_title` because of incorrect use of `t-set` within the template inheritance structure, which prevented the values from being displayed. This fix relocates the `t-set` declarations to a scope where they can be properly executed and used. task-4089521 Forward-Port-Of: odoo/od
Original PR description
Commit a94321b7e3eb5d056ca58d3d1b81c22999292ffb introduced a bug where purchase DIN 5008 templates for RFQs and purchase orders failed to render `din5008_document_information`, `din5008_address_block`, `din5008_document_title` because of incorrect use of `t-set` within the template inheritance structure, which prevented the values from being displayed. This fix relocates the `t-set` declarations to a scope where they can be properly executed and used. task-4089521 Forward-Port-Of: odoo/odoo#188683
Commit 1e0183d506d265c978de61e5316e8d35fcbacb05 made sure that child addresses where the commercial fields (vat, company name, ...) are not displayed are considered valid since those fields will be taken from the commercial partner (parent contact). Nevertheless, the code in the argentinian localization doesn't handle the cases where those values are not provided, which led to a traceback being displayed to the customers, which shouldn't ever happen in the ecommerce checkout: > if afip_res
Original PR description
Commit 1e0183d506d265c978de61e5316e8d35fcbacb05 made sure that child addresses where the commercial fields (vat, company name, ...) are not displayed are considered valid since those fields will be taken from the commercial partner (parent contact). Nevertheless, the code in the argentinian localization doesn't handle the cases where those values are not provided, which led to a traceback being displayed to the customers, which shouldn't ever happen in the ecommerce checkout: > if afip_resp.code not in ['5', '9'] and id_type != cuit_id_type 'bool' object has no attribute 'code' This commit skips the validation in case those fields are not given. Either they are required and the main validation ensures they are provided (and they'll be verified by the override), or they are not provided and shouldn't be, in which case the validation can be skipped here. opw-4373610 Fixes #189227 Forward-Port-Of: odoo/odoo#189820 Forward-Port-Of: odoo/odoo#189312
**Steps to reproduce:** - Install Accounting and l10n_de - Switch to a German company - Configure the customer invoice journal to enable "XRechnung UBL (Germany)" - Create a German contact: * with a complete address * with an email address * without a VAT number - Create an invoice for the created contact - Confirm the invoice - Generate the electronic invoice - Validate the generated XML on an online XRechnung ValidationError **Issue:** The XRechnung (UBL Invoice) is not va
Original PR description
**Steps to reproduce:** - Install Accounting and l10n_de - Switch to a German company - Configure the customer invoice journal to enable "XRechnung UBL (Germany)" - Create a German contact: * with a…
**Steps to reproduce:** - Install Accounting and l10n_de - Switch to a German company - Configure the customer invoice journal to enable "XRechnung UBL (Germany)" - Create a German contact: * with a complete address * with an email address * without a VAT number - Create an invoice for the created contact - Confirm the invoice - Generate the electronic invoice - Validate the generated XML on an online XRechnung ValidationError **Issue:** The XRechnung (UBL Invoice) is not valid because the buyer electronic address is missing (cbc:EndpointID). **Cause:** `<cbc:EndpointID>` gets its value from contact's VAT, but the contact has no VAT. **Solution:** Since XRechnung 3.0.1, the email address can be used as electronic address with "EM" as schemeID. So, fallback on email address if contact has no VAT. **Reference:** https://www.e-rechnung-bund.de/standard-xrechnung-3-0-1/ https://blog.seeburger.com/xrechnung-version-3-0-1-comes-into-force-on-february-1-2024/ https://erechnungsvalidator.service-bw.de/ opw-4261026 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#189183
Versions -------- - 16.0+ Steps ----- 1. Activate a second language; 2. create a new quotation template; 3. add a note & save change; 4. add a translation for the note & save change; 5. create a new sales order; 6. select the created quotation template; 7. set customer to a partner using the second language. Issue ----- The note is still displayed in English. Cause ----- The translation is saved on the `sale.order.template.line` model, so it has to get fetched from there.
Original PR description
Versions -------- - 16.0+ Steps ----- 1. Activate a second language; 2. create a new quotation template; 3. add a note & save change; 4. add a translation for the note & save change; 5. create a new sales order; 6. select the created quotation template; 7. set customer to a partner using the second language. Issue ----- The note is still displayed in English. Cause ----- The translation is saved on the `sale.order.template.line` model, so it has to get fetched from there. Currently there is no logic in place to do this when changing the customer. Solution -------- Add an `onchange` method which reloads the template if no lines were added or removed. opw-4260006 Forward-Port-Of: odoo/odoo#188038
Versions -------- - 16.0+ Steps ----- 1. Schedule the "Calendar: Event Reminder" to run once a day; 2. create an event that started 2 hours ago, and ended 1 hour ago; 3. run the event reminder cron. Issue ----- A reminder email is sent, event though the event has passed. Cause ----- The alarm manager doesn't check whether the reminders it sends are still relevant. Solution -------- When looking querying events to send reminders for, ensure their `stop` date is before the
Original PR description
Versions -------- - 16.0+ Steps ----- 1. Schedule the "Calendar: Event Reminder" to run once a day; 2. create an event that started 2 hours ago, and ended 1 hour ago; 3. run the event reminder cron. Issue ----- A reminder email is sent, event though the event has passed. Cause ----- The alarm manager doesn't check whether the reminders it sends are still relevant. Solution -------- When looking querying events to send reminders for, ensure their `stop` date is before the current time. opw-4191612 Forward-Port-Of: odoo/odoo#189479 Forward-Port-Of: odoo/odoo#189340
When `location_id` is None in `_get_rule` the line `while locations[-1].location_id` raises an IndexError. This commit fixes that by returning early with an empty recordset of stock.rule in case location_id is None. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#188953
Original PR description
When `location_id` is None in `_get_rule` the line `while locations[-1].location_id` raises an IndexError. This commit fixes that by returning early with an empty recordset of stock.rule in case location_id is None. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#188953
Versions -------- - saas-17.4+ Steps ----- 1. Create a pricelist; 2. add a rule using a cost-based formula; 3. add a 50% markup; 4. export pricelist, then delete or archive it; 5. import pricelist; 6. use pricelist on a quotation. Issue ----- The markup isn't applied. Cause ----- Commit 06d0053763cd added the `price_markup` field to `product.pricelist.item`. Whenever the markup is set/changed, the `price_discount` field is supposed to get set to its negative value. Currentl
Original PR description
Versions -------- - saas-17.4+ Steps ----- 1. Create a pricelist; 2. add a rule using a cost-based formula; 3. add a 50% markup; 4. export pricelist, then delete or archive it; 5. import pricelist;…
Versions -------- - saas-17.4+ Steps ----- 1. Create a pricelist; 2. add a rule using a cost-based formula; 3. add a 50% markup; 4. export pricelist, then delete or archive it; 5. import pricelist; 6. use pricelist on a quotation. Issue ----- The markup isn't applied. Cause ----- Commit 06d0053763cd added the `price_markup` field to `product.pricelist.item`. Whenever the markup is set/changed, the `price_discount` field is supposed to get set to its negative value. Currently this only happens in an `onchange` method, which does not get called during import: https://github.com/odoo/odoo/blob/9905de54a55b6d77f67772dde7b2d0ea21adaff1/addons/product/models/product_pricelist_item.py#L322-L325 The value of `price_discount` is what eventual price calculations are based on, so if this isn't updated along with `price_markup`, any price mark-up gets ignored. Solution -------- Ensure `price_markup` & `price_discount` are consistent with each other on using `_compute_price_markup` and `_inverse_price_markup`. opw-4282087 Forward-Port-Of: odoo/odoo#189017
Since [1], the `tel://` protocol was adopted instead of `tel:`. However, URIs cannot contain space characters, which can lead to invalid URIs in certain cases. Steps to reproduce: - Open the website editor. - Attempt to edit the phone number in the header. - The URI becomes invalid due to the presence of a space character. This commit resolves the issue by removing space characters from the URI, ensuring it remains valid. [1]: https://github.com/odoo/odoo/commit/6d4a3b3ab5c0f3
Original PR description
Since [1], the `tel://` protocol was adopted instead of `tel:`. However, URIs cannot contain space characters, which can lead to invalid URIs in certain cases.
Steps to reproduce:
- Open the website editor.
- Attempt to edit the phone number in the header.
- The URI becomes invalid due to the presence of a space character.
This commit resolves the issue by removing space characters from the URI, ensuring it remains valid.
[1]:
https://github.com/odoo/odoo/commit/6d4a3b3ab5c0f3361d1d681d05b974e295dcbabe
opw-4354614
Forward-Port-Of: odoo/odoo#188964Steps to reproduce ================== - In 18, install documents,project - Open a project then a task - Switch to a mobile view and refresh the page - The lightning icon is smaller than the cog icon Cause of the issue ================== https://github.com/odoo/odoo/pull/188986 An overflow was applied on the entire oe_stat_button Solution ======== We can move the overflow to the `o_field_statinfo` This is better than before as now the ellipsis is visible. task-4377703
Original PR description
Steps to reproduce ================== - In 18, install documents,project - Open a project then a task - Switch to a mobile view and refresh the page - The lightning icon is smaller than the cog icon Cause of the issue ================== https://github.com/odoo/odoo/pull/188986 An overflow was applied on the entire oe_stat_button Solution ======== We can move the overflow to the `o_field_statinfo` This is better than before as now the ellipsis is visible. task-4377703 Forward-Port-Of: odoo/odoo#189780
The issue: Starting with version 17.4, the Odoo banner displaying the invoice name on original bills is only added if the attached PDF uses US Letter paper size and is oriented vertically. How to reproduce the issue: -Upload any invoice with a non-standard format -Print -> Original Bills Explanation: Since saas-17.4, the PyPDF2 library version was upgraded from 1.26.0 to 2.12.1. In version 1.26.0, the canvas dimensions were automatically adjusted when merging with non-standard page siz
Original PR description
The issue: Starting with version 17.4, the Odoo banner displaying the invoice name on original bills is only added if the attached PDF uses US Letter paper size and is oriented vertically. How to reproduce the issue: -Upload any invoice with a non-standard format -Print -> Original Bills Explanation: Since saas-17.4, the PyPDF2 library version was upgraded from 1.26.0 to 2.12.1. In version 1.26.0, the canvas dimensions were automatically adjusted when merging with non-standard page sizes. However, in version 2.12.1, this behavior no longer occurs, resulting in the banner not appearing correctly on non-standard formats. opw-4278031 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#186947
With this commit, the useless scroll bar in refuse reason wizard is removed. task-4270277 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#189320 Forward-Port-Of: odoo/odoo#184539
Original PR description
With this commit, the useless scroll bar in refuse reason wizard is removed. task-4270277 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#189320 Forward-Port-Of: odoo/odoo#184539
before this commit, when users applied a filter Invoice or Other in the My Invoices portal and then changed the page number, the selected filter was removed, resetting to the default view. This commit resolves the issue by ensuring the filterby parameter is preserved in the pager's url_args, allowing the selected filter to persist across pagination. opw-4367525 Forward-Port-Of: odoo/odoo#188930
Original PR description
before this commit, when users applied a filter Invoice or Other in the My Invoices portal and then changed the page number, the selected filter was removed, resetting to the default view. This commit resolves the issue by ensuring the filterby parameter is preserved in the pager's url_args, allowing the selected filter to persist across pagination. opw-4367525 Forward-Port-Of: odoo/odoo#188930
The Profit&Loss and Balance Sheet have now a "Note" column, that contains a code that will help cross reference the Note Report (currently not implemented in odoo). Also, "Gross" and "Depreciation" columns are added to the Balance Sheet. Community PR: https://github.com/odoo/odoo/pull/163380 task-3848455 Forward-Port-Of: odoo/enterprise#75087 Forward-Port-Of: odoo/enterprise#61473
Original PR description
The Profit&Loss and Balance Sheet have now a "Note" column, that contains a code that will help cross reference the Note Report (currently not implemented in odoo). Also, "Gross" and "Depreciation" columns are added to the Balance Sheet. Community PR: https://github.com/odoo/odoo/pull/163380 task-3848455 Forward-Port-Of: odoo/enterprise#75087 Forward-Port-Of: odoo/enterprise#61473
Versions -------- - 17.0+ Steps ----- 1. Create an appointment type with availability base on resources; 2. have multiple resources to select from; 3. copy share URL; 4. open URL; 5. select a different resource. Issue ----- The resource name in the right column doesn't update to the selected resource. Cause ----- There's no logic in place to update it after selecting a different resource. Solution -------- For user-based appointments, this part isn't shown as long as th
Original PR description
Versions -------- - 17.0+ Steps ----- 1. Create an appointment type with availability base on resources; 2. have multiple resources to select from; 3. copy share URL; 4. open URL; 5. select a different resource. Issue ----- The resource name in the right column doesn't update to the selected resource. Cause ----- There's no logic in place to update it after selecting a different resource. Solution -------- For user-based appointments, this part isn't shown as long as there's multiple options available. Expand this logic to also work for resource-based appointments. Also modify it to now show details on date selection step unless there's only one option to select from (instead of unless pictures should be shown). With `website_appointment`, this is also the case when a separate selection screen was shown beforehand. opw-4355438 Forward-Port-Of: odoo/enterprise#75247 Forward-Port-Of: odoo/enterprise#75006
Normally, when using document versioning, the attachments linked to a record are re-attached to the document when changing the version. This is not compatible with the requirement for audit trail in Germany (GoBD) as we want to be sure that the document won't be deleted. This is ensure by making sure all the attachments stay attached, and can't be deleted. To reproduce: * Install Accounting and Documents, as well as l10n_de * Select/configure a German company * Create new document folder s
Original PR description
Normally, when using document versioning, the attachments linked to a record are re-attached to the document when changing the version. This is not compatible with the requirement for audit trail in Germany (GoBD) as we want to be sure that the document won't be deleted. This is ensure by making sure all the attachments stay attached, and can't be deleted. To reproduce: * Install Accounting and Documents, as well as l10n_de * Select/configure a German company * Create new document folder settings for Customer Invoices * Create a new invoice * Send & Print * Delete it from the attachments (it should "detach it") * On the document, change the main history version, or on the invoice, navigate through the attachments [opw-4095549](https://www.odoo.com/odoo/project.task/4095549) Forward-Port-Of: odoo/enterprise#68235
When having Accounting installed with a company without chart template, we can not create a partner as bot `property_account_payable_id` and `property_account_receivable_id` are required. With ff54822738925d5b5b952520bbfbd4a76c876809 we add a non stored computed field to handle the `required` attribute on partner view. We use this field to make the `Accounting Entries` group invisble when it is not needed. opw-4323694 Forward-Port-Of: odoo/enterprise#75084 Forward-Port-Of: odoo/enterprise#749
Original PR description
When having Accounting installed with a company without chart template, we can not create a partner as bot `property_account_payable_id` and `property_account_receivable_id` are required. With ff54822738925d5b5b952520bbfbd4a76c876809 we add a non stored computed field to handle the `required` attribute on partner view. We use this field to make the `Accounting Entries` group invisble when it is not needed. opw-4323694 Forward-Port-Of: odoo/enterprise#75084 Forward-Port-Of: odoo/enterprise#74994
In a production setup: - Create an invoice and sign it - Ask for a cancellation rejected by the customer => an invoice_request_cancel document is created - Ask for another cancellation request => another invoice_request_cancel document is created - Trigger the SAT to approve the second cancellation request => The first invoice_request_cancel document is unlink. Forward-Port-Of: odoo/enterprise#74753
Original PR description
In a production setup: - Create an invoice and sign it - Ask for a cancellation rejected by the customer => an invoice_request_cancel document is created - Ask for another cancellation request => another invoice_request_cancel document is created - Trigger the SAT to approve the second cancellation request => The first invoice_request_cancel document is unlink. Forward-Port-Of: odoo/enterprise#74753
Withholding tax information is missing when printing report 'Delivery Guide SII DTE 52 (CL)' from a delivery Steps to reproduce: - With a CL Company setup - Have a product with main 19% tax and a withholding tax - Create a SO with the product - Confirm - Open Delivery - Validate - Print menu > Delivery Guide SII DTE 52 (CL) Issue: Only VAT 19% tax is present in the report, withholding tax is missing (even if the total is correct) This occurs because the 'withholding' var is inside
Original PR description
Withholding tax information is missing when printing report 'Delivery Guide SII DTE 52 (CL)' from a delivery Steps to reproduce: - With a CL Company setup - Have a product with main 19% tax and a withholding tax - Create a SO with the product - Confirm - Open Delivery - Validate - Print menu > Delivery Guide SII DTE 52 (CL) Issue: Only VAT 19% tax is present in the report, withholding tax is missing (even if the total is correct) This occurs because the 'withholding' var is inside another dict Issue2: 'tax_name' is not present in the rendered data, so we need to add it Issue3: withholding amount will be shown without associated currency opw-4214377 Forward-Port-Of: odoo/enterprise#75196 Forward-Port-Of: odoo/enterprise#73926
Since `xlrd >= 2.0` dropped XLSX support, we use `openpyxl` to open XLSX files if the `xlrd >= 2.0` is installed.[^1] However, the tests in `account_base_import` are skipped unless `xlrd.xlsx` can be imported. As a result, they are not run on runbot, where `xlrd >= 2.0` is installed. We therefore need to avoid skipping them if openpyxl is installed. runbot-108001 [^1]: https://github.com/odoo/odoo/pull/169245 Forward-Port-Of: odoo/enterprise#74676 Forward-Port-Of: odoo/enterprise#74
Original PR description
Since `xlrd >= 2.0` dropped XLSX support, we use `openpyxl` to open XLSX files if the `xlrd >= 2.0` is installed.[^1] However, the tests in `account_base_import` are skipped unless `xlrd.xlsx` can be imported. As a result, they are not run on runbot, where `xlrd >= 2.0` is installed. We therefore need to avoid skipping them if openpyxl is installed. runbot-108001 [^1]: https://github.com/odoo/odoo/pull/169245 Forward-Port-Of: odoo/enterprise#74676 Forward-Port-Of: odoo/enterprise#74608
### Before this PR: If you create new internal transfer with src location WH/Stock and than you scan a package that is on a sublocation of WH/Stock , the source location on the line is not set as the location of the package so when you validate in this situation an error pops because Odoo try to take the package from a different location of the package ### After this PR: The right location id is taken from the stock.quant and put on the line created Forward-Port-Of: odoo/enterprise#75169 F
Original PR description
### Before this PR: If you create new internal transfer with src location WH/Stock and than you scan a package that is on a sublocation of WH/Stock , the source location on the line is not set as the location of the package so when you validate in this situation an error pops because Odoo try to take the package from a different location of the package ### After this PR: The right location id is taken from the stock.quant and put on the line created Forward-Port-Of: odoo/enterprise#75169 Forward-Port-Of: odoo/enterprise#74704
steps to reproduce: - Install documents_account - In Settings -> File centralization -> Activate "Accounting" - Then click on Journals below - Then add Jounal: Vendor Bill, Workspace: Finance - Then upload a file in the app Documents, in the workspace Finance - Select that file and update the partner to Azure Interior - Click on the action "Create Vendor Bill" The partner "Azure Interior" is not set on the created account move while it should. For fixing this adding ``partner_id`` o
Original PR description
steps to reproduce: - Install documents_account - In Settings -> File centralization -> Activate "Accounting" - Then click on Journals below - Then add Jounal: Vendor Bill, Workspace: Finance - Then…
steps to reproduce: - Install documents_account - In Settings -> File centralization -> Activate "Accounting" - Then click on Journals below - Then add Jounal: Vendor Bill, Workspace: Finance - Then upload a file in the app Documents, in the workspace Finance - Select that file and update the partner to Azure Interior - Click on the action "Create Vendor Bill" The partner "Azure Interior" is not set on the created account move while it should. For fixing this adding ``partner_id`` of document if present. Now question may arise why account.move having null partner_id. because it being [set](https://github.com/odoo/enterprise/blob/64fc38a80520cfeeb81c0bb329c6b24c3e9454e1/documents_account/models/documents_workflow_rule.py#L77) after creating [attachment](https://github.com/odoo/enterprise/blob/64fc38a80520cfeeb81c0bb329c6b24c3e9454e1/documents_account/models/documents_workflow_rule.py#L76) and during create attachment ``document.partner_id`` is set to null and issue is raised. opw-4077356 Forward-Port-Of: odoo/enterprise#74875
Before this commit, when opening a table with an order, the draft order would not be shown. This was because, when there was no order to sync, the sync function was not called to retrieve the orders from the server. This is needed in the restaurant module. opw-4370055 Forward-Port-Of: odoo/enterprise#74909
Original PR description
Before this commit, when opening a table with an order, the draft order would not be shown. This was because, when there was no order to sync, the sync function was not called to retrieve the orders from the server. This is needed in the restaurant module. opw-4370055 Forward-Port-Of: odoo/enterprise#74909
Add check if date string is not equal to "000000" before parsing it, in record types that were missing this check. Some banks provide CODA files with the date set to "000000" which caused the `_parse_bank_statement_file` method to raise an exception and fail to parse such files. Using the `statement['date']` as a fallback in such case, as it is already used for `balance_start_date` and `transactionDate` fields. task-4348031 Forward-Port-Of: odoo/enterprise#74640
Original PR description
Add check if date string is not equal to "000000" before parsing it, in record types that were missing this check. Some banks provide CODA files with the date set to "000000" which caused the `_parse_bank_statement_file` method to raise an exception and fail to parse such files. Using the `statement['date']` as a fallback in such case, as it is already used for `balance_start_date` and `transactionDate` fields. task-4348031 Forward-Port-Of: odoo/enterprise#74640
There are several issues with the company of the folders and the field `documents_spreadsheet_folder_id` of a company. To reproduce the issue 01: 1. Create a second company 2. Documents > Configuration > Workspaces, edit "Spreadsheet": - Set a company Step 01, `documents_spreadsheet_folder_id` of the second company is set to "Spreadsheet" folder thanks to a default value on the field. But, looking at the DB after the second step, there is an error: both companies still have the f
Original PR description
There are several issues with the company of the folders and the field `documents_spreadsheet_folder_id` of a company. To reproduce the issue 01: 1. Create a second company 2. Documents >…
There are several issues with the company of the folders and the field `documents_spreadsheet_folder_id` of a company. To reproduce the issue 01: 1. Create a second company 2. Documents > Configuration > Workspaces, edit "Spreadsheet": - Set a company Step 01, `documents_spreadsheet_folder_id` of the second company is set to "Spreadsheet" folder thanks to a default value on the field. But, looking at the DB after the second step, there is an error: both companies still have the folder "Spreadsheet" defined on `documents_spreadsheet_folder_id`, but this folder is now specific to one company. Step 2 should not be possible, a constraint is missing. To reproduce the issue 02: 1. Repeat above steps 1-2 2. Create a third company Looking at the DB, there is also an error with the third company: the default value has been used for it, even though the folder is now company-specific and can't be used anymore. The default value should be improved to handle this situation. Also, it should not be possible to use such record on the field. Since there is already the attribute `check_company=True` on `documents_spreadsheet_folder_id`, we could therefore add the attribute `_check_company_auto` on the model and take advantage of the ORM: https://github.com/odoo/odoo/blob/f323896028114acb36848b605732797b67fd7da4/odoo/models.py#L614-L618 However, this change would be too invasive on stable, hence the ORM constraint as alternative. OPW-4281530 Forward-Port-Of: odoo/enterprise#74845 Forward-Port-Of: odoo/enterprise#74189
Issue: When printing PDF reports, long account names cause the report to overflow out of the page. Steps to reproduce: - Install the accounting app - Enable "Analytic Accounting" in the settings - Create one (or more) analytic account(s) with very long names - Open either "Balance Sheet" or "Profit and Loss" reporting - Do an "Analytic Group By" with the created account(s) - Print the PDF Cause: The default style in the associated scss file does not use wrapping. https://github.co
Original PR description
Issue: When printing PDF reports, long account names cause the report to overflow out of the page. Steps to reproduce: - Install the accounting app - Enable "Analytic Accounting" in the settings -…
Issue: When printing PDF reports, long account names cause the report to overflow out of the page. Steps to reproduce: - Install the accounting app - Enable "Analytic Accounting" in the settings - Create one (or more) analytic account(s) with very long names - Open either "Balance Sheet" or "Profit and Loss" reporting - Do an "Analytic Group By" with the created account(s) - Print the PDF Cause: The default style in the associated scss file does not use wrapping. https://github.com/odoo/enterprise/blob/bf6c64b8fd5591f271e9b0f18f40d205a64cd5bd/account_reports/static/src/scss/account_pdf_export_template.scss#L41 Solution: Override the default style by using the "o_overflow_name" class. This is the class already used for handling overflow in the tables' content lines. This gives a more readable result than just editing the "white-space" field (see below for comparison). The proposed solution gives the following result:  As opposed to just editing to "white-space: wrap;"  Ticket: opw-4277596 Forward-Port-Of: odoo/enterprise#74927 Forward-Port-Of: odoo/enterprise#73761
useEffect hook on pdf_manager generates file urls from documents ids, before this commit documents comming from activity view didn't have id key set. Reproduce --- - install document - open documents activity view, schedule an activity with a document (that is possible to split) - attempt to split the document -> Traceback opw-4163726 Forward-Port-Of: odoo/enterprise#70531
Original PR description
useEffect hook on pdf_manager generates file urls from documents ids, before this commit documents comming from activity view didn't have id key set. Reproduce --- - install document - open documents activity view, schedule an activity with a document (that is possible to split) - attempt to split the document -> Traceback opw-4163726 Forward-Port-Of: odoo/enterprise#70531
To reproduce: ============= 1. Go to Documents app 2. Upload a PDF file (one of the attached on the opw) 3. Click on the file to open it 4. Click on the "Split" button the pages on the preview are not displayed correctly Problem: ======== these pdf files, the pages are rotated by 270 degrees so when splitting the pages, the rotation is not taken into account and set to 0 degrees Solution: ========= - set the rotation of the pages to the original rotation when splitting the pdf
Original PR description
To reproduce: ============= 1. Go to Documents app 2. Upload a PDF file (one of the attached on the opw) 3. Click on the file to open it 4. Click on the "Split" button the pages on the preview are not displayed correctly Problem: ======== these pdf files, the pages are rotated by 270 degrees so when splitting the pages, the rotation is not taken into account and set to 0 degrees Solution: ========= - set the rotation of the pages to the original rotation when splitting the pdf opw-4216158 Forward-Port-Of: odoo/enterprise#75011
Steps: - Create a new helpdesk team. - Open tickets of that team. - Delete all ticket stages Issue: - If all the stages are deleted then the blank screen appears instead of shadow data. Cause: - Only `helpdesk.ticket` was being validated, but `helpdesk.stage.delete.wizard` was not included in the check. Fix: - The issue has been fixed by replacing active_model with default_team_id. task-4290529 Forward-Port-Of: odoo/enterprise#75229 Forward-Port-Of: odoo/enterprise#72954
Original PR description
Steps: - Create a new helpdesk team. - Open tickets of that team. - Delete all ticket stages Issue: - If all the stages are deleted then the blank screen appears instead of shadow data. Cause: - Only `helpdesk.ticket` was being validated, but `helpdesk.stage.delete.wizard` was not included in the check. Fix: - The issue has been fixed by replacing active_model with default_team_id. task-4290529 Forward-Port-Of: odoo/enterprise#75229 Forward-Port-Of: odoo/enterprise#72954