Friday, August 1, 2025
20 changes · 18.0
Resolved issues and error corrections
This fix ensures that when staff sell a physical gift card in Point of Sale, the entered card code is assigned to the correct gift card program even when several programs exist. This prevents unwanted automatically generated codes and helps stores activate the exact card handed to the customer.
Original PR description
### Problem: When selling a gift card via PoS, if multiple loyalty programs of type *Gift Card* exist, assigning a physical gift card code does not always link it to the correct program. As a result, the created gift card receives an automatically generated code instead of the one entered. ### How to reproduce: * Create multiple loyalty programs of type *Gift Card*. * Open a PoS session. * Add a gift card product from one of the created programs. * Assign a physical gift card code to it. * Complete the sale. * The created gift card will have a generated code. opw-4910647
This fixes an issue where point-of-sale orders created from sales orders could generate stock transfers with doubled quantities when the same lot-tracked product was split across multiple lots. The change ensures each lot is handled separately, improving inventory accuracy and reducing manual corrections.
Original PR description
When creating a sale order for a product, confirming it, and then modifying the stock move to use 2 different lots. Then paying the order in the POS, the picking created for the pos order will have double qty Steps to reproduce: ------------------- * Create a product tracked by lot * Create 2 lots for that product * Create a sale order for that 3 quantity of that product * Confirm the sale order * Modify the stock move to use 2 different lots, for example: - Lot 1001: 2 units - Lot 1002: 1 unit * Pay the order in the POS * Check the picking created for the pos order > Observation: The picking created for the pos order has double the quantity for the lots. Why the fix: ------------ A PoS line can only hold one lot, so when we import a sale order with multiple lots, we need to split the line into multiple lines, each with a single lot opw-4804704
This fixes a receipt editing issue for products tracked and valued by lot. Instead of causing a system traceback when quantities are changed without properly adding lots, Odoo now updates the existing single lot when possible or shows a clear error when multiple lots are involved.
Original PR description
Steps to reproduce: 1) Create a product tracked by lot and with valuation by lot. 2) Create a Purchase Order with this product and Confirm it. 3) Go to Receipt 4) Add a Lot number and validate 3) Unlock the receipt and modify the `quantity`. Current behavior - Get a traceback. Expected behavior: - If there is only one lot: - update the lot quantity - Else : - raise an error The fix should be applied before the `web_save` call to prevent the creation of a new `stock.move.line`. Therefore it's done on the `onchange` call. opw-4841162 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The event website now shows the registration status banner consistently for each visitor. This prevents customers from seeing incorrect “Registered” labels caused by cached pages from another session.
Original PR description
We had an inconsistent display of the Registered banner for events on the website. The banner would appear or disappear randomly, regardless of whether the user was logged in or not. Steps to reproduce: ------------------- - start the server - log in as a user that does not have access to website editor - get a ticket for an event - go to the event list -> event is marked register - go to the event page in a new browser session (incognito) -> event is still marked register > Observation: On refresh, Registered green banner on events appear and disappear randomly Why the fix: ------------ Keys that are not stored on the table of event should be added to the cache key to force a re-render when they change, or t-nocache should be used opw-4819021 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes sales order locking so orders that should remain editable, such as subscription-related orders and similar flows, are properly excluded. It restores previously intended behavior that was missed during version updates, reducing the risk of orders being locked at the wrong time.
Original PR description
The diff from this commit was introduced in the past up until saas-17.1, to prevent locking of subscription sales orders. https://github.com/odoo/odoo/pull/159863 However, the forward porting commits after saas-17.2 are missing this diff. https://github.com/odoo/odoo/pull/159993/files Few months after the commits were merged, someone mentioned about this diff being missing, but no actions were taken afterwards. This commit applies the missing diff. --- In another [bugfix](https://github.com/odoo/enterprise/pull/91339), which is dependent on this , we decided to not lock SOs from FSM tasks, taking similar approaches as how Subscription Orders process it, utilizing the `_should_be_locked()` function. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an error that could block users from completing a subcontracted product receipt when they chose not to create a backorder for a very small remaining quantity. The system now correctly cancels the leftover manufacturing order instead of reducing it to an invalid zero quantity, making subcontracting receipts smoother and more reliable.
Original PR description
Steps to reproduce the bug: - unarchive the subcontracting route - Create a storable product C1 with the following route: - Buy + Resupply Subcontractor on Order - Create a storable product P1 with:…
Steps to reproduce the bug:
- unarchive the subcontracting route
- Create a storable product C1 with the following route:
- Buy + Resupply Subcontractor on Order
- Create a storable product P1 with:
- BoM type: Subcontracting - Type: subcontracting - Subcontractor: Azure Interior - Component: C1
- Create a purchase order for 20 units of P1
- Confirm the purchase order
- Validate the resupply transfer
- Go to the receipt of P1
- Record 19.8 units of the component (ignore the remaining 0.2)
- Validate the receipt with no backorder
Problem:
A user error is raised:
```
The operation cannot be completed: The quantity to produce must
be positive!
```
When clicking No Backorder, the `process_cancel_backorder` method is
called:
https://github.com/odoo/odoo/blob/18.0/addons/stock/wizard/stock_backorder_confirmation.py#L75-L77
This triggers the validation of the picking, so updates the subcontract
order quantity:
https://github.com/odoo/odoo/blob/16a1d9b19b8b07435a9c4b4db2cad3c1e37e4e17/addons/mrp_subcontracting/models/stock_picking.py#L53
At this stage, we check whether it should reduce the MO quantity or
cancel the order entirely. However, the logic compares the quantity to
remove against the initial order quantity without using `float_compare`,
which leads to minor rounding differences. This results to update the
MO quantity to zero instead of canceling it, which then triggers an SQL
constraint error because the MO quantity cannot be zero:
https://github.com/odoo/odoo/blob/e7e2a088495eed3c2886a69054af689c01628f32/addons/mrp_subcontracting/models/stock_move.py#L304-L311
https://github.com/odoo/odoo/blob/29d1f637d3ec6f3ebb218d103001a6182af1b8a4/addons/mrp/models/mrp_bom.py#L93-L95
opw-4905031
Forward-Port-Of: odoo/odoo#221273
Forward-Port-Of: odoo/odoo#219650Past inventory reports now calculate available stock correctly when products move through multiple delivery steps. This prevents internal warehouse transfers from being counted as customer deliveries more than once, giving businesses more reliable historical stock figures.
Original PR description
Before this commit, the available quantity was incorrect when using the "Inventory At" feature with a past date in the inventory report For products using multi-step delivery routes, the…
Before this commit, the available quantity was incorrect when using the "Inventory At" feature with a past date in the inventory report For products using multi-step delivery routes, the `_compute_quantities_dict()` method incorrectly treated internal moves as outgoing moves As a result, the same outgoing quantity was added multiple times, leading to an overestimation of the available stock This commit adds a filter to the `domain_move_out_done` domain used for past dates, excluding internal moves based on `location_dest_usage`` ## Steps to reproduce: - Create a new product - Active the multi-step routes in Settings - Set the Warehouse's Outgoing Shipments to Pick, Pack, then Deliver - Create a RFQ for 100 products and Receive Products - Create a Quotation for 20 products - Validate each delivery steps - Go to Inventory -> Report -> Stock - Click on Inventory At - Set the date to 2025-01-01 - Search for your product - The `In Hand` quantity should be 0 but is 40 before the fix opw-4848473
Canceling the reward selection after entering a promo code no longer incorrectly marks the code as used. This prevents customers or sales staff from being blocked by a false “already applied” message when they try the same valid code again.
Original PR description
Issue: currently, when a user initiates applying a promo code but then discards it before completing the process. the system still marks the code as used,…
Issue: currently, when a user initiates applying a promo code but then discards it before completing the process. the system still marks the code as used, https://github.com/odoo/odoo/blob/204eb9b0737634826c4666f85d0b9d39aeed0ee6/addons/sale_loyalty/models/sale_order.py#L1378-L1379 resulting in a false-positive validation on subsequent attempts https://github.com/odoo/odoo/blob/204eb9b0737634826c4666f85d0b9d39aeed0ee6/addons/sale_loyalty/models/sale_order.py#L1352-L1355 to reapply the same code. Steps to reproduce: - Create a record in "Discount & Loyalty" - select "Discount Code" in program type field. - From the conditional rules, copy the discount code. - Create a sale order and select a product. - Click on Coupon Code button and paste the code copied in step 3 in Coupon Code field. - Click Apply. - A wizard of Available Rewards will be opened. Now click the Discard button. - Repeat last 3 steps Observation: - It gives a Validation Error: "This promo code is already applied." Fix: - we introduce action_discard() method, which will un-use the coupon , in case user discard the reward dialog box. opw-4961738 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This change restores handling for deliveries that include both regular and subcontracted products, preventing backorder issues. It prioritizes keeping barcode workflows usable, while allowing warehouse users to manually adjust picked status in the backend if needed.
Original PR description
This commit reverts db8b33e (and the wrong follow-up fix of 2755c09) because it breaks backorders for pickings that mix regular and subcontrcted products. We'd rather the flow has problems in back end where the user can manually uncheck the picked box rather than in barcode where there is no work around. We keep the enterprise test introduced in [792c968](https://github.com/odoo/enterprise/commit/792c968) to protect the barcode flow. Forward-Port-Of: odoo/odoo#220318
Spreadsheet charts now keep global filters applied when their chart criteria are updated. This prevents charts from showing unfiltered or inconsistent data, helping users trust spreadsheet reports after edits.
Original PR description
The global filters were not re-applied when updating an oodo chart domain. Task: [4965683](https://www.odoo.com/odoo/2328/tasks/4965683) 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#220764
This fix restores the previous handling of manually entered tax amounts after a recent change caused incorrect results for taxes included in prices. It helps ensure invoices and accounting calculations remain accurate while a more complete solution is prepared.
Original PR description
This reverts the changes to the handling of manual tax amounts made in commit 4911adb817c07c4f789d96c0044a9f01f266ac50. That commit moved the handling of manual tax amounts from `_add_tax_details_in_base_line` to `_round_base_lines_tax_details`, but didn't consider the case of price-included taxes where the manual tax amounts must modify the base of the tax. As a result, we are reverting it while we figure out an implementation that correctly handles price-included taxes. We keep the new `_dispatch_delta_amount_smoothly` method that is used wherever we need to dispatch delta amounts over several lines. task-none
Romanian electronic invoices can now be sent to the SPV even when no e-invoice format is configured on the customer record. Odoo falls back to the standard Romanian XML format, preventing a blocking error and reducing manual retry work.
Original PR description
Currently, if we try to send an invoice without defining an EDI format on the invoice's partner and attempt to send it to the SPV, we get the error: "CIUS-RO XML attachment not found." Steps to reproduce: - Install l10n_ro_edi - Create an invoice - Do not set the eInvoice format on the partner - Send it to the SPV - You will get the error: "CIUS-RO XML attachment not found." This fix, using "account.edi.xml.ubl_ro" as a fallback, makes sense because currently, when invoices are sent in batch mode, Odoo commits the issue stating that the CIUS-RO XML is missing. As a result, when we retry sending the invoice, "account.edi.xml.ubl_ro" will also be generated because the l10n_ro_edi_document_ids will not be empty. opw-4623492
Fixed an issue where adding products to a Field Service task could lock the related sales order too early when automatic sales locking was enabled. This ensures the delivery order is created properly, so users can manage the task’s products and deliveries without getting stuck on an inconsistent locked order.
Original PR description
Issue: When the "Lock Confirmed Sales" setting is enabled, adding a product to a Field Service task would lock the associated sales order before its picking could be created. The confirmation process…
Issue: When the "Lock Confirmed Sales" setting is enabled, adding a product to a Field Service task would lock the associated sales order before its picking could be created. The confirmation process locks the order first , and the subsequent step to create stock moves (`_action_launch_stock_rule`) explicitly skips locked orders. Reproducible on 17.0~master [Task](https://www.odoo.com/odoo/action-4043/4633977) Odoo 17: https://drive.google.com/file/d/1qmAYhSu6gU91efuJEDF-Irn2cLGUQP0A/view?usp=drivesdk Odoo 18: https://drive.google.com/file/d/1x8IeXwT7ZFM7Av9Vp6GSvGIbOaEGfmVx/view?usp=drivesdk Steps to reproduce: 1. In Sales > Configuration > Settings, enable "Lock Confirmed Sales". 2. Go to a Field Service task. 3. In the kanban view via the "Products" smart button, add a product. 4. Come back to the task, refresh the browser, open the linked Sales Order from the smart button. 5. **Before this fix:** The SO is locked, no picking is created, and SO lines will have delivered_qty set even though we haven't delivered anything. 6. **After this fix:** The SO is not locked, and a Delivery smart button is correctly displayed, linking to the generated picking. This behavior left the sales order in an inconsistent state: it was locked, but had no corresponding delivery order. As a result, users were blocked from removing or modifying the products added to the task, as the system prevented edits on a locked order with no picking to cancel. Let's step through what's going on here; 0. We enable "Lock Confirmed Sales" option. 1. Add a product to the Field Service(FS) task https://github.com/odoo/enterprise/blob/4256ea170c31209b83ff808e51145757571f8556/industry_fsm_sale/controllers/catalog.py#L19-L42 https://github.com/odoo/enterprise/blob/4256ea170c31209b83ff808e51145757571f8556/industry_fsm_sale/controllers/catalog.py#L38 2. set_fsm_quantity() is invoked, which will create a SO for the FS task https://github.com/odoo/enterprise/blob/35e1f47160d5840e8701fc0ad43ec42bbfaf9e36/industry_fsm_sale/models/product_product.py#L144 3. `_fsm_create_sale_order()` will immediately `action_confirm()` the new SO, because of the reasons in the function description. ( Since we are immediately confirming newly created SO, I think we should consider not applying the "Lock Confirmed Orders" option to FSM SOs.) https://github.com/odoo/enterprise/blob/2347dac2568dbcf83578f044f8fe41ab70a20f47/industry_fsm_stock/models/project_task.py#L124-L134 https://github.com/odoo/enterprise/blob/2347dac2568dbcf83578f044f8fe41ab70a20f47/industry_fsm_stock/models/project_task.py#L134 4. `odoo/addons/sale/models/sale_order.py/action_confirm()` will lock SO because we enabled 'Lock Confirmed Sales' https://github.com/odoo/odoo/blob/863c064fd911cb4eeedad0abec82adb4690128f6/addons/sale/models/sale_order.py#L964 6. `_action_launch_stock_rule()` is invoked, is in charge of creating Pickings for SOs https://github.com/odoo/odoo/blob/3be83d363786526fe470e41122169e594b5467fb/addons/sale_stock/models/sale_order_line.py#L303 https://github.com/odoo/odoo/blob/3be83d363786526fe470e41122169e594b5467fb/addons/sale_stock/models/sale_order_line.py#L343-L344 7. But, since `line.order_id.locked` , the system do not create Pickings for the SOs. https://github.com/odoo/odoo/blob/3be83d363786526fe470e41122169e594b5467fb/addons/sale_stock/models/sale_order_line.py#L315-L316 The line was introduced by https://github.com/odoo/odoo/commit/17bece3e797913bcba8dd7e07fc8541c0a45e3f7 This commit resolves the issue by passing a context key `fsm_create_sale_order=True` when confirming a sales order that is being created from a Field Service task. The `_should_be_locked` method on the sale order is overridden to check for this context key. If the key is present, it prevents the order from being locked within that specific transaction, allowing the stock rules to execute correctly and create the necessary picking. The order will be locked for any subsequent operations as intended. Tradeoff here; We are sacrificing the universal application of one feature (automatic lock on confirmed sales order) to fix a critical bug that makes the entire FSM delivery process unusable. --- EDIT: Without this change, all of [test_fsm_stock](https://github.com/odoo/enterprise/blob/17.0/industry_fsm_stock/tests/test_fsm_stock.py)'s test cases that use `_fsm_ensure_sale_order()` will fail if the setting is on. (around ~20 test cases). [In the past, similar issue occurred for Subscription Orders, and the PO confirmed that the "Lock Confirmed Order" setting should never affect the subscriptions. ](https://github.com/odoo/enterprise/commit/e4f9d76c0a58f3cc226a2372f3936cea4547312e). This commit takes the same approach to ignore the setting upon SO confirmation. opw-4633977 opw-4749653 opw-4880664 Forward-Port-Of: odoo/enterprise#88855
Chilean vendor bill imports now work for accounting users who do not have administrator rights. This prevents imported bills from failing with empty fields, helping finance teams process supplier documents without needing elevated access.
Original PR description
### Issue: Vendor bills are not importing when the user has no administration rights. ### Steps to reproduce: - Install `l10n_cl_edi` and switch to a Chilean company - Create a new user without Administration access rights but with Accounting rights - Switch to this user - Go in Accounting > Vendor Bills - Import a Chilean vendor bill - On the created bill, we can see an error in the chatter, no fields have been filled ### Cause: This [commit](https://github.com/odoo/enterprise/commit/b26a7905cbcbfdb59d55a7ecf9e963e267b8f0a5) aadded a line writing on `l10n_cl_dte_file` but the field is only accessible to [`base.group_system`](https://github.com/odoo/enterprise/blob/bcd42d624587a968ec0b7023855ba4083894baf7/l10n_cl_edi/models/account_move.py#L1071). ### Solution: Use `sudo()` like everywhere in the file. opw-4943499
WinBooks imports now handle certain accounting data inconsistencies that previously blocked the import, including tax payable accounts, unknown journals, and deprecated accounts used in tax settings. This helps businesses complete legacy accounting imports more reliably without manual cleanup or unexpected validation errors.
Original PR description
When importing a winbooks file the following issues and or inconsistencies may be found **Issue 1** We may import an account with CENTRALID 'V03' and code 45100000 Having this centralID means that it…
When importing a winbooks file the following issues and or inconsistencies may be found **Issue 1** We may import an account with CENTRALID 'V03' and code 45100000 Having this centralID means that it will be set as tax payable account id according to https://github.com/odoo/enterprise/blame/d8d4812414dba8825a1c785c29d00f7d0fd98360/account_winbooks_import/wizard/import_wizard.py#L174 However, this means it needs to be a `liability_payable` account with reconcile enable, in order to comply with the following check https://github.com/odoo/odoo/blame/ad6c9001b447f5ffebafe1581512f48708c7d746/addons/account/models/account_tax.py#L80 *Note* Even if we set it as liability_payable, the import may fail later on in case the same account is used in a sales move where those types of account are not allowed https://github.com/odoo/odoo/blame/1b657cf1e1ce43874a3ede307b2f8ad68216aa56/addons/account/models/account_move_line.py#L1247 A solution is to skip the `_check_payable_receivable` check for winbooks lines **Issue 2** Move line data may reference an unkown journal, causing a validation error because no journal is retrieved from the database and a move always need a journal **Issue 3** Account created during import may be marked for deprecation, which occurs at the end of the import process. However, if the account has been used in a tax repartition line, trying to set it as deprecated will raise an error. https://github.com/odoo/odoo/blame/2cdc41c012f637849ba030989ce928b6b1152e7e/addons/account/models/account_account.py#L1028 opw-4850314
Sales achievements made on the final day of a commission period are now included in the correct period totals. This ensures commission reports and detail views reflect the full eligible sales activity for monthly targets.
Original PR description
**Issue** Achievements realised on the last day of the period were not taken into account (neither in the expected one, or the next period). **Steps to reproduce** - Create a commission plan with a monthly target frequency and an achievement on "Amount sold" - Have a Sale order with a `date_order` on the last day of a month - Click on the "Commissions" smart button to open the `sale.commission.report` list view -> achieved amount for the SO's month is missing. - Click on "Details" for the line -> there should be one `sale.commission.achievement.report` record. **Cause** We were comparing a Timestamp coming from the commission line with the start/end date of the period. To perform the comparison, the date was cast to a Timestamp with 0:00:00 as the hour, resulting in all commission lines on the last day of the period to be missed. opw-4857936 opw-4934168
This fix prevents in-progress POS cart items from disappearing after a page refresh when UrbanPiper is enabled. It also ensures product variants are synced to UrbanPiper with the correct vegetarian or non-vegetarian food type, improving menu accuracy for online orders.
Original PR description
Steps to reproduce: - Installed urbanpiper - Open POS and add product to cart - Refresh the page . Issue: - Product in the cart automatically removes. Cause: - Order lines were filtered out when urban piper is enabled. Fix: - Filter out the order lines which are not associated with online order. Issue 2: - While menu sync to Urban piper, 'product variant' food_type is sent as NA although main product food_type is set as Vegetarian or Non-Vegetarian. Fix: - Set variant food_type as main product food_type. task- 4971503
This fixes an issue where products could fail to register with Kenya eTIMS because the required quantity unit could not be set when creating a new unit of measure from the category screen. The unit field is now available in the right place and shown only when relevant for Kenyan fiscal settings, helping users complete eTIMS submissions successfully.
Original PR description
When trying to register a product with eTIMS, submisission happens to fail because `l10n_ke_quantity_unit_id` can not be set on new UoM via the UoM Category view. With this commit, we extend the UoM Category view and add the field in the notebook. We also make the column invisble regarding the fiscal country code from the UoM Category, which is get from a new, non stored, computed field. We also add the validation message from UoM model in addition to the one from Product. Note: Change was already done in 18.0 by 8e30b68b80b1db5b309c192ed7adf8be26b807d5 opw-4395902 Forward-Port-Of: odoo/enterprise#91442
Fixes a barcode app issue where scanning from the main menu could fail on iOS 18.5 if the scan confirmation sound was unsupported or blocked by the browser. The app now chooses a safer audio format and handles sound playback errors without interrupting barcode scanning.
Original PR description
Issue ----- On iOS 18.5, users can get a `NotSupportedError` when trying to scan a barcode from the (barcode) main menu. Steps to reproduce ----- - Open barcode - Click the center scan button - Scan…
Issue ----- On iOS 18.5, users can get a `NotSupportedError` when trying to scan a barcode from the (barcode) main menu. Steps to reproduce ----- - Open barcode - Click the center scan button - Scan a barcode --> Traceback Discussion ----- There are 2 issues occuring here. 1. We play either an ogg or mp3 file. However, the method to know if the format is supported by the browser returns one of 'probably', 'maybe', ''. https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/canPlayType#return_value This means that when we do https://github.com/odoo/enterprise/blob/70e5013ea022ed04ff27db71ea3ecccb55ae1f70/stock_barcode/static/src/main_menu/main_menu.js#L37 We might end up using ogg even if the browser doesn't actually support it, as 'maybe' is truthy. To reduce the risk of this happening, we can specify the codec as "vorbis" (all ogg files of Odoo are vorbis). This is already done in mail: https://github.com/odoo/odoo/blob/cd4c1d599ea9403ce3791e239ad765d946446a47/addons/mail/static/src/core/common/sound_effects_service.js#L46 2. The browser might not have the permission to play the sound. In such cases, the best we can do is try to play the sound and log potential errors. ----- Ticket: opw-4820022
Expiration dates shown in the Barcode app now respect the user's local timezone when receiving tracked products. This prevents dates entered at midnight from appearing as the previous day, improving accuracy for inventory and compliance workflows.
Original PR description
**Issue**: The expiration date displayed in the barcode app's scan screen may appear incorrect. **Steps to reproduce**: - Go to Settings > Inventory, and enable the `Expiration Date` field - Open the…
**Issue**: The expiration date displayed in the barcode app's scan screen may appear incorrect. **Steps to reproduce**: - Go to Settings > Inventory, and enable the `Expiration Date` field - Open the Purchase app - Create a new Request For Quotation - Select a product that: - is a good tracked by lot - has the `Expiration Date` field enabled (Inventory tab > Traceability) - Confirm the RFQ - Click the `Receipt` smart button - Click the `hamburger button` and enter an expiration date at midnight. - Go to the Barcode application > Operation > Receipts - Open the corresponding RFQ - Click Edit and increase the quantity to 1, then Validate - Observe that the date is displayed as one day earlier **Cause**: The code https://github.com/odoo/enterprise/blob/b5ad18b101f4a2608758762edf0f49270a67ba20/stock_barcode_product_expiry/static/src/components/line.js#L17 assumes that the date is encoded using the local while the date comes from the server https://github.com/odoo/enterprise/blob/b5ad18b101f4a2608758762edf0f49270a67ba20/stock_barcode_product_expiry/static/src/components/line.js#L13, and thus is utc encoded. So for example, if the user's timezone is `Europe/Brussels`, a midnight timestamp will appear as 10 PM the previous day. **Solution**: To solve this issue, use this method https://github.com/odoo/odoo/blob/7a40285fd03f75f07a74f05d4b60e760e1c83eb3/addons/web/static/src/core/l10n/dates.js#L619-L622 instead of https://github.com/odoo/odoo/blob/7a40285fd03f75f07a74f05d4b60e760e1c83eb3/addons/web/static/src/core/l10n/dates.js#L514-L516. This way, it would parse the utc-base server date as a utc-base date. opw-4865513 Forward-Port-Of: odoo/enterprise#88526