Daily updates from Odoo
Thursday, October 9, 2025
12 changes · 18.0
Resolved issues and error corrections
Stripe payments now use the right amount conversion for currencies like the Ugandan shilling that Stripe treats differently from standard currency rules. This prevents valid customer payments from being rejected or sent with the wrong value.
Original PR description
Steps: - Activate the 'UGX' currency. - Make a sale order with amount 100 with 'UGX' currency - Try to pay that order (100 USh) using card Issue: - stripe throws the following error - > 'The Checkout Session's total amount must convert to at least 50 cents. 1.00 USh converts to approximately €0.00.' - Hence 100 USh sent was identified as 1 USh by stripe. This confirms issue with decimals and currency mapping. Cause: - 'UGX' is zero-decimal currency but stripe identify it as two-decimal. Fix: - Update mapping for such special currency cases for stripe that don't follow general rules opw-5075707 Forward-Port-Of: odoo/odoo#227688
The Indian payroll demo leave records were adjusted so they no longer block system upgrades. This prevents upgrade errors caused by demo leave entries that had already been validated, with no impact on real employee leave data.
Original PR description
Issue: - Validation Error: 'This modification is not allowed in the current state.' When trying to update validated leave records during upgrade. Reason: - In Indian leave records, some demo leave entries were in the `validate` state. - During the upgrade, changes in the leave type triggered updates to these records that were already validated. - Trying to update validated records caused constraint errors due to the validation state. Fix: - Removed the leave validation for these demo records as it was not necessary. - The records stay in the `confirm` state during upgrade, preventing validation errors and allowing the upgrade to proceed without impacting demo data. build_error-231279
This fix updates the sales timesheet invoice wizard so its settings are easier for custom tools to read correctly. It reduces the risk of errors for businesses using customizations that process Odoo screens outside the standard browser flow.
Original PR description
Versions -------- - 17.0+ Issue ----- Some customizations may parse XML views using Python, in which case the `date_start_invoice_timesheet` field could return an error, as the `options` attribute uses a Javascript boolean `true`. Solution -------- Use `'true'`, which will get parsed as `true` in JS via `archParseBoolean`. Forward-Port-Of: odoo/odoo#230278
This fixes an issue where cash basis journal entries could appear without their journal item number after posting an invoice. The change ensures the correct information is saved during numbering, improving accounting list accuracy and reducing confusion during review.
Original PR description
The name field of `account.move` became protected, which prevents the correct computation of the `move_name` field on `account.move.line`. As a result, move_name is not set for cash basis (CABA) journal items. The problem stems from flushing of whole recordset in the `_locked_increment` of sequence_mixin. This **PR** modifies the flush and allows only required fields to be flushed. Steps to reproduce (Runbot, v18): 1. Post an invoice that creates a CABA entry 2. Open the journal items list view 3. Number (move_name) is empty for the CABA-related lines **opw**-4747878
This fix ensures cash basis journal item lines show the correct journal entry name instead of a placeholder slash. It improves accounting list views by keeping related entry names in sync after sequence numbers are assigned.
Original PR description
Backport of #225558 to 18.0. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Fixed an issue where scanning two GS1 barcodes with the same serial number for different products caused an error and prevented the second item from being added. Inventory counts now correctly distinguish serial numbers by product, reducing scan interruptions and missing count lines.
Original PR description
**PROBLEM** When scanning two gs1 barcode with the same serial number, but for different products there is an error and the 2nd product is not added to the inventory count. **STEP TO REPRODUCE** 1.…
**PROBLEM** When scanning two gs1 barcode with the same serial number, but for different products there is an error and the 2nd product is not added to the inventory count. **STEP TO REPRODUCE** 1. install stock_barcode 2. activate the gs1 barcode and select the default gs1 nomenclature. 3. scan the following barcode - 01000000000001232180085 (product barcode: 0000000000123, serial: 80085). - 01000000000000482180085 (product barcode: 0000000000048, serial: 80085). 4. there is an unexpected error notification, and the 2nd product line isn't added. **CAUSE** In _processBarcode (barcode_model.py), we only check if: - there is already a line with serial tracking with a non-null qty - this line serial number is the same serial number that we are scanning **FIX** We should also verify if the product from the lines we are checking, and the line we want to create are the same. [opw-5076045](https://www.odoo.com/odoo/project/49/tasks/5076045) Forward-Port-Of: odoo/enterprise#96430
This fixes an issue where appointments could fail when booking with staff members who have flexible working hours. Businesses can now use appointment types limited to work hours without blocking valid bookings for flexible-schedule employees.
Original PR description
In the community branch, resource.calendar has a method, _attendance_intervals_batch, that can cause a bug if someone attempts to book an appointment with a staff member that has a flexible schedule. But it is used for many things besides booking appointments, and it works correctly for those other things. So, conditional logic was introduced there with a block you should only enter into if an appointment is currently being booked. To facilitate that, a flag signaling that an appointment is being booked, booking_apt=True, gets passed down through many of the methods that get called in the process of booking an appointment. Solves ticket 5094795
Appointments can now be booked correctly for resources using flexible working hours. The fix prevents valid booking slots from being wrongly rejected, avoiding unexpected 404 errors during online scheduling.
Original PR description
Steps to reproduce: 1. Create a resource with a "Working Time" calendar set with flexible hours 2. Create an appointment with this resource 3. Go to the website and try to book an appointment with…
Steps to reproduce: 1. Create a resource with a "Working Time" calendar set with flexible hours 2. Create an appointment with this resource 3. Go to the website and try to book an appointment with this resource 4. Error 404 not found. When booking appointments with resources that have flexible calendars, the system returns a 404 error during slot validation. The issue occurs in `_check_appointment_is_valid_slot` (appointment controller) which validates that a slot is still available before allowing booking. This validation calls `_unavailable_intervals_batch` (resource.calendar) to check resource availability. For flexible resources, `_unavailable_intervals_batch` generates inverted time intervals (e.g., start=18:30, end=18:00) which causes the overlap check to fail incorrectly, making valid slots appear unavailable. This regression was introduced when the distinction between "fully flexible" (no calendar) and "flexible" (calendar with flexible_hours=True) was added. The check was only applied for fully flexible resources, leaving regular flexible resources broken. Solution: Skip unavailable interval computation for both `_is_fully_flexible()` and `_is_flexible()` resources, since flexible resources by definition have no fixed unavailable periods. opw-5026825 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Adds a regression test to help ensure appointments can still be booked when resources use flexible working calendars. This reduces the risk of future changes breaking flexible resource scheduling and protects appointment booking reliability.
Original PR description
Adds regression test to ensure appointments can be booked with resources that have flexible calendars (flexible_hours=True). The test verifies that _check_appointment_is_valid_slot correctly validates slots for flexible resources, which was previously failing due to inverted unavailable intervals being generated in the resource module. This test validates the fix applied in odoo/odoo#229777 Related: odoo/odoo#229777
This fixes an issue where custom hour or half-day options could be unexpectedly cleared when users changed the time off type. Employees and HR teams can now switch between compatible time off types without losing their selected leave duration settings.
Original PR description
- made the value of checkboxes for `request_unit_half` and `request_unit_hours` stay the same when switching between timeoffs that can have hourly type task-id: 5085389 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#228981
Point of Sale now correctly applies quantity-based pricelist rules when the same lot-tracked product is split across multiple lots. This prevents customers from missing eligible discounts simply because inventory was selected from different lots.
Original PR description
**PROBLEM** Pricelist rules based on a minimum quantity does not work well with lot tracked product, when the quantity is splitted between multiples lots. For example, if you take 2 product from lot…
**PROBLEM** Pricelist rules based on a minimum quantity does not work well with lot tracked product, when the quantity is splitted between multiples lots. For example, if you take 2 product from lot A, and 3 product from lot B, a rule defining the price for a minimum quantity of 5 will not trigger (it should). **STEP TO REPRODUCE** 1. install pos 2. create a lot tracked product 3. create a pricelist rule for the product, with a price based on min qty 4. from the pos, order the min qty but split it accross multiple lots 5. price will not takethe rule into account **CAUSE** Order line of lot tracked products are never merged. The quantity used to compute if a pricelist trigger is the quantity of each line individually. **FIX** For lot tracked product, to determine the price of a line, we parse find all corresponding lines and add their quantities together. Then we update all of their prices. To know if we should take into account a line, we verify if they would have been merged, if their product wasn't lot tracked. **REMARK** Ideally, their would be a way to merged order line of lot tracked product, while being able to edit the quantity taken from each lot directly from the pos. From now, order line doesn't work well with multiple lots, and it would require unstable change on the db. opw-4751920 Forward-Port-Of: odoo/odoo#219110
This fixes a timing issue that could make an automated barcode workflow test fail unpredictably. The change helps ensure validation waits for the right screen state, improving test reliability without changing business functionality.
Original PR description
Sometime, the test `test_scrap_change_source_location` could fail randomly. The issue happens in last few steps of the tour. What we do is: - We edit a move line lot in the form view; - We save it; -…
Sometime, the test `test_scrap_change_source_location` could fail randomly. The issue happens in last few steps of the tour. What we do is: - We edit a move line lot in the form view; - We save it; - We validate the operation. The validation is done by a barcode scan (`OBTVALI`) but since [1](https://github.com/odoo-dev/enterprise/commit/b3a855a870d1861515abaff8683081a39f95558f), barcodes scanned when the user is somewhere else than in the barcode lines view are skipped. With a little bit of bad luck, the tour scans `OBTVALI` while the save from the form view is not finished yet and thus, the scanned barcode is ignored. To reproduce that, run the test `test_scrap_change_source_location` locally in debug mode and add a throttling (eg.: Fast 4G) before to run the tour. To solve the issue, finetune the `validateBarcodeOperation` default trigger, so the error won't happen in this tour and other similar contexts. Runbot build error: [232331](https://runbot.odoo.com/odoo/runbot.build.error/232331)