Friday, March 6, 2026
24 changes · saas-19.2
New functionality added to Odoo
This update adds optional fields to Peppol invoices, resolving a previous issue where users couldn't send fully compliant invoices. Now, users can utilize a studio tool to include necessary optional attributes, ensuring adherence to Peppol standards and facilitating smoother invoice processing. This improves integration with Peppol partners.
Original PR description
Currently, several specific UBL fields are lacking from our Peppol integration, resulting in users not being able to send compliant invoices Using studio, they can now add the optional fields that are allowed by us and their optional attributes TODO: Add Test case task-4963157 Forward-Port-Of: odoo/odoo#252080 Forward-Port-Of: odoo/odoo#245242
Enhancements to existing features
This update improves the poll experience by displaying the poll's end time when you hover over the 'Remaining Time' text. This allows users to set reminders and proactively manage participation, ensuring timely responses and maximizing engagement.
Original PR description
This commit adds showing of datetime when the poll will end when mouse-hovering on the Remaining time text of the poll. This is useful to put a reminder for later just before the poll ends, let's say to see if involvement is fine or we need to push pressure for people to vote. <img width="555" height="255" alt="Screenshot 2026-03-04 at 12 55 44" src="https://github.com/user-attachments/assets/19ef91a1-ea52-475a-86e1-acc16e18fe98" /> Forward-Port-Of: odoo/odoo#252044
Resolved issues and error corrections
This update corrects a problem with how leave periods are calculated, specifically addressing potential inconsistencies caused by differences in time zones. By using a new date field, the system now accurately reflects leave periods regardless of where the employee is located, ensuring correct payroll processing.
Original PR description
This commit fixes the leaves work interruption constraint by replacing `date_from` and `date_to` with `request_date_from` and `request_date_to`, thereby resolving any inconsistencies that may arise from time zone differences. task-5966780 Forward-Port-Of: odoo/enterprise#109421 Forward-Port-Of: odoo/enterprise#108541
This update enhances logging for transactions processed by the Codabox integration (_l10n_be_codabox). These improved logs will assist the support team in quickly identifying and resolving any issues related to this process, leading to faster problem resolution and improved service reliability.
Original PR description
This commit will improve the logs of _l10n_be_codabox_fetch_coda_transactions to help the support team to debug possible problem. task-5436868 Forward-Port-Of: odoo/enterprise#109534 Forward-Port-Of: odoo/enterprise#107779
This update addresses changes required for the new 2026 Spanish tax format. Specifically, a new field for petrol information has been added, and the layout of certain Casillas (sections) has been adjusted to align with the updated reporting requirements. This ensures compliance with Spanish tax regulations.
Original PR description
Forward-Port-Of: odoo/enterprise#109260
This update optimizes accounting reports by using more efficient data structures. Specifically, accounting reports now automatically convert data to JSON, reducing the amount of data transmitted and improving report loading times. This results in a faster and more responsive user experience.
Original PR description
To reduce the memory footprint of accounting reports, we now use different data structures for lines, columns, etc. These structures are sent to the web client and therefore need to be JSON-serializable. This change allows dataclasses to be returned directly; they are now automatically converted to dictionaries. task-5404869
This update optimizes the performance of key financial reports, particularly those handling large datasets, by reducing memory usage and improving data processing. The team removed unused code and refactored report generation to enhance stability and speed, addressing a critical issue impacting report generation times.
This update simplifies the meeting chat by removing irrelevant actions and consolidating member management. The chat title now clearly indicates it's for in-call conversations, improving clarity and focus during meetings. This change streamlines workflows and enhances usability.
Original PR description
**Description of the issue/feature this PR addresses:** ---------------------------------------------- The meeting chat UI exposed a generic three-dot (more actions) menu that grouped actions which…
**Description of the issue/feature this PR addresses:** ---------------------------------------------- The meeting chat UI exposed a generic three-dot (more actions) menu that grouped actions which are not relevant in the context of short-term, in-call conversations. At the same time, member management and invitation actions were split across different entry points, and pinned messages were only accessible through a separate panel, reducing their visibility during a call. Additionally, the chat panel title did not clearly reflect that the conversation was happening in the context of an ongoing meeting. **Current behavior before PR:** ---------------------------------------------- - The meeting chat displayed a three-dot (more actions) menu with actions that are not relevant during in-call conversations - Member listing and invitation actions were exposed through a dedicated Invite button, separate from the members view - Pinned messages were accessible via a separate panel instead of being visible directly in the chat message flow - The chat panel title was displayed as “Chat”, regardless of the in-call context **Desired behavior after PR is merged:** ---------------------------------------------- - The three-dot (more actions) menu is removed from the meeting chat, simplifying available actions and reducing visual noise during calls - The Invite button is replaced by a unified Members button, allowing users to view current members and invite new participants from the same interface - Pinned messages are integrated directly into the chat message flow, making them immediately visible alongside regular messages during a meeting - The chat panel title is updated from “Chat” to “In-Call Messages” to better reflect its purpose in the meeting context Together, these changes streamline the meeting chat experience, focus the UI on actions relevant during a call, and improve visibility of both pinned messages and participant management. Task-5382645 ---------------------------------------------- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The loyalty program's redemption popup now correctly displays the program name instead of a generic 'Gift Card' message. This change also uses the appropriate currency symbol for points, providing a clearer and more accurate representation of the customer's reward. This enhances the user experience and ensures consistent messaging across all loyalty programs.
Original PR description
Currently, the popup message shown when redeeming a code is the same for all programs but is always displayed as if it was a giftcard. Steps to reproduce: ------------------- * Create a program of type coupon, points unit: Coupon points, currency: USD * Create x coupons with 5 points * Copy a coupon code * Open shop * Enter code > Popup message says: Gift card: *code*, Balance: $ 5.00 Why the fix: ------------ Since this popup is used for multiple program we try to make it as generic as possible. Now we'll use the prgram name instead of the generic "Gift Card" string. Instead of formatting the points with the currency we can use `points_display` as it reflects the currency symbol or point unit name accordingly. <img width="416" height="82" alt="image" src="https://github.com/user-attachments/assets/a4c3c1ef-e02f-4618-809f-4bff5d99c948" /> opw-5220834 Forward-Port-Of: odoo/odoo#249312
This update resolves an issue where rapidly clicking the 'Back' button during barcode internal transfer creation resulted in duplicated quantities being added to the transfer. The fix prevents multiple 'save' calls, ensuring accurate quantity tracking.
Original PR description
**Steps to reproduce:** * Install `stock` module. * Go to the > Settings*, enable *Packages* and *Storage Locations*(warehouse). * Create a storable product and set *Tracking Inventory* to **By…
**Steps to reproduce:** * Install `stock` module. * Go to the > Settings*, enable *Packages* and *Storage Locations*(warehouse). * Create a storable product and set *Tracking Inventory* to **By Quantity** and set some *barcode* * Update the on-hand quantity for the product and assign it to one packages. * Open *Barcode > Operations > Internal Transfer* and create a new transfer. * Click the *gear icon* in the top-right corner to open the barcode scanning flow. * manually enter the created product barcode and apply it. * Click the **Back** button multiple times in quick succession. * Go to the backend and open the created internal transfer. **Observed behavior:** * The internal transfer is created with *double quantities* compared to what was added in the barcode interface. **Cause:** * When clicking the *Back* button, the following flow is triggered: `exit()` → `beforeQuit()` → `save()`. https://github.com/odoo/enterprise/blob/07ede9bda567d94da27da79b945e2189fa5aca6e/stock_barcode/static/src/components/main.js#L406-L414 https://github.com/odoo/enterprise/blob/07ede9bda567d94da27da79b945e2189fa5aca6e/stock_barcode/static/src/models/barcode_model.js#L473-L475 https://github.com/odoo/enterprise/blob/07ede9bda567d94da27da79b945e2189fa5aca6e/stock_barcode/static/src/models/barcode_picking_model.js#L828-L832 https://github.com/odoo/enterprise/blob/07ede9bda567d94da27da79b945e2189fa5aca6e/stock_barcode/static/src/models/barcode_model.js#L477-L483 * If the button is clicked multiple times rapidly, `exit()` is called again before the previous `save()` RPC completes. * This results in multiple `save()` calls being executed, causing duplicated quantities on the picking. reference - https://github.com/odoo/enterprise/pull/103999/changes/b791239c154deb6a25f85d65ebc72e3ac53b6c74 **Fix:** * Prevent rapidly clicking the Back button multiple times does not multiply quantities. --- opw-5375899 Forward-Port-Of: odoo/enterprise#109013 Forward-Port-Of: odoo/enterprise#103130
This update corrects a rounding issue that caused incorrect pricing when ordering combos with multiple identical items in Point of Sale. The fix involves adjusting how line prices are calculated to ensure accurate totals, resolving a discrepancy between the displayed price and the backend calculation. This ensures consistent pricing for combo orders.
Original PR description
**Steps to reproduce:** - Create a combo, set the free and max to 3 - Create the product combo and set it's price to 50 - Go to PoS, order said combo and chose the same product 3 times - The price is…
**Steps to reproduce:** - Create a combo, set the free and max to 3 - Create the product combo and set it's price to 50 - Go to PoS, order said combo and chose the same product 3 times - The price is 49.98 instead of 50 **Problem:** When ordering a combo and taking the same product multiple times, the method to adjust the price does not work as it should. In this case, the method would subtract too much from the total, leading it to be only 49.98 instead of 50. **Why the fix:** This happens because when ordering a combo, each line will get it's price_unit from the combo's price divided by the number of lines. In the case where we have 3 different products, hence 3 different lines, the first two would have a unit_price of 16.67 and the last line will be adjusted as to make it equal to the combo's price, so the last line would be 16.66, making the sum 50. But in the case where there is only one line, the last line is still adjusted, making all the lines 16.66, introducing this error. The solution would be to take the line's qty into account when computing how much we should subtract. Unfortunalty, doing so will, in some cases, introduce a rounding error. If the new unit_price does not round up well (like in this case where it is 16.666668 before rounding and 16.67 after), the rounding will cause a difference between what's shown in the frontend and what's written on the lines in the backend, as the lines are rounded up again before being saved to the backend. The introduced solution is to split the lines, and each have a quantity of 1. With this solution, we can have a different price_unit for each line, which resolves our problem, as the first two lines will have 16.67 and the last one will have 16.66 as price_unit. This is how it was done up until version 18.0, showing every line with a quantity of 1 instead of grouping them. As the grouped lines are now single, some rounding with taxes might differ from what it was before, which is why a test was altered. opw-4931215 Forward-Port-Of: odoo/odoo#247995 Forward-Port-Of: odoo/odoo#221189
This update fixes a bug that caused duplicate Dimona activities to be created when updating employee versions or running automated payroll processes. The change ensures that only one Dimona activity is generated per employee, streamlining payroll calculations and preventing data inconsistencies. This improves the accuracy and reliability of payroll reporting.
Original PR description
This pr restores the previous behaviour of the dimona and part-time activities creation when the cron is ran or when a version or employee is updated. The original bug was: create an instance on…
This pr restores the previous behaviour of the dimona and part-time activities creation when the cron is ran or when a version or employee is updated. The original bug was: create an instance on saas-18.4 with l10n_be_hr_payroll settings > company > my company > update infos > country: Belgium employee > new > payroll > contract > start_date: any date (this should create a first dimona activity) settings > technical > automation > scheduled actions > "HR Employee: Update Current Version" > run manually `_trigger_l10n_be_next_activities` in `hr.version` of `l10n_be_hr_payroll` is duplicating Dimona activities on records that already have one. We check if a dimona activity already exists for a given `hr.employee` before creating the new activity. Same is done for dimona declaration of part times. The activity now redirects to the employee form (instead of the version form) and appears in it. [tasks-5134380](https://www.odoo.com/odoo/project/1251/tasks/5134380) Forward-Port-Of: odoo/enterprise#109605 Forward-Port-Of: odoo/enterprise#96423
This update fixes an issue where emails weren't automatically sent to candidates when they were refused through the recruitment process. The fix ensures that a rejection notification is properly delivered to the applicant's email address, improving candidate communication and transparency. This resolves a reported bug impacting the recruitment workflow.
Original PR description
## Short functional explanation of the error When a candidate is refused, an email isn't sent to their email address. ## Reproduction Steps 1. Open Mailhog in a separate tab. 2. Go to the Recruitment…
## Short functional explanation of the error When a candidate is refused, an email isn't sent to their email address. ## Reproduction Steps 1. Open Mailhog in a separate tab. 2. Go to the Recruitment app and select any job position. 3. Click on new to create a new application. Enter an applicant name and an applicant email. 4. Check Mailhog: a job application has been sent to the applicant. 5. Go back on the Recruitment app and click on Refuse. In the wizard, make sure you toggle Send Email and click on Refuse. ### Expected behavior In Mailhog, a refusal mail has been sent to the applicant. ### Unexpected behavior Nothing is sent. ## Origin of the issue When refusing a candidate, we create a notification in the chatter but an email isn't sent. This is due to the `incoming_email_to` field, which is checked here: https://github.com/odoo/odoo/blob/bfc1c210eca65de1116aa09cdd62749ed9192407/addons/mail/models/mail_thread.py#L4040-L4053 but because this field is already retrieved here: https://github.com/odoo/odoo/blob/bfc1c210eca65de1116aa09cdd62749ed9192407/addons/mail/models/mail_thread.py#L4025 the last condition will always be true, preventing the recipient's data to be added to the message, thus preventing the message to be sent correctly. Note: as of 19.0, the field `outgoing_email_to` can be used to determine the recipient's email address. Note: we remove `'body_is_html': True` because this field is misused in this case: when set at true, the field is always considered as HTML __ opw-5980079 Forward-Port-Of: odoo/odoo#252036
This update resolves an issue where by-products tracked with serial numbers incorrectly displayed extra lines in the shop floor manufacturing order view. The change ensures by-products only show lines that are manually added, aligning with the intended workflow. This improves the clarity and accuracy of shop floor data.
Original PR description
When the "pre fill lot/serial numbers in shopfloor" setting is enabled on the manufacturing operation type, by-products tracked by serial number were incorrectly showing extra empty lines in…
When the "pre fill lot/serial numbers in shopfloor" setting is enabled on the manufacturing operation type, by-products tracked by serial number were incorrectly showing extra empty lines in shopfloor MO cards (both in overview and work center views). Steps to reproduce: 1. Create a bill of materials for a final product 2. Add a consumable component 3. Create an operation without steps 4. Add a by-product tracked by serial number 5. Specify that the by-product is produced in the operation above 6. In Inventory > Configuration > Operations Types, open the Manufacturing operation type, go to the Traceability section and enable "Pre fill lot/serial numbers in shop floor moves" 7. Create a manufacturing order for the BOM and confirm it 8. Open the Shop Floor view from the MO 9. Observe the extra line for the by-product in both overview and work center views Root cause: The visibleMoveLines getter in stock_move.js was showing ALL move lines (including unpicked ones) when picking_type_prefill_shop_floor_lots was enabled, without distinguishing between raw materials/components and by-products. By-products should never show pre-filled lines since users must register them manually by clicking the + button. Solution: Modified the visibleMoveLines getter to always filter by-products to show only picked move lines, regardless of the prefill_shop_floor_lots setting. This ensures by-products only display lines that have been explicitly registered by the user, while regular components continue to show pre-filled lines when the setting is enabled. Task-5431295 Forward-Port-Of: odoo/enterprise#109689 Forward-Port-Of: odoo/enterprise#103260
This update corrects a discrepancy in the Romanian tax reports, reflecting the recent VAT rate changes (19% to 21% and 5%/9% to 11%). The fix ensures the reports accurately match current Romanian tax regulations, addressing missing tax lines and inactive tax settings to maintain report functionality.
Original PR description
Romanian VAT has increased from 19% to 21% and from 5%/9% to 11%, some taxes were added previously to the module but they were not reflected in the tax report, also other taxes were missing in order for the report to replicate the current up to date version issued by the romanian government. Forward-Port-Of: odoo/odoo#252126 Forward-Port-Of: odoo/odoo#241529
This update fixes a bug where modifying a Bill of Materials (BoM) after a production order was created would prevent the order from closing. The change ensures that the 'manual consumption' flag on stock moves is updated accurately when the BoM is modified, allowing MOs to be properly closed after BoM adjustments.
Original PR description
Steps to reproduce the issue: - Create a storable product P1 with the following BoM: - A component consumed in an operation. - Create a MO to produce one unit of P1 and confirm it. - Modify the BoM…
Steps to reproduce the issue:
- Create a storable product P1 with the following BoM:
- A component consumed in an operation.
- Create a MO to produce one unit of P1 and confirm it.
- Modify the BoM so that the component is no longer consumed in the operation.
- Update the BoM on the MO.
- Start and finish the operation.
Problem:
The MO cannot be closed because the component is not consumed.
The `manual_consumption` field on the stock move is set to True when the move is linked to a BoM line consumed in an operation. However, when the BoM is modified so that the component is no longer consumed in the operation, this field should be updated to False when the MO is updated from the BoM.
https://github.com/odoo/odoo/blob/1305c7262fff762c00159377a9ce1ca09d423625/addons/mrp/models/mrp_production.py#L1193
https://github.com/odoo/odoo/blob/1305c7262fff762c00159377a9ce1ca09d423625/addons/mrp/models/stock_move.py#L611-L612
opw-5993652
Forward-Port-Of: odoo/odoo#251796This update fixes an error in how the cost of goods sold (COGS) is calculated for kits. Previously, the COGS was incorrectly double-counted due to a calculation issue. This change ensures accurate COGS reporting for kit sales, preventing overstatement of costs.
Original PR description
Bug introduced by: 341928ca477843d92bf7a084f738cf9dcfd3593a Steps to reproduce: - Create a storable product “C1” - Cost: $1 - Create a storable product “P1” - Type: Kit - Category: AVCO - BoM: -…
Bug introduced by: 341928ca477843d92bf7a084f738cf9dcfd3593a
Steps to reproduce:
- Create a storable product “C1”
- Cost: $1
- Create a storable product “P1”
- Type: Kit
- Category: AVCO
- BoM:
- Component: C1 (qty: 20)
- Create a sale order for 1 unit of P1
- Confirm the SO
- Validate the delivery
- Create and post the invoice
- Check the journal items
Problem:
The total COGS posted is $400 instead of $200.
When posting the invoice, `_get_cogs_value` is triggered. It retrieves the price unit of each component based on the stock move quantity of the sale order:
https://github.com/odoo/odoo/blob/963bdc5d8a7cc7d3235a52ac2a2282d95a0da400/addons/sale_mrp/models/account_move.py#L39
However, since commit: https://github.com/odoo/odoo/commit/341928ca477843d92bf7a084f738cf9dcfd3593a#diff-bb93bc1c1d7fd07978c5081adc6dc21dc3eb4c37b5e8f44342fe34b61ee060b5R44
, `_get_price_unit` returns the total cost of the component required to produce one kit (i.e., 20 units * $1 = $20).
Later, `_get_cogs_value` multiplies this value again by the component quantity defined in the BoM (20), resulting in a double multiplication: (20 units * $1) * 20 = $400
opw-5946749
Forward-Port-Of: odoo/odoo#251509This update resolves a problem where the Romanian VAT tax scheme calculation failed when customer records lacked VAT information. The original logic for determining VAT/non-EU VAT was removed during a recent refactor, but is now re-introduced specifically for Romanian customers (CIUSRO).
Original PR description
Problem --------- If the customer has not VAT set up on it record, we use the DEFAULT_VAT value. However, the scheme to be used is computed using the partner company_registry (which might be empty), which fails. Secondly, the piece of logic that compute the VAT/NON_EU_VAT for the Tax Scheme node was removed during the refactor. However, this is needed in Romania. Solution --------- Compute the scheme using the DEFAULT_VAT and add back the VAT/NON_EU_VAT logic for the Romanian CIUSRO only. no-task --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#251416 Forward-Port-Of: odoo/odoo#250110
A recent update to the Avatax integration caused crashes when processing expense entries. This fix addresses a key error related to how the system handles receipt information, specifically for expense moves. By restricting address checks to moves requiring tax calculations, the system now reliably processes expenses with Avatax.
Original PR description
Currently, the expenses flow with Avatax integration crashes when posting the expense entry. Steps to reproduce: - Have an employee with an address in the US. - Enable 'Detect Automatically' in the Avalara fiscal position. - Create an expense for the employee, paid by Employee. - Submit > Post Journal entry > Post Expense. Action will be blocked by a traceback reporting error `KeyError: 'in_receipt'` Analysis: After [1] expense journal entries are now 'in_receipt'. The dictionary in account_avatax does not take into account this move type. This provides a fallback to 'Any' for any other move types [1] https://github.com/odoo/odoo/commit/f835ac0c8adb49d04bed746fd624b8976cc32991 opw-5872768 Forward-Port-Of: odoo/enterprise#109381
This update resolves an issue where rounded corners and background colors weren't consistently applied in mass mailing emails, particularly when using the 'Stretch to Equal Height' option. The fix adjusts table styling to ensure accurate rendering of card designs, improving email presentation and consistency.
Original PR description
**Steps to reproduce:** - Go to mass_mailing app - Add Columns block with multiple content size - Increase Round Corners (e.g. 20 px) - In "Vert. Alignment" field > Select the "Stretch to Equal…
**Steps to reproduce:**
- Go to mass_mailing app
- Add Columns block with multiple content size
- Increase Round Corners (e.g. 20 px)
- In "Vert. Alignment" field > Select the "Stretch to Equal Height" option
- Add color background for the columns
- Save the record and send test mail
- Round corners are not applied
- Background color doesn't expand to the bottom of the body
**Issue:**
Default table style used for the inline conversion of
`await toInline($(editableClone), { $iframe: $(iframe), wysiwyg: this.wysiwyg });` in `mass_mailing_html_field`,
has its 'border-collapse' attribute set to 'collapse' by default in `enforceTablesResponsivity`.
This attribute doesn't work with `border-radius` and the resulting display differs from the preview of the editor.
Relevant links:
https://stackoverflow.com/questions/628301/the-border-radius-property-and-border-collapsecollapse-dont-mix-how-can-i-use https://stackoverflow.com/questions/36035461/what-is-the-difference-between-border-collapse-collapse-and-border-spacing-0
**Fix:**
Use `'border-collapse': 'separate'` and `'border-spacing': 0` but this can
introduce border stacking inside the table element where the original collapse
was needed.
Add back the `overflow` inherited by the card attributes to ensure
inside border are visually properly contained inside the border (but not
sure as to why it was removed 4 years ago).
Also set the height of table sub-elements to `100%` to ensure background
property is properly applied on the whole card body.
opw-5218581
Forward-Port-Of: odoo/odoo#251863
Forward-Port-Of: odoo/odoo#242001This update fixes a potential issue where user information wasn't consistently being sent, leading to unexpected behavior across several Odoo modules (mail, HR, Portal). Specifically, the system now always includes the `partner_id` with `main_user_id` to ensure accurate identification and data flow. This improves reliability and prevents potential errors.
Original PR description
`main_user_id` should always be sent with its `partner_id` to avoid subtle issues. Indeed the `partner_id` inverse is on `user_ids` not on `main_user_id`. It is indirectly assumed `partner_id` should be set on `res.users`, in particular when using `partner.main_user_id.partner_id`. https://github.com/odoo/enterprise/pull/109364 Forward-Port-Of: odoo/odoo#252320 Forward-Port-Of: odoo/odoo#251641
This update resolves an issue where a backlog of PEPPOL messages caused a recurring cron job loop, leading to processing delays. The fix addresses a race condition in token refreshing, preventing errors and ensuring consistent communication with the PEPPOL network. This improves the reliability of Odoo's integration with PEPPOL.
Original PR description
Fix two issues observed on Odoo production. 1) When more than 50 messages from this odoo db/client are queued to be sent on peppol-ap, all client-side messages remain in `processing` If the send queue stays saturated, the retrigger logic repeatedly schedules the cron, causing an infinite `ir_cron_peppol_get_message_status` loop. 2) Each cron refreshes the authentication token, which allows concurrent threads to refresh it in parallel. Due to the `REPEATABLE READ` isolation level, a long-running cron may continue using the old token while another thread has already refreshed it. This leads to `invalid-signature` responses and incorrectly marks the connection as out of sync on one thread, even through the long-running transaction fails on trying to commit. Thus, simply flushing the cursor will block the transaction in such a situation no-task Forward-Port-Of: odoo/odoo#252177
This update fixes a discrepancy in how inventory values are calculated. Previously, the system incorrectly assumed midnight when determining the 'As of' date for valuation reports, leading to inaccurate results. This change ensures that inventory values are calculated through the end of the day, aligning with established business logic and improving reporting accuracy.
Original PR description
### Problem: If `_compute_quantities` is called with only a date specified in `to_date` context (no timestamp), Odoo will assume midnight (00:00:00) instead of end of day (23:59:59). This contradicts logic in other places, such as `_compute_total_value`, which opts for the convention that "As of \<date>" means "through \<date>". ### Solution: We will run `_compute_quantities` with `to_date` at 23:59:59. ### Steps to replicate (Runbot 19): 1. Receive a valued and tracked product (you can make the impact more obvious by setting the cost very high) 2. Backdate the receipt to some day in the past using the method of your choice (inspector tool, server action) 3. Go to the Inventory Valuation report, set "As of" date to the backdated receipt date, note that the value of the validated receipt is not there 4. Set "As of" to the day AFTER the receipt date, note the value is now shown opw-5893999 Forward-Port-Of: odoo/odoo#251253
This update addresses a bug where changing the popup backdrop color or hiding/showing the popup would unexpectedly cause it to disappear. The fix ensures the popup's visibility is correctly tracked during history operations, preventing these disruptions. This improves the user experience when customizing popup appearances.
Original PR description
Steps to reproduce in 18.4: - Add a popup on the page - Click on the popup - Change the backdrop color - Hide the popup by clicking on its entry in "Invisible Elements" - Undo - Redo - Bug: The popup disappears Steps to reproduce in 19.0: - Add a popup on the page - Click on the popup - Hover a color in the colorpicker of the backdrop option of the popup - Stop hovering the color - Bug: The popup disappears Forward-Port-Of: odoo/odoo#251849 Forward-Port-Of: odoo/odoo#244213