Thursday, March 13, 2025
38 changes · saas-18.1
Enhancements to existing features
New IoT box images now use “iotbox” as the default device name instead of “raspberrypi.” This makes devices easier to identify as Odoo IoT boxes on a network and reduces confusion with generic Raspberry Pi devices.
Original PR description
Before this commit, the default hostname of an IoT box was 'raspberrypi'. After this commit, the default hostname is now 'iotbox'. task-4642516 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
This fixes a timing issue that could cause the website editor to crash when users rapidly opened and closed the emoji picker. The change makes the emoji picker handle short-lived loading and closing states more safely, improving editing stability without changing user workflows.
Original PR description
Before this commit, when opening and closing emoji picker quickly, it could crash with the following error: ``` TypeError: Cannot read properties of null (reading 'querySelector') ``` Steps to…
Before this commit, when opening and closing emoji picker quickly, it could crash with the following error: ``` TypeError: Cannot read properties of null (reading 'querySelector') ``` Steps to reproduce: - Open website editor - Add a new content block - In content block, add banner with `/banner` - spam click quickly on the banner icon This happens because when clicking very quickly on emoji picker button, the `EmojiPicker` component is in a mounted state and the `gridRef.el` is undefined, thus resulting in the crash when attempting `gridRef.el.querySelector` The grid has no reason to not be in the template. However, the `useRef()` has a special check to determine whether the ref is attached to DOM, and when not then it returns `null`. The website editor uses web editor, which itself mount the emoji picker in a popover. The click handler closes the popover if it was open and re-opens the emoji picker. Close of popover, when too fast, results to destroying popover before the emoji picker, which detaches the emoji picker from DOM, therefore all refs are `null`. The `EmojiPicker` is about to be destroyed, but for a fraction of time it can re-render itself and access to null refs. Emoji picker relies heavily on template to model its matrice of emojis for keyboard navigation and managing overflow of the category navbar. That's why mounting the emoji picker results to 2 renderings. Because of quick mount/unmount, overlay and double rendering of emoji picker, all this puts sometimes the emoji picker in a case of being status "mounted", in a fragment, and calling useEffect to set the active emoji in the grid. This requires `gridRef.el`, which is unfortunately `null` because of being in fragment, thus leading to the crash. This commit fixes the issue by making the code more defensive against `gridRef.el` not be set, to tackle the case the component is in a fragment while it's being unmounted. `navbarRef.el` could also be `null` for a similar reason but instead of useEffect this is triggered from ResizeObserver.
Miscellaneous changes
To reproduce: ============= - create a contact with customer location : Partners/Customer/test - enable 2 steps delivery on warehouse - create SO for the contact and confirm it - validate first step of delivery - check second step of delivery -> the destination location is Partners/Customer instead of Partners/Customer/test Problem: ======== Now that we are creating moves step by step we are not passing the destination location to the second move and using the one set on the rule.
Original PR description
To reproduce: ============= - create a contact with customer location : Partners/Customer/test - enable 2 steps delivery on warehouse - create SO for the contact and confirm it - validate first step of delivery - check second step of delivery -> the destination location is Partners/Customer instead of Partners/Customer/test Problem: ======== Now that we are creating moves step by step we are not passing the destination location to the second move and using the one set on the rule. Solution: ========= when creating second move and it's last step we set destination to final destination location. opw-4374075 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#199278
This fix prevents the form status bar from appearing on top of the fullscreen mass mailing editor. Users editing email content in fullscreen mode should see the workspace correctly without interface elements blocking it.
Original PR description
[Commit] introduced a `z-index` change for the `form_statusbar` element, which resulted in that element overlapping with the fullscreen view for the `mass_mailing` html_field. The `z-index` of `o_mass_mailing_iframe_ancestor_fullscreen` is adjusted to be just 1 lower than `oe_snippets` (the snippets sidebar), hopefully preventing overlaps in the future. [Commit]: https://github.com/odoo/odoo/commit/a7864fcbc00d245df76b62bbed421b5171dbd4d4 task-4643999
Reactions on website messages now display under the original message they refer to, rather than under a related publisher comment. This makes conversations clearer for visitors and reduces confusion when reading feedback or discussions.
Original PR description
Before this commit, message reactions appeared at the bottom of the publisher's comment instead of the original linked message. This commit ensures they are correctly positioned under the original message. Before  After  task-4619148
This fix ensures that when a user clears and deletes an edited message, the message editor closes properly afterward. It prevents the deleted message area from stretching to the full composer width, keeping the chat interface visually consistent.
Original PR description
**Current behavior before PR:** When a user edited a posted message and cleared its body, a confirmation dialog appeared for deletion. After confirming, the message was deleted, but `exitEditMode` was not called. This caused the message to take the full width of the composer. **Desired behavior after PR is merged:** `exitEditMode` is now called when an empty message is deleted, ensuring the composer resets properly and the message bubble maintains the correct width. Task-4642532 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Performance test expectations were adjusted after a related change made publishing checks rely on access rights. This keeps automated tests aligned with the expected behavior when the website app is installed, without changing appointment-only performance counts.
Original PR description
Related to odoo/odoo#201029 Now that Can publish is based on access rights, some extra queries are needed when website is installed. Note that the appointment-only counts are unchanged. task-3175890
The planning scheduler now handles deleted recurring shift patterns without crashing. This keeps automatic generation of future shifts running reliably after managers delete some recurring shifts.
Original PR description
To reproduce: - create two repeating planning.slot records, Shift A and Shift B - delete Shift A and all of its repeats - delete only the last repeat of Shift B - run the "Planning: generate next recurring shifts" scheduled action - Cron fails with "record is missing or deleted" error Problem: The function to create the repeat shifts (planning.recurrency _repeat_slot) iterates over recurrences and deletes them if there are 0 existing shifts linked to them (i.e. Shift A's reccurency). On a subsequent loop iteration, an attempt is made to access the company_id field of the recordset (self) which will now contain a deleted planning.recurrency record, causing the missing record error. Solution: Access the company_id field on the current iterated planning.recurrency record instead of the 'self' recordset. opw-4457844 X-original-commit: b3742b576e67f0391db0e5fcf138950c6275e770
**Issue:** When printing labels in Dymo format, product reference numbers longer than 10 digits are truncated, resulting in incomplete information. **Steps to Reproduce:** 1. Install the Sales app 2. Navigate to Sales > Products 3. Select or create a product with a reference number longer than 10 digits 4. Click Print Labels > Dynamo format > Confirm 5. Notice that the reference number is cut off after 10 digits Expected Behavior: The full reference number should be visible on the pr
Original PR description
**Issue:** When printing labels in Dymo format, product reference numbers longer than 10 digits are truncated, resulting in incomplete information. **Steps to Reproduce:** 1. Install the Sales app 2.…
**Issue:** When printing labels in Dymo format, product reference numbers longer than 10 digits are truncated, resulting in incomplete information. **Steps to Reproduce:** 1. Install the Sales app 2. Navigate to Sales > Products 3. Select or create a product with a reference number longer than 10 digits 4. Click Print Labels > Dynamo format > Confirm 5. Notice that the reference number is cut off after 10 digits Expected Behavior: The full reference number should be visible on the product label, regardless of length Actual Behavior: Reference numbers longer than 10 digits are truncated, showing only the first 10 digits. **Root Cause** The issue arises from a override(https://github.com/odoo/odoo/commit/2b32d1431a33dea9052be3be4f9668a92cd0422e) to the font size of the <small> tag added to Bootstrap. Previously, the font size was set to 0.875em, but it has been updated to 0.8125rem. This change affects text rendering and causes a smaller number of digits to be displayed compared to previous versions. **Fix** To maintain consistency with Odoo 17.0, the font size of the <small> tag is explicitly overridden to ensure the same number of digits is displayed as before. Opw-4578147 Opw-4568804 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#198142
steps to reproduce the bug: - install inventory and invoicing app - change the user access right of the inventory app to `User` - access any of the serial number you have in any of the apps having it Problem: Error is raised because no access right for the `stock.valuation.layer` model to the user group. new attribute `stock_valuation_layer_ids` was added to the `stock.lot`model on the stock_account module, and hence no access right for that model for the user group so now anyone with
Original PR description
steps to reproduce the bug: - install inventory and invoicing app - change the user access right of the inventory app to `User` - access any of the serial number you have in any of the apps having it…
steps to reproduce the bug: - install inventory and invoicing app - change the user access right of the inventory app to `User` - access any of the serial number you have in any of the apps having it Problem: Error is raised because no access right for the `stock.valuation.layer` model to the user group. new attribute `stock_valuation_layer_ids` was added to the `stock.lot`model on the stock_account module, and hence no access right for that model for the user group so now anyone with user access to inventory app won't be able to access the serial numbers or edit them opw-4466042 opw-4551745 Description of the issue/feature this PR addresses: Current behavior before PR: users with `user access right to inventory app` can't access the serial numbers Desired behavior after PR is merged: users with `user access right to inventory app` can access the serial numbers --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#196951
### Description: In PR #192349, we hide the download button in the live shared spreadsheet, but it remained visible in the topbar menu. This commit ensures the button is also hidden in the topbar menu when no pre-generated spreadsheet is available. Task: 4625077 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#200508
Original PR description
### Description: In PR #192349, we hide the download button in the live shared spreadsheet, but it remained visible in the topbar menu. This commit ensures the button is also hidden in the topbar menu when no pre-generated spreadsheet is available. Task: 4625077 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#200508
### 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#199260
Forward-Port-Of: odoo/odoo#193465Oversight of odoo/odoo@8a5019c5e576a4bd9ef745768de47bfab8d31a49 The previous versions of the code were using jQuery, which was compliant with the view element not existing. However, the FW to version 18.0 now uses native JavaScript. When switching to native JavaScript, we have to adapt the code to account for the selected block not existing to avoid a crash. Forward-Port-Of: odoo/odoo#201299
Original PR description
Oversight of odoo/odoo@8a5019c5e576a4bd9ef745768de47bfab8d31a49 The previous versions of the code were using jQuery, which was compliant with the view element not existing. However, the FW to version 18.0 now uses native JavaScript. When switching to native JavaScript, we have to adapt the code to account for the selected block not existing to avoid a crash. Forward-Port-Of: odoo/odoo#201299
Before this commit, a traceback is occurred when the user would like to see the raw data of a specific project and the project stage feature is disabled. This commit adds a group on `duration_tracking` field definition to be sure this field will only be computed when the project stage feature is enabled. opw-3709542 Closes #197321 Forward-Port-Of: odoo/odoo#201313
Original PR description
Before this commit, a traceback is occurred when the user would like to see the raw data of a specific project and the project stage feature is disabled. This commit adds a group on `duration_tracking` field definition to be sure this field will only be computed when the project stage feature is enabled. opw-3709542 Closes #197321 Forward-Port-Of: odoo/odoo#201313
to reproduce 1) install l10n_dk with minor version 1.2 in 18.0 2) delete tax `K-EU-Momsfritaget` from taxes while selecting l10n_dk company. 3) bump minor version and update. 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#201134
Original PR description
to reproduce 1) install l10n_dk with minor version 1.2 in 18.0 2) delete tax `K-EU-Momsfritaget` from taxes while selecting l10n_dk company. 3) bump minor version and update. 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#201134
Before this PR, a request was sent for each character typed inside the search of the invite to the channel panel. This PR introduces a debounce to avoid spamming the server with useless requests. Part of Task-4637517 Forward-Port-Of: odoo/odoo#201373
Original PR description
Before this PR, a request was sent for each character typed inside the search of the invite to the channel panel. This PR introduces a debounce to avoid spamming the server with useless requests. Part of Task-4637517 Forward-Port-Of: odoo/odoo#201373
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 Forward-Port-Of: odoo/odoo#199068
To reproduce: 1) install with any chart of accounts. 2) delete account with account_type equity_unaffected(Current Year Earnings). 3) add custom account with type equity_unaffected. 4) load chart of templates by bumping minor version with a local upgrade script. we should only have one account with equity_unaffected per company, otherwise we violate `_check_account_type_unique_current_year_earning` constraint. Description of the issue/feature this PR addresses: Current beh
Original PR description
To reproduce: 1) install with any chart of accounts. 2) delete account with account_type equity_unaffected(Current Year Earnings). 3) add custom account with type equity_unaffected. 4) load chart of templates by bumping minor version with a local upgrade script. we should only have one account with equity_unaffected per company, otherwise we violate `_check_account_type_unique_current_year_earning` constraint. 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#201300 Forward-Port-Of: odoo/odoo#201073
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#201246 Forward-Port-Of: odoo/odoo#200033
Original PR description
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#201246 Forward-Port-Of: odoo/odoo#200033
After commit 2d4be3a1111451c67c69c016676c935be956c981 the override is no longer needed. Forward-Port-Of: odoo/odoo#200920
Original PR description
After commit 2d4be3a1111451c67c69c016676c935be956c981 the override is no longer needed. Forward-Port-Of: odoo/odoo#200920
Steps to reproduce: - Create a payment - Confirm - Edit and change date - Check associated move Issue: move date is not updated opw-4598423 Forward-Port-Of: odoo/odoo#201213
Original PR description
Steps to reproduce: - Create a payment - Confirm - Edit and change date - Check associated move Issue: move date is not updated opw-4598423 Forward-Port-Of: odoo/odoo#201213
…lled in the test The test was failing when the module was not installed because it was trying to access the auto_batch field but AttributeError: 'stock.picking.type' object has no attribute 'auto_batch' , because we need to install the module to have the field available which is stock_picking_batch module. so I conditionally check if stock_picking_batch module is installed build_error-115361 Forward-Port-Of: odoo/odoo#200964
Original PR description
…lled in the test The test was failing when the module was not installed because it was trying to access the auto_batch field but AttributeError: 'stock.picking.type' object has no attribute 'auto_batch' , because we need to install the module to have the field available which is stock_picking_batch module. so I conditionally check if stock_picking_batch module is installed build_error-115361 Forward-Port-Of: odoo/odoo#200964
Before this commit all systray items of website were hidden for users that did not have the Restricted Editor right. This commit limits only some of the items to users having the Restricted Editor right: - Published: unrelated - Mobile preview: unrelated - Website switcher: unrelated - + New: Restricted Editor only - Edit in backend: unrelated - Translate: Restricted Editor only - Edit: Restricted Editor only It therefore now shows the Published button only based on the result of th
Original PR description
Before this commit all systray items of website were hidden for users that did not have the Restricted Editor right. This commit limits only some of the items to users having the Restricted Editor…
Before this commit all systray items of website were hidden for users that did not have the Restricted Editor right. This commit limits only some of the items to users having the Restricted Editor right: - Published: unrelated - Mobile preview: unrelated - Website switcher: unrelated - + New: Restricted Editor only - Edit in backend: unrelated - Translate: Restricted Editor only - Edit: Restricted Editor only It therefore now shows the Published button only based on the result of the `_compute_can_publish` method of the `website.published.mixin`. The default implementation now checks whether the user has write access to the `website_published` field on the record. Steps to reproduce: - Install `website_crm_partner_assign`. - Connect as a user without any Website role, and in Sales, the "User: Own Documents Only" role. - Go to a partner in the `/partners` page. => "Published" button did not appear. And on the contrary: - Connect as a Restricted Editor user without Sales rights. - Go to a partner in the `/partners` page. - Click on "Published". => An access right error notification did appear. task-3175890 Forward-Port-Of: odoo/odoo#198751 Forward-Port-Of: odoo/odoo#112421
Use case: When sending stock ewaybill with no taxes at that time government API is expecting the taxes values as `0`. Issue: When there is no tax applied we get an empty list due to which it doesn't set the default taxes to `0` Fix: We make sure if there no taxes then return a default taxes as `0` opw-4639009 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#201118
Original PR description
Use case: When sending stock ewaybill with no taxes at that time government API is expecting the taxes values as `0`. Issue: When there is no tax applied we get an empty list due to which it doesn't set the default taxes to `0` Fix: We make sure if there no taxes then return a default taxes as `0` opw-4639009 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#201118
Add a reference VAT number for Japan using the format of a "Qualified Invoice Issuer Registration Number". This will appear as placeholder for the VAT field on the company and partner settings. Also implement the dynamic placeholder system for the company registry field in order to allow filling in placeholders for countries in which it would make sense to do so. Finally, add a placeholder for the company registry for japanese companies and partners. task-4366584 --- I confirm I
Original PR description
Add a reference VAT number for Japan using the format of a "Qualified Invoice Issuer Registration Number". This will appear as placeholder for the VAT field on the company and partner settings. Also implement the dynamic placeholder system for the company registry field in order to allow filling in placeholders for countries in which it would make sense to do so. Finally, add a placeholder for the company registry for japanese companies and partners. task-4366584 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#196347
Steps to reproduce: 1. Create a user partner without an email address. 2. Assign the newly created user as the salesperson of another user. 3. Log in with the user to trigger the traceback. Issue: Attempting to concatenate `False` with a string (`'mailto:'`) in the portal contact template caused a `TypeError`. Fix: Added `t-if="sales_user.email"` to ensure the email field is present before rendering the link. task-4458848 --- I confirm I have signed the CLA and read the PR gu
Original PR description
Steps to reproduce: 1. Create a user partner without an email address. 2. Assign the newly created user as the salesperson of another user. 3. Log in with the user to trigger the traceback. Issue: Attempting to concatenate `False` with a string (`'mailto:'`) in the portal contact template caused a `TypeError`. Fix: Added `t-if="sales_user.email"` to ensure the email field is present before rendering the link. task-4458848 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#197587
Steps to Reproduce: 1. Create a storable product with inventory tracking and assign a barcode. 2. Create an internal transfer from “Partners/Customers” to “Virtual Locations/Inventory Adjustment”. 3. This will generate two quants, one in Customers and another in Inventory Adjustment. 4. Navigate to Barcode > Inventory Adjustment and scan the product’s barcode. Issue: The scan triggers an inventory adjustment for the “Customer” location instead of the correct stock location. Tech
Original PR description
Steps to Reproduce: 1. Create a storable product with inventory tracking and assign a barcode. 2. Create an internal transfer from “Partners/Customers” to “Virtual Locations/Inventory Adjustment”. 3.…
Steps to Reproduce: 1. Create a storable product with inventory tracking and assign a barcode. 2. Create an internal transfer from “Partners/Customers” to “Virtual Locations/Inventory Adjustment”. 3. This will generate two quants, one in Customers and another in Inventory Adjustment. 4. Navigate to Barcode > Inventory Adjustment and scan the product’s barcode. Issue: The scan triggers an inventory adjustment for the “Customer” location instead of the correct stock location. Technical Explanation: • The system fetches all quants related to the product, including those in Vendor, Customer, and Inventory Adjustment locations. • These locations have IDs lower than the stock location (e.g., Customers = 5, Stock = 8). • The front-end caches this data (dbIdCache) and calls _defaultLocation() to determine the location. • Since the cache is ordered by ID, the first location (Customers, ID 5) is incorrectly selected instead of the stock location (8). • As a result, the inventory adjustment is applied to the wrong location. Proposed Fix: • Filter the results to include only internal locations when fetching quants. • This prevents non-internal locations (Vendor, Customers, Inventory Adjustment) from being selected by default. • If a user needs to adjust inventory for an external location, they must first scan the location barcode before scanning the product. Task-4596699 Forward-Port-Of: odoo/enterprise#81107
We support sending credit transfers using ISO 20022 to accommodate non SEPA bank transfers (any party having no IBAN number). However when generating the XML file, we assumed that our company always had an IBAN number and put it in an IBAN node. For non IBAN numbers however we need to put it in another node. This commit fixes that. [opw-4585994](https://www.odoo.com/odoo/project.task/4585994) Forward-Port-Of: odoo/enterprise#81102 Forward-Port-Of: odoo/enterprise#80757
Original PR description
We support sending credit transfers using ISO 20022 to accommodate non SEPA bank transfers (any party having no IBAN number). However when generating the XML file, we assumed that our company always had an IBAN number and put it in an IBAN node. For non IBAN numbers however we need to put it in another node. This commit fixes that. [opw-4585994](https://www.odoo.com/odoo/project.task/4585994) Forward-Port-Of: odoo/enterprise#81102 Forward-Port-Of: odoo/enterprise#80757
## Problem When reversing an invoice and making a credit note on a subscription, the email template was still "Invoice: Sending" instead of choosing the credit note template "Credit Note: Sending". The condition on the following code was always True, meaning the super method, that is used to decide which template to take in case of a credit note, was never called. https://github.com/odoo/enterprise/blob/eb1eff85d2119a34997067fedb602e963a5d6f02/sale_subscription/models/account_move_send.py#L9-L1
Original PR description
## Problem When reversing an invoice and making a credit note on a subscription, the email template was still "Invoice: Sending" instead of choosing the credit note template "Credit Note: Sending". The condition on the following code was always True, meaning the super method, that is used to decide which template to take in case of a credit note, was never called. https://github.com/odoo/enterprise/blob/eb1eff85d2119a34997067fedb602e963a5d6f02/sale_subscription/models/account_move_send.py#L9-L14 ## Steps to reproduce - Take an invoice created through a subscription, reverse it (credit note action) - Try to send it - See that the email template is "Invoice: Sending" and not "Credit Note: Sending" ## Fix A condition was added to differentiate an invoice from a credit note. opw-4455155 Forward-Port-Of: odoo/enterprise#79331
## Purpose - When paying from the portal a quotation for a subscription starting in the past, or in the future, the deadline is incorrectly set which leads in a duplication of the quantities when creating the invoice. - Removal of the banner indicating the cron will run as not needed anymore Task: 4571168 Forward-Port-Of: odoo/enterprise#79828
Original PR description
## Purpose - When paying from the portal a quotation for a subscription starting in the past, or in the future, the deadline is incorrectly set which leads in a duplication of the quantities when creating the invoice. - Removal of the banner indicating the cron will run as not needed anymore Task: 4571168 Forward-Port-Of: odoo/enterprise#79828
Before this commit, when a commission plan was based on achivements of team, the plan user would not be distinguished. As a reusult, the last salesperson would get the totality of the commission. opw-ticket: 4534131 Forward-Port-Of: odoo/enterprise#81226
Original PR description
Before this commit, when a commission plan was based on achivements of team, the plan user would not be distinguished. As a reusult, the last salesperson would get the totality of the commission. opw-ticket: 4534131 Forward-Port-Of: odoo/enterprise#81226
Before the PR: As could be experienced, the SII sometimes sends responses that are not encoded properly, or instead of responding with an XML, the response is an HTML instead. As a consequence of this, a bug was discovered in the response after uploading an AEC file (stands for electronic yielding file in Spanish). After the PR: We added a special parser method, that before transforming the response to a parsed XML, analyzes the encoding, and concludes in an html parsing and posting it to th
Original PR description
Before the PR: As could be experienced, the SII sometimes sends responses that are not encoded properly, or instead of responding with an XML, the response is an HTML instead. As a consequence of this, a bug was discovered in the response after uploading an AEC file (stands for electronic yielding file in Spanish). After the PR: We added a special parser method, that before transforming the response to a parsed XML, analyzes the encoding, and concludes in an html parsing and posting it to the chatter to inform the user. This is difficult to debug since the possible undocumented responses are not easy to reproduce in an SII test environment, so we applied this method only to a particular case, found in some situations for some users. Forward-Port-Of: odoo/enterprise#80002
### 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#80149
Forward-Port-Of: odoo/enterprise#77068### Steps to reproduce: - install l10n_ec_edi_pos - Create a new POS in the EC Company. - With a use without inventory adminstrator access rights: - Open a pos session, select any product and a custome linked to the EC localisation. - Try to validate the POS order that is invoiced using the cash payment method. #### > An access error is raised with respect to the `stock_valuation_layer_ids` fields of the account.move model ### Cause of the issue: Clicking on validate will launch a
Original PR description
### Steps to reproduce: - install l10n_ec_edi_pos - Create a new POS in the EC Company. - With a use without inventory adminstrator access rights: - Open a pos session, select any product and a…
### Steps to reproduce: - install l10n_ec_edi_pos - Create a new POS in the EC Company. - With a use without inventory adminstrator access rights: - Open a pos session, select any product and a custome linked to the EC localisation. - Try to validate the POS order that is invoiced using the cash payment method. #### > An access error is raised with respect to the `stock_valuation_layer_ids` fields of the account.move model ### Cause of the issue: Clicking on validate will launch a call of the `syncAllOrders` method. During this call, missing records will be fetched recursisvely here: https://github.com/odoo/odoo/blob/2108ad3f7c851eeceb84d7459485a18e1574fa64/addons/point_of_sale/static/src/app/store/pos_store.js#L1271 (Note that this call does not exist prior to 18.0). However, as the data contains a pos order that is related to account moves and since the `account.move` model of the localisation inherit from the `pos.load.mixin`: https://github.com/odoo/enterprise/blob/efa1853cf1f9bbd945a91971ffe40c6906482063/l10n_ec_edi_pos/models/account_move.py#L6-L8 the account move will be fetched as a related record to the pos order and we will launch a `read` for the `fields=[]`: https://github.com/odoo/odoo/blob/2108ad3f7c851eeceb84d7459485a18e1574fa64/addons/point_of_sale/static/src/app/models/data_service.js#L513-L515 https://github.com/odoo/odoo/blob/2108ad3f7c851eeceb84d7459485a18e1574fa64/addons/point_of_sale/models/pos_load_mixin.py#L9-L11 However, a read performed with a false value in the `fields` tries to read the value of each field on the records: https://github.com/odoo/odoo/blob/2108ad3f7c851eeceb84d7459485a18e1574fa64/odoo/models.py#L3792-L3798 This includes protected fields such as the `stock_valuation_layer_ids` that can only be read by user's with administrator stock access rights. opw-4498024 Forward-Port-Of: odoo/enterprise#80156
A potential access right issue appears in the case a simple HR user accessed the employee view without payroll rights since source-tax mutations are restricted to payroll users. opw-4607112 Forward-Port-Of: odoo/enterprise#81200
Original PR description
A potential access right issue appears in the case a simple HR user accessed the employee view without payroll rights since source-tax mutations are restricted to payroll users. opw-4607112 Forward-Port-Of: odoo/enterprise#81200
In case of having two lines with the same product, the cfdi field `ValorUnitarioAduana` is wrong, it is set as the total of the two lines. With this commit, we set it as the average of the lines. Steps (with demo data, company `ESCUELA ...`): - Partner "Azure Interior" -> change `Tax ID` from `US12345677` to `123456779` - Product `[E-COM06]` -> - `UNSPC Catgegory`: `01010101` - `Tariff Fraction`: `0101290200` - `UMT Aduana`: `Units` - Make an invoice: - Currency: USD - Two lines for pro
Original PR description
In case of having two lines with the same product, the cfdi field `ValorUnitarioAduana` is wrong, it is set as the total of the two lines. With this commit, we set it as the average of the lines. Steps (with demo data, company `ESCUELA ...`): - Partner "Azure Interior" -> change `Tax ID` from `US12345677` to `123456779` - Product `[E-COM06]` -> - `UNSPC Catgegory`: `01010101` - `Tariff Fraction`: `0101290200` - `UMT Aduana`: `Units` - Make an invoice: - Currency: USD - Two lines for product `[E-COM06]` - Incoterm: `[EXW] EX WORKS` - External Trade: `Definitive` - Confirm and sent to cfdi -> Error opw-4596628 Forward-Port-Of: odoo/enterprise#81205 Forward-Port-Of: odoo/enterprise#80660
Forward-Port-Of: odoo/enterprise#81135
Original PR description
Forward-Port-Of: odoo/enterprise#81135
In this commit: === - Integrated Rappi as a provider in pos_urban_piper. task-4632154 Forward-Port-Of: odoo/enterprise#80923
Original PR description
In this commit: === - Integrated Rappi as a provider in pos_urban_piper. task-4632154 Forward-Port-Of: odoo/enterprise#80923