Daily updates from Odoo
Navigate
Branch
Monday, September 23, 2024
56 changes
10 changes
Resolved issues and error corrections
Creating a new course and using the Add tag button on the website no longer causes an error page. This improves reliability for course managers setting up tags for the first time.
Original PR description
Steps to reproduce: 1. Create a new course 2. Go to front-end. 3. Click on the 'Add tag' button. 4. Throws a traceback Technical Reason: When creating a website slide for the first time, channelTagIds are undefined, causing JSON.parse to throw an error. After this Commit: No traceback will occur. Task-4154899
The Time Off dashboard calendar now stays correctly arranged when users toggle the “Show Weekends” option in yearly view. The dashboard also correctly respects the weekend visibility setting after a page refresh, reducing confusion for employees and HR teams reviewing leave schedules.
Original PR description
Before this commit when the filter on the Time Off Dashboard is set to "Year" (which is default) and the "Show Weekends" filter is toggled, the entire calendar view of the dashboard becomes…
Before this commit when the filter on the Time Off Dashboard is set to "Year" (which is default) and the "Show Weekends" filter is toggled, the entire calendar view of the dashboard becomes scrambled. It returns to its normal state when the page is refreshed. Also when "Show Weekends" filter is in false state and we refresh the page we are getting weekends in calendar view of dashboard while the "Show Weekends" filter state remains false. Steps to reproduce : - Go to Time Off Module - Click on scale selector and then click on "Show Weekends" filter - The entire calendar view of the dashboard becomes scrambled After this commit the calendar view of time off dashboard will not be scrambled when we toggle the "Show Weekends" filter. Also we will get weekdays in calendar view of dashboard when "Show Weekends" filter is in false state and we refresh the page. Task-4072516 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Miscellaneous changes
A patch was backported in python 3.12.3-1ubuntu0.2 on ubuntu noble breaking the address parsing. Odoo relies on the non strict behavior but the strict was introduced as the default one. This commit conditionally checks if the patch is present and reverts it to the previous behavior. test_email_split unittest was used for testing in both version ( 3.12.3-1ubuntu0.1 and 3.12.3-1ubuntu0.2)3.10.3-ubuntu0.1 References: https://launchpad.net/ubuntu/+source/python3.12/3.12.3-1ubuntu0.2 Ba
Original PR description
A patch was backported in python 3.12.3-1ubuntu0.2 on ubuntu noble breaking the address parsing. Odoo relies on the non strict behavior but the strict was introduced as the default one. This commit conditionally checks if the patch is present and reverts it to the previous behavior. test_email_split unittest was used for testing in both version ( 3.12.3-1ubuntu0.1 and 3.12.3-1ubuntu0.2)3.10.3-ubuntu0.1 References: https://launchpad.net/ubuntu/+source/python3.12/3.12.3-1ubuntu0.2 Backported patch: python/cpython@4a153a1d3b18803a684cd1bcc2cdf3ede3dbae19 Forward-Port-Of: odoo/odoo#180703
### 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/odoo#180797 Forward-Port-Of: odoo/odoo#170499
Steps to reproduce: - install only `timesheet_grid` - run `test_analytic_account_branches` Issue: An access error is raised Cause: https://github.com/odoo/odoo/blob/8029b467dacaf9e34b21db52b148a2963efb29e4/addons/hr_timesheet/security/hr_timesheet_security.xml#L33-L44 So the analytic line should have a project_id set. Solution: Unlkink the groupe if existing runbot-97783 Forward-Port-Of: odoo/odoo#180001
Original PR description
Steps to reproduce: - install only `timesheet_grid` - run `test_analytic_account_branches` Issue: An access error is raised Cause: https://github.com/odoo/odoo/blob/8029b467dacaf9e34b21db52b148a2963efb29e4/addons/hr_timesheet/security/hr_timesheet_security.xml#L33-L44 So the analytic line should have a project_id set. Solution: Unlkink the groupe if existing runbot-97783 Forward-Port-Of: odoo/odoo#180001
Steps to reproduce: - Time off > Configuration > Time off types > New - Set 'Requires Allocation' to 'No Limit' - Takes leaves of this type - Set 'Requires Allocation' to 'Yes' - Approvals > Allocations > New > Select your time off type - Edit validity period to start after the leaves you took - Confirm > Click on the newly created allocation - Displays -X remaining out of Y The allocations try to cover leaves taken before the requirement was changed, when we'd expect leaves taken und
Original PR description
Steps to reproduce: - Time off > Configuration > Time off types > New - Set 'Requires Allocation' to 'No Limit' - Takes leaves of this type - Set 'Requires Allocation' to 'Yes' - Approvals >…
Steps to reproduce: - Time off > Configuration > Time off types > New - Set 'Requires Allocation' to 'No Limit' - Takes leaves of this type - Set 'Requires Allocation' to 'Yes' - Approvals > Allocations > New > Select your time off type - Edit validity period to start after the leaves you took - Confirm > Click on the newly created allocation - Displays -X remaining out of Y The allocations try to cover leaves taken before the requirement was changed, when we'd expect leaves taken under No Limit mode not to require any. This is problematic because it can happen with past leaves as well, which we cannot get rid of on production databases. Since Odoo does not track which allocation requirement mode leave are taken under nor the date and content of edits to that parameter, we cannot tell apart leaves of the same type when distributing allocated days. Tracking either would certainly require edits to the model which rules out stable versions, so instead the edits to allocation requirement should be restricted in favor of creating new time off types when we want to switch that parameter. opw-3919886 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#180773 Forward-Port-Of: odoo/odoo#180566
Avoid sending more emails than necessary at events We want to make sure that in all mails sent from the calendar event, the recipients are only the ones we want and avoid sending them to 'indirect' followers. Examples use case: - Subtype Notes with Default checked. - Several Attendees set (including several users). - Each invitation email must be sent only to the corresponding attendee, no one else. - Each event reminder email must reach only the corresponding attendee, no one else.
Original PR description
Avoid sending more emails than necessary at events We want to make sure that in all mails sent from the calendar event, the recipients are only the ones we want and avoid sending them to 'indirect'…
Avoid sending more emails than necessary at events We want to make sure that in all mails sent from the calendar event, the recipients are only the ones we want and avoid sending them to 'indirect' followers. Examples use case: - Subtype Notes with Default checked. - Several Attendees set (including several users). - Each invitation email must be sent only to the corresponding attendee, no one else. - Each event reminder email must reach only the corresponding attendee, no one else. Example use case in runbot v16 **before** this change.  Example use case **after** this change.  @Tecnativa TT50302 Ping @pedrobaeza and @carlosdauden --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#180164 Forward-Port-Of: odoo/odoo#174494
The issue was recently fixed with a sudo, but it allowed standard salesman/users to create discount products and update the company, which ideally shouldn't happen. Since a single use of the wizard by the admin will properly create the discount product, we prefer to encourage the user to request the admin to do it first instead of bypassing the standard access rights. opw-4048403 Forward-Port-Of: odoo/odoo#180221
Original PR description
The issue was recently fixed with a sudo, but it allowed standard salesman/users to create discount products and update the company, which ideally shouldn't happen. Since a single use of the wizard by the admin will properly create the discount product, we prefer to encourage the user to request the admin to do it first instead of bypassing the standard access rights. opw-4048403 Forward-Port-Of: odoo/odoo#180221
Purpose ======= Fix the validation button of a flagged post that wasn't doing anything when clicking on it. Specification ============= Adding a missing css class named 'o_wforum_flag_alert' that was forgotten during the front-end redesign odoo/odoo@21531bd9b9ac24bec57665432d9c18c807c31b44. The alert banner is now correctly hidden at validation. Task-4163955 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#179263
Original PR description
Purpose ======= Fix the validation button of a flagged post that wasn't doing anything when clicking on it. Specification ============= Adding a missing css class named 'o_wforum_flag_alert' that was forgotten during the front-end redesign odoo/odoo@21531bd9b9ac24bec57665432d9c18c807c31b44. The alert banner is now correctly hidden at validation. Task-4163955 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#179263
This error occurs in ``Payment Terms`` when the ``Days end of month`` field is selected in the payment terms line, but the ``days`` field is left empty. Steps to reproduce: - Install ``account`` module - Go to ``Payment Terms`` - Create a new one and select ``Days end of month on the`` payment terms line and empty the days Traceback: `` AttributeError: 'bool' object has no attribute 'isnumeric'`` At [1] ``days_next_month`` in the record is getting as ``false``. This commit will
Original PR description
This error occurs in ``Payment Terms`` when the ``Days end of month`` field is selected in the payment terms line, but the ``days`` field is left empty. Steps to reproduce: - Install ``account`` module - Go to ``Payment Terms`` - Create a new one and select ``Days end of month on the`` payment terms line and empty the days Traceback: `` AttributeError: 'bool' object has no attribute 'isnumeric'`` At [1] ``days_next_month`` in the record is getting as ``false``. This commit will fix the above error by checking that ``days_next_month`` is present in the record otherwise it will raise an error. [1]- https://github.com/odoo/odoo/blob/a800b5dc2a7444c1f4944dd99509d36096bc797f/addons/account_payment_term/models/account_payment_term.py#L26 Sentry-5583615279 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#172260
39 changes
New functionality added to Odoo
A new dashboard has been added to help businesses monitor warehouse operations from the spreadsheet dashboard area. This gives teams a clearer view of stock-related activity and supports better operational follow-up.
Original PR description
Task-3919020
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
Studio approval settings now provide clearer help text and better aligned approval information, making the feature easier to understand and use. Approval groups can also be selected more flexibly because a technical identifier is no longer required.
Spreadsheet list insertions now apply formatting separately and use table styling instead of fixed borders. This makes inserted Odoo lists more consistent, easier to maintain, and better aligned with spreadsheet table behavior.
Original PR description
We currently insert lists with hardcoded borders and styles. This revision adds a new UI command to: - Split the style addition from the list datasource insertion - replace the current style by a table Task: 4178740
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
Users can now unschedule or delete planning slots directly from the Gantt popover, avoiding the extra step of opening the full form view. The update also standardizes how the unschedule action is defined, making the interface easier to maintain across planning and project views.
Original PR description
_*=planning, project_enterprise - In this PR add a new 'Unschedule and Delete' button to the gantt popover, which enables unscheduling or deletion of a slot directly from the popover without opening the form view. - in this PR remove the unschedule button code from javaScript and implement it in xml. task-3475452
Company-specific settings and values are now stored directly in a more structured database format, improving consistency and making reporting easier. This change also updates related accounting, payroll, documents, reporting, and data-cleaning areas to work with the new storage approach.
Original PR description
[IMP] core: jsonb company dependent fields use jsonb for company dependent fields 1. field type before: company dependent fields were non-stored and computed now: company dependent fields are stored…
[IMP] core: jsonb company dependent fields
use jsonb for company dependent fields
1. field type
before: company dependent fields were non-stored and computed
now: company dependent fields are stored fields whose column type is
jsonb with the format like '{"1": val1}'::jsonb
2. fallback
before: fallbacks of company dependent fields were stored in
ir_property.value_xxx `WHERE res_id IS NULL`
now: fallbacks are stored in ir_default.json_value in the format of
jsonfied write format
3. many2one
a. field.ondelete
before: only field.ondelete='set null'
now: support field.ondelete='set null' and field.ondelete='restrict'
b. field.index
before: no index
now: default 'btree_not_null' which index (col IS NOT NULL) for all
NOT NULL rows
c. reference exists
before: checked when get data from ir_property
now: cleaned when orm `unlink`. As a side effect, if a model is
referenced by a many2one company dependent field, this model
cannot have any field.ondelete='cascade' field. The developer
must override the `unlink` method to do the logical on delete
cascade in the ORM
4. _field_to_sql
before: not supported for company dependent fields
now: can be used by company dependent fields like normal fields to
generate reports
https://github.com/odoo/odoo/pull/175627
task: 3954610Several spreadsheet dashboards were updated to improve readability and business relevance. Changes include refreshed scorecard colors and layout, added accounting borders, and a subscription chart now showing MRR by product category instead of individual products.
Original PR description
some scorecards colors have a changed a graph in Subscriptions has changed (MRR by products -> MRR by Product Category) Some scorecard reorganisation Addition of borders in Accounting Task: 4195987
Helpdesk screens now better respect user permissions across related apps, reducing unnecessary access error messages. Buttons and information that users cannot access are hidden, making the support experience clearer and less confusing.
Original PR description
*= account,repair,loyalty,sale_loyalty,sale_timesheet,stock,timesheet. Improvement by restricting access errors for the user and hiding some stat buttons with no rights task-3912377
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.
Subscription plans can now define whether a cancellation closes the subscription immediately or at the end of the current billing period. This gives businesses more control over cancellation policies and helps align subscription handling with customer commitments.
Original PR description
Before this PR, subscription plans lacked an option to specify whether the subscription should close immediately or at the end of the subscription period. After this PR, a new field has been added to subscription plans, allowing users to choose whether a subscription should close immediately or at the end of it's period. task-4035347
Tax closing is now managed separately for each tax report, so closing entries better match the specific report and company context. This improves accuracy, supports report-specific rounding needs, and prevents manual changes from being overwritten when closing moves are posted for branches or tax units.
Original PR description
This commit aim to improve the tax closing. - One tax closing per report - Closing values are now based on the report and not the move lines anymore - Custom expression on the tax report to compute the closing amount - Handling rounding difference out of the box - Use settings per report per companies to set the account for the closing -> removed from `account.tax.group` - Support Tax Rounded value for specific reports such as l10n_fr tax report - [TODO] Handle special cases such as oss report - [TODO] Rewrite a bunch of tests thats use the old system Fixes: - When posting a closing move in a branch or tax unit as the main company, all the move would be refreshed. So any manual modification would be lost Task-4019571 Related Community: https://github.com/odoo/odoo/pull/174001
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
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.
Fixes an issue where quotation calculators could fail or load the wrong sales order lines when synced fields targeted positions above the first line. Saving from the spreadsheet is now more reliable and avoids unnecessary reloading when all line positions are already available.
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 an issue in the Barcode app where scanning a non-GS1 product barcode together with multiple serial numbers could cause an error when GS1 nomenclature was enabled. This helps warehouse users continue receipt operations smoothly and prevents stuck scan counts on screen after failed parsing.
Original PR description
How to reproduce ================ - Create a product tracked by SN and set a barcode (ex.: productserial1) - Select the Default GS1 Nomenclature in the Inventory Settings - Open the Barcode App > Operations > Receipts > New - Scan a barcode containing the created product's barcode and multiple serial numbers (eg.: 'productserial1,sn1,sn2,sn3,sn4') --> Traceback. Cause of the issue ================== There is two issues: 1. The parser throws an error if it tries to parse a barcode with the GS1 nomenclature and fails and this error wasn't handle bv the BarcodeObject when it parses its barcode. 2. If the BarcodeObject wasn't parsed and has no missing record, it wasn't processed and the barcode's count stay on the screen.
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.
Resource-based appointments booked online now show correctly in the Gantt planning view. This prevents missed bookings in operational schedules by removing an inappropriate privacy check for events that are tied to resources rather than individual users.
Original PR description
Purpose ======= Fix the resource events which weren't displayed in the gantt view when booked from the front-end. Specification ============= When an appointment based on resources is booked from the front-end, the event "user_id" field is set to be OdooBot. This is an issue as the read_group domain for the calendar.event model checks the user_id 'res_users_settings_id' field for privacy purpose but OdooBot doesn't have any users settings. => The read_group domain is always evaluated to False. No resource based events booked from the front-end are displayed on the gantt view. Fixing that by updating the privacy domain to be sure every events related to a resource can now be visible and accessible on the gantt view. The privacy field of an event is mainly related to the user settings but resource events aren't typically linked to any user meaning their visibility shouldn't depend on the privacy. Task-4191434
Code cleanup and technical improvements
The Print & Send flow now lets businesses define a preferred invoice delivery channel per customer, such as email, post, manual download, or Peppol. This reduces duplicate invoice delivery, supports required government declarations, and makes batch invoice sending more reliable and easier for accounting teams.
Original PR description
Refactoring of the Print & Send: Why ? Invoicing communication channels have multiplied with the advent of electronic invoicing. Clients want to receive PDF and electronic formats (UBL, Factur-X,…
Refactoring of the Print & Send: Why ? Invoicing communication channels have multiplied with the advent of electronic invoicing. Clients want to receive PDF and electronic formats (UBL, Factur-X, Factura-e,...) in different ways (email, peppol, post, ...), depending on the localization and their needs. Mandatory B2G declarations of invoices are also multiplying. The current Print & Send allows for that flexibility, but at the cost of becoming: - quite messy: you have many checboxes that you can chose at the same time with different meaning (B2B, B2G, sending method,...) - hard to use in batch: as you can't setup invoice channel by partner, you need to chose each time you click on Print & Send. Then some magical things happen to apply the right checkbox to the right invoices. - technically complicated: because some options are about format, some about how to send, about one or more invoices. - the current solution invites the user to "multiply the channels", by clicking everything and send his invoices to his customers via all the channels possible. This creates a situation where E-Invoicing creates a mess for accountants that receive the same invoice via multiple sources, further causing potential duplicates, double payments, etc. How ? - Choose ONE channel of communication per partner to send his invoice (by Post, manual (download), by Email, by Peppol) - Synchronize mandatory B2G declaration with invoice sending - Choose if a B2B E-invoice format needs to be generated (UBL, Factur-X, Factura-e,...) - Make invoice batching sending easy by applying selected defaults, this also mean B2G declarations will be applied by default if relevant. - We also added at partner level the possibility the select an invoice report template, as well as mail templates. task-4070132
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.
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 viewsMiscellaneous 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
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
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#688207 changes
New functionality added to Odoo
This update adds a new Chrome extension for AEM with a built-in login form using default credentials. The extension includes the necessary configuration files, HTML interface, and placeholder icons to enable users to quickly access the system through their browser.
Original PR description
Sure! Here is a sample GitHub pull request description for the changes related to creating the Chrome extension with the default login functionality: --- ### Pull Request Title **Add Chrome Extension…
Sure! Here is a sample GitHub pull request description for the changes related to creating the Chrome extension with the default login functionality: --- ### Pull Request Title **Add Chrome Extension with Default Login Functionality** ### Description This pull request adds a basic Chrome extension for AEM, including a default login form with predefined credentials (username: `admin`, password: `admin`). The extension is structured with the necessary files and directories and includes placeholder icons. ### Changes Included 1. **Directory Structure:** - Created `aem-chrome-extension/` directory to hold extension files. - Created `aem-chrome-extension/images/` directory for icon files. 2. **Files Added:** - `index.html`: Contains the HTML structure for the login form. - `manifest.json`: Configures the Chrome extension settings. - Placeholder icon files (`icon16.png`, `icon48.png`, `icon128.png`). 3. **`index.html`:** - A simple login form with fields for username and password. - Inline CSS for basic styling. - JavaScript to handle login validation (checks for default credentials). 4. **`manifest.json`:** - Defined the extension name, version, description, and permissions. - Configured the extension's default popup to `index.html`. - Included paths to the placeholder icons. ### Testing 1. **Manual Testing Steps:** - Load the unpacked extension in Chrome (`chrome://extensions/` -> "Load unpacked"). - Verify that the login form appears when clicking the extension icon. - Test the login functionality with the default credentials (`admin`/`admin`). - Check that an alert is shown on successful or failed login attempts. ### Screenshots *If applicable, include screenshots here to show the extension UI and functionality.* ### Additional Notes - Placeholder icons are included and can be replaced with appropriate icons. - Future enhancements could include integrating with a backend for actual authentication, improving UI/UX, and adding more features. --- ### Checklist - [x] My code follows the style guidelines of this project. - [x] I have performed a self-review of my own code. - [x] I have commented my code, particularly in hard-to-understand areas. - [x] I have made corresponding changes to the documentation. - [x] My changes generate no new warnings. - [x] I have added tests that prove my fix is effective or that my feature works. - [x] New and existing unit tests pass locally with my changes. --- ### References *Link any related issues, discussions, or other pull requests here.* --- Please review and provide feedback. Thank you! --- This template should help convey the purpose, changes, and testing process for your pull request clearly to the reviewers.
Resolved issues and error corrections
The Journal Report has been updated to remove the "Hierarchy and Subtotals" filter option, which was not functional for this report since account codes are never displayed. This cleanup removes a confusing filter that had no effect, improving the user experience by eliminating unnecessary options.
Original PR description
The Journal Report never shows account codes. The "Hierarchy and Subtotals" filter hence has no effect when ticked. It shouldn't be available on that report.
Fixed an issue where CFDI documents were not being saved when validation errors occurred during invoice processing in Mexico. Users can now view failed documents in the CFDI tab to check error details and retry the operation, improving the error recovery experience for Mexican invoicing.
Original PR description
**Steps to reproduce:** - Install l10n_mx_edi - Switch to a Mexican company (e.g. ESCUELA KEMPER URGATE) - Create an invoice with an invoice date from one month ago - Confirm the invoice - Generate CFDI via "Send & Print" button - A validation error should be raised **Issue:** No document is available in CFDI tab to check the error or retry. **Cause:** A fix had been made to commit the document in case of success, but it had removed the commit in case of failure. https://github.com/odoo/enterprise/commit/fed4ea40793e5d835f3bf7c0267526bd32075baf opw-4203720
This fix corrects the titles that appear for resource appointment events when syncing to calendars and exporting to ICS files. Previously, these titles were showing irrelevant information due to custom appointment titles overriding the correct event names. This ensures users see accurate appointment details in their calendar applications.
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
This update corrects the visual alignment of staff member cards when displaying a single user in an unpublished appointment. The cards now properly align with the "Unpublished" label, improving the overall appearance and consistency of the appointment display.
Original PR description
Fix staff user cards alignment when there is only 1 user and the appointment is unpublished. The card must be aligned with the "Unpublished" text. Task-4196414
This fix corrects an issue where invoices with certain intra-community taxes were being counted twice in the EC Sales Report for Austrian companies. The system was applying multiple tax tags to the same invoice line, causing duplicate amounts in the report. The fix ensures each invoice is counted only once by adjusting which tax tag is used for reporting.
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
This fix corrects how Mexican electronic invoices (CFDI) handle branch-specific information. Previously, invoices generated from a branch would incorrectly use the parent company's tax regime and company name. Now, invoices properly reflect the branch's tax regime while maintaining the root company name as required by Mexican tax authorities.
Original PR description
With an MX company setup Create a branch Change the fiscal regime of the branch to Arrendamiento (606). With the branch create an invoice and generate the CFDI Issues: - Regimen Fiscal in CFDI is set to the one of the parent company while it should be the one of the branch - When a PAC certificate is registered in the branch, company name in CFDI will be the branch name while it should always be the root company name opw-4097669