Friday, March 7, 2025
64 changes · 18.0
Enhancements to existing features
The Live Chat integration instructions have been revamped to make it easier to enable chat on both Odoo-hosted and custom websites. This should help businesses set up customer chat more confidently and reduce confusion during website integration.
Original PR description
Purpose of this Commit: Revamp the integration to enable Live Chat functionality on custom websites and Odoo websites. task-3751548 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Users can now enter an exact font size directly in the editor toolbar instead of choosing only from preset options. This gives content creators more flexibility and keeps text selection stable while applying the chosen size.
Original PR description
### Description of the issue/feature this PR addresses: - The editor only provided a font size dropdown with predefined options, preventing the selection of a custom font size. ### Desired behavior after PR is merged: - A font size input field is added to toolbar using an _`iframe`_, ensuring the selection remains intact in editable area. - Clicking the font size input selects the text and displays the predefined font size dropdown. - The entered value in the font size input is applied to the selected content after a _`200ms`_ debounce. - The font size can also be selected from the dropdown. - Font size dropdown closes on Enter and Tab key press. - ArrowUp/Down moves focus to font size dropdown. task-4488396 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Website visitors will no longer see technical traceback popups when a browser-side error occurs, reducing confusion and preserving a more professional customer experience. Employees and developers can still see detailed errors in appropriate contexts such as logged-in internal use, debug mode, or testing, while visitor errors remain available in browser logs for troubleshooting.
Original PR description
Before this commit, any client error would lead to a displayed Odoo traceback dialog. While the goal is obviously to have a code without any possible traceback, visitors really should not see those.…
Before this commit, any client error would lead to a displayed Odoo
traceback dialog. While the goal is obviously to have a code without any
possible traceback, visitors really should not see those.
This is especially true in the website: if a website visitor (who has no
idea the visited website uses Odoo) gets a traceback because of a Chrome
extension, it makes no sense to display the traceback at all. It can be
justified for connected users (not portal, but base.group_user) as they
likely are employees of the company using Odoo and should be able to see
issues and report them to us (e.g. even in the Chrome extension case: so
we can make our code support the breaking extension or decide that it
cannot be used alongside Odoo).
The errors for visitors are still logged in the browser console, even
with more detailed logs in that case.
Note that we use `await user.hasGroup('base.group_user')` upon error to
be able to implement this feature. In the frontend, it actually does a
RPC call as that group information is not in the session_info. We could
add it in the session_info, but since the use case is showing an error,
the extra RPC *upon error* is fine for now.
Notice that traceback dialogs (and the related error handling that comes
with them, like preventing an error to be considered as an error and
logged in the console) are also still enabled in debug mode or during
testing tours.
task-4290643Point of Sale product searches now avoid showing a misleading notification when matching products are found. Staff will only see a message when no additional products match the search, reducing confusion during checkout.
Original PR description
Previously, the toaster notification incorrectly displayed the number of product variants instead of actual products found. This commit removes the (useless) notification when products are found and only displays "No more product found" when no results match the search. task-id: 4595775 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The invoice report action label is renamed from "PDF" to "Invoice PDF". This makes the option clearer for users when generating or accessing invoice documents.
Original PR description
Changing the name: PDF -> Invoice PDF. task-4614454
The Documents app now opens its automation rule setup with fewer background calls while keeping the same user experience. This reduces unnecessary system work and can make the transition to automation settings slightly more efficient.
Original PR description
Automation rule trigger field ids can now be deducted from a default filter domain passed in the context of an action. As a result, in the action used to direct a user of the Documents application to the Automation Rules, it is no longer necessary to pass the trigger field id to be displayed in the new rule creation form. Only the filter domain is required to achieve the same result. This makes it possible to delete an orm call without altering the implemented feature. see odoo/odoo#193576 see odoo/enterprise#75719 task-4502214
Resolved issues and error corrections
Channel member lists now show a person’s full name when hovering over their entry. This makes it easier for users to identify members whose names may be shortened in the list.
Original PR description
Purpose: to display the full name on hover in channel member list. task-4630148 after PR:  --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Miscellaneous changes
Repro steps: 1. Create a new company. 2. Attempt to delete the newly created company. 3. The deletion is successful, but if the user tries to login again, they will keep getting this error `Record does not exist or has been deleted.` Cause: The cause was that the cache would have the id of the deleted company, and attempting to access this company was the bug cause. Solution: This commit solves this bug by clearing the cache on company deletion. task-4438207 --- I confirm I
Original PR description
Repro steps: 1. Create a new company. 2. Attempt to delete the newly created company. 3. The deletion is successful, but if the user tries to login again, they will keep getting this error `Record does not exist or has been deleted.` Cause: The cause was that the cache would have the id of the deleted company, and attempting to access this company was the bug cause. Solution: This commit solves this bug by clearing the cache on company deletion. task-4438207 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#200711 Forward-Port-Of: odoo/odoo#200164
Short automated portal or website walkthroughs no longer fail when portal chatter is still loading in the background. This prevents irrelevant test crashes and helps keep validation results stable without changing the customer-facing portal experience.
Original PR description
Backport of https://github.com/odoo/odoo/pull/199212 Runbot may be red due to tours ending while portal chatter is lazy-loading. We don't care of lazy-loading of portal chatter that hasn't ended, the…
Backport of https://github.com/odoo/odoo/pull/199212 Runbot may be red due to tours ending while portal chatter is lazy-loading. We don't care of lazy-loading of portal chatter that hasn't ended, the tour passes and that's what matters. ORIGINAL MESSAGE: Before this commit, short portal and website tours that open a page with portal chatter may crash with following error: ``` Error received after termination: AssetsLoadingError: The loading of http://127.0.0.1:8069/web/bundle/portal.assets_chatter_style?lang=en_US&website_id=1 failed ``` This happens because the tour is so short and doesn't assert loading of portal chatter that the tour ends while portal chatter hasn't been loaded. The tour termination forces abort of ongoing lazy-loading such as portal chatter, which results in the crash above. This commit fixes the issue by silently catching the error in this very specific case that lazy-loading has been aborted by browser page reload or closing, which is precisely the case with tour. The crash is not relevant in that case, in practice the crash is intended to detect programming errors. runbot-114302
This fixes the mobile call screen so the full call interface, including participant visibility, fits properly on smaller displays. Users joining calls from mobile devices should have a clearer, more usable experience without hidden or cramped controls.
Original PR description
Before this commit, since https://github.com/odoo/odoo/pull/175858, the call view in mobile was too small to fit all of the call UI, this commit fixes this issue. | Before | After | |--------|--------| |  |  |
This fix ensures that intercompany replenishment creates the purchase order in the company that owns the buying rule, rather than the company requesting the stock. It prevents purchase orders from being created in the wrong company or failing because the expected vendor is only configured in the supplying company.
Original PR description
### Issue: Currently, running a procurment to fulfill a demand in COMP1 linked to a buy rule of COMP2 toaward the inter-company transit will use seller's set in COMP1 and generate a PO in COMP1…
### Issue: Currently, running a procurment to fulfill a demand in COMP1 linked to a buy rule of COMP2 toaward the inter-company transit will use seller's set in COMP1 and generate a PO in COMP1 rather than COMP2. ### Steps to reproduce: - In the settings enable Multi-steps routes - Have two companies: COMP1 and COMP2 - Create a routes without set companies with 3 rules: - rule 1 (comp1): - Pull from Virtual Locations/Inter-company transit to WH1/Stock supply method: Trigger an other rule. - rule 2 (comp2): - Pull from WH2/Stock to Virtual Locations/Inter-company transit, supply method: Trigger an other rule. - rule 3 (comp2): - Buy from Partner/vendors to WH2/Stock using a custom operation type towards Virtual Locations/Inter-company transit. - Create a storable product with both routes set. - With COMP2: set a vendor on that product. - In COMP1, your product > Reordering rules create a new rule using the COMP1 route to replenish WH1/Stock. - With both COMP1 and COMP2 as active order once. > The PO could not find a vendor as it looked for suppliers in COMP1 and if such a supplier was set in COMP1, the PO would be created in COMP1. ### Cause of the issue: While the rule of COMP2 is found and used to run the procurment here: https://github.com/odoo/odoo/blob/2cd3d6a76db6bedba8bbb3233690b0cd72f87876/addons/stock/models/stock_rule.py#L484 the procurement was created and is linked to the company owning the move creating the demand (that is COMP1): https://github.com/odoo/odoo/blob/2cd3d6a76db6bedba8bbb3233690b0cd72f87876/addons/stock/models/stock_move.py#L1494-L1498 However, the `company_id` used in the `_run_buy` notably for the data's of the PO will be the company linked to the procurement rather than the company linked to the buy rule. Since the buy rule should generate a purchase order in company it uses, this is incorrect. opw-4578965 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes how eCommerce handles free combo products and combo items when zero-price sales are blocked. Businesses can now enforce the zero-price restriction on the overall combo product while still allowing free items inside a paid combo, preventing checkout issues and unintended free sales.
Original PR description
Previously: - Zero-priced combo products could always be sold on eCommerce. However, this shouldn't be allowed if `prevent_zero_price_sale` is enabled. - Zero-priced combo items couldn't be sold on eCommerce if `prevent_zero_price_sale` was enabled. However, this should always be allowed since only the price of the combo product matters (not its items).
Odoo now automatically includes the supporting property-definition field needed by property fields when preparing views. This prevents users from hitting an error in Studio or forms when access rules hide a related field, improving reliability without changing the visible workflow.
Original PR description
Steps to reproduce
==================
- Install repair,web_studio
- Go to repair
- Open any record
- Open studio
- Switch to the misceallaneous tab
- Click on the Operation Type field
- Add the "Technical / Receive notifications in Odoo" group in "Allow visibility to groups"
```
TypeError: Cannot read properties of undefined (reading '0')
at PropertiesField._getSeparatorFoldKey
```
Cause of the issue
==================
Since the user doesn't have that group, the field `picking_type_id` will no be available.
```py
repair_properties = fields.Properties(
'Properties',
definition='picking_type_id.repair_properties_definition'
)
```
That field is needed as it's the definition field for the repair_properties field.
Solution
========
When postprocessing views, we already add some fields that are needed by others. We can do the same for properties fields.
opw-4594796This fix prevents Czech bank reconciliation from incorrectly replacing a manually chosen bank transaction date with today’s date. It keeps taxable supply date rules for Czech accounting where appropriate while avoiding wrong dates on bank transactions.
Original PR description
- Install l10n_cz and switch to a cz company. - In bank reconciliation, create a new bank transaction and set its date to a past or future date (not today) The date of the newly created bank transaction is automatically set to today. In the Czech Republic, it is required to use the taxable supply date as the accounting date. This functionality was introduced by 184c1e65a9992e890af81bb60eeeb7b8b825ab54. However, it also sets the taxable supply date for bank transactions, which is incorrect. opw-4544305 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Point of Sale product card now rounds displayed quantities to two decimal places, preventing confusing values like 4.199999999999999. This makes weighted product totals clearer and more trustworthy for cashiers during checkout.
Original PR description
Steps to reproduce: - install pos - create a product with weigh on scale - open pos session and add it twice, once in 1.9 and once in 2.3 - you will find the number on the card number as 4.1999999999999999 Problem: issue in the precision of decimal additions in javascript, so added a rounding to max 2 decimal places opw-4529408 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
The stock dashboard now handles records that do not have a date category instead of failing during display or upgrade checks. This prevents an error in the inventory kanban dashboard and shows a blank value rather than the word "none" when no date is available.
Original PR description
date_category can be None, we should check before adding values to the dict. And also return empty string instead "none" in _compute_kanban_dashboard_graph error from upgrade mock viewer. ``` File…
date_category can be None, we should check before adding values to the dict.
And also return empty string instead "none" in _compute_kanban_dashboard_graph
error from upgrade mock viewer.
```
File "/tmp/tmpd7nbq20v/migrations/base/tests/test_mock_crawl.py", line 256, in crawl_menu
self.mock_action(action_vals)
File "/tmp/tmpd7nbq20v/migrations/base/tests/test_mock_crawl.py", line 269, in mock_action
return self.mock_act_window(action)
File "/tmp/tmpd7nbq20v/migrations/base/tests/test_mock_crawl.py", line 429, in mock_act_window
mock_method(model, view, fields_list, domain, group_by)
File "/tmp/tmpd7nbq20v/migrations/base/tests/test_mock_crawl.py", line 531, in mock_view_kanban
self.mock_web_search_read(model, view, [domain], fields_list)
File "/tmp/tmpd7nbq20v/migrations/base/tests/test_mock_crawl.py", line 590, in mock_web_search_read
data = model.search_read(domain=domain, fields=fields_list, limit=80)
File "/home/odoo/src/odoo/18.0/odoo/models.py", line 6074, in search_read
return records._read_format(fnames=fields, **read_kwargs)
File "/home/odoo/src/odoo/18.0/odoo/models.py", line 4016, in _read_format
vals[name] = convert(record[name], record, use_display_name)
File "/home/odoo/src/odoo/18.0/odoo/models.py", line 6983, in __getitem__
return self._fields[key].__get__(self)
File "/home/odoo/src/odoo/18.0/odoo/fields.py", line 1287, in __get__
self.compute_value(recs)
File "/home/odoo/src/odoo/18.0/odoo/fields.py", line 1469, in compute_value
records._compute_field_value(self)
File "/home/odoo/src/odoo/18.0/odoo/models.py", line 5222, in _compute_field_value
fields.determine(field.compute, self)
File "/home/odoo/src/odoo/18.0/odoo/fields.py", line 109, in determine
return needle(*args)
File "/home/odoo/src/odoo/18.0/addons/stock/models/stock_picking.py", line 376, in _compute_kanban_dashboard_graph
summaries[picking_type_id]['total_' + date_category] += 1
KeyError: 'total_none'
```
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-prKiosk orders paid through a payment terminal now appear on the preparation display only after payment is completed. This prevents staff from preparing orders that may not be successfully paid, while still supporting counter payment flows.
Original PR description
to reproduce: ============= - Setup kiosk on POS shop using Stripe or other payment terminal - Open the Preparation display for the shop and start the kiosk - When an order is sent to the terminal on the kiosk, the order appears on the prep display immediately before payment is completed Problem: ======== the issue is introduced when we allowed for he customer to pay on the counter, the order is sent to the preparation display before the payment is completed Solution: ========= add a flag in context to tell if payment should be done in kiosk or on the counter opw-4556029 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix ensures the HTML editor only removes focus outlines from areas that are actually editable. Non-editable content keeps its normal visual outline behavior, helping preserve clarity and expected page editing feedback.
Original PR description
**Problem**: The outline is removed for all elements with `contenteditable`, including those with `contenteditable=false`, which is incorrect. **Solution**: Restrict outline removal to elements with `contenteditable=true` only. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix prevents two devices from recording the same point-of-sale session opening at the same time. It keeps cash opening records and session numbering accurate, improving reliability for stores using multiple devices.
Original PR description
Before this commit, if a session was opened on two devices concurrently, both devices could set the opening control. This resulted in duplicate opening cash setting and a gap in the session ID sequence. This fix ensures that opening control is set only once, maintaining correct session tracking. opw-4627585 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Point of Sale product search now returns all relevant matching products instead of limiting results to exact matches. This aligns search behavior with the removal of fuzzy search and helps staff find products more reliably during checkout.
Original PR description
Since the fuzzy search has been removed, it is no longer necessary to exclusively display only exact match results. This commit updates the search functionality to adopt and return all relevant search results, ensuring consistency with the new behavior. opw-4535250 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The signup password field now has better spacing so typed text does not overlap with the password strength indicator. This makes account creation clearer and easier for users, with no change to the underlying password rules.
Original PR description
Due to the pasword security meter on the right of the input, the content of the input can overflow behind the security meter. Note: I seized the opportunity to reindent this file according to our coding guidelines task-4630394 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix prevents inventory reservation cleanup from trying to process kit products in a way the system does not support. It helps users avoid blocking errors when opening or updating inventory quantities after a product has been changed into a kit.
Original PR description
Since this commit: https://github.com/odoo/odoo/pull/188201/commits/766ec99dbc2701a237f082f3fb124793d9dfe596 We try to clean reservations because, for some reason, there could be a discrepancy…
Since this commit: https://github.com/odoo/odoo/pull/188201/commits/766ec99dbc2701a237f082f3fb124793d9dfe596 We try to clean reservations because, for some reason, there could be a discrepancy between the sum of “stock.move.line” and the quantity/reserved quantity on “stock.quant”. However, there are cases where a user creates a storable product, updates its quantity, and then uses it in a “stock.move.line”, confirms it, and later changes the product type to a kit. So, when trying to clean the reservations for these “stock.move.line”, a user error occurs because the system attempts to create a quant for a kit-type product: https://github.com/odoo/odoo/blob/c07778bbce4311c142bd8e2ce3013998d4f126ae/addons/mrp/models/stock_quant.py#L6-L11 As a result, each time users try to access the quant list, clean_reservation is triggered, causing a user error that prevents them from modifying the quantity of any quant. Solution: For kits, we can skip cleaning their quant to avoid unnecessary errors. opw-4625002 opw-4624008 opw-4621175 opw-4625465 opw-4621504 opw-4623523 opw-4621508 opw-4623329 opw-4629386
The HTML editor's automated tests now use the actual default text color instead of assuming a value from the Enterprise edition. This makes test results consistent across Odoo editions and helps prevent false failures during development.
Original PR description
Before this commit, some tests based on the default text color only worked if the tests were run with enterprise because the default text color was hard-coded based on the style of enterprise. 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
Down payment receipts in Point of Sale now display long product names without creating an unwanted horizontal scrollbar. This keeps receipts easier to read and improves the checkout experience for staff and customers.
Original PR description
Before this commit, making a down payment for a sale order with a product that has a long name would cause a horizontal scroll bar to appear in the receipt. Before: <img width="259" alt="image" src="https://github.com/user-attachments/assets/3db17ad0-e1a7-4653-9e50-edd9dd8c4e9e" /> After: <img width="383" alt="image" src="https://github.com/user-attachments/assets/faa0c3ea-c400-4cb6-96ed-2b496236710f" /> opw-4604797 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Point of Sale screen now displays extra charges for combo product choices when staff select a combo item. This helps cashiers and customers see the correct pricing upfront, reducing confusion and checkout errors.
Original PR description
Extra prices are not displayed in the POS when selecting a combo product with defined combo choices. When a combo product is created with combo choices that have extra prices, those extra prices should be visible in the POS interface. Steps to Reproduce: 1. Create a new combo product with multiple combo choices. 2. Set an extra price for one or more of the combo choices. 3. In the POS, select the combo product. 4. Notice that the extra price is not shown. opw-4485134 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Fixes how the editor identifies reusable website content blocks so only the intended main snippet is selected and checked. This prevents confusing empty option panels and false outdated-snippet warnings when using masonry and accordion-style snippets.
Original PR description
In [1], the masonry_block snippet has been exploded into multiple 'sub-snippet'. But this had for consequence that when selecting a block of the snippet one too many option section was appearing…
In [1], the masonry_block snippet has been exploded into multiple 'sub-snippet'. But this had for consequence that when selecting a block of the snippet one too many option section was appearing because of this multiple level snippet. (e.g: s_masonry_block > s_masonry_block_default_template > Block) Yet this middle level has no options on its own. so it was unnecessary to have an options section for the 'sub-snippets'. This commit just prevent to be able to select the 'sub-snippets'. Furthermore, due to those 'sub-snippets' being contained inside the s_masonry_block snippet, they would not get registered in the list of all the snippets, and then the website would failed to determine their version which raised the 'outdated_snippet' alert. Preventing the selection of those 'sub-snippet' thus also prevent the website checking their version. As of now none of these sub-snippets have different version than the basic s_masonry_block so I guess we can just ignore that since they are not designed to change from the basic s_masonry_block options. And if so should happen in the future they would probably become completely independant snippets. Steps to reproduce : - Enter edit mode - Drag and drop a s_masonry_block snippet - Select one of the blocks of the snippets - On the options panel an errored 'Block' option section appeared. - Click on 'access options anyway', the section is then empty. [1] : https://github.com/odoo/odoo/pull/183755 task-4508767
Public ecommerce visitors no longer receive access to react to product or course reviews unless they have a valid portal identity. This keeps review interaction permissions consistent and prevents anonymous users from seeing or using reaction features incorrectly.
Original PR description
This commit completes the fix https://github.com/odoo/odoo/pull/197508. In this commit we make sure that the thread has the correct `can_react` value by also checking that the user has a valid portal_partner.
Point of Sale now avoids loading a customer's linked price list and products during customer search when those items are not available in the PoS. This prevents extra, unintended data from being pulled into the session and helps keep PoS behavior aligned with its configured availability.
Original PR description
Before this commit, when a partner linked to a specific pricelist was searched and loaded in the PoS, the associated pricelist and its products could be unintentionally loaded, even if they were not available in the PoS. opw-4615603 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This change reverts a previous accounting adjustment because currency fallback handling is already covered elsewhere in the system. It helps prevent redundant logic and reduces the risk of inconsistent invoice tax behavior.
Original PR description
Revert https://github.com/odoo/odoo/commit/fbdf519e0dc8830326a8ac120475966002b8474f The fallback of the currency is already managed automatically since: https://github.com/odoo/odoo/commit/1cf68be0807fbbd040022533ecf6372995296989 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes failing HTML editor tests by checking the actual text color used during testing instead of relying on fixed color values. It helps keep automated validation reliable when table cell colors vary for readability in light or dark modes.
Original PR description
**Problem**: Tests are failing due to hardcoded text color in this commit: https://github.com/odoo/odoo/commit/443e1678e748ee2320c4d361d0d0538d862c5f68 Text color might change during tests, causing failures. This issue affects only `td` elements since `color` is added to them when their background is changed to ensure text visibility in dark/light modes. **Solution**: Use the computed text color instead of hardcoded values in tests. runbot-159850 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Document uploads now use the company currently selected by the user instead of defaulting to the user's main company. This ensures company-specific default values are applied correctly in multi-company setups, reducing errors in document ownership and configuration.
Original PR description
### Issue: - When we user-defined defaults based on company_id set on documents, they always trigger based on the user's default company instead of the current company. ### Steps to reproduce: - In a…
### Issue: - When we user-defined defaults based on company_id set on documents, they always trigger based on the user's default company instead of the current company. ### Steps to reproduce: - In a multi-company environment say we have companies A(id: 1) and B(id: 2), and the user default company is A. (he has access to both). - Create 2 user-defined defaults for the field : `documents.document.company_id`, setting value to 1 for company A and 2 for company B. - Create a document using company B, the document's `company_id` will be set to company B which is wrong. ### Solution: - in controllers `request.env.company` always returns the user's default company, so whenever we upload a document (call the `documents_upload` controller), `documents.document` create assumes that the current company is the user's default company. - To fix this, we add the `allowed_company_ids` to the upload request params in the JS `DocumentService` and we intercept in the python controller and set the `allowed_company_ids` context on the request to make sure create will use the current company instead. OPW-4507424
Cash payments in German POS are now reported to Fiskaly based on the payment method type, not the payment method name. This prevents renamed cash methods from being incorrectly shown as non-cash in certification records and dashboards.
Original PR description
When making a payment using a payment method of type cash with a name different than "CASH" the payment type was not being set correctly in the fiskaly payload. Steps to reproduce: ------------------- * Setup fiskaly for the German POS * Create a payment method of type cash but give it any other name than "CASH" * Make a payment using that payment method * Check the payment type on the fiskaly website dashboard > Observation: The payment type is set to "Non cash" Why the fix: ------------ We should base the payment type on the payment method type and not on the payment method name. opw-4606731
This fixes issues in Documents where some embedded actions, such as creating a vendor bill from the Finance folder, could not be removed. It also ensures those actions remain available when documents are accessed through shortcut folders, improving consistency for users.
Original PR description
First commit: Fix a bug which prevents un-embedding actions: Reproduce: 1. Install documents_account 2. Go to the finance folder 3. Try to un-embedd the action "Create a Vendor Bill" 4. You can't This occurs because we created the embedded actions by passing a group in the data, but we can't do that in the UI, so we cannot un-embed the existing action. This also means that groups cannot be enforced at the embedded actions level using their groups_id field, but rather the groups_id field of the related server action, and it was actually redundant. Thankfully these records are correct. Second commit: Fix using embedded actions when viewing documents from a container shortcut. Task-4525850
The barcode interface no longer shows the return products option where it cannot be used, such as delivery batches or transfers that are not completed. This prevents users from hitting an error and keeps warehouse actions aligned with valid return workflows.
Original PR description
Steps to Reproduce the Bug: - Install stock_picking_batch. - Go to Barcode > Operations > Delivery Orders > Batches. - Select any batch: - Click on the Parameters button > In the Operation section: -…
Steps to Reproduce the Bug:
- Install stock_picking_batch.
- Go to Barcode > Operations > Delivery Orders > Batches.
- Select any batch:
- Click on the Parameters button > In the Operation section: - Click on Return Products.
Problem:
A traceback is raised:
"The method 'stock.picking.batch.action_create_return_picking' does not exist."
The function “action_create_return_picking” belongs to the “stock.picking” model, not to “stock.picking.batch” records. We are not supposed to be able to return products from a batch.
Moreover, even for “stock.picking” records, products can only be returned from done pickings. However, this button is displayed in all picking states except the done state:
https://github.com/odoo/enterprise/blob/2d5dbb93e6b33c2be786f9b2361c993f715d1a7f/stock_barcode/static/src/components/main.xml#L119
Solution:
Have the same condition for done pickings as in:
https://github.com/odoo/enterprise/blob/2d5dbb93e6b33c2be786f9b2361c993f715d1a7f/stock_barcode/static/src/components/main.xml#L165-L170
opw-4624039Kiosk orders paid through a terminal are no longer sent to the preparation display before payment is completed. This prevents staff from preparing unpaid orders while still supporting orders that will be paid at the counter.
Original PR description
to reproduce: ============= - Setup kiosk on POS shop using Stripe or other payment terminal - Open the Preparation display for the shop and start the kiosk - When an order is sent to the terminal on the kiosk, the order appears on the prep display immediately before payment is completed Problem: ======== the issue is introduced when we allowed for he customer to pay on the counter, the order is sent to the preparation display before the payment is completed Solution: ========= add a flag in context to tell if payment should be done in kiosk or on the counter opw-4556029
This update improves how Ecuadorian delivery guides are generated, especially for companies operating in multiple-company setups. It helps ensure the correct company-specific issuing details, customer receiver information, product codes, sequences, and authorization dates are used in electronic and PDF documents.
Original PR description
- For a multicompany environment it is useful to be able to restrict the unique emission point and entity point per company. - The support of the commercial partner is needed for electronic and pdf documents. We use the commercial_partner_id for the receiver. - We place the main code and auxiliary code as in the other documents. The main code is the result of the barcode or default_code or N/A (is required field in xml) - We improve the creation of the sequence in a warehouse when the record is not yet committed. - To generate the authorization number we use the start date of the delivery guide
This fix changes how DIAN demo mode is stored so existing databases are not broken when the module has not been updated. It helps keep Colombian electronic invoicing configurations stable during regular updates.
Original PR description
Issue ----- This commit[^1] added a field in stable version which breaks the database if the module is not updated. Fix --- Instead of using a column in stable, use a config param. [^1]: a6d593a406be75995454eb0666d1d
Resetting invoices to draft now correctly removes deferred entries that were never posted, instead of creating unnecessary reversals. This prevents leftover scheduled accounting entries and keeps deferred revenue or expense records cleaner when audit trail is enabled.
Original PR description
Steps to reproduce: - 1. Activate audit trail. 2. Make a customer invoice with start and end date [end date should be in future months], and post. 3. Reset the invoice to draft - Result: All deferred entries are reversed with new entries at the date of the reset to draft. The unposted deferred entries are still there with auto post At Date. Cause: - Audit trail alone doesn't prevent the moves from being deleted if they were not posted before, so the check shouldn't be only on the company_id.check_account_audit_trail, but also we should consider move.posted_before and if not, it should be deleted not reversed. Fix: - Replace the company_id.check_account_audit_trail check with _is_protected_by_audit_trail() which includes checking if the move is posted before or not. opw - 4562732
Saving a restaurant table appointment could fail when the linked point of sale configuration had no active session. The fix sends appointment updates to the correct reserved-table sessions, preventing the error and allowing staff to save appointments normally.
Original PR description
Steps to reproduce: 1. Open new table appointment form from the appointment app 2. Select a table ressource that is linked to a pos_config that has no current_session_id 3. Save Traceback is shown Fix: When notifying the tables of the appointment update the wrong session object was used. This commit ensure that the correct object is used in order to notify the sessions linked to the reserved tables
This commit fixed the access error issue that non-admin users would encounter when submitting a Jordanian e-invoice. It adds sudo access rights to the fields l10n_jo_edi_client_identifier and l10n_jo_edi_secret_key while reading them for e-invoice submission. task-4577597 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#200015
Original PR description
This commit fixed the access error issue that non-admin users would encounter when submitting a Jordanian e-invoice. It adds sudo access rights to the fields l10n_jo_edi_client_identifier and l10n_jo_edi_secret_key while reading them for e-invoice submission. task-4577597 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#200015
Currently, the date filters do not have their title displayed in the `FilteValue` component which is an issue in dashboards where one could have multiple date filters defined and could not differentiate them. This revision adds the fiter label as a title such that users can identify the right filter given that they gave it an appropriate label. task-4606670 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged:
Original PR description
Currently, the date filters do not have their title displayed in the `FilteValue` component which is an issue in dashboards where one could have multiple date filters defined and could not differentiate them. This revision adds the fiter label as a title such that users can identify the right filter given that they gave it an appropriate label. task-4606670 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#200657 Forward-Port-Of: odoo/odoo#200502
Versions -------- - saas-17.4+ Earlier versions displayed each variant seperately. Steps ----- 1. Have 2 product template attributes A and B; 2. have one of B's attribute values be excluded for one of A's values; 3. have a product template using these values; 4. ensure product template is available in POS; 5. sell product template in POS. Issue ----- The attribute combination that should be excluded isn't displayed as such. Cause ----- When checking for product attribute
Original PR description
Versions -------- - saas-17.4+ Earlier versions displayed each variant seperately. Steps ----- 1. Have 2 product template attributes A and B; 2. have one of B's attribute values be excluded for one of A's values; 3. have a product template using these values; 4. ensure product template is available in POS; 5. sell product template in POS. Issue ----- The attribute combination that should be excluded isn't displayed as such. Cause ----- When checking for product attribute exclusions, it currently only considers attribute combinations of archived products to be unavailable for sale. Solution -------- In the `_get_archived_combinations_per_product_tmpl_id` method, factor in attribute exclusions, and treat them as archived product variants. In master, rename the method & references to it to reflect more general unavailable attribute combinations instead of specifically archived products. opw-4521198 Forward-Port-Of: odoo/odoo#199042
Since the upgrade of Chartjs to v4.3 in [commit 1], stacked charts in website were wrongly computed. This commit fixes it. [commit 1]: https://github.com/odoo/odoo/commit/7e3c1ecdb86110912b15722e600f9571692807ed task-4603349 Forward-Port-Of: odoo/odoo#199186
Original PR description
Since the upgrade of Chartjs to v4.3 in [commit 1], stacked charts in website were wrongly computed. This commit fixes it. [commit 1]: https://github.com/odoo/odoo/commit/7e3c1ecdb86110912b15722e600f9571692807ed task-4603349 Forward-Port-Of: odoo/odoo#199186
#### Description of the issue/feature this PR addresses: When updating an allocation's number_of_days, a validation check is performed to ensure that we do not reduce the `number_of_days` to be less than the number of leaves that are taken by the employee. However this logic also takes into consideration any virtual leaves (leaves that are in the `confirm` or `validate1` state, ie. leaves that are awaiting an approval) that may have been requested by an employee. These virtual leaves that ar
Original PR description
#### Description of the issue/feature this PR addresses: When updating an allocation's number_of_days, a validation check is performed to ensure that we do not reduce the `number_of_days` to be less…
#### Description of the issue/feature this PR addresses: When updating an allocation's number_of_days, a validation check is performed to ensure that we do not reduce the `number_of_days` to be less than the number of leaves that are taken by the employee. However this logic also takes into consideration any virtual leaves (leaves that are in the `confirm` or `validate1` state, ie. leaves that are awaiting an approval) that may have been requested by an employee. These virtual leaves that are not yet approved should not count towards the calculation since it could be possible that the employer could refuse them or the employee's accrual plan could grant sufficient leaves if it is requested for a future date. #### Current behavior before PR: 1. Setup a timeoff type that requires approval from the manager 2. Set up an accrual plan where an employee accrues '_N_' days of leave at the start of each year with **no carryover** (NOTE: the no carryover is the most crucial step because this is what writes the number_of_days on the leave allocation to zero) 3. Request a leave by an employee for any date after the carryover period. What should have happened: The accrual should reset the leaves based on no carryover policy back to _N_ days However, it throws a validation error: Now the issue happens because when we see that the carryover is none because of which: 1. The allocated leaves are set to 0 when calling this CRON (for no carryover): https://github.com/odoo/odoo/blob/cf18c4ac88919513a9f2b922d625fa5dc113cb39/addons/hr_holidays/models/hr_leave_allocation.py#L527 2. The leave that was requested by the employee but not yet approved causes the validation to fail. It is best explained in the below screen recording which uses the test case mentioned in the commit: https://github.com/user-attachments/assets/f8914bac-815d-48c9-b4b2-c132a2fccbdb   #### Desired behavior after PR is merged: Virtual Leaves that are not yet approved would not block us from updating the allocation's `number_of_days` opw-4442471 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#200000 Forward-Port-Of: odoo/odoo#198382
This https://github.com/odoo/enterprise/commit/68f6c1f9fd3ff6762c98e1a405ade035129efce0 caused the `test_create_res_partner` test to fail. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#200527
Original PR description
This https://github.com/odoo/enterprise/commit/68f6c1f9fd3ff6762c98e1a405ade035129efce0 caused the `test_create_res_partner` test to fail. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#200527
### Steps to reproduce: - In Sale create an empty sale order and confirm - In Expense > Configuration > Expense Categories > Mileage set the price per km to be 1 and "Re-Invoice Expenses" to "Sales price" - Create a new expense - Change the category to "Mileage" - Set a quantity >1 - In "Customer to Reinvoice" select the one from the quotation - Click "Create Report" > "Submit to Manager" > "Validate" > "Post Journal Entries" - Return to the sale order - The number under "Delivered" is
Original PR description
### Steps to reproduce: - In Sale create an empty sale order and confirm - In Expense > Configuration > Expense Categories > Mileage set the price per km to be 1 and "Re-Invoice Expenses" to "Sales price" - Create a new expense - Change the category to "Mileage" - Set a quantity >1 - In "Customer to Reinvoice" select the one from the quotation - Click "Create Report" > "Submit to Manager" > "Validate" > "Post Journal Entries" - Return to the sale order - The number under "Delivered" is 1, it should be the same as the quantity ### Cause: When creating the move from the expense, the quantity is not given and defaults to 1. ### Solution: Add the quantity to the `payments_vals`. opw-4389303 Forward-Port-Of: odoo/odoo#200179 Forward-Port-Of: odoo/odoo#192524
**Current behavior:** Adding a product which is invoiced based on delivered quantities to the delivery of a sale which has already been confirmed, then validating the delivery, does not reflect the change in price (which will be invoiced) on the sale order. **Expected behavior:** The sale order should show the actual amount of money to be charged to the orderer. **Steps to reproduce:** 1. Create a stored product with some price and change its invoicing policy to 'delivery' 2. Cr
Original PR description
**Current behavior:** Adding a product which is invoiced based on delivered quantities to the delivery of a sale which has already been confirmed, then validating the delivery, does not reflect the…
**Current behavior:** Adding a product which is invoiced based on delivered quantities to the delivery of a sale which has already been confirmed, then validating the delivery, does not reflect the change in price (which will be invoiced) on the sale order. **Expected behavior:** The sale order should show the actual amount of money to be charged to the orderer. **Steps to reproduce:** 1. Create a stored product with some price and change its invoicing policy to 'delivery' 2. Create a new sale order, add 1 of the created product, then confirm it 3. Open the delivery, add another line to it for the same created product, fill in the quantities for each move, then validate the picking 4. Check the sale order line to see that, while the price unit is populated with the product's price, the subtotal/total fields are not **Cause of the issue:** Order lines added in this manner have `product_uom_qty == 0` which will zero-out the price computation. **Fix:** First, `_compute_purchase_price` is modified such that lines for standard cost product will have a value computed (where previously they were skipped). Then for `_compute_margin`: use `qty_delivered` and an on-the-fly calculated `price_subtotal` to find a margin value for a SOL added from a delivery (which is determined when `product_uom_qty == 0` and `qty_delivered != 0` opw-4210056 Forward-Port-Of: odoo/odoo#186236
**Steps to reproduce:** 1. Log in with a non-admin users 2. Open any Partner from 3. Click on Actions > Privacy Lookup **Bug:** ``` You are not allowed to access 'Privacy Lookup Wizard' (privacy.lookup.wizard) records. This operation is allowed for the following groups: - Administration/Settings Contact your administrator to request access if necessary. ``` **Expected behavior:** The error message is correct. This feature should only be available to Administrator user
Original PR description
**Steps to reproduce:** 1. Log in with a non-admin users 2. Open any Partner from 3. Click on Actions > Privacy Lookup **Bug:** ``` You are not allowed to access 'Privacy Lookup Wizard' (privacy.lookup.wizard) records. This operation is allowed for the following groups: - Administration/Settings Contact your administrator to request access if necessary. ``` **Expected behavior:** The error message is correct. This feature should only be available to Administrator users. Therefore, the action should be hidden accordingly. See: - https://github.com/odoo/odoo/blob/16.0/addons/privacy_lookup/security/ir.model.access.csv#L2 --- ping @tivisse --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#192227 Forward-Port-Of: odoo/odoo#150748
Versions -------- - 16.0+ Steps ----- 1. Have a cart ready to be paid; 2. open `/shop/payment` in two windows; 3. click "Pay now" in one window; 4. click "Pay now" in the next window. Issue ----- Depending on version, installed modules & click speed, one of the following happens: - Error: "The operation cannot be completed: Reference must be unique!" - 500: Internal Server Error. - Both payments get confirmed. Cause ----- There's no check on whether a payment is already b
Original PR description
Versions -------- - 16.0+ Steps ----- 1. Have a cart ready to be paid; 2. open `/shop/payment` in two windows; 3. click "Pay now" in one window; 4. click "Pay now" in the next window. Issue -----…
Versions -------- - 16.0+ Steps ----- 1. Have a cart ready to be paid; 2. open `/shop/payment` in two windows; 3. click "Pay now" in one window; 4. click "Pay now" in the next window. Issue ----- Depending on version, installed modules & click speed, one of the following happens: - Error: "The operation cannot be completed: Reference must be unique!" - 500: Internal Server Error. - Both payments get confirmed. Cause ----- There's no check on whether a payment is already being processed for a particular order. This can happen in two manners: 1. The 1st one has finished, but the 2nd one is still allowed to start. 2. Clicking fast enough, both will try to transaction concurrently. Solution -------- 1. If the `amount_total` is equal to `amount_paid`, raise an error. 2. Put a database-level lock on the Sale Order using `FOR NO KEY UPDATE` which will get released as soon as the payment transaction is committed to the database, or is rolled back due to failure. opw-4555664 Forward-Port-Of: odoo/odoo#200428 Forward-Port-Of: odoo/odoo#198873
The Sales Details report in POS sometimes displays incorrect quantities due to floating point precision errors. This happens when summing product quantities that have decimal values, leading to unintended rounding inaccuracies in the report output. Steps to Reproduce: 1. Create a sample product to be sold in POS. 2. Check the rounding precision set for the unit of measure for this product. 3. Open a new POS session and confirm an order with `14.9` quantities of the product. 4. Create anot
Original PR description
The Sales Details report in POS sometimes displays incorrect quantities due to floating point precision errors. This happens when summing product quantities that have decimal values, leading to…
The Sales Details report in POS sometimes displays incorrect quantities due to floating point precision errors. This happens when summing product quantities that have decimal values, leading to unintended rounding inaccuracies in the report output. Steps to Reproduce: 1. Create a sample product to be sold in POS. 2. Check the rounding precision set for the unit of measure for this product. 3. Open a new POS session and confirm an order with `14.9` quantities of the product. 4. Create another order for the same product, this time with `59.7` as the quantity. 5. Go to POS → Reporting → Sales Details, select the relevant POS, and print the report. 6. Issue: The generated PDF report incorrectly shows `74.60000000000001` instead of `74.6`. The sum of product quantities was not respecting the unit of measure's decimal precision, leading to floating point inaccuracies in the report. I Applied rounding to the quantity aggregation using the decimal precision of Product Unit of Measure, ensuring consistent and correctly formatted values in the report. opw-4430513 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#198114 Forward-Port-Of: odoo/odoo#197755
Steps to Reproduce: - Create two companies: A and B. - In Company A, create a sale order for Company B with product P1. - Confirm the sale order and navigate to the associated picking. - Add a new product P2 and confirm the picking. Issue: No sale order line is created for the newly added move in the picking. Technical Reason: Before v17.2, intercompany transfers used the "Partner/Customers" location (type: "customer") as the destination. The logic for creating a sale order line
Original PR description
Steps to Reproduce: - Create two companies: A and B. - In Company A, create a sale order for Company B with product P1. - Confirm the sale order and navigate to the associated picking. - Add a new…
Steps to Reproduce: - Create two companies: A and B. - In Company A, create a sale order for Company B with product P1. - Confirm the sale order and navigate to the associated picking. - Add a new product P2 and confirm the picking. Issue: No sale order line is created for the newly added move in the picking. Technical Reason: Before v17.2, intercompany transfers used the "Partner/Customers" location (type: "customer") as the destination. The logic for creating a sale order line checked move.location_dest_id.usage != 'customer', which correctly allowed the sale order line to be created. In v17.2, intercompany transfers now use "Virtual Locations/Inter-company transit" (type: "transit") as the destination. Since 'transit' != 'customer', the condition incorrectly bypasses sale order line creation. Fix: Modify the condition to check if the destination location is either 'customer' or 'transit'. This ensures that sale order lines are correctly generated for intercompany transfers. Task-4455830 Forward-Port-Of: odoo/odoo#197245
### Issue: Currently, leaving the barcode app will split moves/move lines in the backend in order to keep track of the changes made on the move lines to match the next time you go into the barcode app. #### Use case 1 (split move): - Create a storable product P tracked by lot - Adjust the onHand quantity to put 2 quants in stock: - quant1: Location: WH/Stock, lot_id: LOT0001, quantity: 3.0 - quant2: Location: WH/Stock, lot_id: LOT0002, quantity: 3.0 - Create and confirm a Deli
Original PR description
### Issue: Currently, leaving the barcode app will split moves/move lines in the backend in order to keep track of the changes made on the move lines to match the next time you go into the barcode…
### Issue:
Currently, leaving the barcode app will split moves/move lines in the backend in order to keep track of the changes made on the move lines to match the next time you go into the barcode app.
#### Use case 1 (split move):
- Create a storable product P tracked by lot
- Adjust the onHand quantity to put 2 quants in stock:
- quant1: Location: WH/Stock, lot_id: LOT0001, quantity: 3.0
- quant2: Location: WH/Stock, lot_id: LOT0002, quantity: 3.0
- Create and confirm a Delivery order for 3 x P
> The move of the delivery should have reserved 3 units form LOT0001
- Enter the barcode app, scan you DO-name
- Scan your product barcode then scan LOT002 three times
- Leave the barcode app and come back
#### > The barcode line 3/3 was updated to 3/6: 0/3 LOT001 and 3/3 LOT002.
#### Use case 2 (split move line):
- Create 2 storable products P and COMP.
- Adjust the onHand quantity to put 10 units of COMP in stock.
- Create a bill of material for P with one line: - 1 x COMP
- Create and confirm an MO for 10 units of P.
- Set the qty_producing to 5 units -> 5 units of comp are reserved
- Enter the barcode app, scan you MO-name
- The component line should be 5/5 since 5 units are reserved.
- Adjust the registration to 1/5.
- Leave the barcode app and come back
#### > The barcode line 1/5 was updated to 1/1 and 0/9 instead of 0/4.
### Cause of the Issue:
In both cases, the problem comes from the fact we leave the barcode with a different reservation than the initial one.
In the first use case, a new move will be created with a quantity of 3 in order to handle the new line created with LOT002 as soon as you have scanned your products. Therefore even though you entered the barcode app with a reservation demand of 3 units you leave it with 2 move lines with a cumulative quantity of 3 + 3 = 6:
- line1: quantity: 3, lot_id: LOT001, picked: False
- line2: quantity: 3, lot_id: LOT002, picked: True The next time you enter the app you will therefore see a reservation demand of 6 rather than 3.
In the second use case however, a move line is simply created by the `split_uncompleted_moves` when you exit the barcode app: https://github.com/odoo/enterprise/blob/0f4e8ce54be746db02e9f4a6974e387d90608a08/stock_barcode_mrp/models/stock_move.py#L18-L29
And the quantity of the new move line is based on the `prodcut_uom_qty` of the move rather than the initial reservation demand (quantity when entering barcode). This explains why reservation demand changed from 5 to 10 when you left and came back.
Enterprise: https://github.com/odoo/enterprise/pull/77068
opw-4353884 and opw-4417870
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#193465Lately we have been encountering increasing issues with on-prem databases which are being duplicated without running neutralization scripts, and thus when one of the two instances renews its refresh token, the other database's refresh token gets out of sync and we end up with a cryptic error `Invalid signature for request to the account_edi proxy`. 1. Prod and Staging both have refresh token RT1 2. Staging needs new refresh token: sends RT1 to IAP and gets RT2 3. IAP invalidates RT1 4. Pro
Original PR description
Lately we have been encountering increasing issues with on-prem databases which are being duplicated without running neutralization scripts, and thus when one of the two instances renews its refresh token, the other database's refresh token gets out of sync and we end up with a cryptic error `Invalid signature for request to the account_edi proxy`. 1. Prod and Staging both have refresh token RT1 2. Staging needs new refresh token: sends RT1 to IAP and gets RT2 3. IAP invalidates RT1 4. Prod still has RT1 and tries to refresh 5. IAP rejects RT1 because it is no longer aware of RT1 6. Test cannot get a new token and loses access with this error as the signature is no longer valid This commit simply improves this error message and redirects users to odoo support. task-4531587 Forward-Port-Of: odoo/odoo#199999 Forward-Port-Of: odoo/odoo#196271
[task-4421055](https://www.odoo.com/odoo/project.task/4421055)
Original PR description
[task-4421055](https://www.odoo.com/odoo/project.task/4421055)
Steps to reproduce: - create a new quotation - select a customer with another langage than the current user - add a product - add a discount using the discount button (select "global amount" or "fixed amount") Problem: Inside "order lines" from the quotation, the "description" column in the line created for the discount product is not translated. https://github.com/odoo/odoo/blob/c62e8d90db481fb7ba28e888431b6a7dc5ed03cd/addons/sale/wizard/sale_order_discount.py#L126 opw-4534846 Fo
Original PR description
Steps to reproduce: - create a new quotation - select a customer with another langage than the current user - add a product - add a discount using the discount button (select "global amount" or "fixed amount") Problem: Inside "order lines" from the quotation, the "description" column in the line created for the discount product is not translated. https://github.com/odoo/odoo/blob/c62e8d90db481fb7ba28e888431b6a7dc5ed03cd/addons/sale/wizard/sale_order_discount.py#L126 opw-4534846 Forward-Port-Of: odoo/odoo#197892
Forward-Port-Of: odoo/enterprise#80405
Original PR description
Forward-Port-Of: odoo/enterprise#80405
Overrides xml and xlsx export for Estonia intrastat because the current columns of the default intrastat report don't match with estonian government requirements. More information can be found at those addresses: - Arrivals: https://www.stat.ee/en/questionnaires/intrastat-arrivals-2024-month - Dispatches: https://www.stat.ee/en/questionnaires/intrastat-dispatches-2024-month task-3989930 Forward-Port-Of: odoo/enterprise#80816 Forward-Port-Of: odoo/enterprise#71114
Original PR description
Overrides xml and xlsx export for Estonia intrastat because the current columns of the default intrastat report don't match with estonian government requirements. More information can be found at those addresses: - Arrivals: https://www.stat.ee/en/questionnaires/intrastat-arrivals-2024-month - Dispatches: https://www.stat.ee/en/questionnaires/intrastat-dispatches-2024-month task-3989930 Forward-Port-Of: odoo/enterprise#80816 Forward-Port-Of: odoo/enterprise#71114
This commit targets to add new default pos payment method for mexican companies. Also defines l10n_mx_edi_payment_method_id for each default payment method target: saas-17.4 -> master task-4486643 Forward-Port-Of: odoo/enterprise#78148
Original PR description
This commit targets to add new default pos payment method for mexican companies. Also defines l10n_mx_edi_payment_method_id for each default payment method target: saas-17.4 -> master task-4486643 Forward-Port-Of: odoo/enterprise#78148
Changes are introduced to ensure compliance with the regulations established by SUNAT in the context of inventory management, specifically as outlined in Resolution No. 234-2006/SUNAT. Additionally, functionality and data presentation improvements are included to facilitate analysis and interpretation for end users. Main Changes: 1. Initial Balance for the Period - The initial balance of products in stock at the start of the fiscal period is added. - Code is introduced to identi
Original PR description
Changes are introduced to ensure compliance with the regulations established by SUNAT in the context of inventory management, specifically as outlined in Resolution No. 234-2006/SUNAT. Additionally,…
Changes are introduced to ensure compliance with the regulations
established by SUNAT in the context of inventory management,
specifically as outlined in Resolution No. 234-2006/SUNAT. Additionally,
functionality and data presentation improvements are included to
facilitate analysis and interpretation for end users.
Main Changes:
1. Initial Balance for the Period
- The initial balance of products in stock at the start of the fiscal
period is added.
- Code is introduced to identify the initial balance.


2. Corrections in Inventory Valuation
- Fields related to product entries and exits in inventory valuation are
adjusted.
3. Optimized Presentation Order
- A new sorting criterion is established for the records:
- Priority 1: Sort by product code (column 7).
- Priority 2: Sort by date (column 10).
- This allows for better analysis and interpretation, as well as ensuring
correct printing.
4. Delivery Guide Number as the Primary Indicator
- Fields 11, 12, and 13 now use the delivery guide number as the primary
indicator, complying with regulations.
- This includes the delivery guide number corresponding to the transfer
document, payment voucher, internal document, or similar.
Forward-Port-Of: odoo/enterprise#79404
Forward-Port-Of: odoo/enterprise#72064Related to https://github.com/odoo/odoo/pull/195866. Now that `Can publish` is based on access rights, some extra queries are needed when `website` is installed. Note that the `appointment`-only and `appointment.hr`-only counts are unchanged. task-3175890 Forward-Port-Of: odoo/enterprise#79612 Forward-Port-Of: odoo/enterprise#79231
Original PR description
Related to https://github.com/odoo/odoo/pull/195866. Now that `Can publish` is based on access rights, some extra queries are needed when `website` is installed. Note that the `appointment`-only and `appointment.hr`-only counts are unchanged. task-3175890 Forward-Port-Of: odoo/enterprise#79612 Forward-Port-Of: odoo/enterprise#79231
### Issue: Currently, leaving the barcode app will split moves/move lines in the backend in order to keep track of the changes made on the move lines to match the next time you go into the barcode app. #### Use case 1 (split move): - Create a storable product P tracked by lot - Adjust the onHand quantity to put 2 quants in stock: - quant1: Location: WH/Stock, lot_id: LOT0001, quantity: 3.0 - quant2: Location: WH/Stock, lot_id: LOT0002, quantity: 3.0 - Create and confirm a Deli
Original PR description
### Issue: Currently, leaving the barcode app will split moves/move lines in the backend in order to keep track of the changes made on the move lines to match the next time you go into the barcode…
### Issue:
Currently, leaving the barcode app will split moves/move lines in the backend in order to keep track of the changes made on the move lines to match the next time you go into the barcode app.
#### Use case 1 (split move):
- Create a storable product P tracked by lot
- Adjust the onHand quantity to put 2 quants in stock:
- quant1: Location: WH/Stock, lot_id: LOT0001, quantity: 3.0
- quant2: Location: WH/Stock, lot_id: LOT0002, quantity: 3.0
- Create and confirm a Delivery order for 3 x P
> The move of the delivery should have reserved 3 units form LOT0001
- Enter the barcode app, scan you DO-name
- Scan your product barcode then scan LOT002 three times
- Leave the barcode app and come back
#### > The barcode line 3/3 was updated to 3/6: 0/3 LOT001 and 3/3 LOT002.
#### Use case 2 (split move line):
- Create 2 storable products P and COMP.
- Adjust the onHand quantity to put 10 units of COMP in stock.
- Create a bill of material for P with one line: - 1 x COMP
- Create and confirm an MO for 10 units of P.
- Set the qty_producing to 5 units -> 5 units of comp are reserved
- Enter the barcode app, scan you MO-name
- The component line should be 5/5 since 5 units are reserved.
- Adjust the registration to 1/5.
- Leave the barcode app and come back
#### > The barcode line 1/5 was updated to 1/1 and 0/9 instead of 0/4.
### Cause of the Issue:
In both cases, the problem comes from the fact we leave the barcode with a different reservation than the initial one.
In the first use case, a new move will be created with a quantity of 3 in order to handle the new line created with LOT002 as soon as you have scanned your products. Therefore even though you entered the barcode app with a reservation demand of 3 units you leave it with 2 move lines with a cumulative quantity of 3 + 3 = 6:
- line1: quantity: 3, lot_id: LOT001, picked: False
- line2: quantity: 3, lot_id: LOT002, picked: True The next time you enter the app you will therefore see a reservation demand of 6 rather than 3.
In the second use case however, a move line is simply created by the `split_uncompleted_moves` when you exit the barcode app: https://github.com/odoo/enterprise/blob/0f4e8ce54be746db02e9f4a6974e387d90608a08/stock_barcode_mrp/models/stock_move.py#L18-L29
And the quantity of the new move line is based on the `prodcut_uom_qty` of the move rather than the initial reservation demand (quantity when entering barcode). This explains why reservation demand changed from 5 to 10 when you left and came back.
Community: odoo/odoo#193465
opw-4353884 and opw-4417870
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/enterprise#79444
Forward-Port-Of: odoo/enterprise#77068### Steps to reproduce: - Open a Helpdesk ticket - Send message on this ticket - Duplicate this ticket - Go to Reporting > Ticket Analysis - Check 'Hours to First Response' value for the duplicated ticket ### Cause: Those fields of response hours are being copied when duplicating tickets. ### Fix: We added 'copy=False' to each of those fields definition so we don't duplicate those fields when duplicating a record. opw-4582995 Forward-Port-Of: odoo/enterprise#80714 Forward-P
Original PR description
### Steps to reproduce: - Open a Helpdesk ticket - Send message on this ticket - Duplicate this ticket - Go to Reporting > Ticket Analysis - Check 'Hours to First Response' value for the duplicated ticket ### Cause: Those fields of response hours are being copied when duplicating tickets. ### Fix: We added 'copy=False' to each of those fields definition so we don't duplicate those fields when duplicating a record. opw-4582995 Forward-Port-Of: odoo/enterprise#80714 Forward-Port-Of: odoo/enterprise#80562
Steps to reproduce: - create two companies - create two analytic account (no company defined) - create for company B an analytic distribution model with one of the analytic account and define company A as parter - With Company A, create an invoice and on the line use the other analytic account and confirm Issue: The distribution model for Company B will not be used and only the account distribution from the original invoice will be defined on the line Cause: In the _get_distribution
Original PR description
Steps to reproduce: - create two companies - create two analytic account (no company defined) - create for company B an analytic distribution model with one of the analytic account and define company A as parter - With Company A, create an invoice and on the line use the other analytic account and confirm Issue: The distribution model for Company B will not be used and only the account distribution from the original invoice will be defined on the line Cause: In the _get_distribution method, the partner is incorrectly set to Company B, leading to this issue. opw-4414850 Forward-Port-Of: odoo/enterprise#78754 Forward-Port-Of: odoo/enterprise#76395
*l10n_nl_intrastat,l10n_nl_reports,l10n_nl_reports_sbr, l10n_nl_reports_sbr_icp,l10n_nl_reports_sbr_ob_nummer, l10n_nl_reports_sbr_status_info [task-4421055](https://www.odoo.com/odoo/project.task/4421055)
Original PR description
*l10n_nl_intrastat,l10n_nl_reports,l10n_nl_reports_sbr, l10n_nl_reports_sbr_icp,l10n_nl_reports_sbr_ob_nummer, l10n_nl_reports_sbr_status_info [task-4421055](https://www.odoo.com/odoo/project.task/4421055)