Daily updates from Odoo
Thursday, October 30, 2025
42 changes · master
New functionality added to Odoo
The recruitment AI feature has been separated into its own bridge module. This keeps the recruitment app cleaner while preserving AI-assisted candidate refusal workflows where the new module is installed.
Original PR description
Task-5079755 Forward-Port-Of: odoo/enterprise#95167
Spreadsheet users can now apply a fiscal year filter to narrow dashboard and spreadsheet data to a specific financial year. This makes reporting and analysis easier for businesses that track performance by fiscal periods rather than calendar dates.
Original PR description
This commit adds the fiscal year global filter, that can be used to filter the data source based on the given fiscal year. Task: [4942255](https://www.odoo.com/odoo/2328/tasks/4942255)
Enhancements to existing features
Egyptian payroll benefits are now managed through flexible salary rules instead of older fixed payroll inputs and employee fields. This aligns the localization with the newer benefits system while preserving the familiar employee form layout and required legal social insurance reference.
Original PR description
purpose: adapting the new system of flexible benefits coming from salary rules for eg localization - adapted the fields in `hr.version` to become salary rules with `condition_select` as `property_input` which makes it appear in the input section - removed the records in `hr.payslip.input.type` and converted them into corresponding salary rules - added 2 `hr.salary.rule.section` to preserve the old look of the employee form view - changed the allowance benefits in the salary configurator to be linked to salary rules instead of removed fields - changed the tests in `test_salary_rules` to use salary rules instead of hardcoded fields - Note: the field `l10n_eg_social_insurance_reference` is kept because it's mandatory by the law and will have constraints for it's bounds task-id: 5122336
Bank statement corrections now support statements that show separate credit and debit columns. Users can select those amounts directly from the attached document, making manual corrections faster and reducing entry errors.
Original PR description
Previously, there was no way to use the manual correction tool on a bank statement that displayed the lines using credit/debit columns. Now, the debit/credit amounts can be selected on the attachment to fill in the amount of each line. task-[5126902](https://www.odoo.com/odoo/project/2068/tasks/5126902) Forward-Port-Of: odoo/enterprise#97374
The bank reconciliation screen now reopens the chatter on the last statement line the user selected when moving back and forth. This saves time and reduces friction for accounting teams reviewing or reconciling bank statement lines.
Original PR description
This commit ensures that the bank reconciliation widget chatter shows the last selected statement line when the user navigates back and forth to the widget chatter. It does so by storing the statement line in the session storage. task-5114688 Forward-Port-Of: odoo/enterprise#96051
VoIP searches now match phone numbers even when they include spaces, hyphens, parentheses, or other formatting characters. This makes it easier for users to find contacts and call history entries using only the digits they know, while also improving server-side handling of search text.
Original PR description
Introduces the `matchPhoneNumber` function, a new utility designed to match search terms against fully formatted phone numbers. The function converts a digit string like "123" into a flexible regex (e.g., /1\D*2\D*3/i) that matches digits regardless of any non-digit characters (spaces, hyphens, parentheses) between them. **Example:** * **SearchTerms**: "123" * **Target**: "+1 (2)-345" * **Match**: "1 (2)-3" Task-5160296 Forward-Port-Of: odoo/enterprise#98341 Forward-Port-Of: odoo/enterprise#97711
HR teams can now add employee salary inputs directly to Belgian payroll contract templates. This makes template setup more complete and helps ensure recurring payroll-related inputs are applied consistently when preparing contracts.
Original PR description
Add a button in the contract template form view so salary inputs applicable on employees can also be added to a contract template. [task-5156839](https://www.odoo.com/odoo/project/1251/tasks/5156839)
This update improves Saudi payroll WPS file generation by simplifying payment dates, using clearer payment descriptions, and requiring the correct employee identification before files are created. It also adds missing bank identifiers and changes WPS downloads to the expected .SIF format, reducing errors and improving compliance readiness.
Original PR description
* Added tooltip to Value Date * Removed Debit Date field; using Payment Date only. * Fixed Payment Description to use PayRun or Payslip name instead of the employee record. * Updated demo data to include Bank SARIE ID for all banks. * Added Bank SARIE ID and Bank Establishment ID to the bank info tab; fixed traceback when Bank Establishment ID is missing. * Made Saudi National/IQAMA ID required for WPS file generation. * WPS file downloads in .SIF format; Excel version logged in chatter. task-4946564
Demo employee data for Egypt, Jordan, Saudi Arabia, and Turkey payroll has been updated to include work addresses. This makes sample payroll setups more complete and realistic for testing, demonstrations, and evaluation.
Original PR description
Added the work address for employees in demo data of eg, jo, tr, and sa hr payroll. Task-5075966
The Referral app now presents configuration options in a clearer structure and improves how hired candidates are linked to referral contacts. Dashboards better support larger teams by showing repeated referral contacts when relevant, making profile images easier to manage, and limiting the dashboard to a manageable set of up to 8 friends.
Original PR description
Purpose: Better UX for the referral app especially for big teams Previous behavior: - the configuration menu wasn't nested - some hired applicants could exist without being linked to a friend - when 2 hired applicants had the same friend linked, it showed the friend image only once in the dashboard - the head image was required in friend creation New behavior: - added nesting to the configuration menu (recruitment, referrals, dashboard) - always checks if new applicant is hired and allows to link a friend to it even if it's chosen for another applicant - the friend image is show multiple times for all hired applicants linked to it - the head image is not required and takes default value from the dashboard image - the head image is now editable by clicking on it - the dashboard is limited to have at most 8 friends task-id: 5008726
Time off that is cancelled, refused, or only partially approved will no longer be treated as something payroll needs to defer. This reduces unnecessary warnings during payslip validation and keeps payroll screens focused on actionable leave items.
Original PR description
When a leave is cancelled, refused or partially approved,
we shouldn't care about deferring it.
This commit:
- Sets the `payslip_state` to "done" when the leave is refused.
- Hides the `payslip_state` field within the leave form view when the leave is cancelled, refused or partially approved.
- Adjusts the domain of the "To Defer" filter, to not show cancelled, refused nor partially approved leaves.
- When validating payslips:
= Don't show the error "Employee has time off to defer" on the payslip, if it overlaps a blocked leave that is partially approved (or cancelled/refused).
Task-5103880The Indian GSTR2B reporting process now matches late vendor bills more precisely by using invoice reference details differently depending on whether an IRN is available. This helps reduce duplicate or incorrect reconciliation matches and improves confidence in tax reporting.
Original PR description
- Adjusted domain construction in GSTR2B late bill matching logic. - Split condition to handle the presence or absence of IRN separately: - If IRN exists, match on both `ref` and `l10n_in_irn_number`. - If IRN is missing, match only on `ref`. - Improves the accuracy of bill reconciliation and avoids redundant matches. Forward-Port-Of: odoo/enterprise#98370 Forward-Port-Of: odoo/enterprise#97469
Inventory users can now reset the cached links between reports and IoT printers directly from the Inventory app. This makes it easier to resolve printer/report pairing issues without navigating through more technical IoT settings.
Original PR description
In order to simplify resetting the link between printers and reports in cache, we added the "Reset Linked Printers" button to the Inventory app. Forward-Port-Of: odoo/enterprise#98364 Forward-Port-Of: odoo/enterprise#98028
Changes made to POS categories, such as names or display order, are now sent to UrbanPiper when menus are synced again. This helps keep online menus aligned with the latest in-store point-of-sale setup and reduces manual corrections.
Original PR description
Before this commit: ----------------------------------------- - After syncing the menu, changes in a POS category (e.g., name or sequence) were not reflected in UrbanPiper when the menu was synced again. After this commit: ----------------------------------------- - Category updates (name or sequence) are now synced with UrbanPiper on subsequent menu syncs. Task-5122804 Forward-Port-Of: odoo/enterprise#96270
This update adjusts payroll localization tests to match the current employee contract template workflow. It helps ensure contract templates continue loading correctly across multiple country payroll modules, reducing the risk of payroll setup regressions.
Original PR description
Update contract template whitelist unit tests to stop using hr.version.wizard and assert contract template loading via the employee’s contract_template_id onchange instead. task-5022102
Tax reports no longer show a general warning banner when archived tags are found in the selected period. Instead, this issue is handled through tax return checks, making the review process more targeted and aligned with how returns are validated.
Original PR description
Currently, when there are archived tags used on move lines in the selected period, the tax report shows a warning banner. The idea behind that is that such tags are likely to come from an outdated version of a report, after a -u was performed on the database, and the related move lines might need to be reallocated to some other tags. Though, it's a bit old-fashioned and we'd prefer a check on the tax returns for that ! The check cannot be created if it successes and cannot be deleted when it exists and successes. task-5163963
The employee form no longer shows a separate extra hours checkbox because overtime is already managed through company settings. The extra hours field now appears only when an overtime ruleset is configured, making employee setup simpler and less redundant.
Original PR description
The extra hours checkbox in the employee form view was redundant, since overtime rules are already configured through the settings. This change removes the checkbox and makes the visibility of the extra hours field dependent on whether an overtime ruleset is defined. task-5082639 Forward-Port-Of: odoo/enterprise#94572
Saudi payroll overtime now uses the correct work entry type and reads overtime values directly from workday records. This helps payroll teams calculate overtime more accurately and consistently for Saudi Arabia payroll.
Original PR description
- add the right work enty type to the SA overtime rules - update the overtime salary rule to read the value from the workdays Task: 5102385
The product form now shows UrbanPiper-specific options only after an UrbanPiper point of sale is selected. This reduces clutter and makes setup clearer with improved labels and placeholders for food delivery-related details.
Original PR description
In this commit: --- - Improved visibility logic for UrbanPiper-related fields. - Now, fields like Meal Type, Is Recommended, Is Alcoholic, and Aggregators are only visible once a UrbanPiper: Point of Sale is selected. - Updated field labels and placeholders for better clarity. task-5215536
Accounting teams now get clearer warnings when bank statements are invalid, including dashboard alerts, reconciliation warnings, and form-level messages. The update also prevents risky transaction deletions and ignores empty or locked statements in balances, helping users avoid reconciliation mistakes.
Original PR description
* accountant|bank_statement_import This commit brings more clarity on invalid statements. The reflected changes are : - Hiding Last Statement if its date is <= Lock Date - "Invalid Statement(s)" alert on the journal dashboard - Red balance amount and warning in the BankRecW when it contains invalid statements (clicking on the warning applies the filter) - Possibility to choose a statement when creating a transaction - Invalid statement warning in the statement creation form - Displays all warnings in the statement form view - When a file generate a statement, it is kept in its attachments - Prevent deletion of transactions if they belong to a valid statement - Empty statement are not taken into account for the dashboard Last Statement and the BankRecW balance task-4413473 Forward-Port-Of: odoo/enterprise#97552 Forward-Port-Of: odoo/enterprise#92078
Resolved issues and error corrections
A supporting spreadsheet filter check was moved to the shared Odoo codebase where it is now needed. This prevents issues when community features use spreadsheet-style global filter operators without the enterprise-only declaration.
Original PR description
THe method `has_searchable_parent_relation` was declared in spreadsheet_edition but it's been used in Odoo community since the introduction of operators for the global filters in http://github.com/odoo/odoo/pull/215217. Task-5189262 Forward-Port-Of: odoo/enterprise#97938
Quality checks linked to a camera now correctly trigger the connected IoT Box to take a picture instead of opening a manual file upload. The update also improves retrieval of measurements from IoT devices, helping shop floor checks run as intended.
Original PR description
Even after linking a camera to a quality control point, we still ended up in the file uploader instead of calling the *take picture* action on the IoT Box. This commit fixes the issue by restoring the call to the IoT Box, updating it to use the `iot_http` service. It also ensures measurements are correctly fetched from the IoT Box. Forward-Port-Of: odoo/enterprise#98071
A payroll accounting test for the United Arab Emirates localization was updated so its test user always has the needed payroll permissions. This prevents environment-specific test failures when demo data is not installed, improving reliability of automated validation.
Original PR description
The test `TestPayslipValidation` in `l10n_ae_hr_payroll_account` was failing on runbot without demo data:
AccessError: You are not allowed to access 'HR Work Entry Type'
This happens because the test user does not belong to a group with access to `hr.work.entry.type`. With demo data, the user inherits the necessary rights, but without demo data it fails.
This commit explicitly grants the test user the `hr_payroll.group_hr_payroll_user` group to ensure consistent access across environments.
[RB-232462](https://runbot.odoo.com/odoo/error/232462)
Forward-Port-Of: odoo/enterprise#96102Companies in Belgium that are not subject to VAT can now connect to CodaBox even when their VAT number is marked as non-applicable. The system will use the company registry number instead, reducing setup issues for eligible businesses.
Original PR description
If a company is not subject to taxes, they may not have a VAT number. In that case, the field can be left empty, such that the Company Registry is used instead for the CodaBox connection. However, the case where "/" (Non Applicable) was used as the VAT number was handled. This commit now handles VAT="/" in the same way it handles no VAT at all by using the company registry as a fallback. The commit also cleans up how the company ID is used to avoid duplicated code by creating a computed field. opw-5164155 Forward-Port-Of: odoo/enterprise#98277 Forward-Port-Of: odoo/enterprise#98025
Batch payments now show a clear warning when SEPA Credit Transfer partners are missing required country or city details for structured addresses. This helps users fix partner records before generating payment XML files that would become invalid under the upcoming rules.
Original PR description
Starting from November 15th, 2026, SEPA Credit Transfer (SCT) payments require both the partner's country and city to be defined when using structured addresses. If missing, the generated XML file will be invalid. This change adds a non-blocking red banner on the batch payment form to warn users and provide a link to review the affected partners. task-5156613 Forward-Port-Of: odoo/enterprise#97598
Opening the duplicate transactions wizard without a linked journal no longer causes an error. This improves reliability for Accounting users and prevents an unexpected crash in a setup or administrative view.
Original PR description
When user opens the ``account.duplicate.transaction.wizard.form`` view, a traceback appears.
Steps to reproduce the error:
- Install ``Accounting`` module
- Using Open View, Open ``account.duplicate.transaction.wizard.form`` view
Traceback:
```py
UndefinedFunction: operator does not exist: integer = boolean
LINE 5: WHERE st_line.journal_id = false
^
```
https://github.com/odoo/enterprise/blob/8146cfc7b47ba8536f0fa5208cc69685371b55b8/account_online_synchronization/models/account_journal.py#L278
When the view is opened, the ``_compute_provider_duplicate_ids`` method is triggered,
which calls ``_get_provider_duplicate_transactions`` method.
Since no journal is linked to the wizard, it will raise the traceback from the above line.
ref: 218e8a365b153a202d062152ff69234482bcccf2
sentry-6943450225
Forward-Port-Of: odoo/enterprise#97196This fix aligns Enterprise and Studio navigation behavior with a related core platform change. It helps ensure page state is updated at the right time when screens load, reducing the risk of inconsistent navigation in the web interface.
Original PR description
*web_enterprise,web_studio This commit is the counter-part of odoo/odoo#233446 which changes the way the router state is updated by the action service when an action is mounted into the DOM. Some tests could be adapted and/or simplified.
This fix prevents users from creating a new workplace directly from certain employee and contract screens when that shortcut could trigger an error. Users can still select existing workplaces, reducing confusion and avoiding failed data entry in Swiss payroll workflows.
Original PR description
The _rec_name was previously set to partner_id, causing type errors when typing a new workplace name in a Many2one field. Couldn't change it to anything else, as one should have to create a new field in that stable version and this is not the best practice. As a workaround, the corresponding field in the l10n_ch_hr_contract_views.xml is removed from it the quick_create to prevent the creation of new names on the fly. task-5043056 Forward-Port-Of: odoo/enterprise#98173 Forward-Port-Of: odoo/enterprise#93424
The Chilean electronic invoicing process now selects a single matching company when multiple companies share the same tax ID. This avoids processing errors for organizations with branches or duplicate tax identifiers.
Original PR description
Before this commit, if multiple companies shared the same RUT (VAT), for example companies with branches, searching a recipient could return more than one company record. This could lead to errors when accessing variables that expect a single record. To prevent this issue, the search is now limited to one company record. OPW-5128543 Forward-Port-Of: odoo/enterprise#98352
Default values set on salary input rules now appear automatically when those rules are selected for employees or payslips. This prevents payroll teams from having to re-enter expected default amounts and reduces the risk of incorrect payroll data.
Original PR description
## Steps to reproduce 1. Make a new salary rule with condition based on 'salary input'. 2. Enable 'Input on' employee and payslip both and set a default value. 3. Go to employees 'Payroll tab' and 'add inputs', then select the rule. 4. Similary in 'Payslip' on 'Salary inputs' tab, 'add inputs' and select the rule. ## Issue - The default values on the employee and payslips were not being reflected on selection of the rule. ## Fix - Modified '_update_payroll_properties'. It now fetches active_id and updates properties based on the default values of input rules. - Updated '_compute_payslip_properties'. Ensures that payslips without common payroll properties fall back to the default values of the related input rules. task-5072646
Deleting a signer role from a Sign template now works correctly even when that role includes linked radio buttons. This prevents an error that could interrupt template editing and improves reliability for users preparing documents for signature.
Original PR description
Before this commit, when deleting a Signer role that already had a radio button dropped in the Template, it would trigger a traceback since the were trying to delete radio buttons individually. This was problematic because radio buttons are deleted in chain, so when deleting the first, we already delete all the remaining radio buttons and its chain link. After this commit, no issue is raised anymore when deleting a signer role, as radio buttons already deleted are now skipped in the code. task-5130925 Forward-Port-Of: odoo/enterprise#96097
The Sign app now creates new signer fields in a more reliable order, avoiding occasional display issues caused by timing delays. This helps users add signers without inconsistent or missing form elements.
Original PR description
Refactor setTimeout usage in sign_template_sidebar.js to prevent non-deterministic behavior. The previous implementation introduced potential timing issues by relying on a fixed 100ms delay, causing span and input components to not render consistently. The refactored code ensures proper rendering order and resolves the timing-related problem. task-4926187 Forward-Port-Of: odoo/enterprise#89741
Assets created from vendor bills now calculate their original value using only the deductible portion of the related bill line. This prevents overstating asset values when part of an expense is not deductible, improving accounting accuracy.
Original PR description
We allow the user to create an asset from a bill with lines which are not fully deductible but the created asset's original value is the based on the entire balance of the journal item. It should be only the deductible part. task-5156256 Forward-Port-Of: odoo/enterprise#98327 Forward-Port-Of: odoo/enterprise#97505
Changing a contact's email address only from uppercase to lowercase, or the reverse, no longer triggers previously sent signature requests to be emailed again. This prevents duplicate messages to customers and reduces confusion around already issued signing requests.
Original PR description
Before this commit, when changing the partner email to uppercase or lowercase, it would resend sign requests emails for each previously sent signed request to that email. After this commit, we don't resend anymore the sign requests emails after a case sensitive email change of a partner. task-4844230 Forward-Port-Of: odoo/enterprise#87112
Appointment shared links now handle invalid booking URL entries gracefully instead of triggering an error. This prevents users from being blocked by a crash when an incorrect extra link is entered, improving reliability during appointment setup.
Original PR description
This error occurs when a user provides an invalid URL (e.g., one containing characters like “:”, “..”, etc.) in the link field. Steps to reproduce: --- - Install `appointment` module - Appointment >…
This error occurs when a user provides an invalid URL (e.g., one containing characters like “:”, “..”, etc.) in the link field. Steps to reproduce: --- - Install `appointment` module - Appointment > Shared Links > New - Fill `Appointment Types` > Link: `testurl:` (provide wrong link in Extra link) Traceback: --- `ValueError: Extra URL must use same scheme and host as base, and begin with base path` At [1], this error occurs because during computation, the method calls `urljoin`. If the URL contains a colon (e.g., ‘:’), it is compared with the base URL, and when they differ, a `ValueError` is intentionally raised at [2]. This leads to the observed error. This commit resolves the issue by catching the error when an invalid URL is provided. [1]: https://github.com/odoo/enterprise/blob/fc931c81ca7b2ebad220cf057e15583e046810b9/appointment/models/appointment_invite.py#L280 [2]: https://github.com/odoo/odoo/blob/9900375bc0bac2754150fd8cd6a1e45ecad8da83/odoo/tools/urls.py#L55-L58 sentry-6941171133 Forward-Port-Of: odoo/enterprise#97353
This fixes an automated test that was failing because it depended on parts of the system that were not actually available in its test setup. The test now uses available related apps, helping keep the validation pipeline reliable without changing customer-facing behavior.
Original PR description
Purpose: -------- Commit [1] added a test tour relying on the ai_app app which is not a dependency of test_discuss_full_enterprise (only ai is). This commit replaces usages of the views of the ai_app by the views of crm and im_livechat, which are dependencies of the module. Fixes https://runbot.odoo.com/odoo/runbot.build.error/233603 [1]: https://github.com/odoo/enterprise/commit/a7b6eb985e85477f38f15c0e269c2b5ae10d37f6 Forward-Port-Of: odoo/enterprise#98371
This update adjusts spreadsheet edition tests so they remain reliable after recent styling changes. It helps ensure list and pivot spreadsheet autofill behavior continues to be validated without affecting day-to-day users.
This fix prevents the Italian Point of Sale from crashing when a cashier deletes a product line from an order. It improves checkout reliability for Italian POS setups using fiscal printer localization, avoiding interruptions during sales.
Original PR description
Currently POS crashes with the Italian localization if they delete a product line. Steps to reproduce: ------------------- * Install l10n_it_pos and switch to the IT company * Create a pos and…
Currently POS crashes with the Italian localization if they delete a product line. Steps to reproduce: ------------------- * Install l10n_it_pos and switch to the IT company * Create a pos and configure Italian printer * Open shop * Add a product to cart * On the numpad try deleting the line > Observation, pos crashes Traceback: TypeError: Cannot read properties of undefined (reading 'tax_details') Why the fix: ------------ When first hitting the delete button we will put the price unit to 0. With that we have ``` const reduced_base_lines = Object.values(base_line_map).filter( (base_line) => !floatIsZero(base_line.price_unit, base_line.currency_id.decimal_places)); ``` returning an empty list. Utlimately making `reduce_base_lines_to_target_amount` return an empty list. `[][0]` returns `undefined` and we were passing `[undefined]` in parameters of `fix_base_lines_tax_details_on_manual_tax_amounts`, we enter the loop with undefined and try to access some variables. We also set `l10n_it_epson = False` in order to avoid recursively looping. opw-5184113 Forward-Port-Of: odoo/enterprise#98229
Code cleanup and technical improvements
This update cleans up automated test files by removing unnecessary grouping labels that duplicated file names or could be misleading. It does not change product behavior, but makes the test suite easier for developers to read and maintain.
Original PR description
This commit removes test files using a single 'describe' call to wrap its tests, with a name being either redundant with the test file itself or is too misleading.
Regular expression used to find isolated suites:
```js
/^\s*import.*(?:\n(?!describe\()(?!test\().*)+\ndescribe\("[\w\s.]+",.*(?:\n(?!describe\().*)+\n\}\);\n(?!\n)/
```
Tip for reviewers: tick **"Hide whitespace"** when reviewing diff
<img width="237" height="205" alt="image" src="https://github.com/user-attachments/assets/373f7cc6-5e0e-4599-968a-39aad8fac2f0" />
Community: https://github.com/odoo/odoo/pull/233006
Forward-Port-Of: odoo/enterprise#98254
Forward-Port-Of: odoo/enterprise#98046IoT communication has been streamlined so websocket and WebRTC messages are handled consistently. Messages now target one IoT Box or device at a time, reducing complexity and making behavior easier to maintain across connected devices.
Original PR description
We extracted websocket/webrtc message handeling in a commont method from a parent class, in order to be able to send the same messages through both protocols and observe the same behaviour. We also removed the possibility to target multiple IoT Boxes/IoT devices in a single websocket message. Now, we'll need to send one message per IoT Device/Box. We also simplified the websocket onMessage method to get rid of the listeners logic, which was meant to add multiple listeners on the same device (originally used for the recently removed "last value sent" field). Community PR: odoo/odoo#230131
Point of Sale tax calculations are now handled consistently at the full order level instead of separately in different modules. This improves accuracy for complex tax cases, cash rounding, invoices, and certified/localized PoS flows, reducing discrepancies at checkout and in accounting.
Original PR description
*: l10n_de_pos_cert, l10n_eu_iot_scale_cert, l10n_it_pos, l10n_se_pos, pos_appointment, pos_blackbox_be, pos_settle_due, pos_tyro Before this commit taxes computation was a mess in PoS, with…
*: l10n_de_pos_cert, l10n_eu_iot_scale_cert, l10n_it_pos,
l10n_se_pos, pos_appointment, pos_blackbox_be, pos_settle_due,
pos_tyro
Before this commit taxes computation was a mess in PoS, with differents
implementations in different places, and some of them not taking into
account all the complexity of the tax system (taxes included in price,
taxes on taxes, etc.).
This commit aims to unify all the tax computation logic in a single
place, and to make it more robust and easier to understand.
---
What's changes:
Rounding methods available in PoS are now:
1) Rounding applied only on cash payments
In this case the remaining due is rounded only if there is at least
one cash payment line and the remaining due is less than the
rounding tolerance.
2) Rounding applied on all payment methods
In this case the remaining due is always rounded even if a card
payment method is used. The remaining due is rounded if it is less
than the rounding tolerance. No payment method is rounded in this
case, the whole order is rounded instead.
Taxes computation is now done globally on the order, and not on each
line. This way we ensure that the total tax amount is always correct,
even if there is some rounding issues on the lines.
---
Changes in tests:
`test_cash_rounding_down_add_invoice_line_not_only_round_cash_method_with_residual_rounding`
`test_cash_rounding_up_add_invoice_line_not_only_round_cash_method`
Are removed because the tested behavior is not longer present. Now when
rounding is enabled with only_round_cash_method=False, the whole order
is always rounded.
Accounting tests are now principally tested with Hoot instead of tours.
---
Developer note:
No prices should be calculated manually in the code base. Getters have
been created for this purpose in the following files:
- `product_template_accounting.js`
- `pos_order_accounting.js`
- `pos_order_line_accounting.js`
In the future, all PRs containing tax calculations must justify them.
taskId: 5143758
Forward-Port-Of: odoo/enterprise#96123Unused Python code was removed from Point of Sale and related localization and integration modules. This cleanup reduces maintenance overhead without changing expected business behavior.
Original PR description
Remove useless python dead code in point_of_sale and submodules. task-id: 5006039 community PR: https://github.com/odoo/odoo/pull/224984