Daily updates from Odoo
Navigate
Branch
Thursday, June 12, 2025
63 changes
28 changes
Enhancements to existing features
The Belgian reports app now remembers the last corporate tax rate chosen for ISOC advance payment returns. This saves users from reselecting the same rate in future payment wizards, whether the payment is made immediately or scheduled for later.
Original PR description
Save the last corporate tax rate selected for the advance payment return type(ISOC prepayment), whether it's paid now or later, and apply it to subsequent advance payment return wizards task-4791142
Helpdesk teams can now assign a responsible person directly from the ticket kanban view, even when no one is currently assigned. This saves time by avoiding the need to open each ticket just to set an assignee.
Original PR description
Before this commit, the user cannot assign someone in the ticket in the kanban view as we can in the kanban view of project and task for instance. This commit displays the user_id field in the kanban view of ticket even if the no user is assigned. By doing that, the user can assign someone in the ticket without having to open the form view or another view. task-4793688
The asset form now clearly states that the declining factor rate is calculated per year. This helps users interpret the depreciation setting correctly and reduces confusion when configuring assets.
Original PR description
This commit adds text 'per year' to declining factor rate field in the form views. Label was added explicitly to avoid confusion. task-4852994
The task priority marker has been repositioned in the kanban view for timesheet-related project tasks. This small layout improvement helps users spot and manage priority work more naturally while reviewing tasks.
Original PR description
task-4801143
The AI module now delays loading PDF processing components until they are actually needed. This reduces startup overhead, helping the system become available faster without changing user-facing features.
Original PR description
Lazy loaded as in attachment_indexation to speed to starting time. odoo/odoo#212387
Resolved issues and error corrections
A failing automated tour test in Documents Spreadsheet was simplified after a spreadsheet library update exposed unnecessary steps. This helps keep validation reliable without changing the user-facing spreadsheet experience.
Original PR description
The multipage tour started failing after an update of the lib o-spreadsheet. While no significant change seems to explain the failing, it turns out that the tour makes LOTS of useless steps and the actual feature tested doesn't even require to load a spreadsheet. This revision simplifies the tour as much as possible. Fixes runbot error 226565
This fixes an internal test for the point-of-sale IoT scale integration so it matches the latest scale checksum behavior. It helps keep automated checks reliable and reduces the risk of future scale-related regressions reaching users.
Original PR description
See community PR odoo/odoo#213999 for the details of the change. This commit simply fixes the scale checksum test to reflect the new code. task-4866092
A spreadsheet test was adjusted to stay compatible with an updated pivot table parameter. This helps keep spreadsheet filtering behavior reliable after related changes in the spreadsheet engine.
Features or functions removed from Odoo
SEPA direct debit invoices no longer store a direct mandate link because that information already exists on payments. This keeps mandate data cleaner while preserving invoice tracking through related payments.
Original PR description
The sdd_mandate_id field on account.move was incorrectly set and conceptually unnecessary, as a mandate should not be directly linked to an invoice. This link was only used for the "Invoices Paid" smart button on the mandate view. Since account.payment already holds the sdd_mandate_id and invoices have access to related payments, this field is redundant and has been removed. task-4531618
Code cleanup and technical improvements
Employee contract information is being reorganized into dated employee versions so HR teams can see how roles, pay details, and contract data changed over time. This improves payroll accuracy and makes historical employee information easier to manage, while requiring updates across HR-related workflows and localizations.
Original PR description
This will add a versioning system on the employee. Each version is actually the model hr.contract (that will need to be renamed to version). Some fields from the employee are moved to hr.contract as they need to be versioned. Task: 4564173
Miscellaneous changes
Before this commit: === - After accepting an order or marking it as "Food Ready," no order was selected by default. After this commit: === - After accepting an order or marking it as "Food Ready," the respective order is automatically selected by default. task-4442911 Forward-Port-Of: odoo/enterprise#87317 Forward-Port-Of: odoo/enterprise#76356
Original PR description
Before this commit: === - After accepting an order or marking it as "Food Ready," no order was selected by default. After this commit: === - After accepting an order or marking it as "Food Ready," the respective order is automatically selected by default. task-4442911 Forward-Port-Of: odoo/enterprise#87317 Forward-Port-Of: odoo/enterprise#76356
This commit will fix three different bugs: - When selecting multiple invoice in the select create dialog view and that the amount of the selected invoice was bigger than the open_balance. a partial was created directly which shouldn't be the case - When matching multiple invoice and then adding one more after, the open balance was wrongly computed since we were using the amount residual to calculate it and since the invoice is reconciled the amount residual was 0. Due to this commit: ht
Original PR description
This commit will fix three different bugs: - When selecting multiple invoice in the select create dialog view and that the amount of the selected invoice was bigger than the open_balance. a partial was created directly which shouldn't be the case - When matching multiple invoice and then adding one more after, the open balance was wrongly computed since we were using the amount residual to calculate it and since the invoice is reconciled the amount residual was 0. Due to this commit: https://github.com/odoo/enterprise/commit/8bc9b75dd9a44ee87eb3b222cbec82a9697d8e6c - When having a statement line of a 100, adding 2 lines 75 and 25, when adding the last one, the residual is 0 and so the amount was display twice because sourceBalanceBiggerThanLineBalance was returning true. no task id Forward-Port-Of: odoo/enterprise#86876
Before this patch, adding `l10n_mx_edi_cfdi_supplier_rfc` (or any other field filled by `_fill_from_cfdi_values`) to a tree/form view showed the field empty. Root cause ---------- `_fill_from_cfdi_values()` decoded the CFDI using `attachment.raw` with `bin_size=True` still in the context, so the ORM returned the placeholder `b'59.00 bytes'`. As a result, `_decode_cfdi_attachment()` got an empty payload and returned `{}`. Fix --- Reload the attachment without the `bin_size` flag 
Forward-Port-Of: odoo/enterprise#85400
Forward-Port-Of: odoo/enterprise#85333Fix wrong variable rename in `Interaction` refactoring of odoo/enterprise@fba0ad8a693e4d8a9089fa0c1e680beb0ee19a23 opw-4861452 Forward-Port-Of: odoo/enterprise#87330
Original PR description
Fix wrong variable rename in `Interaction` refactoring of odoo/enterprise@fba0ad8a693e4d8a9089fa0c1e680beb0ee19a23 opw-4861452 Forward-Port-Of: odoo/enterprise#87330
List of changes: - Review checks button -> Review - When we click on the Review Button and all checks are already green, we show a toaster telling that auu checks were successful and forward the state. - The Bank matching check open the kanban by default now - Removed Reminder and Journal from the opening wizard - Renamed Advance Tax Payment to Advance Payment, same for french - If the deadline is due, we show it in red - The todo filter, filter returns with a date_to that is less than to
Original PR description
List of changes: - Review checks button -> Review - When we click on the Review Button and all checks are already green, we show a toaster telling that auu checks were successful and forward the…
List of changes: - Review checks button -> Review - When we click on the Review Button and all checks are already green, we show a toaster telling that auu checks were successful and forward the state. - The Bank matching check open the kanban by default now - Removed Reminder and Journal from the opening wizard - Renamed Advance Tax Payment to Advance Payment, same for french - If the deadline is due, we show it in red - The todo filter, filter returns with a date_to that is less than today. - Rename the wizard title ISOC Prepaymentr -> Advance Payment - Add a mark as completed button for advance payment returns - If the amount to pay is zero, directly forward the state to paid after submission - Same as above, if the amount is negative (to recover), we directly finalize the payment - Removed the auto redirect on the checks view when al checks are green - Added a Reset button for VAT return in paid state - Limit count on checks: search for maximum 21 records, show 20+ if there is more - Changed default journal sequence prefix TRTRN -> TAX - Renamed BE EC Sales list report name in french 'Relevé à la TVA des opérations intracommunautaires' -> 'Relevé Intracommunautaire' - Fixed tax return view action. Before it was a client action resulting in a lost of the path. The fix is using a server action and manually setting the path. - Auto Generation of the EC sales list return and Intrastat return by the cron. Before they were created upon submission of the vat export modal. - Fix Lock Date reset for return type with reports without a country - Do not auto forward when resolving checks, we wait until the refresh of the tax return view. - Fix a bug showing double Submit button for the Annual closing Note: We added back buttons on the report for exportation of the Intrastat report and EC sales list report as they are generated automatically. We cannot ensure all periods are covered as it does only generate a return for the previous period. Since then EC sales (or Intrastat) return for older periods might have not been generated and there is currently no way to create them manually. This will be fixed un 18.4 task-4781427 Forward-Port-Of: odoo/enterprise#85509
…Inter-Company sync ### Steps to reproduce: - With Company B in the settings Enable Inter-Company Transactions > Synchronize Sales and Purchase Order - Sales > Configurations > Sales Teams, Archive all sales team - With COMP A create a sales team with a set company_id: COMP A - With COMP A create and confirm a PO with COMP B as customer #### > Invalid operation: while generating the SO, the sales team belongs to COMP A and the SO to COMP B. ### Cause of the issue: The `team_i
Original PR description
…Inter-Company sync ### Steps to reproduce: - With Company B in the settings Enable Inter-Company Transactions > Synchronize Sales and Purchase Order - Sales > Configurations > Sales Teams, Archive…
…Inter-Company sync ### Steps to reproduce: - With Company B in the settings Enable Inter-Company Transactions > Synchronize Sales and Purchase Order - Sales > Configurations > Sales Teams, Archive all sales team - With COMP A create a sales team with a set company_id: COMP A - With COMP A create and confirm a PO with COMP B as customer #### > Invalid operation: while generating the SO, the sales team belongs to COMP A and the SO to COMP B. ### Cause of the issue: The `team_id` field of the `sale.order` model is a stored pre-computed and company checked field. As such, when the SO is created and even if no sales team is provided to the create vals: https://github.com/odoo/enterprise/blob/c61ce5a8e46e706bfb2025d4c9c79a39598e8827/sale_purchase_inter_company_rules/models/purchase_order.py#L70 a default sales team will be computed and set on the SO based on the "allowed_company_ids" (including both COMP A and COMP B): https://github.com/odoo/odoo/blob/1fa8678a33ab35195005d1b65b5eecb1d089fe56/addons/sale/models/sale_order.py#L453-L460 https://github.com/odoo/odoo/blob/1fa8678a33ab35195005d1b65b5eecb1d089fe56/addons/sales_team/models/crm_team.py#L81-L88 While the domain checks that the sales team is either not tight to a company or belong to comp B, since no such teams were found, we fallback the invalid sales team of COMP A. The invalid operation is then raised during the `_check_company` of the created record. opw-4627851 Forward-Port-Of: odoo/enterprise#86528 Forward-Port-Of: odoo/enterprise#83487
We updated the way of contacting the blackbox to allow using the websocket as a fallback for the longpolling. This is a temporary fix that is solved by the use of the `iot_http` service in saas-18.4. Community PR: odoo/odoo#212052 Task: 4824066 Forward-Port-Of: odoo/enterprise#86598
Original PR description
We updated the way of contacting the blackbox to allow using the websocket as a fallback for the longpolling. This is a temporary fix that is solved by the use of the `iot_http` service in saas-18.4. Community PR: odoo/odoo#212052 Task: 4824066 Forward-Port-Of: odoo/enterprise#86598
Previously, the `referral_state` was not reset when reprocessing an applicant, which could lead to inconsistencies in the referral tracking. This commit ensures that the `referral_state` is explicitly set to `'progress'` when the applicant is reset, maintaining proper state management in the referral process. opw-4523156 Forward-Port-Of: odoo/enterprise#87064 Forward-Port-Of: odoo/enterprise#79767
Original PR description
Previously, the `referral_state` was not reset when reprocessing an applicant, which could lead to inconsistencies in the referral tracking. This commit ensures that the `referral_state` is explicitly set to `'progress'` when the applicant is reset, maintaining proper state management in the referral process. opw-4523156 Forward-Port-Of: odoo/enterprise#87064 Forward-Port-Of: odoo/enterprise#79767
The tour is adapted to follow new naming convention introduced in the community PR. Task [4745662](https://www.odoo.com/odoo/project/966/tasks/4745662) odoo/odoo#207217 Forward-Port-Of: odoo/enterprise#84420
Original PR description
The tour is adapted to follow new naming convention introduced in the community PR. Task [4745662](https://www.odoo.com/odoo/project/966/tasks/4745662) odoo/odoo#207217 Forward-Port-Of: odoo/enterprise#84420
**Issue** In version 18.0, the Customer Statement smart button only appears if the customer has an invoice, unlike in 17.0 where it also appeared if the customer simply had a balance in their ledger **Steps to Reproduce** 1. Install the Accounting module 2. Go to Accounting > Accounting > Journal Entries 3. Create a new Journal Entry 4. Set one line to account 121000 (Accounts Receivable), assign partner "Administrator", and debit $100 5. Set the other line to account 101401 (Bank), and
Original PR description
**Issue** In version 18.0, the Customer Statement smart button only appears if the customer has an invoice, unlike in 17.0 where it also appeared if the customer simply had a balance in their ledger…
**Issue** In version 18.0, the Customer Statement smart button only appears if the customer has an invoice, unlike in 17.0 where it also appeared if the customer simply had a balance in their ledger **Steps to Reproduce** 1. Install the Accounting module 2. Go to Accounting > Accounting > Journal Entries 3. Create a new Journal Entry 4. Set one line to account 121000 (Accounts Receivable), assign partner "Administrator", and debit $100 5. Set the other line to account 101401 (Bank), and credit $100 6. Post the journal entry 7. Navigate to Accounting > Customers > Customers 8. Open the "Administrator" customer record 9. Notice that the Customer Statement smart button is not displayed **Root Cause** The visibility of the smart button is incorrectly tied to the presence of posted invoices (account.move), instead of the existence of any outstanding balance on the customer account **Fix** Adjust the visibility logic to show the Customer Statement button if the customer has any ledger balance, even without invoices. This restores the behavior present in 17.0 Opw-4787174 Forward-Port-Of: odoo/enterprise#87134 Forward-Port-Of: odoo/enterprise#86446
During this commit: https://github.com/odoo/enterprise/commit/0931f83a37a66fbc523fa40cc97f1cc52443bd2f we removed the domain on cancel entries to add tags on the statement itself and a filter. But when doing the refactor of the bank rec widget, we decided to remove the tags for now but didn't put back the domain. This commit will add it back no task id Forward-Port-Of: odoo/enterprise#87413
Original PR description
During this commit: https://github.com/odoo/enterprise/commit/0931f83a37a66fbc523fa40cc97f1cc52443bd2f we removed the domain on cancel entries to add tags on the statement itself and a filter. But when doing the refactor of the bank rec widget, we decided to remove the tags for now but didn't put back the domain. This commit will add it back no task id Forward-Port-Of: odoo/enterprise#87413
Before this commit a traceback was occurring when opening an app using palette and then immediately passing a value in palette search input. After this commit the traceback will not occur anymore. task-4735048 Forward-Port-Of: odoo/enterprise#87359 Forward-Port-Of: odoo/enterprise#86066
Original PR description
Before this commit a traceback was occurring when opening an app using palette and then immediately passing a value in palette search input. After this commit the traceback will not occur anymore. task-4735048 Forward-Port-Of: odoo/enterprise#87359 Forward-Port-Of: odoo/enterprise#86066
Currently, if there is an error while generation print reports the use of the IoT will return the generic error `Failed to send to printer' which does not lead to understand there is a hidden issue to begin with. Steps to reproduce: ------------------- 1. Set up the iot and like the product labels report to a zebra printer 2. Modify the view of the product labels (`label_product_product_view`) to ensure there is an error during rendering (mistype a field name) 3. Go to a product and print
Original PR description
Currently, if there is an error while generation print reports the use of the IoT will return the generic error `Failed to send to printer' which does not lead to understand there is a hidden issue…
Currently, if there is an error while generation print reports the use of the IoT will return the generic error `Failed to send to printer' which does not lead to understand there is a hidden issue to begin with. Steps to reproduce: ------------------- 1. Set up the iot and like the product labels report to a zebra printer 2. Modify the view of the product labels (`label_product_product_view`) to ensure there is an error during rendering (mistype a field name) 3. Go to a product and print labels > Observation: Notification: Failed to send to printer Why the fix: ------------ In the example given an error occurs when trying to render the label here: https://github.com/odoo/enterprise/blob/968bf16c65a67791efd5fb94f5c95eaf09a47107/iot/static/src/iot_report_action.js#L50-L57 Technically the error makes it so that we fall into this catch block https://github.com/odoo/enterprise/blob/968bf16c65a67791efd5fb94f5c95eaf09a47107/iot/static/src/iot_report_action.js#L81-L88 We will now make a distinction between the RPC error and generic iot related error. If any error occur while making the RPC call we will now show the traceback. This should help anyone debugging. opw-4571350 Forward-Port-Of: odoo/enterprise#84589
**Before this commit:** - Submitting a GSTR-1 return to the GST portal with an empty `hsn` dictionary caused a schema validation error from the portal: {"error_msg": "Error in Json structure validation.", "error_cd": "RET191106"} - This occurred because the generated JSON included the `hsn` key with an empty dictionary, which is invalid as per government schema requirements. - The portal expects the `hsn` field to be absent if no data is available, or to contain valid nested keys an
Original PR description
**Before this commit:** - Submitting a GSTR-1 return to the GST portal with an empty `hsn` dictionary caused a schema validation error from the portal: {"error_msg": "Error in Json structure…
**Before this commit:**
- Submitting a GSTR-1 return to the GST portal with an empty `hsn` dictionary
caused a schema validation error from the portal:
{"error_msg": "Error in Json structure validation.", "error_cd": "RET191106"}
- This occurred because the generated JSON included the `hsn` key with an
empty dictionary, which is invalid as per government schema requirements.
- The portal expects the `hsn` field to be absent if no data is available, or to
contain valid nested keys and values.
**After this commit:**
- A `ValidationError` is raised when attempting to send a GSTR-1 return with no
HSN data, preventing the generation and submission of an invalid JSON payload.
- This ensures that the `hsn` field is only added to the payload when it contains
at least one section with data.
- Helps avoid unnecessary submission failures and improves user feedback at the
point of action.
task - 4807628
Forward-Port-Of: odoo/enterprise#87326
Forward-Port-Of: odoo/enterprise#86655In VoIP, the keypad state wasn't updated after the user hangs up with the other party. So, when making a new call, the keypad appears again with its last state in the previous call. This commit fixes this by resetting the keypad state everytime the user makes a call. Task-4848365 Forward-Port-Of: odoo/enterprise#86977
Original PR description
In VoIP, the keypad state wasn't updated after the user hangs up with the other party. So, when making a new call, the keypad appears again with its last state in the previous call. This commit fixes this by resetting the keypad state everytime the user makes a call. Task-4848365 Forward-Port-Of: odoo/enterprise#86977
*l10n_es_real_estates,l10n_es_reports,l10n_es_reports_2024 Related to https://github.com/odoo/odoo/pull/210804 Forward-Port-Of: odoo/enterprise#87048 Forward-Port-Of: odoo/enterprise#85966
Original PR description
*l10n_es_real_estates,l10n_es_reports,l10n_es_reports_2024 Related to https://github.com/odoo/odoo/pull/210804 Forward-Port-Of: odoo/enterprise#87048 Forward-Port-Of: odoo/enterprise#85966
In the related community commit, we added a constraint that requires the Tax Receivable and Tax Payable accounts on tax groups to be a Receivable or Payable account, be reconcilable and set to Non Trade. In this commit we adapt the current tests that use accounts on tax groups to have their accounts comply to the new constraint. [task-3763030](https://www.odoo.com/odoo/project.task/3763030) Related to https://github.com/odoo/odoo/pull/201249 Forward-Port-Of: odoo/enterprise#87034 Forwa
Original PR description
In the related community commit, we added a constraint that requires the Tax Receivable and Tax Payable accounts on tax groups to be a Receivable or Payable account, be reconcilable and set to Non Trade. In this commit we adapt the current tests that use accounts on tax groups to have their accounts comply to the new constraint. [task-3763030](https://www.odoo.com/odoo/project.task/3763030) Related to https://github.com/odoo/odoo/pull/201249 Forward-Port-Of: odoo/enterprise#87034 Forward-Port-Of: odoo/enterprise#85693
Before this commit, if the communication compay was not set on a sign_request, the lang value would be falsy. As a result posix_to_ldml(lang.date_format, locale=locale) would crash. Forward-Port-Of: odoo/enterprise#87405
Original PR description
Before this commit, if the communication compay was not set on a sign_request, the lang value would be falsy. As a result posix_to_ldml(lang.date_format, locale=locale) would crash. Forward-Port-Of: odoo/enterprise#87405
35 changes
Enhancements to existing features
This update adds more automated checks to ensure electronic invoice XML files are generated correctly for several country and regional formats. It helps reduce the risk of future changes breaking compliant e-invoicing outputs, especially for Turkey, Malaysia, ANZ, Japan, and Singapore formats.
Original PR description
This adds XML generation tests for the following UBL formats: - Turkey (Nilvera) - Malaysia - ANZ, JP, MY and SG PINT formats. Additionally, we improve error reporting in the `assertXmlTreeEqual` method. Enterprise PR: https://github.com/odoo/enterprise/pull/87222 task-4242065
Argentine sales and purchase journals can now offer the Secondary Grain Liquidation document type when it has been activated. This lets businesses correctly register grain-related sale or purchase invoices using the official LSG document instead of being blocked by a missing option.
Original PR description
The grain secondary settlement ("Liquidación Secundaria de Granos" - LSG) is an electronic document that supports grain purchase and sale and consignment transactions between intermediaries,…
The grain secondary settlement ("Liquidación Secundaria de Granos" - LSG) is an electronic document that supports grain purchase and sale and consignment transactions between intermediaries, cooperatives, consignees, exporters, brokers and future market operators. This document is emitted by the intermediary of the operation so, in Odoo, if the user is the seller or purchaser of the operation, it will need to register that document in a sale or purchase journal accordingly.
This PR aims to include this document in the list of the available ones to allow the user to select it when registering either a sale or a purchase.

**Behaviour before this PR:**
When the user creates an invoice in a sale or purchase journal, the document type "331 - SECONDARY GRAIN LIQUIDATION" is not available to select, although it is activated.
**Behaviour after this PR:**
When the user creates an invoice in a sale or purchase journal, the document type "331 -SECONDARY GRAIN LIQUIDATION" is appears in the list of documents (the document type should be activated before)
**Steps to reproduce:**
1. Install l10n_ar
2. Go to "Document Types" menu and activate "331 - SECONDARY GRAIN LIQUIDATION"
3. Create or use a sale or purchase journal that has "Is AFIP POS?" as False.
4. Create an invoice in that journal and check that the document type with code 331 is not available to select.

---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update adds automated checks to ensure Peruvian electronic invoices are generated correctly for free invoices and invoices combining ISC and IGV taxes. It also reorganizes the related test files, making future maintenance safer and easier without changing day-to-day user workflows.
Original PR description
This adds tests to check that the UBL is correctly generated in the case of free invoices (feature introduced by c8abe0a7536a0bbe703730) and invoices involving both ISC and IGV (feature introduced by d598f338537b8f55771d7a). We take the opportunity to refactor the Peruvian tests and split the expected XMLs each into its own file. Community PR: https://github.com/odoo/odoo/pull/213402 task-4242065
The GSTR OTP flow now guides users to enter a valid 6-digit OTP before validation can proceed. It also shows clearer error and delivery messages, helping prevent failed submissions and reducing confusion about where the OTP is sent.
Original PR description
**Before this PR:** - The `Validate` button was always visible, even if the OTP was empty or incorrect. - Users could attempt validation with an invalid or missing OTP. - The OTP delivery message was unclear. **After this PR:** - The `Validate` button proceed done when a valid 6-digit numeric OTP is entered. - A clear error notification is shown if users try to proceed without a valid OTP. - The OTP delivery message now clearly informs that the OTP is sent to the registered mobile number on the GST portal. These changes improve user guidance and prevent incorrect OTP submissions. Task ID: 4848729
This update improves the message shown when a Mexican payroll calculation fails because an employee's integrated daily wage is below the minimum wage threshold used by the CEAV employer contribution rule. Payroll users now get a clearer explanation of what needs attention instead of a confusing technical error, making payslip troubleshooting easier.
Original PR description
Steps to reproduce: - Install payroll, l10n_mx_hr_payroll (mexican localisation) - Install l10n_mx_hr_payroll_account - Switch to a Mexican Company - Create a payslip for a mexican employee with…
Steps to reproduce: - Install payroll, l10n_mx_hr_payroll (mexican localisation) - Install l10n_mx_hr_payroll_account - Switch to a Mexican Company - Create a payslip for a mexican employee with amount < 4000 - Compute the sheet for the payslip Error message appears, this error message is not a descriptive to the user or not telling what could have gone wrong. This happens because the mexican pay structure has some salary rules that has to be computed, one of these rules is `Retirement, assault in elderly and old age (CEAV) IMSS (Employer)` that has mode of code. This mode means calling safe_eval on the code raw text of it written in the xml file on the data folder. This rule aims to find the suitable taxation level to be applied on the salary. It reads the limits of each level and check if the `integrated_daily_wage` of the employee falls in this level and applies that taxation level. There is no upper limit on the salary, But there is a min level, hence if the integrated_daily_wage < mdw (minimum daily wage) the function returns None that used as index in the taxation table leading to an unreadable Exception from the safe_eval call. https://github.com/odoo/enterprise/blob/747482f34ca8210d89d81b3363ec5a8fc3a4ff6f/l10n_mx_hr_payroll/data/salary_rules/hr_salary_rule_regular_pay_data.xml#L1111-L1120 opw-4576482
Resolved issues and error corrections
This update brings the spreadsheet component to a newer version with fixes that make large filters and table operations faster. It also corrects several display and data-handling issues, including pie chart label overlap, text-formatted cells being treated as filled, and zero values not being handled correctly.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/c1d64fba1 [REL] 18.0.33 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/c1d64fba1 [REL] 18.0.33 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/c8a291e80 [PERF] table: faster table extend check [Task: 4864420](https://www.odoo.com/odoo/2328/tasks/4864420) https://github.com/odoo/o-spreadsheet/commit/e7b4ff760 [FIX] Table: avoid triggering an unecessary evaluation [Task: 4862862](https://www.odoo.com/odoo/2328/tasks/4862862) https://github.com/odoo/o-spreadsheet/commit/3de4362fd [FIX] filter: fix horrible performances with huge data filters [Task: 4658998](https://www.odoo.com/odoo/2328/tasks/4658998) https://github.com/odoo/o-spreadsheet/commit/d1cc0590d [FIX] Formats: text format should not mark the cell as non-empty [Task: 4856923](https://www.odoo.com/odoo/2328/tasks/4856923) https://github.com/odoo/o-spreadsheet/commit/c98a9beeb [FIX] pie chart: prevent overlapping shown values [Task: 4639810](https://www.odoo.com/odoo/2328/tasks/4639810) https://github.com/odoo/o-spreadsheet/commit/0f8b34976 [FIX] base_extractor: properly handle 0 as default value [Task: 4730308](https://www.odoo.com/odoo/2328/tasks/4730308) Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Mehdi Rachico (mera) <mera@odoo.com> Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com>
This fixes an Italian localization setting so subtotal labels use an English default and can be translated according to the user or partner language. Invoices, sales orders, and purchase orders will no longer show the untaxed amount label in Italian for non-Italian users.
Original PR description
The Italian localization defined 'preceding_subtotal' in tax group records using the Italian term "Imponibile" as the default value. This caused the label for untaxed amounts in invoices, sale orders, and purchase orders to always appear in Italian, regardless of the system or partner language. task-4853046 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Using an existing signing template as a layout now keeps grouped radio buttons connected. This prevents signers from selecting multiple choices in a radio group and ensures reused document layouts behave like the original template.
Original PR description
_____________________________________________________ ## Short functional explanation of the error Using the layout of a template document, containing radio buttons, on a new document will unlink…
_____________________________________________________ ## Short functional explanation of the error Using the layout of a template document, containing radio buttons, on a new document will unlink radio buttons, making them useless. ## Reproduction Steps 1. Go to the Sign module, and click on the Templates tab. 2. Click on the "Upload PDF" purple button, and upload a PDF of your choice. 3. On the left side of the screen, there's a panel where we can drag and drop sign items. Drag and drop a Radio button. 2 buttons will automatically show, and a yellow link will appear between the buttons. This link indicates that, when a user opens the document to sign, when clicking on a radio button, the other one will automatically be unselected if previously selected. 4. Save and return to the Templates window. 5. A new row has appeared with the name of the document. On the right side of this row, hover the house next to the share button and click on the 3 dots. Then, click on Use Layout. 6. Upload a PDF of your choice. 7. When the PDF shows, there's no yellow link between the radio buttons, unlike on the template from which the layout was used. ## Causes of the problem In the file sign/models/sign_document.py, in the method _copy_sign_items_to(self, new_document), we copy every sign item from the template to the new document. However, the copy method we call doesn't take into consideration the special link between radio buttons, replicating the buttons correctly but not the link. This link is expressed by the radio set to which the radio buttons belong: indeed, after the copy of sign items, each radio button belongs to a different radio set, separating them. ## Explanation of the fix The fix consists of a rework of the _copy_sign_items_to method and a brand-new method specifically used to copy radio buttons. To keep the link between them, we assign all the buttons of the same set on the original documents to the same brand new radio set. The first button is copied normally: this creates a new radio set. Then, for the remaining buttons, we call copy_radio_item, to which we pass the button created first to use the information the next buttons will share with it. ______________________________________________________________ opw-4842590 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The automated project creation check now completes the Sales Order Item form before saving the project. This prevents intermittent failures caused by an unfinished pop-up blocking the save action, improving confidence in the sales-project workflow tests.
Original PR description
Steps to reproduce the issue: 1- install sale_project without demo data 2- as the test is not deterministic, adding step_delay may help reproducing it The project creation tour was intermittently failing at the step that attempts to save the project (.o_form_button_save:enabled). The failure occurred because this step was triggered while a modal (for creating a Sales Order Item) was still visible and overlaid on top of the main form. Add missing steps in the project tour to select a product in the Sales Order Item form and save and close the form. build_error-163102
Users assigned to subtasks in private projects can now open those subtasks from My Tasks without encountering an access error. This ensures assigned work remains accessible while preserving the project's private access rules.
Original PR description
To reproduce: ============= - Create a private project and a task in it - Create a subtask in this task and assign it to Demo - Log in as Demo and go to "My Tasks" - the subtask is listed but opening it gives an access error Problem: ======== the computation of the field `show_display_in_project` requires reading `project_id` from the parent task, which is not allowed for Demo Solution: ========= read through `sudo` opw-4850408 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Credit notes sent through the Spanish TicketBAI integration now show the total invoice amount as negative in the generated XML. This prevents incorrect tax reporting data and helps ensure credit notes are accepted with the expected values.
Original PR description
**Issue** Credit notes submitted to TicketBAI incorrectly include a positive ImporteTotalFactura in the generated XML, instead of a negative value. **Steps to Reproduce** 1. Install Accounting and TicketBAI modules. 2. Create, confirm, and send an invoice. 3. Reverse the invoice to create a credit note. 4. Confirm and send the credit note. 5. Download the generated XML and observe the total amount. **Root Cause** The _get_importe_desglose_foreign_partner method did not account for whether the move is a credit note or an invoice. As a result, the total amount (ImporteTotalFactura) is always positive **Fix** Use the existing is_refund parameter to correctly apply the sign to the total amount based on the document type. Opw-4814241 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes the online shop cart notification banner so it remains properly positioned when shoppers scroll the page. The change helps customers keep important cart feedback visible and reduces confusion during checkout-related interactions.
Original PR description
task-208961 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update adjusts internal tests for the mail editor and Unsplash integration so they wait properly before counting items on screen. It helps reduce unreliable test failures, supporting smoother development and releases without changing user-facing behavior.
Original PR description
Purpose of this PR: - Update powerbox test cases to use `expectElementCount` helper, which waits for elements to appear before checking their count. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The HTML editor now places a separator before an empty block and after a block that already contains text. This makes page editing behave more intuitively and avoids separators appearing in the wrong position.
Original PR description
Description of the issue this PR addresses: Current behavior before PR: The separator was always inserted before the current block, regardless of its content. Desired behavior after PR is merged: The separator is inserted before the block if it's empty, otherwise it is inserted after the block if it contains text. task-4848276 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update makes automated command palette tests less likely to fail randomly when the test environment is slower or busier than usual. It improves confidence in build results without changing the user-facing command palette experience.
Original PR description
Before this commit, some command palette tests failed non- deterministically. The cause was that the values set on debounced functions were too short, compared to the time it took to render the component after each action, PLUS the additional animation frame awaited by each call to 'advanceTime'/'runAllTimers'. All in all, should the CPU be a bit busier than usual, these tests would fail. This commit does 2 things: - the debounce delays have been vastly increased (100 & 200ms -> 500 & 1000ms); - the awaited actions in the command palette test module have been reduced to a minimum, using Hoot helpers directly instead of the web 'contains' wrapper. runbot [223268](https://runbot.odoo.com/odoo/runbot.build.error/223268) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix removes a race condition that could stop dynamic placeholder popovers from opening after a previous one was closed or failed. Users should see more reliable behavior when using placeholder selection in the web interface.
Original PR description
Before this commit there was a race condition that prevented other DynmaicPlaceholder to be spawned because they waited a Promise that was initiated by a now dead instance of the same class This was because the cached promise was originating from a protected method (orm service, with useService) Also, the cache did not account for failures. After this commit, there is no concurrency failures of that kind. opw-4815802 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Spreadsheet chart interactions have been corrected so trendline clicks no longer trigger errors and line chart points open the related Odoo records as expected. This prevents a confusing failure and restores a useful navigation flow for users working with chart data.
Original PR description
## Description Before this commit: - Clicking on a trendline point resulted in a RuntimeError. - Line chart points were not redirected to Odoo records. After this commit: - Clicking on trendline points is now ignored, preventing the error. - Line chart points now correctly redirect users to the relevant Odoo records. Task: [4815995](https://www.odoo.com/odoo/2328/tasks/4815995) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix removes duplicate asset entries that were introduced by an earlier change in the website and HTML editor areas. It helps keep page editor resources cleaner and reduces the risk of unnecessary loading or maintenance confusion.
Original PR description
We have duplicate assets imported from the pr: https://github.com/odoo/odoo/pull/187091 up to saas-18.2, this pr is to clean the duplicate introduced --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Invoice reports for Mexican electronic invoicing now display the same fiscal regime used in the official CFDI when an invoice is marked as issued to the public. This prevents inconsistencies between the customer-facing invoice and the legally generated document.
Original PR description
Before, if you marked the to publick check in an invoice, the generated cfdi would force the Without fiscal obligations regime at the receptor data, but this wasn't done on the invoice which caused a mismatch on what was being reflected on the invoice and what was on the cfdi. This commit targets to show the same info on the invoice if invoice is set to public target: 18.0 -> master task-4685440
A new automated test was added to help ensure follow-up reports do not crash when the journal option is disabled. This reduces the risk of the same issue returning in future updates and helps keep customer follow-up processes stable.
Original PR description
Adds a test to the fix done in the commit [814b1b2](https://github.com/odoo/enterprise/commit/814b1b21f60189715c82c96397c36da706736490) opw-4836094
Fixes an issue where an unfinished quality check could be skipped after another product in the same receipt failed inspection. Users can now reopen the pending check, helping ensure all received products are properly inspected before validation.
Original PR description
### Steps to reproduce: - Create 2 storable products: Product A, Product B - Create a control point pass/fail control by quantity on receipt and set both products on it. - Create and confirm a…
### Steps to reproduce:
- Create 2 storable products: Product A, Product B
- Create a control point pass/fail control by quantity on receipt and set both products on it.
- Create and confirm a receipt with 2 moves:
- 2 x Product A
- 2 x Product B
- Click on the "Quality Check" button and mark one unit of Product A as failed.
> This should open the QC for product B.
- Close the QC for prodcut B wihtout setting it as failed or passed.
- Click on the "Quality Check" button
#### > Nothing happends
### Expected behavior:
The QC for product B should open.
### Cause of the issue:
When the quality check is marked as failed, the related move is picked: https://github.com/odoo/enterprise/blob/679c81924e05e7544eecfdb960c9ed9611e9cdd5/quality_control/models/quality.py#L438-L451 However, the move for your second porduct is not and hence, its product is not considered to be checkable by the `check_quality` action: https://github.com/odoo/enterprise/blob/679c81924e05e7544eecfdb960c9ed9611e9cdd5/quality_control/models/stock_picking.py#L61-L69
Since these lines were added in c83728f3a7f1504b272f4ef97e4187868338adb3 to not bypass the QC of the unpicked move at validation we should probably only add that filtering condition in that case and continue to consider the unchecked moves as checkable prior to validation.
opw-4765075This fixes how SEPA Direct Debit batch payments choose eligible payments after a recent domain change. It helps ensure users see the correct payment options when preparing SEPA batches, reducing confusion and potential processing errors.
Original PR description
The dynamic payments domain for batch payments has been added in https://github.com/odoo/enterprise/pull/86217 Fix the override for domain payments in the SEPA module.
Users can no longer delete the booking product required for paid appointments. This prevents errors when opening Paid Seats or Paid Consultation after required booking fee data was removed.
Original PR description
Currently, an error occurs when a user tries to access `paid consultation` or `paid seats` if the booking fees are deleted by the user. **Steps to Reproduce:** - Install…
Currently, an error occurs when a user tries to access `paid consultation` or `paid seats` if the booking fees are deleted by the user. **Steps to Reproduce:** - Install **appointment_account_payment** module without demo data. - Delete **Booking Fees** product`from `invoicing->customer->products` - Click on `Paid Seats` or `Paid Consultation` in the Appointment App. **Error:** `ValueError: No record found for unique ID appointment_account_payment.default_booking_product. It may have been deleted.` **Root Cause:** After deleting the **Booking Fees**, if user tries to open `Paid Seats` or `Paid Consultation` the system will try to access id of `appointment_account_payment.default_booking_product` at [1] or [2] causing an error. [1]- https://github.com/odoo/enterprise/blob/a4f68967a9826fac981c1141ece1791a0baf647a/appointment_account_payment/models/templates/appointment_type.py#L43 [2]- https://github.com/odoo/enterprise/blob/a4f68967a9826fac981c1141ece1791a0baf647a/appointment_account_payment/models/templates/appointment_type.py#L56 **Solution:** This commit prevents error by restricting user from deleting the `Booking Product`. Sentry-6013528364
Brazilian point-of-sale orders for company customers will no longer be automatically marked for invoicing. This prevents orders from being incorrectly invoiced when the Brazil POS flow requires invoicing to remain disabled.
Original PR description
Since [^1] company customers are always invoiced by default. To Invoice should always be false for Brazil POS orders which is why the button on the payment screen was hidden, however, there is now no way to uncheck it. Fix: Set "To Invoice" to false always if the company's fiscal country is Brazil. [^1]: https://github.com/odoo/odoo/pull/202515 opw-4861672
The report editor no longer makes unnecessary server requests when users add a field with the slash shortcut. This improves efficiency and can make the editing experience smoother without changing user-facing functionality.
Original PR description
…t mail should do Before this commit, in the reportEditor, add a field (by typing "/") There was calls made to the server that are not necessary for the report editor. This commit removes the calls by overriding the corresponding method. opw-4815802
Belgian companies can now import WinBooks files even when company-currency and foreign-currency balances have opposite signs. The fix prevents an import crash, reducing manual troubleshooting and allowing affected accounting data to load successfully.
Original PR description
Before this commit, there was a traceback error when importing Winbooks having a different sign on the balance in company currency and foreign currency. There was a frozendict error in the import_wizard/_import_move(). Steps to reproduce: - Choose a Belgium company - Import a Winbooks file having a different sign on the balance in company currency and foreign currency - Adapt journals if needed - The traceback should be triggered What happens is that the record where added to a list, then the app tries to change 'CURRAMOUNT' value to 0. But it was a frozendict item, so it create an error. I replace the record added to the list with a copy version that can be mutated. opw-4794471
Miscellaneous changes
If the browser triggers a request just as a tour is finishing up (e.g. navigation to a new page triggering a font fetch), the harness can close the websocket connection while the request is in the `requestPaused` proxy, causing the reply to fail and trigger an error. We can just ignore the error in that case. An alternative would be to enqueue a future into `_responses` when we receive the query, but that would still have a race as depending on scheduling decisions the browser could have alre
Original PR description
If the browser triggers a request just as a tour is finishing up (e.g. navigation to a new page triggering a font fetch), the harness can close the websocket connection while the request is in the `requestPaused` proxy, causing the reply to fail and trigger an error. We can just ignore the error in that case. An alternative would be to enqueue a future into `_responses` when we receive the query, but that would still have a race as depending on scheduling decisions the browser could have already shut down by the time we reach the handler, so we'd need to enqueue a future, check if `ws` is still open, and bail if not. And even then that's still got a hole as there is some time between the `wait(_responses.values())` and the `ws.close()`. https://runbot.odoo.com/odoo/error/186309 Forward-Port-Of: odoo/odoo#213911
**Current behavior before PR:** When the user opened the Favorite category with no favorite GIFs, nothing was shown. This was caused by using `.length` on Map objects (`evenGif.gifs` and `oddGif.gifs`) , which should have been `.size`. (since #131344 ) **Desired behavior after PR is merged:** Help message is correctly displayed when no favorite GIFs are available. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo
Original PR description
**Current behavior before PR:** When the user opened the Favorite category with no favorite GIFs, nothing was shown. This was caused by using `.length` on Map objects (`evenGif.gifs` and `oddGif.gifs`) , which should have been `.size`. (since #131344 ) **Desired behavior after PR is merged:** Help message is correctly displayed when no favorite GIFs are available. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#213374
If you have 2 invoices and 2 dropship picking linked to 1 Dropship Sale Order, and the two dropship have different SVL cost: The 2nd invoice will have incorrect COGS https://github.com/user-attachments/assets/79f15933-0449-4081-aff0-daa5709889bf ## To reproduce - Create Product P-DROP: * category: AVCO automated * Routes: Buy & Dropship * Purchase Vendors: Azure Interior @ $10 - Create Sale Order for 1 unit of P-Drop ⇾ Confirm - Go to Purchase Order ⇾ ensure unit price is
Original PR description
If you have 2 invoices and 2 dropship picking linked to 1 Dropship Sale Order, and the two dropship have different SVL cost: The 2nd invoice will have incorrect COGS…
If you have 2 invoices and 2 dropship picking linked to 1 Dropship Sale Order, and the two dropship have different SVL cost: The 2nd invoice will have incorrect COGS
https://github.com/user-attachments/assets/79f15933-0449-4081-aff0-daa5709889bf
## To reproduce
- Create Product P-DROP:
* category: AVCO automated
* Routes: Buy & Dropship
* Purchase Vendors: Azure Interior @ $10
- Create Sale Order for 1 unit of P-Drop ⇾ Confirm
- Go to Purchase Order ⇾ ensure unit price is $10 ⇾ Confirm
- Receive products ⇾ ensure **valuation is $10**
- Create Vendor Bill (optional) ⇾ Confirm
- Create Invoice ⇾ Confirm
* **COGS value is $10** (ok)
- In Sale Order, set ordered quantity to 2 units
* New draft PO should have been created
- Go to New Purchase Order ⇾ set price to $20 ⇾ Confirm
- Receive products ⇾ ensure **valuation is $20**
- Create Vendor Bill (optional) ⇾ Confirm
- Create Invoice ⇾ Confirm
* COGS should be $20, but they are actually **$16.67** (KO)
---
## Test result without fix
```
2025-06-11 11:25:32,230 29041 ERROR oes_test_17 odoo.addons.stock_dropshipping.tests.test_stockvaluation: FAIL: TestStockValuation.test_dropship_cogs_multiple_invoices
Traceback (most recent call last):
File "/home/odoo/projects/odoo-src/multiverse/src/17.0/odoo/addons/stock_dropshipping/tests/test_stockvaluation.py", line 382, in test_dropship_cogs_multiple_invoices
self.assertEqual(dropship2_cogs_line.balance, -16)
AssertionError: -13.33 != -16
```
OPW-4665635
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#213763## Issue description: - When 'qty_producing' is updated, the new move takes the MO date_deadline. - The MO date_deadline is the minimum date of all the finished moves date_deadline. - When the SO commitment_date is incremented (+1day), the FNS move date_deadline is updated, but not the BP move one. - The MO date_deadline stay the same (because BP move is a finished move, and BP.date_deadline < FNS.date_deadline) - The new FNS move deadline will not be equal to the existing FNS move deadline
Original PR description
## Issue description: - When 'qty_producing' is updated, the new move takes the MO date_deadline. - The MO date_deadline is the minimum date of all the finished moves date_deadline. - When the SO…
## Issue description:
- When 'qty_producing' is updated, the new move takes the MO date_deadline.
- The MO date_deadline is the minimum date of all the finished moves date_deadline.
- When the SO commitment_date is incremented (+1day), the FNS move date_deadline is updated, but not the BP move one.
- The MO date_deadline stay the same (because BP move is a finished move, and BP.date_deadline < FNS.date_deadline)
- The new FNS move deadline will not be equal to the existing FNS move deadline
- The merge is blocked
## How to reproduce:
- Enable By-Products in setting
- Unarchive MTO route
- Create storable products FNS, CMP and BP
- Set FNS route: Manufacture and MTO
- Create BoM:
- Producing: 1 of FNS
- Component: 1 of CMP
- By-Product: 1 of BP
- Create Sale Order for 1 unit of FNS ⇾ Confirm
- Set Delivery Date to 1 day in the future (date must be incremented)
- Go to MO, set quantity producing to 2
- => 2 Finished move for FNS exists; the merge was not done due to a discrepancy in 'date_deadline'
- Click "Produce All"
- !! Singleton Error
## Fix:
On date_deadline change: propagate deadline to sibling FNS moves
OPW-4671555
---
## Test result without fix:
```
2025-06-03 11:54:54,076 37053 ERROR oes_test_17 odoo.addons.sale_mrp.tests.test_sale_mrp_flow: FAIL: TestSaleMrpFlow.test_date_deadline_propagation
Traceback (most recent call last):
File "/home/odoo/projects/odoo-src/multiverse/src/17.0/odoo/addons/sale_mrp/tests/test_sale_mrp_flow.py", line 2624, in test_date_deadline_propagation
self.assertEqual(len(fns_move), 1)
AssertionError: 2 != 1
```
## Test result without fix and the asserts on finished moves removed (to reach 'button_mark_done'):
```
Traceback (most recent call last):
File "/home/odoo/projects/odoo-src/multiverse/src/17.0/odoo/addons/sale_mrp/tests/test_sale_mrp_flow.py", line 2622, in test_date_deadline_propagation
mo.button_mark_done()
File "/home/odoo/projects/odoo-src/multiverse/src/17.0/odoo/addons/mrp/models/mrp_production.py", line 2014, in button_mark_done
productions_not_to_backorder._post_inventory(cancel_backorder=True)
File "/home/odoo/projects/odoo-src/multiverse/src/17.0/odoo/addons/mrp/models/mrp_production.py", line 1723, in _post_inventory
order._cal_price(moves_to_do_by_order[order.id])
File "/home/odoo/projects/odoo-src/multiverse/src/17.0/odoo/addons/mrp_account/models/mrp_production.py", line 89, in _cal_price
finished_move.ensure_one()
File "/home/odoo/projects/odoo-src/multiverse/src/17.0/odoo/odoo/models.py", line 5899, in ensure_one
raise ValueError("Expected singleton: %s" % self)
ValueError: Expected singleton: stock.move(8252, 8255)
```
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#212718Have a model that returns a warning onchange during the first call to onchange. On another model that has a many2one to the first model, Create And Edit a record via the many2one field on the form view. Before this commit, there was an endless loop because on dialog was triggering the opening of a second one *during* its willStart lifecycle period, so none of them end up mounted, instead, the formViewDialog was constantly reinstanciated because the dialog container constantly received request
Original PR description
Have a model that returns a warning onchange during the first call to onchange. On another model that has a many2one to the first model, Create And Edit a record via the many2one field on the form view. Before this commit, there was an endless loop because on dialog was triggering the opening of a second one *during* its willStart lifecycle period, so none of them end up mounted, instead, the formViewDialog was constantly reinstanciated because the dialog container constantly received requests to re-render. After this commit, we only open those dialog onMounted of the main component, and this issue doesn't occur anymore. opw-4783459 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#213811 Forward-Port-Of: odoo/odoo#213742
Improve the error message when the response is HTTP 403. Currently, the content is empty for such errors, making it difficult to identify the source of the problem for users. Step to reproduce: - Try to send an invoice with wrong credentials. - The error message is empty, making it hard to understand what went wrong. Error message before this commit:  After:  After:  Also added the missing .pot file. opw-4823950 opw-4628908 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#212379
Steps to Reproduce : 1. Activate the developer mode 2. Create a menu from the Site ---> Menu Editor option 3. Go to Configurations ---> Redirects 3.1. Select Action as : '301 Moved Permanently' 3.2. URL From : '/<url_added_at_time_Menu_creation' 3.3. URL To : '#' 4. Go to the Home page 5. Click on the Menu created 6. Traceback Occurs Expected Behavior: The page should not crash even when the paths of 'url_from' and 'url_to' are the same. Reason: When the paths of
Original PR description
Steps to Reproduce : 1. Activate the developer mode 2. Create a menu from the Site ---> Menu Editor option 3. Go to Configurations ---> Redirects 3.1. Select Action as : '301 Moved Permanently' …
Steps to Reproduce : 1. Activate the developer mode 2. Create a menu from the Site ---> Menu Editor option 3. Go to Configurations ---> Redirects 3.1. Select Action as : '301 Moved Permanently' 3.2. URL From : '/<url_added_at_time_Menu_creation' 3.3. URL To : '#' 4. Go to the Home page 5. Click on the Menu created 6. Traceback Occurs Expected Behavior: The page should not crash even when the paths of 'url_from' and 'url_to' are the same. Reason: When the paths of 'url_to' and 'url_from' are the same and the value of 'url_to' starts with '?' or '#' , the redirection loop is created and the page is crashed. This commit is resolving page crash issue by checking the path of 'url_to' and 'url_from' in '_serve_fallback' method, where redirection is happening. If path is same, then we will not redirect; instead, we will return from this method. If 'url_to' starts with '#' or '?', In this case, we are showing validation error to the user. task-3984211 Forward-Port-Of: odoo/odoo#175992
Currently a traceback is occurring when the user tries to post a journal entry from journal dashborad. **Steps to reproduce:** 1) Install `l10n_it_xml_export` and switch to IT company 2) Create a closing entry for the tax report 3) Open the miscellaneous Operations from Accounting Dashboard 4) Open the above-created entry by removing the default filter 5) Post the closing entry, a wizard opens. 6) Validate the values. 7) A traceback appears **Error:** ``` account.journal' objec
Original PR description
Currently a traceback is occurring when the user tries to post a journal entry from journal dashborad. **Steps to reproduce:** 1) Install `l10n_it_xml_export` and switch to IT company 2) Create a…
Currently a traceback is occurring when the user tries to post a journal entry from journal dashborad. **Steps to reproduce:** 1) Install `l10n_it_xml_export` and switch to IT company 2) Create a closing entry for the tax report 3) Open the miscellaneous Operations from Accounting Dashboard 4) Open the above-created entry by removing the default filter 5) Post the closing entry, a wizard opens. 6) Validate the values. 7) A traceback appears **Error:** ``` account.journal' object has no attribute '_get_report_options_from_tax_closing_entry' ``` **Cause:** When the user tries to post the closing entry from the accounting dashboard, its active_model is `account.journal`, and the active_id should be the current id of the miscellaneous journal. This leads to the above traceback, as the method `_get_report_options_from_tax_closing_entry` is not available in account.journal. **Solution:** To resolve this issue, we can browse the current move from the `ctx['l10n_it_moves_to_post']`, since the value of the `l10n_it_moves_to_post` is also self.ids. Which is the current active id for that closing entry. https://github.com/odoo/enterprise/blob/3d89d9fe6be8e789278dee9bc706e091ee5a0ec5/l10n_it_xml_export/models/account_move.py#L19 opw-4783958 Forward-Port-Of: odoo/enterprise#86791
When importing a coda statement, in case of globalisation, Odoo doesn't take into account the different levels of details. Instead of that, we keep every lines even if one is already the sum of each detailed lines. According to https://febelfin.be/media/pages/publicaties/2023/archief-bankstandaarden/0c9e6e5026-1694763197/standard-coda-2.4-fr.pdf Chapter 3.1 Transaction type are communicate like that: - 0 -> simple amount without detailed data - 1 -> amount as totalised by the cus
Original PR description
When importing a coda statement, in case of globalisation, Odoo doesn't take into account the different levels of details. Instead of that, we keep every lines even if one is already the sum of each…
When importing a coda statement, in case of globalisation, Odoo doesn't take into account the different levels of details. Instead of that, we keep every lines even if one is already the sum of each detailed lines. According to https://febelfin.be/media/pages/publicaties/2023/archief-bankstandaarden/0c9e6e5026-1694763197/standard-coda-2.4-fr.pdf Chapter 3.1 Transaction type are communicate like that: - 0 -> simple amount without detailed data - 1 -> amount as totalised by the customer - 5 -> detail of 1 - 2 -> amount as totalised by the bank - 6 -> detail of 2, simple amount without detailed data - 7 -> detail of 2, simple amount with detailed data - 9 -> detail of 7 Let's assume this case: - 1 line with transaction type == 2, amount == 3000 - 1 line with transaction type == 7, amount == 2000 - 1 line with transaction type == 9, amount == 2000 - 1 line with transaction type == 7, amount == 1000 - 1 line with transaction type == 9, amount == 1000 Currently, Odoo will display lines 1, 2 and 4 in case of split transactions instead of lines 3 and 5. In case of not split transactions, Odoo sums up the same lines. With this commit, we keep trace of last line's transaction type to: - be able to delete it if it has detailed data, in case of split transaction - to sum up only the relevant lines opw-4619660 opw-4795349 Forward-Port-Of: odoo/enterprise#85006