Tuesday, July 1, 2025
34 changes · 18.0
Enhancements to existing features
The Turkish Nilvera integration now records connection issues as informational logs instead of errors. This keeps diagnostic details available while preventing automated upgrade checks from failing when internet access is blocked.
Original PR description
In 3b5cb63 we silenced Nilvera connection errors to prevent upgrade CI failures due to blocked internet access. However, using `logger.error` still caused CI to fail when triggered. This commit changes the log level to info to ensure the error is recorded without impacting the CI. Also, we're now printing the stack trace for easier debugging. runbot-227039 Forward-Port-Of: odoo/odoo#215791
Resolved issues and error corrections
Changing a leave request from “Extra Hours” to another time-off type now properly removes the old overtime link. This prevents incorrect overtime deductions or stale attendance overtime records when HR updates leave requests.
Original PR description
This commit fixes a bug that occurs when switching a leave request of type "Extra Hours" to another time-off type. The issue happens when editing a leave request that allows deduction from overtime, as it remains linked to attendance overtime that needs to be unlinked. task-4756706 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#207780
Documentation and clarification updates
This pull request adds the contributor's legal agreement record and keeps local environment files out of the project history. This helps maintain compliance for contributions and reduces accidental inclusion of development-only files.
Original PR description
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
Miscellaneous changes
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#203293
Original PR description
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#203293
Fixes an issue where opening allocations from a time off type could show the same remaining balance information for every employee. This helps HR users see accurate allocation details instead of employee-specific values being reused incorrectly.
Original PR description
### Steps to reproduce: - Create a Time off type - Create allocations for some employees with the created type - Navigate to an allocation for a specific employee - Click on the time off type in the allocation form - Click on the smart button 'Allocations' - Notice each record showing the same time off type (X remaining out of Y) ### Cause: This is happening because when going through the allocation of a specific employee we add him in the context 'employee_id' so we compute the display name of the leave type and set it for each record as the same value as we compute leaves depending on the contextual employee. ### Fix: We are preventing the computation of the display name by forcing the employee_id in the context to force when we are using the smart button for allocations in the time off type form view opw-4841096 Forward-Port-Of: odoo/odoo#215454
This change corrects a printing layout problem where multi-page invoices using the boxed template could show unwanted vertical lines at the bottom of a page. It improves the appearance of printed invoices by adjusting spacing so totals and payment terms flow cleanly across pages.
Original PR description
Before this commit, a print invoice that's on 2 pages with a boxed template left 2 vertical lines on the page bottom A negative margin top in applied that push the table top to the first page I…
Before this commit, a print invoice that's on 2 pages with a boxed template left 2 vertical lines on the page bottom A negative margin top in applied that push the table top to the first page I change the layout of `report_invoice_document` to avoid a negative margin. The negative margin-top to `total` was there to move the float div higher to compensate the ´table` margin-bottom. I remove the `table` margin-bottom and replace that by a `payment term` margin-top. The margin were collapsed for `total` and `payment term` so I had to add an overflow-hidden on the parent div. ## Before :  ## After :  ## Steps to reproduce : - Change the document layout to a boxed one in the Settings - Create products with long descriptions (example can be found in the linked ticket) - Create an invoice with the products - Print the invoice (the total should be on the second page top) - The vertical lines should be there opw-4841652
Long product descriptions on sale order lines now resize correctly after reopening a quotation. This removes unwanted blank space at the bottom of lines, making quotations easier to read and edit.
Original PR description
## Versions 18.0+ ## Issue Blank spaces appear at the bottom of each Sale Order line when a long product description is set. ## Steps to reproduce - Create a new quotation: - Add a product; - Change the description for a long one (3+ lines) or add one; - Go back to the quote list view; - Come back to the quote. ## Cause The component's height computation is done before the columns' widths' computation which then resizes based on font styles, making the text take less space and blank spaces appear. ## Fix Force the computation of the SO line's height once the component is mounted. opw-4766800
This fixes report formatting so long units of measure can wrap instead of forcing other report columns to be cut off. Quantity values remain on one line, making invoices, sales, stock, and delivery reports easier to read and print.
Original PR description
*: l10n_gcc_invoice,l10n_it_stock_ddt,sale,stock,web [1]: https://github.com/odoo/odoo/commit/344bdb1ed4cecdaef007200c011f87e58e36c87d Issue: [Commit](https://github.com/odoo/odoo/commit/344bdb1ed4cecdaef007200c011f87e58e36c87d) introduced a `text-nowrap` on the quantity column, this unnecessarily crops the other columns if we use a long UoM. This commit adds a max-width to the UoM column and applies the text-nowrap to the quantity only, letting the long UoM wrap if too long. task-4478718 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Sales order emails now show the intended sender: the salesperson when one is set, or the company email when no salesperson is assigned. This avoids customer confusion when a shared company email matches an administrator account.
Original PR description
Versions -------- - 18.0+ Steps ----- 1. Set company email to the same as the admin's; 2. log in as demo user; 3. set up a sales order without a salesperson; 4. send sales order via email. Issue…
Versions -------- - 18.0+ Steps ----- 1. Set company email to the same as the admin's; 2. log in as demo user; 3. set up a sales order without a salesperson; 4. send sales order via email. Issue ----- Sales order shows as being sent from admin user instead of the company email. The expected behavior for sales orders is that they're sent from the salesperson email if available, else the company's email. Cause ----- When sending the email, it has the correct `email_formatted` value, i.e. Company Name <company@email.com>. To get the author however, `mail` uses the `_mail_find_partner_from_emails` method, which normalizes the given emails before searching matching partners. Without the "Company Name" part, it will also match admin user's email, and because the method prioritizes user emails over partner emails, the company's `partner_id` doesn't even get checked in the lookup. Solution -------- Add a `_computer_authorship` override for `sale.order` messaging. opw-4690644
Employees with flexible working hours will now see all days normally in the Time Off calendar instead of having some days incorrectly greyed out. This avoids confusion when reviewing or requesting time off for flexible schedules.
Original PR description
The calendar view in the Time Off app was displaying greyed-out days. These days corresponded to those from the underlying work schedule on which the flexible working hours were based. Steps to reproduce: ------------------- * In the Work Information tab of an Employee, set the Working Hours to flexible. * Save and click on the Time Off smart button > Observation: Some days were greyed-out Why the fix: ------------ `get_unusual_days()` usually return a dict of each days with True or False. That dict is then interpreted to display white or greyed-out days. Simply be returning False, every days are going to be white. opw-4816609 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes the boxed invoice PDF layout so the totals table has a consistent border after recent spacing changes. The update prevents printed invoices from looking visually disconnected or unfinished.
Original PR description
**Description:** Due to a recent [commit](https://github.com/odoo/odoo/commit/12ef230df58122fbdac0b4c1b4781c535b8516ba), a margin-top was added to the total table for the report type-pdf.…
**Description:** Due to a recent [commit](https://github.com/odoo/odoo/commit/12ef230df58122fbdac0b4c1b4781c535b8516ba), a margin-top was added to the total table for the report type-pdf. Previously,in the box layout, this table did not have a top border because it appeared visually connected to the preceding table — they seemed seamlessly joined. However, after the margin was added,the table now appears visually disconnected, making the absence of a top border look inconsistent and awkward. Steps to reproduce: - install account module - select box external layout - create invoice - print report as pdf Before commit:  After commit:  opw - [4873157](https://www.odoo.com/odoo/project/70/tasks/4873157) upg - [2839564](https://upgrade.odoo.com/odoo/upgrade.request/2839564) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an automated stock workflow test that could fail because it checked information before recent changes were fully saved. The update makes the test process more dependable, helping prevent false failures in validation pipelines.
Original PR description
The `test_add_new_line_in_detailled_op` fails in 18.0+ since clicking on the head of the modal content will trigger a web_read before the records has been updated in db. So that the last applied change disappear. This commit attempt to clean the tour to be more reliable. runbot-113534 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an unstable automated test in the mailing area that was failing during nightly checks. The change makes test results more predictable, helping maintain release quality without affecting end users directly.
Original PR description
Not sure why we did that strange construct in subtest but it fails in nightly. Added order on model to try to reduce non deterministic behavior. runbot-162367
Hungarian electronic credit notes now report the supplier and customer bank accounts correctly instead of duplicating the customer's account as the supplier's. This helps ensure NAV submissions contain accurate payment details and reduces the risk of reporting errors.
Original PR description
### Steps to reproduce: - Install l10n_hu_edi and switch to a Hungarian company - In the settings set the NAV mode to "demo" - Create an invoice to a Hungarian contact with an account number - Send it to NAV - Create the credit note for this invoice - Send it to NAV and download the XML in the page "NAV 3.0" - The account number in `supplierBankAccountNumber` and `customerBankAccountNumber` are the same ### Cause: The code was doing: `'supplierBankAccountNumber': format_bank_account_number(self.partner_bank_id or supplier.bank_ids[:1]),` But for credit notes `self.partner_bank_id` is the bank account of the customer not the supplier. ### Solution: Only use `supplier.bank_ids[:1]`. As the bank account were never tested in l10n_hu_edi, this commit adds it in the setup and changed the XMLs to always test it. opw-4845026 Forward-Port-Of: odoo/odoo#214714
The incomplete transfer window in Barcode now avoids overlapping column headers on very small screens, especially when using languages with longer labels such as French. This makes partial receipt validation easier to read and reduces confusion for warehouse users on mobile devices.
Original PR description
Issue ----- When processing partial receipts on small resolution screens, the incomplete transfer window has an overlap of its headers for translations with long terms. Steps to reproduce ----- - Set…
Issue ----- When processing partial receipts on small resolution screens, the incomplete transfer window has an overlap of its headers for translations with long terms. Steps to reproduce ----- - Set DB language to French - On Inventory>Configuration>Operation Types, configure the operation type "receipts" to create backorders on "Ask" - Create an incoming transfer - Open barcode on a low resolution screen (eg 340x400px) - Open the transfer in barcode - Process part of the quantity - Validate the partial transfer --> The "Terminé /" & "A faire" column headers overlap Cause ----- The resolution is not wide enough to fit the headers without word break. However breaking words isn't a suitable solution either as it makes headers unreadable. For example, "Terminé /" & "A faire" would read as "Term A " " iné fair" " / e " Given that the 2 columns are semantically related, we can merge their headers together without losing readability. Visual comparison ----- Low resolution before (left) & after the fix (right).  Desktop display is a bit affected but still readable.  ----- Ticket: opw-4715939
This fix prevents an error when online payment synchronization checks a missing provider type. It helps keep batch payment processing stable when provider information is incomplete.
Original PR description
The aim of this commit is making sure that we don't have a traceback when we are trying to do a "in" comparison with an empty `provider_type`. no task id
The salary configurator now shows the minimum wage warning only for Belgian companies. This prevents employees in other countries, such as the United States, from seeing irrelevant Belgian wage alerts when Belgian localization is installed.
Original PR description
The warning for a basic wage below minimum level appears for non Belgian employees, such as L10N_US, because the L10N_BE was installed. The logic for the warning has been limited to be applied only on Belgian companies. Task #4907771
Users can no longer open Studio to customize the Bank Reconciliation view. This prevents unsupported changes to a sensitive accounting workflow and helps keep bank reconciliation behavior stable.
Original PR description
- Install `web_studio` and `account_accountant` - Open Accounting -> Bank You can open studio on this view but this should not be possible opw-4859464
The tests: - `test_report_stock_quantity` - `test_report_stock_quantity_with_product_qty_filter` can fail if the test class was instantiate at midnight and the tests launched at 00:01. The issue has been explained extensively in d1e11dc2b41e66709ddd89beded32872af4118b9 Here is a modest retranscription of its holy analysis: The Test class `TestReportStockQuantity` inherit from `TransactionCase`. So, once initialized, a SQL transaction is started and is the same for all the tests of the cl
Original PR description
The tests: - `test_report_stock_quantity` - `test_report_stock_quantity_with_product_qty_filter` can fail if the test class was instantiate at midnight and the tests launched at 00:01. The issue has…
The tests: - `test_report_stock_quantity` - `test_report_stock_quantity_with_product_qty_filter` can fail if the test class was instantiate at midnight and the tests launched at 00:01. The issue has been explained extensively in d1e11dc2b41e66709ddd89beded32872af4118b9 Here is a modest retranscription of its holy analysis: The Test class `TestReportStockQuantity` inherit from `TransactionCase`. So, once initialized, a SQL transaction is started and is the same for all the tests of the class: https://github.com/odoo/odoo/blob/d86409d93e096126b32cbb35f442db332628375d/odoo/tests/common.py#L775-L778 Also, in a SQL request, the method `now()` does not really return the current date: > Notice that NOW() and its related functions return the start time of the current transaction. In other words, the return values of the function calls are the same within a transaction. (https://www.postgresqltutorial.com/postgresql-date-functions/postgresql-now/) So, if we we start all the tests of the class `TestReportStockQuantity` at the end of D01. The SQL transaction is created and the tests are executed one by one with a NOW() corresponding to D01. However, certain indiviual tests might be launched on the following day D02 because it takes time to run the rest of the tests of the class: In particular, the python "today()" will notgive the same date as the SQL NOW and the queries of the test will simply not perform the expected. E.g: https://github.com/odoo/odoo/blob/d86409d93e096126b32cbb35f442db332628375d/addons/stock/tests/test_report_stock_quantity.py#L105-L110 runbot-226726 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#215424
Steps to reproduce: ==================== - Create an invoice - Add a customer whose language differs from the user's language - Create a reversal - Print the PDF Problem: ========= The reversal reference is generated using the user's language, making it impossible to translate properly because the string value is changed and concatenated with the invoice name. Solution: ========== Generate the reversal reference using the partner's language to enable proper translation. opw-474
Original PR description
Steps to reproduce: ==================== - Create an invoice - Add a customer whose language differs from the user's language - Create a reversal - Print the PDF Problem: ========= The reversal reference is generated using the user's language, making it impossible to translate properly because the string value is changed and concatenated with the invoice name. Solution: ========== Generate the reversal reference using the partner's language to enable proper translation. opw-4743430 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#215792
**Steps to reproduce:** - Install Accounting + Inventory + Sales apps - Enable Automatic Accounting in Settings - Ensure two companies are available - Set one product category (same for both companies) - For company 1 (current) -> FIFO + automatic valuation (`'real_time'`) - For company 2 -> FIFO + manual valuation (`'manual_periodic'`) - Create a storable product for this category - From company 1: - Buy 10 products at 10$ each and receive them (Purchase + Delivery) -
Original PR description
**Steps to reproduce:** - Install Accounting + Inventory + Sales apps - Enable Automatic Accounting in Settings - Ensure two companies are available - Set one product category (same for both…
**Steps to reproduce:**
- Install Accounting + Inventory + Sales apps
- Enable Automatic Accounting in Settings
- Ensure two companies are available
- Set one product category (same for both companies)
- For company 1 (current) -> FIFO + automatic valuation (`'real_time'`)
- For company 2 -> FIFO + manual valuation (`'manual_periodic'`)
- Create a storable product for this category
- From company 1:
- Buy 10 products at 10$ each and receive them (Purchase + Delivery)
- Sell 15 products at 10$ each and deliver them (Sale + Delivery)
- Buy 10 products at 10$ (Purchase)
- Switch to company 2 (keep company 1 checked)
- From company 2:
- Validate the third delivery order (WH/IN)
- Go to Inventory/Reporting/Valuation
- One journal entry is missing for the last move
**Issue:**
During the processing of the SVL in `_run_fifo_vacuum`, the product used its current env context company instead of the one provided explicitly in the parameters. This caused inconsistencies in valuation logic when the method used differed between the given companies, which results in a missing `account_move_id`.
**Fix:**
Ensure that the product is evaluated in the correct company context by using `product.with_company(company.id)` before the valuation logic.
opw-4732067
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#208644**Current behavior:** Creating a purchase order in a foreign currency and billing the product prior to reception will produce 2 issues: A) The bill line for the product will only make a conversion of 1 single unit of the product with the defined currency exchange rate, making the amount on the line incorrect when qty > 1 B) When the receipt is finally validated, there will be an unwanted exchange difference on the journal items generated due to asymmetrical rounding for the bill AMLs a
Original PR description
**Current behavior:** Creating a purchase order in a foreign currency and billing the product prior to reception will produce 2 issues: A) The bill line for the product will only make a conversion of…
**Current behavior:** Creating a purchase order in a foreign currency and billing the product prior to reception will produce 2 issues: A) The bill line for the product will only make a conversion of 1 single unit of the product with the defined currency exchange rate, making the amount on the line incorrect when qty > 1 B) When the receipt is finally validated, there will be an unwanted exchange difference on the journal items generated due to asymmetrical rounding for the bill AMLs and receipt valuation AMLs **Expected behavior:** Correct bill line currency amounts and symmetric rounding. **Steps to reproduce:** 1. Set the company currenct to IQD, make a product invoiced on ordered qty, for sake of example set cost to 500 IQD 2. Create a currency exchange record to USD with a company rate of `0.00756` 3. Create a PO for 13 of the product created in step 1, with a discount of 1% 4. Confirm the PO and create the bill -> post it * Issue A) look at invoice line, see only 1 unit in the converted currency amount is accounted for by the `balance` 5) Receive the product -> look at the journal items generated and see that there is a diff of 0.185 IQD **Cause of the issue:** A) commit: 90158f6 added a method to try and calculate an AML balance from its purchase line values, but mistakenly is using `qty_received` instead of `qty_to_invoice` which explains why this issue only presents for the bill-before-receipt flow B) commit: 9f046d5 is using `round=False` context for `AccountTax.compute_all()` when the expected key is `round_base` **Fix:** A) Replace `qty_received or 1` with `qty_to_invoice` * Also make the test added in 90158f6 more robust B) Add `round_base=False` alongside the `round` key (not removing as that existing one could have become expected in this context) opw-4689170 Forward-Port-Of: odoo/odoo#205850
### Description of the issue/feature this PR addresses: When doing an Invoice B to exempts customer we have a problem the RG Legend new table is not showing: this because if the VAT Content or other taxes sum is 0.0 (we are not showing any information if sums 0.0) After checking with ARCA Online PDF sxampels, and some feedback of Argentinen users, we found out that the Legend should be always present. event if the totals of theTax Breakdown are shown with 0.0 ### Steps to reproduce 1
Original PR description
### Description of the issue/feature this PR addresses: When doing an Invoice B to exempts customer we have a problem the RG Legend new table is not showing: this because if the VAT Content or other…
### Description of the issue/feature this PR addresses: When doing an Invoice B to exempts customer we have a problem the RG Legend new table is not showing: this because if the VAT Content or other taxes sum is 0.0 (we are not showing any information if sums 0.0) After checking with ARCA Online PDF sxampels, and some feedback of Argentinen users, we found out that the Legend should be always present. event if the totals of theTax Breakdown are shown with 0.0 ### Steps to reproduce 1. Go to an Argentina Company 2. Create a new invoice for "Final Consumer" with document type "Invoice B" 3. Create a product line with tax 0 (could use either VAT Exempt, VAT 0, VAT Not Taxed) 4. Print the PDF ### Current behavior before PR: The PDF is NOT showing the Tax Breakdown table  ### Desired behavior after PR is merged: The PDF is showing the Tax Breakdown with the line VAT Content 0.0  --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#207367
**Step to reproduce:** 1. Install l10n_ae module. 2. Create and post a customer invoice with product and Taxes. 3. Print the invoice using the Invoice PDF report. **Issue:** The "VAT" columns in the invoice report for AE localization are left-aligned, which causes a visual misalignment. **Cause:** The header cells for the "VAT" columns use the text-start class, which left-aligns them, whereas the VAT data is right-aligned.It arises because the `<th name="th_taxes">` element
Original PR description
**Step to reproduce:** 1. Install l10n_ae module. 2. Create and post a customer invoice with product and Taxes. 3. Print the invoice using the Invoice PDF report. **Issue:** The "VAT" columns in the…
**Step to reproduce:** 1. Install l10n_ae module. 2. Create and post a customer invoice with product and Taxes. 3. Print the invoice using the Invoice PDF report. **Issue:** The "VAT" columns in the invoice report for AE localization are left-aligned, which causes a visual misalignment. **Cause:** The header cells for the "VAT" columns use the text-start class, which left-aligns them, whereas the VAT data is right-aligned.It arises because the `<th name="th_taxes">` element is aligned with text-end in the base view account.report_invoice_document , but it is overridden for the l10n_ae module with text-start. https://github.com/odoo/odoo/blob/638268a81ed5a292a02d7fc353c4954159de54e1/addons/account/views/report_invoice.xml#L116 **Solution:** To fix this, update the alignment of the "VAT" header columns to use text-end, ensuring consistent alignment. opw-4863313 Before fix:  After fix:  Forward-Port-Of: odoo/odoo#214499
## Steps to reproduce: - Install **Timesheets** and **payroll** apps. - Create a copy of the (**Standard 40 hours/week**) working schedule but remove **Wednesday** working hours. - Create a new **employee**, and set his Working Hours to the newly created working schedule. - Create a new **_running_** **contract** for the newly created employee with the newly created working schedule. - Go to **Timesheets** app, and search for the newly created employee. - **Add a line** for a project and r
Original PR description
## Steps to reproduce: - Install **Timesheets** and **payroll** apps. - Create a copy of the (**Standard 40 hours/week**) working schedule but remove **Wednesday** working hours. - Create a new…
## Steps to reproduce: - Install **Timesheets** and **payroll** apps. - Create a copy of the (**Standard 40 hours/week**) working schedule but remove **Wednesday** working hours. - Create a new **employee**, and set his Working Hours to the newly created working schedule. - Create a new **_running_** **contract** for the newly created employee with the newly created working schedule. - Go to **Timesheets** app, and search for the newly created employee. - **Add a line** for a project and register 8 hours in each day from Monday to Saturday. - Switch the view to Day, Notice how for both Wednesday and Saturday, no overtime is shown. +08:00 should be shown for each as both are non-working days per the newly created working schedule. **(Issue 2)** ## Investigation: - The overtime text comes from https://github.com/odoo/enterprise/blob/1720b5578998b28c91c6820a63ecbd397297c47f/timesheet_grid/static/src/components/employee_overtime_indication/employee_overtime_indication.xml#L8 using `overtimeIndication()` getter https://github.com/odoo/enterprise/blob/1720b5578998b28c91c6820a63ecbd397297c47f/timesheet_grid/static/src/components/employee_overtime_indication/employee_overtime_indication.js#L34 - For the off days - (Wed, Sat, Sun) in our example -, the `allocated_hours` (`this.props.allocated_hours`) = ZERO - And so `shouldShowHours()` returns `false` https://github.com/odoo/enterprise/blob/1720b5578998b28c91c6820a63ecbd397297c47f/timesheet_grid/static/src/components/employee_overtime_indication/employee_overtime_indication.js#L19-L21 - which makes `overtimeIndication()` returns null. That's why no overtime text is shown for off-days - Note that `allocated_hours` is `undefined` for rows that represent employee hours of the current week opw-3718279 Forward-Port-Of: odoo/enterprise#66528 Forward-Port-Of: odoo/enterprise#60048