Monday, September 23, 2024
26 changes · master
Enhancements to existing features
Automated walkthroughs were adjusted to match the updated message composer, where sending can now appear as a dropdown to support scheduled messages. This keeps business process tests for field service reports and Belgian payroll contracts aligned with the latest interface behavior.
Original PR description
\* = industry_fsm_report, test_l10n_be_hr_payroll_account Purpose: -------- In the community counterpart, the "send" button of the mail composer is replaced by a dropdown button when the composer is in mono-comment mode, to add an option that allows users to schedule the posting of messages. This commit adapts selectors in tours accordingly. Task-3877073
The Helpdesk team form now shows a placeholder in the company field to clarify what information users should enter. This small usability improvement helps reduce uncertainty when setting up or editing support teams.
Original PR description
This PR adds a placeholder in the company field on helpdesk teams to help users understand what kind of information is expected there. Task-3903387
Odoo Studio now warns when a deprecated Kanban configuration approach is used. This helps teams avoid adding setups that will no longer be supported after version 18.0, reducing future upgrade risk.
Original PR description
This will ensure that we do not introduce legacy kanban anymore, as they are deprecated and their support will be dropped after 18.0. Task~3992107
Access permission checks now use an existing user cache instead of repeated server lookups. This should make related actions in Documents and Knowledge slightly faster and more efficient without changing what users are allowed to do.
Original PR description
We replace some orm calls to has_access by calls to user.checkAccessRight in order to benefit from the cache available in user.
Resolved issues and error corrections
The WhatsApp channel member list now matches the updated styling used for other channel member categories. This keeps the interface visually consistent and easier for users to scan when managing or reviewing WhatsApp conversations.
Original PR description
This PR [1] changed the styling of Channel Member list categories. This commit aims to adapt these changes for WA User Category.   [1]: https://github.com/odoo/odoo/pull/178865 https://github.com/odoo/odoo/pull/181046
Code cleanup and technical improvements
This update standardizes internal naming used by kanban-style views across several Odoo apps. It helps keep the interface framework consistent and easier to maintain, with little expected change for day-to-day users.
Miscellaneous changes
With an EU company (i.e. BE) Open a product [PROD], in Accounting Tab set: - Commodity Code: 84716070 - Supplementary units: 0.56 Create an invoice to an EU partner (i.e. IT) with 5 units of [PROD] Confirm invoice Accounting > Reporting > Intrastat Report Export pdf or xml Issue: Report will show a very large decimal number This occurs because the number is computed via SL query that is not rounded opw-4160104 Forward-Port-Of: odoo/enterprise#70329 Forward-Port-Of: odoo/enterpr
Original PR description
With an EU company (i.e. BE) Open a product [PROD], in Accounting Tab set: - Commodity Code: 84716070 - Supplementary units: 0.56 Create an invoice to an EU partner (i.e. IT) with 5 units of [PROD] Confirm invoice Accounting > Reporting > Intrastat Report Export pdf or xml Issue: Report will show a very large decimal number This occurs because the number is computed via SL query that is not rounded opw-4160104 Forward-Port-Of: odoo/enterprise#70329 Forward-Port-Of: odoo/enterprise#70181
Fixed an error that occurred when opening the depreciation schedule for companies using multi-ledgers. This ensures asset depreciation reports remain accessible even when ledger journal groups are included in the report options.
Original PR description
steps to reproduce: - create a multi-ledger, no excluded journals needed - open the depreciation schedule => traceback Reason of the issue: in the options['journals'], multiple models can be present, for example 'account.journal' or 'account.journal.group'. Since this commit https://github.com/odoo/enterprise/commit/a98652896daf5b9f6078a0bf95dd1b1430f01e1a, which significantly improved the multi-ledgers, it the 'journals' with model 'account.journal.group' no longer have the 'selected' attribute as it doesn't make sense.
Financial budget screens now use clearer wording when creating a budget, avoiding the impression that a new budget is needed every year. The “Show All Accounts” option has also been moved into the budget filter and only appears when it can actually be used, reducing confusion for users.
Original PR description
This commit addresses two issues: 1) The placeholder allowing the creation of a new budget was mentioning 2025 as an example. It was misleading, and a leftover from the first version of the feature: no need to create one new budget per year ; the same object should be reused. 2) The "Show All Accounts" filter was displayed under the extra options filter, and was always shown. Though, clicking it had no effect at all when no budget was selected (in the budget filter). We now put this menuitem directly into the budget filter dropdown, and only display it when at least one budget is selected.
The TDS-TCS report setup for India has been moved into its own supporting module so it is only installed when the related withholding feature is present. This prevents reporting issues for companies that do not use Indian withholding, while keeping TDS-TCS reporting available automatically for those that do.
Original PR description
Before this PR, TDS-TCS functionality was managed in `l10n_in_withholding`, while the TDS-TCS report handler was in `l10n_in_reports`. This caused issues when `l10n_in_withholding` was not installed. To fix this, the report handler has been moved from `l10n_in_reports` to a new module, `l10n_in_reports_tds_tcs`, which is now set to auto-install with `l10n_in_withholding`. task-4037680 Related PR: https://github.com/odoo/odoo/pull/180862
Fixed a crash that occurred when opening the Depreciation Schedule while a multi-ledger journal group was configured. The report now correctly ignores grouping headers and only processes actual journals, improving reliability for finance users.
Original PR description
To reproduce
1) Create a Journal Group (the menu item is now called "multi-ledger") 2) Open the Depreciation Schedule
==> Crash
This happens because the report parses the options['journals'] list badly, considering all elements in it have a 'selected' key. This is not the case when a journal group is defined, as a header element is then added, without that key. We fix it by checking the model associated with the elements of the filter, to only consider real journals, which are guaranteed to have a 'selected' key.Appointment names in the kanban view now include a hover title when the visible text is shortened. This helps users read the full appointment name without opening the record or guessing from truncated text.
Original PR description
This commit is a followup of task~3992107. It correctly sets the title attribute on the appointment name, which might be truncated. Setting `t-att-title` on a char field doesn't work, so it must be set on a wrapping node instead.
This fix removes unnecessary behind-the-scenes logic for a tax price setting that users cannot edit directly. It helps avoid confusing or inconsistent behavior when tax-included prices are derived from company settings and overrides.
Original PR description
As users can not modify directly the `price_include` field, there is no need for an inverse. Also doing a reverse of that field does not make much sense as it is the combination of the `company_price_include` and `price_include_override`. Community PR: odoo/odoo#178571 task-4144792
The subscription Kanban view now displays the health indicator with proper alignment. This minor visual fix makes subscription cards easier to read and keeps the interface looking consistent.
Original PR description
**Before this commit:** Health is not aligned properly in the Kanban view. **After this commit:** It should aligned properly.
Original PR description
Kanban templates have been reworked. In the new API, the main template is named kanban-card instead of kanban-box. The Activity and Hierarchy views follow a similar API, with their main templates being activity_box and hierarchy_box, respectively. The goal is to standardize these three views by defining a similar rendering context available in the arch. As part of this effort, we have renamed kanban-card to card and kanban-menu to menu. Task-4169388
This update removes an unused internal styling marker from Kanban action buttons across several Odoo apps. It helps simplify the user interface code without changing how users interact with the affected screens.
Original PR description
Action buttons (i.e. `<a>` or `<button>` tags) automically came with two classnames: `oe_kanban_action` and `oe_kanban_action_${tagName}`. The latter wasn't really necessary, so this commit removes it.
Part of task~3992107 aiming at simplifying kanban viewsThe titles in calendar sync and ICS files were irrelevant for resource appointment events because of the custom titles created for appointments. This PR fixes the issue of incorrect titles in calendar sync and ICS files. Task-3919395 Forward-Port-Of: odoo/enterprise#69041
Original PR description
The titles in calendar sync and ICS files were irrelevant for resource appointment events because of the custom titles created for appointments. This PR fixes the issue of incorrect titles in calendar sync and ICS files. Task-3919395 Forward-Port-Of: odoo/enterprise#69041
### Steps to reproduce the issue: 1. Create a Customer Invoice with two product lines 2. Give a negative price to one of those lines, the total must remain positive 3. Add distinct analytic accounts to each line's analytic_distribution 4. Add a payment term with applicable early discount 5. Confirm and Register Payment 6. Go to the Journal Entry related to the Invoice 7. Check the Invert Tags (developer mode), one of them is set to True, which should not be the case ### Explanation:
Original PR description
### Steps to reproduce the issue: 1. Create a Customer Invoice with two product lines 2. Give a negative price to one of those lines, the total must remain positive 3. Add distinct analytic accounts…
### Steps to reproduce the issue: 1. Create a Customer Invoice with two product lines 2. Give a negative price to one of those lines, the total must remain positive 3. Add distinct analytic accounts to each line's analytic_distribution 4. Add a payment term with applicable early discount 5. Confirm and Register Payment 6. Go to the Journal Entry related to the Invoice 7. Check the Invert Tags (developer mode), one of them is set to True, which should not be the case ### Explanation: In the current situation, `_compute_is_refund` and `_compute_tax_tag_invert` will assign a value to `tax_tag_invert` depending on the `account.move.line.balance`. Because of the distinct analytic accounts, the negative line is separated from the others and because of the logic behind the computes, `tax_tag_invert` is set to the opposite value. ### Fix reasoning: While `account.payment` are restricted to `account.move` with the same direction, `account.bank.statement.line` are not. In the current case, the affected lines all have `tax_ids` values. Thanks to this, we can use `account.tax.type_tax_use` independently of the line's balance to differentiate in and out transactions and assign `tax_tag_invert` consistently. We must also consider the case where `account.bank.statement.line`. To target the Early Payment Discount lines, we will separate them from the other values using `display_type`. opw-3989174 Forward-Port-Of: odoo/enterprise#70328 Forward-Port-Of: odoo/enterprise#69835
Unfolding a report line calls an expand function which is responsible to run an SQL query in order to compute the sub-lines (typically the result of a groupby, but it can be something else on custom report). Not flushing was a mistake and could lead to inconsitencies. Forward-Port-Of: odoo/enterprise#70394 Forward-Port-Of: odoo/enterprise#70187
Original PR description
Unfolding a report line calls an expand function which is responsible to run an SQL query in order to compute the sub-lines (typically the result of a groupby, but it can be something else on custom report). Not flushing was a mistake and could lead to inconsitencies. Forward-Port-Of: odoo/enterprise#70394 Forward-Port-Of: odoo/enterprise#70187
This **PR** introduces support for country specific VAT labels to be displayed on their reports and replaces 'VAT' with 'Tax ID'. **task**-4163352 Forward-Port-Of: odoo/enterprise#70413 Forward-Port-Of: odoo/enterprise#69506
Original PR description
This **PR** introduces support for country specific VAT labels to be displayed on their reports and replaces 'VAT' with 'Tax ID'. **task**-4163352 Forward-Port-Of: odoo/enterprise#70413 Forward-Port-Of: odoo/enterprise#69506
To reproduce: 1) Create a customer invoice, with a tax and post it 2) Open the Journal Report 3) In the journals filter, select the journal used in 1) 4) In the Global Tax Summary, at the bottom of the report, click on "Audit" ==> The tree view that opens does not filter the move lines on the select journal. When there is only one journal selected, it should. In the meantime, we make the selection of the journal to use in that filter a little more robust, in the same spirit as on this
Original PR description
To reproduce: 1) Create a customer invoice, with a tax and post it 2) Open the Journal Report 3) In the journals filter, select the journal used in 1) 4) In the Global Tax Summary, at the bottom of the report, click on "Audit" ==> The tree view that opens does not filter the move lines on the select journal. When there is only one journal selected, it should. In the meantime, we make the selection of the journal to use in that filter a little more robust, in the same spirit as on this fix: https://github.com/odoo/enterprise/pull/69876 Forward-Port-Of: odoo/enterprise#70379
When a corporation's annual net profits exceeds a certain limit, a corporate tax has to be paid. This commit implements the calculation and accounting of this corporate tax. task: 3690934 Forward-Port-Of: odoo/enterprise#67187
Original PR description
When a corporation's annual net profits exceeds a certain limit, a corporate tax has to be paid. This commit implements the calculation and accounting of this corporate tax. task: 3690934 Forward-Port-Of: odoo/enterprise#67187
Currently, an error occurs when the 'Sign' module is uninstalled and the user tries to send & print an invoice. Step to produce: - Install the 'account_accountant' module. - Go to the Invoicing Settings and enable 'Authorized Signatory on invoice'. - Uninstall the 'Sign' module. - And make a new invoice, Confirm it, and click on 'Send & Print' ``` AttributeError: 'res.users' object has no attribute 'sign_signature' ``` An error occurs when the system tries to get a 'Digital Sig
Original PR description
Currently, an error occurs when the 'Sign' module is uninstalled and the user tries to send & print an invoice. Step to produce: - Install the 'account_accountant' module. - Go to the Invoicing Settings and enable 'Authorized Signatory on invoice'. - Uninstall the 'Sign' module. - And make a new invoice, Confirm it, and click on 'Send & Print' ``` AttributeError: 'res.users' object has no attribute 'sign_signature' ``` An error occurs when the system tries to get a 'Digital Signature' of a user at [1] but it is not available as the `Sign` module is not installed. Link [1]: https://github.com/odoo/enterprise/blob/addd67e9e46de2510fc110ea2b3ee8c571f41bf8/account_accountant/models/account_move.py#L109 To resolve this issue, create an uninstall hook in the `Sign` module to disable the `Authorized Signatory on invoice` if the `account_accountant` module is installed. Sentry-5667341424 Forward-Port-Of: odoo/enterprise#68878
Steps to reproduce traceback: 1. Create an overseas invoice with `IGST 0` 2. Post the Invoice 3. Create GSTR Report for the following month 4. Click on Generate Button traceback: ```py Traceback (most recent call last): File "/home/odoo/odoo/enterprise/l10n_in_reports_gstr/tests/test_gstr1_report.py", line 233, in test_gstr1_export_with_igst_zero gstr1_json = gstr1_report._get_gstr1_json() File "/home/odoo/odoo/enterprise/l10n_in_reports_gstr/models/gst_return_period.py", line 1
Original PR description
Steps to reproduce traceback: 1. Create an overseas invoice with `IGST 0` 2. Post the Invoice 3. Create GSTR Report for the following month 4. Click on Generate Button traceback: ```py Traceback…
Steps to reproduce traceback:
1. Create an overseas invoice with `IGST 0`
2. Post the Invoice
3. Create GSTR Report for the following month
4. Click on Generate Button traceback:
```py
Traceback (most recent call last):
File "/home/odoo/odoo/enterprise/l10n_in_reports_gstr/tests/test_gstr1_report.py", line 233, in test_gstr1_export_with_igst_zero
gstr1_json = gstr1_report._get_gstr1_json()
File "/home/odoo/odoo/enterprise/l10n_in_reports_gstr/models/gst_return_period.py", line 1114, in _get_gstr1_json
'exp': _get_exp_json(AccountMoveLine.search(self._get_section_domain('exp'))),
File "/home/odoo/odoo/enterprise/l10n_in_reports_gstr/models/gst_return_period.py", line 932, in _get_exp_json
for line_tax_details in tax_details.values():
AttributeError: 'NoneType' object has no attribute 'values'
```
After this commit-
We fix the above traceback and on further investigation it was found that `hsn`, `b2b` and `cdnr` were
missing `zero_rated` base tag in their domain
which we fix in this commit
task-4195917
Forward-Port-Of: odoo/enterprise#70398
Forward-Port-Of: odoo/enterprise#70279### Issue Invoices using consumable intra-community taxes are currently counted twice in the EC Sales Report. ### Steps to Reproduce 1. Install `l10n_at_reports`. 2. Switch to an Austrian company. 3. Create and post an invoice using a consumable intra-community tax (e.g., 'UST_017 IGL 0% (ohne Art. 6 Abs. 1)'). 4. Open the EC Sales Report. You will observe that the invoice amount is counted twice. ### Cause The system groups values in the EC Sales Report by tax tags. A previ
Original PR description
### Issue Invoices using consumable intra-community taxes are currently counted twice in the EC Sales Report. ### Steps to Reproduce 1. Install `l10n_at_reports`. 2. Switch to an Austrian company. 3.…
### Issue Invoices using consumable intra-community taxes are currently counted twice in the EC Sales Report. ### Steps to Reproduce 1. Install `l10n_at_reports`. 2. Switch to an Austrian company. 3. Create and post an invoice using a consumable intra-community tax (e.g., 'UST_017 IGL 0% (ohne Art. 6 Abs. 1)'). 4. Open the EC Sales Report. You will observe that the invoice amount is counted twice. ### Cause The system groups values in the EC Sales Report by tax tags. A previous commit (odoo/odoo@f937e915dfd64a9b66dd9f7d7e3d19607d088f28) introduced changes to certain taxes (e.g., 'UST_017 IGL 0% (ohne Art. 6 Abs. 1)'), which caused multiple tax tags counted in the EC Sales report to be applied to the same line. This grouping behavior leads to double counting. ### Fix Repartition lines with the `tax_report_line_l10n_at_tva_line_4_8_tag` also contain the `tax_report_line_l10n_at_tva_line_3_zm_igl_tag`. To avoid double counting, the EC Sales Report now only checks for the latter tag. opw-4174429 Forward-Port-Of: odoo/enterprise#69941
### Steps to reproduce the issue: 1. Activate Colombian localization 2. Create an Invoice and Confirm 3. Go to _Accounting > Configuration > Journals_ 4. Select Customer Invoices, set Nota de Débito to True and Save 5. Go back to your Invoice, its Electronic Invoice Type is now "Nota Débito" 6. Set Nota de Débito to False in the Customer Invoices Journal 7. Return once again to you Invoice, its Electronic Invoice Type did not change ### Explanation: When the user changes `l10n_co_
Original PR description
### Steps to reproduce the issue: 1. Activate Colombian localization 2. Create an Invoice and Confirm 3. Go to _Accounting > Configuration > Journals_ 4. Select Customer Invoices, set Nota de Débito…
### Steps to reproduce the issue: 1. Activate Colombian localization 2. Create an Invoice and Confirm 3. Go to _Accounting > Configuration > Journals_ 4. Select Customer Invoices, set Nota de Débito to True and Save 5. Go back to your Invoice, its Electronic Invoice Type is now "Nota Débito" 6. Set Nota de Débito to False in the Customer Invoices Journal 7. Return once again to you Invoice, its Electronic Invoice Type did not change ### Explanation: When the user changes `l10n_co_edi_debit_note` in an `account.journal`, it changes this value for all entries in said `account.journal`, not only the ones in draft state. https://github.com/odoo/enterprise/blob/9137e5d9f2690bfe375436c83356ebaa4bd7e8c6/l10n_co_edi/models/account_invoice.py#L65 `_compute_l10n_co_edi_type` depending on `l10n_co_edi_debit_note`, it is called and, if the change is from False to True, `l10n_co_edi_type` is changed to a specific value. https://github.com/odoo/enterprise/blob/9137e5d9f2690bfe375436c83356ebaa4bd7e8c6/l10n_co_edi/models/account_invoice.py#L72-L81 If `l10n_co_edi_debit_note` is set back to False, `l10n_co_edi_type` is not reverted to its previous value and the user can not manually change this field for posted or cancelled entries. ### Fix reasoning: To avoid such situation from happening, the field will be restricted for journals with entries in a non draft state. opw-4174980 Forward-Port-Of: odoo/enterprise#70330 Forward-Port-Of: odoo/enterprise#70133
**Current behavior:** After creating a subscription for a recurring product which creates a project/task, invoicing the original order and posting it, then creating the renewal order, if you create a purchase order for some expensable service product that has an `expense_policy == 'sales_price'` and attempt to create the vendor bill for the purchase order, you will get a UserError about the original sale order being locked. **Expected behavior:** Because there is a renewed order which
Original PR description
**Current behavior:** After creating a subscription for a recurring product which creates a project/task, invoicing the original order and posting it, then creating the renewal order, if you create a…
**Current behavior:**
After creating a subscription for a recurring product which
creates a project/task, invoicing the original order and posting
it, then creating the renewal order, if you create a purchase
order for some expensable service product that has an
`expense_policy == 'sales_price'` and attempt to create the
vendor bill for the purchase order, you will get a UserError
about the original sale order being locked.
**Expected behavior:**
Because there is a renewed order which is not locked, the
expense should use that instead of the original subscription
order.
**Steps to reproduce:**
1. Create a recurring service product which is set to create a
project and task that has an associated analytic account
2. Create a subscription for the product and confirm it, create
the invoice and post it (locking the order)
3. Renew the subscription, confirm it, create the invoice but do
not post it
4. Create a service product which can be expensed and uses the
expense policy of sales price
5. Create a purchase order for the expensable service and set
analytic distribution on the order line to use the same one
from the subscription
6. Confirm the purchase order and create an invoice, then try to
post it -> UserError
**Cause of the issue:**
The original subscription order is found via the shared analytic
account and generates the error because it is now in a locked
state.
**Fix:**
Check if a found order is in the renewed subscription state and
then search for the lowest id order in DB with the originally
found subscription as its origin order- if one exists, use this
record instead of the original order in the
`_sale_determine_order()` mapping.
opw-4061484
Forward-Port-Of: odoo/enterprise#69886
Forward-Port-Of: odoo/enterprise#68820