Friday, November 28, 2025
37 changes · saas-18.4
Resolved issues and error corrections
This update resolves an error that occurred when users tried to view time off information for contracts without a defined working schedule. The fix skips a calculation that caused the error when a working schedule wasn't present, ensuring the Time Off overview can be accessed without interruption.
Original PR description
Currently, an error occurs when a contract has no working schedule set and the user tries to open the Time Off overview in the Gantt view. **Steps to Reproduce:** 1. Install `hr_holidays_contract_gantt` with demo data. 2. Open the **Marc Demo** employee and remove the **Working Schedule** from the contract. 3. Navigate to: Time off > Overview **Error:** `AttributeError - 'bool' object has no attribute 'upper'` **Cause:** The error occurs because at [1], the contract does not have a `resource_calendar_id` (working schedule) assigned. As a result, it attempts to access attributes of a False value, causing the error. **Fix:** This commit skips the computation when the contract does not have a working schedule set. [1] - https://github.com/odoo/enterprise/blob/e60429fce3875a282172cd81d18322d472d7fee4/hr_holidays_contract_gantt/models/hr_leave.py#L52 sentry-7017326141 Forward-Port-Of: odoo/enterprise#99262
This update resolves an issue where scanning invalid GS1 barcodes caused Odoo to crash with a technical error message. The fix corrects a formatting error in the error message, ensuring users receive a clear and understandable notification when a barcode is invalid, improving data entry reliability.
Original PR description
**Steps to reproduce:** 1. Install Inventory. 2. Open Inventory → Configuration 3. Barcode Nomenclature and select the default GS1 Nomenclature. 4. Open Barcode → scan the code:154105510000000244.…
**Steps to reproduce:** 1. Install Inventory. 2. Open Inventory → Configuration 3. Barcode Nomenclature and select the default GS1 Nomenclature. 4. Open Barcode → scan the code:154105510000000244. **Observation:** - Scanning a GS1 barcode with an invalid date crashes Odoo and raises a traceback. **Cause:** - The translated ValidationError message uses the wrong interpolation syntax: https://github.com/odoo/odoo/blob/e4e2dca73213c33c487033dd404a7ca335960a66/addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py#L58 and therefore fails during rendering. - Correct syntax should be: https://github.com/odoo/odoo/blob/e4e2dca73213c33c487033dd404a7ca335960a66/addons/account/models/account_move.py#L5647 **Fix:** - Fix faulty interpolation placeholder in ValidationError message to use `%(error_message)s` instead of `'%(error_message)'`, preventing the traceback and allowing the error message to display correctly. **opw-5253564** Forward-Port-Of: odoo/odoo#236858
This update resolves a technical issue that prevented users from consistently accessing the Documents app, particularly when using mobile view. The problem stemmed from a misadaptation of code during a recent port from a previous Odoo version, and has now been corrected.
Original PR description
Steps to reproduce =================== 1. Toggle mobile view. 2. Open documents app. List prop is replaced by groupByField here https://github.com/odoo/odoo/pull/189109/commits/b5e821f0383caf6126a0d3c915cb4bccc8345b2b in 18.2. Here https://github.com/odoo/enterprise/pull/90647, we missed adapting the code in the forward port. Task-5363758 Forward-Port-Of: odoo/enterprise#100713
This update fixes a technical error that occurred when users attempted to adjust partial payments made through SEPA QR payments in the Point of Sale module. The fix ensures a smoother payment process by preventing a traceback error and restricting the 'Adjust Amount' button to compatible payment methods. This improves the reliability of SEPA QR payments for business customers.
Original PR description
Steps to reproduce: ==================== - Create a SEPA QR payment method (for a BE company). - Create an order and select this payment method. - Manually change the payment amount (partial amount). - Confirm the partial payment. - Click on the "Adjust Amount" button a traceback occurs. Issue: ======= In the XML template, the JS method `sendPaymentAdjust()` was being called, but this method was not defined on the JS side, leading to a traceback when the button was clicked. Fix: ===== - Restricted visibility of the "Adjust Amount" button to payment terminal methods that support adjustment. - Added the missing JS method to handle the call and prevent traceback. Task-5241346 Forward-Port-Of: odoo/odoo#237608 Forward-Port-Of: odoo/odoo#235281
This update fixes a critical issue where purchase taxes for the Brazilian localization (l10n_br) were missing or incorrectly configured in Odoo. This ensures accurate tax calculations and compliance with Brazilian tax regulations, improving financial reporting.
Original PR description
**Issue:** Many purchase taxes for Brazilian localization were missing. Also some taxes have an incorrect tax tag. **PR (Enterprise)**: https://github.com/odoo/enterprise/pull/100340 opw-5044423 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where Brazilian vendor bills incorrectly applied sales taxes instead of purchase taxes. The change ensures that the correct tax type (e.g., COFINS) is used when calculating taxes through AvaTax, improving financial accuracy for Brazilian businesses using the Enterprise edition.
Original PR description
**Steps to reproduce:** - Install accountant, l10n_br and l10n_br_avatax - Switch to a Brazilian company - In Accounting settings, configure AvaTax (require credentials) - Create a bill - Compute taxes with AvaTax **Issue:** If a tax like "COFINS Incl." should be added, the Sales tax is added instead of the Purchases one, resulting in an incorrect account for the tax line. **Cause:** Brazilian localization allows to use AvaTax for vendor bills, but the external tax feature doesn't take into account the type of the tax when searching for one. It just returns the first one based on the name, the amount and some other domains. **Solution:** Add the tax type in the domain when searching a Brazilian tax. **PR (Community):** https://github.com/odoo/odoo/pull/236930 opw-5044423
This update ensures that all B2C invoices generated by our Saudi Arabia localization module (l10n_sa) correctly display 'Simplified Tax Invoice' as the invoice title. Previously, this requirement was only applied to phase 2 ZATCA invoices. This change aligns with regulatory requirements and improves invoice clarity for customers.
Original PR description
For B2C invoices, the invoice's title must be "Simplified Tax Invoice". This was only applied to phase 2 ZATCA in "l10n_sa_edi". This change makes sure to apply the same requirement for phase 1 invoices. Task-5322118 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#237505
This update corrects a bug where the 'Use Documents' option wasn't correctly enabled for LATAM invoices during setup. The change ensures that when LATAM fiscal localization is selected, this crucial setting is automatically applied to the relevant journals, streamlining invoice processing for Latin American clients. This resolves an issue impacting invoice accuracy and compliance.
Original PR description
### Issue: During the loading of fiscal position data for LATAMs the option "Use Documents" on Journals is not set-up. ### Steps to reproduce: - Install 'l10n_ar' - Settings > Accounting - Make sure…
### Issue: During the loading of fiscal position data for LATAMs the option "Use Documents" on Journals is not set-up. ### Steps to reproduce: - Install 'l10n_ar' - Settings > Accounting - Make sure the "Fiscal Localization" have a value (not Argentina) - Change the "Fiscal Localization" to "Argentine - Generic Chart of Accounts [...]" - Go in Accounting > Configuration > Journals - Click on "Ventas Preimpreso" - The journal don't have "Use Documents" ticked but it should ### Cause: When loading the data, `_get_chart_template_data()` calls `_get_ar_base_res_company()` and `_get_latam_document_account_journal()`. The first one returns the data to change `res.company.account_fiscal_country_id` to `base.ar`. The second one [checks](https://github.com/odoo/odoo/blob/26a5384af0af8fc6e6b5a10bea277f937e2b3481/addons/l10n_latam_invoice_document/models/account_chart_template.py#L12) that [`self.env.company.account_fiscal_country_id.code == "AR"`](https://github.com/odoo/odoo/blob/d985ec2e9b61b5e6c36a278654d526aaa5b512e2/addons/l10n_ar/models/res_company.py#L36) before returning the data to change `l10n_latam_use_documents` to `True`. As `res.company.account_fiscal_country_id` has not been updated, it's not Argentina during the check and `_get_latam_document_account_journal()` returns nothing. ### Solution: When loading the template, we cannot use `res.company.account_fiscal_country_id` to know if we are in LATAM or not. So instead we check on `chart_template`. opw-5221931 Forward-Port-Of: odoo/odoo#237725 Forward-Port-Of: odoo/odoo#236217
This update resolves an issue where related fields in Odoo were incorrectly identified as 'float' instead of 'numeric'. This fix ensures data types are consistent, preventing potential errors during upgrades and improving data integrity. The change also addresses a performance concern related to unnecessary computations during upgrades.
Original PR description
**Steps to Reproduce:** 1. create test ``Float`` field in model ``A`` with ``digits`` args 2. create ``Many2One`` field with comodel ``A`` and then create Float Field in ``B Model`` with related…
**Steps to Reproduce:** 1. create test ``Float`` field in model ``A`` with ``digits`` args 2. create ``Many2One`` field with comodel ``A`` and then create Float Field in ``B Model`` with related ``A`` model test and store True **Issue:** 1. ``column_type`` for both model table will be different. For ``test field in model A`` the ``column_type`` will be ``numeric``. But for the related field ``column_type`` ``float`` it should be ``numeric``. This happen because the @lazy_propery it hold the ``column_type`` which is ``float8`` and other related attributes from ``setup_related`` before that ``_digits`` have the null value. So, from [here](https://github.com/odoo-dev/odoo/blob/a9398502260fa57573b88fd62ca3f554e0685c7b/odoo/fields.py#L772) it remains ``float8`` it should update with ``numeric`` **Second issue comes From odoo 18.3**:= during upgrade if any new ``module`` is intalled due to dependency change and inherits the same model that is ``A``. Due to ``_auto_init`` it will recompute this related field because due to this newly [commit](https://github.com/odoo/odoo/commit/f5ce6784fce1ae27c3e92090b3723e9d4ce45808) clear the columns column becomes [``False``] and [``not column``] becomes true from ``update_db`` and same reason as above it didn't return from [here](https://github.com/odoo/odoo/commit/f5ce6784fce1ae27c3e92090b3723e9d4ce45808#diff-956d895aa67961bac940841f7c3d1e10eb8ecabec82ef017803c4a6a3bb7cd22R1074) because column type is ``float8`` which leads to memory of unecessary compute which shouldn't do in first place. **FIX:** Remove the ``column_type`` and let it get again as soon ``_digits`` attribute add. before fix:- ``` SELECT column_name, data_type FROM information_schema.columns WHERE table_name = 'account_move_line' AND column_name = 'test_line_id'; column_name | data_type --------------+------------------ test_line_id | double precision (1 row) ``` After fix:- ``` SELECT column_name, data_type FROM information_schema.columns WHERE table_name = 'account_move_line' AND column_name = 'test_line_id'; column_name | data_type --------------+----------- test_line_id | numeric (1 row) ``` opw-5222760 upg-3253635 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237544 Forward-Port-Of: odoo/odoo#235112
This update corrects a visual issue in the check printing process for US layouts. Previously, the payment date would overlap with the table below when using manual check sequencing. The fix ensures the date is displayed correctly, preventing overlapping and improving the appearance of generated checks.
Original PR description
In the Accounting app, users can print checks created to pay Vendor Bills. When using any of the US Checks Layout (from `l10n_us_check_printing`), the payment date would overlap the table beneath it…
In the Accounting app, users can print checks created to
pay Vendor Bills. When using any of the US Checks Layout (from
`l10n_us_check_printing`), the payment date would overlap
the table beneath it when the journal's manual sequencing option was
disabled.
<img width="1201" height="624" alt="image" src="https://github.com/user-attachments/assets/cd3aa46a-1952-4652-9034-e4bc2ea9a44d" />
This occured because the `.summary_line` container collapsed to a height
of 0 whenever its first child wasn't displayed, as the remaining child
elements are absolutely positioned and therefore do not contribute to
the parent's height.
https://github.com/odoo/enterprise/blob/f54585f84b0fa7a73efb3f0e14266972d510f0a6/l10n_us_check_printing/report/print_check.xml#L24-L34
By assigning a minimum height to the `.summary_line` class, we make sure
that it always occupies space above the table, even when only the date
is shown.
### Steps to reproduce:
**/!\ To reproduce the bug locally, you must have a version of wkhtmltopdf with patched qt. Use `wkhtmltopdf -V` and make sure that _"(with patched qt)"_ is specified after your wkhtmltopdf version.**
1. Install Accounting (`accountant`) and US Checks Layout (`l10n_us_check_printing`)
2. In Settings > Accounting, toggle on *Checks* if it is not, and set *Check Layout* to any "US" layout.
3. Go to Accounting > Vendors > Bills
4. Create a new Vendor Bill:
- Set any Vendor
- Set any Bill Date
- Add any Product (with a positive price, the total price of the bill must be positive)
- Confirm
5. Click *Pay*, set the *Payment Method* to *Checks* and click *Create Payment*
6. Click on the *Payments* smart button
7. Click *Print Check* > *Print* (> *Continue*)
8. In the generated PDF, the date overlaps the table beneath it.
This fix moves the date right above the table.
<img width="1189" height="634" alt="image" src="https://github.com/user-attachments/assets/8858098e-b39b-4ad2-aa65-cc0cea550343" />
opw-5165112
Forward-Port-Of: odoo/enterprise#100487This update resolves a bug where a previously unlinked call continued to appear in the Odoo softphone. The fix ensures that calls are immediately removed from the softphone interface when they are no longer linked, improving the user experience and data accuracy.
Original PR description
A call that was unlinked previously remained visible in the VOIP softphone. This fix ensures that the call is correctly removed from the softphone view as soon as it is unlinked. Task-5262162 Forward-Port-Of: odoo/enterprise#100138 Forward-Port-Of: odoo/enterprise#100036
This update fixes an issue where a header in the spreadsheet dashboard action pushed content downwards, obscuring the bottom of the spreadsheet. The change ensures the full spreadsheet view is accessible, improving usability and data visibility for users. This resolves a minor layout problem.
Original PR description
The current rule applied on the spreadsheet action assumes that the action takes the full page but if we add a header , the full action is pushed downwards, which hides the bottom of the spreadsheet. Task: 5212448
This update resolves an access error that prevented users without HR permissions from completing appraisals. The fix ensures that managers can correctly mark appraisals as done, regardless of their specific user group. This improves usability for all users involved in the appraisal process.
Original PR description
STEP TO REPRODUCE: 1- Set Marc demo as a manager on an employee 2- Be sure he doesn't have the group group_hr_user 3- Log as Marc Demo 4- Create an appraisal for this employee 5- Confirm this appraisal 6- Click on "mark as done" You will have an access error; you shouldn't have it task-5349554
This update fixes an issue where adding shifts to existing rental orders didn't correctly update the order line and total price. The fix ensures that the order line is created and updated when a shift is added to the last rental order, improving the accuracy of rental order management. This prevents discrepancies in pricing and order details.
Original PR description
**steps to reproduce:** - Configure a booking product as service and rental. - Confirm a shift to create a rental order. - Activate sync on the role. - Add a new shift with the same product using "Add to last order". - Open the rental order: the order line and total price are not updated. **issue:** The price and the order line were not updated when a new shift was added to the last order. **cause:** Previously, adding a new shift to a rental order did not add the order line on the corresponding order. becacuse we was not checking the state of the order and at line creation line will be created for confirmed order only. **fix:** A check is added when the getting the rental order it should be confirmed. task-5093190
This update resolves an error in the French payroll module (l10n_fr_payroll) caused by a change in the underlying Odoo database structure. Specifically, the module was referencing an outdated field name ('contract') instead of the correct one ('version'). This fix ensures the payroll calculation process runs smoothly.
Original PR description
Steps to reproduce: 1. Open database with version saas-18.4 2. Install module l10n_fr_hr_payroll_with_accounting 3. Make sure that your company's country is France. 4. Set `Salary Journal` in:…
Steps to reproduce: 1. Open database with version saas-18.4 2. Install module l10n_fr_hr_payroll_with_accounting 3. Make sure that your company's country is France. 4. Set `Salary Journal` in: `Configuration` -> `Structure` -> `FR: Employe Carde` -> `Employe Carde` 5. In Payroll app create a payslip for any employee having contract. 6. Make sure in `other inputs` you make new type and in that in the `availability in structure` has Employee cadre chosen. 7. Now with that Salary Input type click on `Compute sheet` button. 8. The `Invalid Operation` error card will appear. **Description:** In saas-18.4, the model hr.contract was [changed](https://github.com/odoo/upgrade/blob/fa44eb03c2b46d948e20dc6f5ac01dca2b625b90/migrations/hr/saas~18.4.1.1/pre-migrate.py#L41) to hr.version . All related code https://github.com/odoo/enterprise/commit/46052c4bc5ad1bd2549a6125202e0671b56beac8 was updated to use version instead of contract. in this commit. However, in the module l10n_fr_hr_payroll, there where some fields which is still using `contract` to refer other fields . https://github.com/odoo/enterprise/blob/e29aadef1a81c662d9a4d33879b440dbe4390c0b/l10n_fr_hr_payroll/data/l10n_fr_hr_payroll_employe_cadre_data.xml#L130 Because of this, Odoo raises the error `Wrong python code name 'contract' is not defined when evaluating the code`. I have fixed the issue by updating the name from contract to version in that module contract to version. opw: [5259362](https://www.odoo.com/odoo/project/70/tasks/5259362)
This update corrects a bug where the tax amount on invoices wasn't accurately updated after deleting and adding a line. Specifically, deleting a taxed line followed by an untaxed line would result in an incorrect tax total. The fix adjusts the system's logic to properly recompute tax amounts in these scenarios.
Original PR description
**PROBLEM** If in an invoice you delete a taxed line, and then add an untaxed line the tax amount might not be up to date. **STEP TO REPRODUCE** 1. create an invoice with 2 lines both taxed. 2.…
**PROBLEM** If in an invoice you delete a taxed line, and then add an untaxed line the tax amount might not be up to date. **STEP TO REPRODUCE** 1. create an invoice with 2 lines both taxed. 2. remove one of the line, and create a new line which is untaxed. 3. confirm the invoice and notice the tax amount is not correct (= to the tax amount with the 2 taxed lines). Be sure to not click on the "journal items" tab, else the bug will not occur. **ISSUE** In _sync_tax_lines(), there is checks to know if we should recompute the tax amount, or keep the old one. We enter the check that checks the changed lines and determine if we should recompute the tax amount. This check doesn't take into account the fact that a line could have been deleted. Because we are in a elif chain, we don't do other checks. **FIX** Moving up in the elif chain the check that test if a base line with tax was removed and recompute the tax amount if that's the case. [opw-5157090](https://www.odoo.com/odoo/project/49/tasks/5157090) Forward-Port-Of: odoo/odoo#237060
This update resolves an issue where the search function on the VoIP contacts tab wasn't correctly filtering results. The fix ensures that search terms are now accurately reflected in the contact listings, improving user efficiency and data accuracy. This enhancement ensures users can quickly find the contacts they need.
Original PR description
On recent/contacts tab, search rpc didn't take search term into account. Fix it. Task-5262162 Forward-Port-Of: odoo/enterprise#100478
This change prevents tracebacks that occurred when clicking the 'add' button on the shopfloor, specifically when a manufacturing operation had a quality check set to 'Register Consumable Material'. The issue stemmed from a missing variable in the display logic, now corrected to ensure proper functionality.
Original PR description
**Issue** In shopfloor, a traceback occurs when clicking on the add button if the associated operation has a `quality_check` of type `register_consumed_materials`. **Steps to reproduce** 1. Create…
**Issue** In shopfloor, a traceback occurs when clicking on the add button if the associated operation has a `quality_check` of type `register_consumed_materials`. **Steps to reproduce** 1. Create two products (product and component) 2. Create a BOM for this product that consumes that component 3. Create an operation linked to that BOM (Manufacturing > Configuration > Operations) 4. Add a quality check of type “Register Consumable Material” for this operation 5. Create a MO from that BOM and confirm it 6. Click on the shopfloor smart button → If debug mode is activated, a traceback occurs → Otherwise 7. Click on the 'add' button → A traceback occurs **Cause** In the method [`subRecordProps`](https://github.com/odoo/enterprise/blob/d180235b7946c7219385df263f13f780e7faea50/mrp_workorder/static/src/mrp_display/mrp_display_record.js#L190C9-L194C14), when a quality check of type `register_consumed_materials` is done, the variable `production` is not propagated into the props. And [this](https://github.com/odoo/enterprise/blob/d180235b7946c7219385df263f13f780e7faea50/mrp_workorder/static/src/mrp_display/mrp_record_line/stock_move.js#L184) tries to access the production in the props, which is [called](https://github.com/odoo/enterprise/blob/d180235b7946c7219385df263f13f780e7faea50/mrp_workorder/static/src/mrp_display/mrp_record_line/stock_move.js#L163) when the user clicks the 'add' button. **Solution** Add the `production` variable to the props. opw-5165259 Forward-Port-Of: odoo/enterprise#98808
This update resolves an issue where pasting formatted content (like bold or small tags) into existing regions caused excessive styling, resulting in "double" formatting. The change now unwraps nested identical tags to prevent this amplification of styles, ensuring consistent formatting within the editor.
Original PR description
### Description of the issue/feature this PR addresses: - When pasting formatted content (like `<strong>` or `<font>`) into a region that already had same formatting, it caused nested identical tags, leading to exaggerated styling (e.g., "double bold"). ```html <!-- User pastes <strong>text</strong> inside <strong> --> <p><strong>text []</strong></p> <!-- Resulting HTML --> <p><strong>text <strong>text</strong>[]</strong></p> ``` ### Desired behavior after PR is merged: - Prevents unwanted style amplification by unwrapping nested identical formatting tags. ```html <!-- Resulting HTML --> <p><strong>text text[]</strong></p> ``` task-5138472 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#230915
This update ensures that analytic line values are calculated using the company's currency, resolving discrepancies caused by using the journal item's currency and rounding factors. This change improves the accuracy of financial reporting and balances, particularly when dealing with multi-currency transactions.
Original PR description
Analytic line values are determined by the balance of a journal item, not their amount_currency. https://github.com/odoo/odoo/blob/8258ddf12ed6c0495628f7a480d1e2424e756540/addons/account/models/account_move_line.py#L3230-L3237 However, the journal item's currency is referenced when creating an analytic line. This can cause discrepancies when the journal item's currency has a different rounding factor (`rounding`). [Ticket link](https://www.odoo.com/odoo/unassigned-tasks/5171681) opw-5171681 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237129 Forward-Port-Of: odoo/odoo#234797
This update fixes an issue where changing the quantity of a sales order didn't correctly trigger the creation of return shipments. Previously, only the first quantity change was processed, leading to inaccurate procurement calculations. Now, the system properly accounts for multiple quantity adjustments, ensuring accurate inventory management and order fulfillment.
Original PR description
Steps to reproduce: - Enable Multi-step routes & set warehouse to 3 steps delivery - Make a SO for 5 qty of a stored product - Validate the PICK - Set the SO line qty to 3 & save - Set the SO line…
Steps to reproduce: - Enable Multi-step routes & set warehouse to 3 steps delivery - Make a SO for 5 qty of a stored product - Validate the PICK - Set the SO line qty to 3 & save - Set the SO line qty to 5 & save Issue: While the first update to 3 creates a return PICK from Packing Zone -> Stock for 2 qty, the second updates does nothing. When checking the outgoing/incoming moves to see which quantity should be set in the procurement, it only considered the outgoing quantity from the first step of the delivery. Which means that the return wasn't taken into account, so since we only compare the new SO line qty to the already moved PICK, there was no difference thus no procurement made. Now, we also consider less strict critera for incoming moves when checking in `strict == False` mode, as this is only used to compute the procurement quantity. opw-5028794 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237609 Forward-Port-Of: odoo/odoo#233796
This update corrects a calculation error in rental order quantity tracking, specifically when returns are processed within linked pickings. The previous issue resulted in incorrect inventory counts for rental products. This fix ensures accurate tracking of product quantities during rental transactions.
Original PR description
Steps to reproduce: - Enable multi-step & Rental transfers - Set warehouse to 2 steps reception/delivery - Create a rental order for a product with a qty of 5 - Process the PICK - Change the quantity in the rental order to 3 and save - Change the quantity back to 5 and save again Issue: The Rental IN picking has now a `product_uom_qty` of 1. This is due to a wrong computation of incoming/outgoing moves when there are returns (e.g. here a return PICK) in the linked pickings. opw-5028794 Forward-Port-Of: odoo/enterprise#100645 Forward-Port-Of: odoo/enterprise#98473
This update fixes an issue where updating the quantity to consume for a component would incorrectly mark a stock move as 'picked,' preventing further reservations. The change prevents moves from being marked as picked when the consumed quantity is zero, ensuring accurate inventory tracking and order fulfillment. This resolves a potential conflict in the manufacturing process.
Original PR description
Steps to reproduce the issue:
- Create a storable product “P1” with the following BoM:
- Component: - 1 unit of C1
- Update the quantity on hand of C1 to 10 units
- Create a manufacturing order to produce one unit of P1
- Confirm the order → The quantity of C1 is reserved, and the produced quantity of P1 is 0 (expected behavior)
- Update the component's quantity to consume (C1) to 2
- The consumed quantity is set to 0 and the move marked as picked
- Try to reserve the quantities again
Problem:
Since the move is picked, the
new quantity cannot be reserved.
Solution:
Prevent the move from being marked as picked when the consumed quantity is zero.
opw-5152592
Forward-Port-Of: odoo/odoo#231875This update fixes an issue where point-of-sale bookings only saved one table selection, even when multiple tables were chosen. The change allows users to select and save multiple tables simultaneously, providing greater flexibility in booking restaurant resources. This improves the user experience and ensures accurate booking management.
Original PR description
Currently, when creating a booking from inside a point of sale, if you select multiple tables, only one will be saved. Steps to reproduce: ------------------- * Open the restaurant * Open booking tab…
Currently, when creating a booking from inside a point of sale, if you select multiple tables, only one will be saved. Steps to reproduce: ------------------- * Open the restaurant * Open booking tab * Create a new booking for 3 people * Select 2 tables of 2 capacity * Save > Observation: Only one table resource is saved Why the fix: ------------ By having the context key `default_resource_total_capacity_reserved` we would recompute the resources for the booking. It was recomputed in a way that we just une the minimum resources needed in regards of the resource capacity. For example if we had 3 tables of 2 and we are booking for 3, we wouldn't need the 3rd extra table. In our case the capacity was always set to 2, as the point of sale form actually uses the field `waiting list capacity`. Since most table are usually for at leat 2 people only 1 would be needed. Removing `default_resource_total_capacity_reserved` from the context gives more freedom upon reservation and does not compute resources, it uses those selected on the form. opw-5109501 Community: https://github.com/odoo/odoo/pull/230920 Forward-Port-Of: odoo/enterprise#96811
This update resolves a technical issue in the l10n_ae_reports module that prevented accurate tax calculations for returns outside of the United Arab Emirates. Adding a necessary call to the parent function ensures the correct logic is executed, improving the reliability of financial reporting.
Original PR description
We have an override of `_evaluate_amount_to_pay_from_tax_closing_accounts` in l10n_ae_reports, but it should only be executed when the country_code of the return is 'AE'. This commit add a super in case it's not 'AE' runbot-234445
A bug was causing the Original Bills report to generate an empty PDF within the web_studio interface. This was due to a complex report generation process that studio couldn't handle. To resolve this, the report has been blacklisted, ensuring users receive the correct report output.
Original PR description
Steps to reproduce ================== - Install account_accountant,web_studio - Go to Invoices - Open studio - Click on "Reports" - Select the "Original Bills" report => The report is empty Cause of the issue ================== The Original Bills is a very specific report. Multiple streams are created and then combined to make the final PDF See: odoo/odoo#85150 Solution ======== Since studio cannot handle this usecase, we blacklist this report opw-5108198 Forward-Port-Of: odoo/enterprise#100769 Forward-Port-Of: odoo/enterprise#100729
This update corrects a reporting issue where employee leave days were incorrectly included in project hour calculations within the Timesheets > Planning Analysis report. The fix ensures that leave and holidays are properly excluded, providing more accurate planned hour projections. This improves the reliability of project time tracking.
Original PR description
**Description** The Timesheet/Planning Analysis report (Timesheets > Planning Analysis) incorrectly calculates planned hours by not excluding employee time-off and public holidays. This results in…
**Description** The Timesheet/Planning Analysis report (Timesheets > Planning Analysis) incorrectly calculates planned hours by not excluding employee time-off and public holidays. This results in leave days being assigned the average daily hours from planning slots and incorrectly attributed to projects. **Steps to Reproduce** 1. Create a planning slot for an employee spanning a full month 2. Add employee time-off (resource.calendar.leaves) during that period 4. Navigate to Timesheets > Timesheets / Planning Analysis report 5. Filter by the employee and date range 6. Observe: Planned hours include leave days, incorrectly attributed to the planning slot's project **Root Cause** The SQL query filters by day of week (weekends) but never queries `resource_calendar_leaves`. While `working_days_count` correctly excludes leaves, the report still generates rows for those leave days and assigns them average hours per day, causing the discrepancy. **Solution** Filter out dates that have employee time-off or public holidays by joining to `resource_calendar_leaves` and excluding matching dates. opw-5027070 Forward-Port-Of: odoo/enterprise#100516 Forward-Port-Of: odoo/enterprise#97657
This update fixes a bug that prevented users from editing statement lines when currency exchange differences were involved. Previously, attempting to mark an invoice as fully paid would trigger an error. Now, the system correctly handles exchange differences during edits, allowing users to modify statement lines without encountering reconciliation issues.
Original PR description
When you create a statement line with one currency rate, and you reconcile it with a move with a different currency rate, this creates an exchange move. But when you want to edit the statement line amount, like marking the invoice as fully paid, this raise a UserError, as the Exchange move is reverted and reconciled, which means it throw an error like "You are trying to reconcile some entries that are already reconciled." This commit, fix this behaviour, by excluding the exchange moves from the check process. Linked:https://github.com/odoo/odoo/pull/237367 [opw-5184679](https://www.odoo.com/odoo/my-support-tasks/5184679) Forward-Port-Of: odoo/enterprise#100493
This update adds a test to verify that accounts marked as 'archived' (deprecated) still appear in the General Ledger report. This ensures accurate reporting, even after a recent system update. The test serves as a safeguard against future changes that might inadvertently hide these accounts.
Original PR description
Add test to ensure deprecated (archived) accounts with transactions continue to appear in the General Ledger report. The original bug where deprecated accounts were missing no longer exists in the current codebase due to the custom engine refactoring. However, this test serves as a regression safeguard for future changes. Note: The `active_test=False` fix is not needed in forward ports, as the new SQL-based architecture handles inactive accounts correctly by default. opw-5092275 Forward-Port-Of: odoo/enterprise#98387
This update corrects a bug where pressing arrow keys while the table picker was open caused incorrect navigation within tables. Now, arrow keys only control the table picker itself, preventing unintended cell movement. This improves the user experience when working with tables in the HTML editor.
Original PR description
Description of the issue this PR addresses: Current behavior before PR: When the table picker was open inside a table, pressing the up/down arrow keys incorrectly moved the selection to the cell above or below. Desired behavior after PR is merged: While the table picker is open, arrow up/down no longer navigate between table cells. task-5349547 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where Odoo server errors occurred when uploading vendor bills from UBL XML files with missing order references and empty item descriptions. The fix prevents a type error that arose during the XML processing, now allowing users to successfully upload bills even with blank descriptions. This ensures smoother bill import functionality.
Original PR description
Vendor bills import from UBL XML fails whenever the `<cac:OrderReference>`/`<cbc:ID>` is missing **and** all the `<cac:Item>`/`<cbc:Description>` have no text. The `invoice_origin` field computation results in the second condition `' '.join([None])` traceback-ing. https://github.com/odoo/odoo/blob/2217d5220640531828eb5b2ae7a9d41ba9c97e78/addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py#L1166-L1170 Steps to reproduce: 1. Install the Accounting `accountant` app. 2. Go to Accounting > Vendors > Bills. 3. Click *Upload*. 4. Upload the test XML file `addons/account_edi_ubl_cii/tests/test_files/bis3/test_vendor_bill_empty_description.xml` 5. An *Odoo Server Error* appears. Ticket [link](https://www.odoo.com/odoo/project.task/5269474) opw-5269474
This update ensures that Point of Sale orders in Mexico correctly utilize the customer's CFDI usage setting, rather than defaulting to 'G03'. This fix addresses a previous issue where CFDI usage wasn't being properly applied, ensuring compliance with Mexican tax regulations for PoS transactions.
Original PR description
When making an order in the PoS in Mexico, if the customer has a CFDI usage set on their partner, it should be used for the order instead of the default one. Steps to reproduce: ------------------- * Install l10n_mx_edi_pos * Create a partner with a CFDI usage different than 'G03' * Open the PoS, select the partner and make an order * Validate the order and check the order in the backend > Observation: The CFDI usage is 'G03' instead of the one set on the partner. opw-5018288 Forward-Port-Of: odoo/enterprise#98607
This update resolves an issue where PDF merging failed due to malformed PDF files. The fix prevents a technical error from displaying, providing a more user-friendly experience when attempting to download merged bills. This ensures reliable bill generation and reduces potential disruptions for users.
Original PR description
Currently some PDFs cause error in PyPDF (Version 1 and 2) and cannot be merged. Steps to reproduce: - Create 2+ Bills with specific PDF (example found in ticket) - From Bills list view, select both and click Download > Original bills Issue: Traceback will raise `PyPDF2.errors.PdfReadError: Can't read object stream: Stream has ended unexpectedly` Thsi occurs because the version of PyPDF currently in use (2.12.1) cannot recover when working an odd PDF file having wrong length markers. This commit will add a nice error explaining to user what's going on. opw-5142961 Forward-Port-Of: odoo/odoo#234587
This update clarifies the labels associated with document access rights within the Odoo Enterprise system. Previously, labels were unclear, now they provide helpful guidance to users regarding the groups controlling access to documents. This ensures better understanding and management of document permissions.
Original PR description
This commit fix the label of documents access rights which now shows a helper for each documents res.groups. Task-5186096 Forward-Port-Of: odoo/enterprise#100792 Forward-Port-Of: odoo/enterprise#98890
This update resolves a problem where image resizing within Odoo's Studio reports didn't correctly translate to the generated PDF. The fix disables the percentage-based resizing option, which `wkhtmltopdf` (the PDF generation tool) cannot handle. This ensures consistent image display in reports.
Original PR description
Problem: When resizing an image in Studio within any report, the change is not reflected in the generated PDF. This happens because `wkhtmltopdf` does not support percentage-based `width` / `height` values, which are used by the resize tool (e.g., `width: 25%`). Solution: Disable the image resize option in Studio when editing reports, since the resulting `%` sizing cannot be rendered correctly in PDFs. Steps to reproduce: 1. Open Studio → Reports → open any report. 2. Add an image. 3. Resize it to 25%. 4. Save and print the PDF. 5. The image appears at its original size in the PDF. opw-5233052 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237220 Forward-Port-Of: odoo/odoo#237088
This update resolves a bug where image resizing within Odoo Studio reports didn't correctly translate to the generated PDFs. The issue stemmed from `wkhtmltopdf`'s inability to handle percentage-based image sizes. To ensure accurate PDF output, the image resize functionality has been disabled in Studio.
Original PR description
Problem: When resizing an image in Studio within any report, the change is not reflected in the generated PDF. This happens because `wkhtmltopdf` does not support percentage-based `width` / `height` values, which are used by the resize tool (e.g., `width: 25%`). Solution: Disable the image resize option in Studio when editing reports, since the resulting `%` sizing cannot be rendered correctly in PDFs. Steps to reproduce: 1. Open Studio → Reports → open any report. 2. Add an image. 3. Resize it to 25%. 4. Save and print the PDF. 5. The image appears at its original size in the PDF. opw-5233052 Forward-Port-Of: odoo/enterprise#100378 Forward-Port-Of: odoo/enterprise#100301
This update fixes a bug that prevented users from reconciling bank statements when using the 'Set Account' feature. The issue stemmed from the system not properly handling deleted reconciliation models, leading to errors. The fix ensures that reconciliation models are named uniquely, preventing conflicts and ensuring successful reconciliation processes.
Original PR description
It may occur that when using 'Set Account' to reconcile a bank statement the reconciliation fail due to error "The operation cannot be completed: A reconciliation model already bears this name" Steps…
It may occur that when using 'Set Account' to reconcile a bank statement the reconciliation fail due to error "The operation cannot be completed: A reconciliation model already bears this name" Steps to reproduce: 1. Create a current liability, reconciliable account "455010 My Account" 2. Create 2+ with a common labels (TEST RECONCILIATION) 3. Use "Set Account" button to reconcile the first transaction with account 455010. 4. Repeat 2-3 with a shorter label 5. Open Reconciliation models for the Journal and delete the one named "455010 My Account" 6. Repeat 2-3 with an even shorted label Issue: Reconciliation will be blocked by error during automatic creation of reconciliation model Analysis: It occurs because we don't take into account that old reconciliation models may have been deleted, so even if we count a singe record it may have already been labeled "<account_name> (1)" Improved the naming by looking at the existing models and increasing the counter if necessary opw-5184696 Forward-Port-Of: odoo/enterprise#98785