Thursday, October 9, 2025
7 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
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
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