Wednesday, October 30, 2024
22 changes
2 changes
Resolved issues and error corrections
This fixes an issue where some unit of measure categories were missing when opening Point of Sale because the system matched the wrong records. Point of Sale now has the complete unit information it needs, helping avoid incorrect or missing product unit details during sales operations.
Original PR description
Before this commit, when loading the data for the point of sale, all the uom categories were not being loaded due to a wrong domain declaration. The domain was comparing uom categories ids with uom ids, which is wrong. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix ensures that when a user selects a serial-numbered item stored in a sub-location, Odoo records the transfer as starting from that actual sub-location. It prevents inventory records from showing the item as taken from the broader parent location, reducing confusion and improving stock accuracy.
Original PR description
On a stock move, when using a lot from a sub-location, the created SML will still start from SM's source location instead of lot's location To reproduce the issue: 1. In Settings, enable "Storage…
On a stock move, when using a lot from a sub-location, the created SML will still start from SM's source location instead of lot's location To reproduce the issue: 1. In Settings, enable "Storage Locations" 2. Create a tracked-by-sn product P 3. Update its qty: - SN01 at WH/Stock - SN02 at WH/Stock/Shelf 1 4. Confirm a delivery with 1 x P 5. Enable the column "Serial Number" - SN01 should be present 6. Remove SN01, set SN02 7. Validate the transfer 8. Open the detailed operations Result: SN02 has been taken from WH/Stock, but the user probably wanted to use the existing one, in WH/Stock/Shelf 1. An onchange already exists to make sure that the user is not using a lot that already exists somewhere else. Before Odoo 17.2, we were considering the sub locations as not expected: https://github.com/odoo/odoo/blob/d5a7a3d02e3e2b4e47977abc8b9fc0d5d6135937/addons/stock/models/stock_move.py#L1167 But since Odoo 17.2 (via [1]), we now also accept the sub locations: https://github.com/odoo/odoo/blob/60b0bafc8abd1893c9cdd9913617c234692369cf/addons/stock/models/stock_move.py#L1242 This is a bit confusing because we don't display any warning anymore, but we don't select the correct source location neither. The commit should help the user and avoid that confusion [1] https://github.com/odoo/odoo/commit/99b39b72c7e65e85af6f06dcb6b02867623f3f69 OPW-4231749
7 changes
New functionality added to Odoo
Payroll can now automatically add commission input lines based on the sales commission report when payslips are generated. This reduces manual data entry, helps ensure commission payments reflect current sales results, and improves payroll accuracy for commission-based employees.
Original PR description
- Add an option to auto fill a commission input line on payroll based on the sale commission report at the time of generation
12 changes
Enhancements to existing features
Kitchen tickets in Point of Sale now show clearer order updates, including notes, add-ons, staff member, table or takeaway details, and timing. This helps restaurant teams understand what changed in an order faster and reduces delays or mistakes in kitchen preparation.
Original PR description
In this commit:
-------------------
- We have changed the entire kitchen ticket structure added many important data
to make it more usefule such as
- Diferent title related to the order changes.
- Proper orderline formation with internal notes and addons.
- Who has taken the order.
- Floor, table name with order number and time of order changes.
- Also adapted sitting mode (Dine in, Take out) changes.
- Changed the getOrderChanges functionas below
- Identified and separated only note updates in line
- Added some required informations like comboline and attributes.
- Enabled Order button when sitting mode updated (Dinein <-> Takeout)
- For this we have saved the sittingMode data in last order changes.
Task: 42644331 change
Resolved issues and error corrections
This update fixes an issue where the SLA success rate was incorrectly calculated, considering all historical tickets instead of just those closed in the last 7 days. This change aligns the reporting with how the SLA is displayed in Odoo, providing a more accurate reflection of performance. The fix ensures that SLA metrics are reliable for tracking team effectiveness.
Original PR description
The SLA success rate was previously being computed using the entire history of closed tickets as the domain. This is contrary to the expected behavior, given the helper text on Odoo and the list view of tickets that opens up if you click the percentage. This commit changes the domain to only consider tickets that were closed in the last 7 days. To reproduce on Runbot, follow the steps laid out here, as the process involves forcing tickets to fail and be older than 7 days closed: https://www.odoo.com/odoo/49/tasks/4206255 opw-4206255
Enhancements to existing features
Users can now remove an online bank synchronization from the cog menu even if the connection is currently showing an error. This avoids getting stuck with failed or broken connections that previously could not be deleted.
Original PR description
This commit will authorize to delete an online synchronization from the cog menu even if the connection is in error. Previously, we added a check that if the connection throws a user error or a redirect warning we can't delete it. We will remove this. task: 3981648
Intrastat reports can now include service transactions in addition to goods, supporting Belgian declarations that require service statistics. Users get filters, service codes, and clearer product labels so service reporting can be handled in the existing Intrastat workflow.
Original PR description
[IMP] account_intrastat,l10n_be_intrastat: Add support for service Currently, the Intrastat report is restricted to products whose product type is different than services. Though, statistics report can also be required on Services, such as Declarations F01DGS & F02CMS (Manual : https://www.nbb.be/doc/dq/e_pdf_bb/f01dgs-f02cms_manual_en.pdf) This commit intend to improve the Intrastat report to also include services. Since commodities and services share a lot of similarities, we didn't create a new report but rather added a filter inside the current Intrastat report. It also adds a new column for the service categories and all the service codes. On the product, the string of the commodity code changes if the product is a commodity or a service (and become Service Code in that case) task-2835786
Users can now open CSV files directly in Odoo Spreadsheet from Documents. This makes it easier to view and work with tabular data without converting files outside Odoo.
Original PR description
This commit allows users to open and work with CSV files directly in the Odoo Spreadsheet application task-3869098
Sign email templates now adapt better to mobile screens. This improves readability and usability for people reviewing or signing documents from phones or tablets.
Original PR description
Before this commit, email templates in sign are not responsive in mobile which can cause inconvenience to user. After this commit, make sign email templates responsive for mobile so users will have a better experience with email templates on their mobile devices task-4034697
Knowledge article comments have been reorganized to make editing content easier and comment placement more reliable. The update also centralizes comment actions such as adding, resolving, deleting, and storing comments, which should make the experience more consistent for users.
Original PR description
This commit modifies the comments system so that it is more compliant with the actual state of the codebase in Odoo. The handler is moved below the editor instead of next to it so that it is easier to interact with the editable content. The position of comments is now handled by the KnowledgeCommentsHandler which sets each comment's top position before displaying them. All the bus communications between the handler and the panel are mostly gone and replaced by a service (KnowledgeCommentsService) which handles all the operations linked to the comments' destruction, resolution, insertion and storage. task-3557584
Resolved issues and error corrections
Timesheet leaderboard rankings now take each user's access rules into account, including company-specific permissions. This helps ensure rankings are accurate and fair when employees can record time across different companies or restricted records.
Original PR description
Currently, ir.rules are totally ignored in the leaderboard calculation, leading to wrong ranking in some cases (e.g. ir.rule allowing the user to timesheet across companies). This PR aims to make the leaderboard cognizant to ir.rules, by making sure all the ir.rules are applied to every query used in the leaderboard calculation. task-4040044
Combo products now behave more consistently in online sales: shoppers will not see unnecessary configuration steps, combo products are excluded from wishlists, and combo items follow the intended display order. Analytics reporting for combo prices is also corrected, improving sales tracking accuracy.
Original PR description
- Don't open the combo configurator in eCommerce if there's nothing to configure, - Don't allow combo products in the wishlist, - Order combo items by combo sequence instead of by selection order, - Fix the Google Analytics tracking price for combos. task-4264135 Closes https://github.com/odoo/odoo/issues/182464
The Projects kanban view no longer counts linked documents just to decide whether to show the Documents menu item. This greatly improves loading performance for projects with many tasks, while the Documents menu may now appear even when no documents are present for users with folder access.
Original PR description
## Description Following a32825ee00f2b330d99113f4d8c1488903fe744e, the "Documents" menu-item is hidden when there are no documents in it. The presence of the field `document_count` in the view triggers `_compute_documents`, which is relatively slow for projects with a lot of tasks. It's not worth to incure the cost at each load of this view (which is a hot path) just for hiding a button in a sub-menu. ## Spec Change The menu-item "Documents" is present even if there are no document and you have differnet than `'none'` permission on the folder. ## Benchmark Loading "Projects" kanban view with 5 favourite projects, one of which has 1M+ tasks on next.odoo.com | | Before | After | Speedup | |---------------|--------|-------|---------| | Timings (hot) | 10.2s | 790ms | 12.9x |
Portal users now see only the document actions they are allowed to use, reducing confusion from unavailable options. Internal users also gain smoother uploading in the company documents area, while unavailable duplicate actions are hidden when not permitted.
Original PR description
We disable for portal user, the actions they cannot perform. In the "New" drop down button: - hide "Folder" (create Folder) - hide "Link" (create link) In the cog menu: - hide "Move to trash" - hide "Add shortcut" when the parent folder is not editable In the configure form: - hide lock/pinned toggle buttons - hide owner and partner_id - hide create_activity_option (alias) - hide Email Upload (alias) We also authorize internal user to upload in "My company" folder (which actually upload in the personal drive of the user). Task-4216243
The Documents app now uses a simpler and more consistent rule for identifying company folders: items owned by Odoobot with no parent folder. This makes the folder list and document view behave more consistently, while removing the older pinned-folder concept behind the scenes.
Original PR description
Purpose ======= Simplify the company folder domain. Now the domain is just the documents owned by Odoobot, and without a parent folder. The search panel now use the same domain, and so the only difference now between the kanban view and the search panel is that the search panel only show folders. Technical ========= Because the old `is_pinned_folder` is used in access rule, we can not just set it to False, it needs to reflect the owner_id / folder_id values (it will be cleaned in master). Task-4293841
The Documents list now shows clear icons for folders, links, and file types next to document names. This makes it easier for users to quickly recognize document types, with shortcuts highlighted in blue for better visibility.
Original PR description
Purpose ======= Show the documents types (folder, url and files mimetypes) using icons in the list view. Specification ============= Creating a new 'documents_type_icon" widget that can be displayed alongside the documents names. Reducing the 'type' column's width and removing the column title to make the type icon feel like a part of the document name. Also coloring the shortcuts in blue in the list view. Task-4263142
Resolved issues and error corrections
Fixes an intermittent issue where manufacturing work orders could keep the wrong expected duration after producing serial-tracked items in batches. This helps production planning stay accurate and consistent for manufacturing teams.
Original PR description
This is a non-deterministic bug. Setup: - install mrp, enable workorders and serial numbers - create a storable product A with serial tracking - create a BOM with 1 operation for product A Steps: -…
This is a non-deterministic bug. Setup: - install mrp, enable workorders and serial numbers - create a storable product A with serial tracking - create a BOM with 1 operation for product A Steps: - create a MO for 2 units of product A -> the duration expected on the WO should be 120 minutes. - confirm then plan the MO - produce all -> you'll see a wizard for batch production (2nd wizard) - generate serials then produce or prepare MO (doesn't matter which) Issue: Sometimes the duration of the initial workorder is correctly computed -> 60 minutes, sometimes it is not (left as is). This is a mix of 2 'bugs': First, we have the `self.env['mrp.production'].browse` via a set(). Because it's a set, the productions received are not always in order, so the loop just after may process the last MO first. This triggers the 2nd 'bug'. Second, the first MO (that was planned) won't trigger `_compute_duration_expected` at https://github.com/odoo/odoo/blob/014ed907a2fab280e9fa6dd93b23a6a852700796/addons/mrp/wizard/mrp_batch_produce.py#L116 when changing `qty_producing` because of `is_planned`: https://github.com/odoo/odoo/blob/014ed907a2fab280e9fa6dd93b23a6a852700796/addons/mrp/models/mrp_production.py#L730-L731 instead, it will go through the compute later because the second MO (created in the split, but not planned) will trigger the compute for both ids via `recompute` because the original MO id was still in the pending transactions: https://github.com/odoo/odoo/blob/014ed907a2fab280e9fa6dd93b23a6a852700796/odoo/fields.py#L1413 However, the first workorder will already have its qty_producing set to 1 so won't pass in `_get_duration_expected`. Fix: Use `OrderedSet` instead of set along with `reversed()` so that the loop will process the last MO first. This way the pending compute for the original MO will correctly compute the duration because it's WO's qty_producing will still be zero. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Fixed an issue where adding a down payment from purchase matching could reset a purchase order line back to the vendor’s default price. This preserves the price negotiated on the purchase order and helps avoid billing and reconciliation discrepancies.
Original PR description
### Steps to reproduce the issue: 1. Create a Product and add a Vendor Price under the Purchase tab 2. Create a Request for Quotation from the Vendor with the Product, change the Unit Price 3.…
### Steps to reproduce the issue: 1. Create a Product and add a Vendor Price under the Purchase tab 2. Create a Request for Quotation from the Vendor with the Product, change the Unit Price 3. Confirm Order 4. Create a Vendor Bill from the Vendor with one Invoice Line, click on "Purchase Matching" 5. Select the Invoice Line and click on "Add to PO" 6. Select the PO previously created and Add Down Payment 7. On the PO, the Unit Price on the Product Line has reverted to the Vendor Price ### Explanation: During `_create_downpayments`, `purchase.order.line` created from `account.move.line` are added to `purchase.order.order_line` through a concatenation operator (here a `+`, but `|` would have the same effect). With this operation, `purchase.order.order_line` is flagged as a modified value and needs to be totally recomputed. In the triggered recomputation methods is `_compute_price_unit_and_date_planned_and_name`, which affects multiple values including `unit_price` and uses `product_product.seller_ids`. https://github.com/odoo/odoo/blob/d0e7be7832672d476f1b289af52d3a425990d719/addons/purchase/models/purchase_order_line.py#L313-L318 https://github.com/odoo/odoo/blob/d0e7be7832672d476f1b289af52d3a425990d719/addons/purchase/models/purchase_order_line.py#L351-L358 ### Fix reasoning: With `Command.link`, only the added lines are flagged as new values and `purchase.order.order_line` is not recomputed. opw-4275163
This fixes a payroll/time off issue where changing an accrual allocation start date could leave old carryover expiration values in place, causing the displayed accrued days to become incorrect. Employees and HR teams will now see consistent, accurate time off balances when allocation dates are adjusted.
Original PR description
Steps to Reproduce: Create an accrual allocation: - Carryover date on allocation start date. - Has 1 level: * Start 0 days after allocation start date. * Accrues 1 day monthly on 1st day of the…
Steps to Reproduce:
Create an accrual allocation:
- Carryover date on allocation start date.
- Has 1 level:
* Start 0 days after allocation start date.
* Accrues 1 day monthly on 1st day of the month.
* Carryover policy all accrued time carried over.
* Carryover validity 1 month.
* Leave other options as is.
- Leave other options as is.
Create an allocation:
- Allocation type: accrual allocation.
- Accrual plan: use the one defined above.
- The following dates are in mm/dd/YYYY
- Set allocation start date 08/01/2023.
Number of days becomes 2 days (as expected).
- Set allocation start date 09/01/2023.
Number of day becomes 12 days (as expected).
- Set allocation start date 08/01/2023.
Number of days becomes 13 days (wrong).
The issue is that the expiration date of carried over days and the number of expiring days aren't reset when the start date of the allocation changes.
The fix is to reset these values when the start date of the allocation changes.
task-4208024Unmerging multiple charts of accounts for the same company no longer fails with an unexpected error. This helps accounting users complete account structure changes reliably without manual workarounds.
Original PR description
Currently an error occurs when the user unmerges two or more charts of accounts with the same company. error: `ValueError: Expected singleton: account.account(1249, 1252, 163, 164, 165, 754)` This is because at [1] `self` used to display name here `self` contains multiple records. This commit will fix the above issue by looping records of self and using `display_name` of account, which is needed. [1]- https://github.com/odoo/odoo/blob/0bac60a7085c51ac8cb4f793b013dbea927d180c/addons/account/models/account_account.py#L1108 sentry-5985600163
Shared spreadsheet links now use the standard public documents page setup, preventing crashes when opened by viewers in debug mode or customized environments. This makes publicly shared spreadsheets more reliable and better aligned with other public document pages.
Original PR description
Steps to reproduce: - insert a pivot or a list in a spreadsheet - click on the Share button to share the spreadsheet - Choose "Viewer" for "Anyone with the link" - Copy the link and open it in an incognito window - in the URL, add ?debug=assets => boom This rendered page doesn't have `odoo.__session_info__` which crashes any code trying to read it. In standard, the view validation (only enabled in debug mode) reads it crash. On the saas, some custo also reads it and crashes. Two observations: - this page doesn't need the asset `documents.webclient` (in which is included the backend view stuff and the saas custo) - we can use the `documents.public_page_layout` which already includes `odoo.__session_info__` and the design is more aligned with the other documents public pages Note that I can't really write a test because nothing breaks in standard (except in debug mode) Task: 4297246
This fixes an issue where Odoo Studio could incorrectly combine two separate layout edits: adding a field in one group and removing another group. The change helps ensure Studio saves form customizations accurately, reducing the risk of unexpected layout changes for users.
Original PR description
…ifferent trees
Add a field at the end of the "left" subgroup and remove the "right" subgroup.
```xml
<form>
<group>
<group>
<field name="display_name" />
[ADD A FIELD]
</group>
[ REMOVE THIS GROUP
<group>
</group>
]
</group>
</form>
```
Before this commit, when "normalizing" the xpaths, the add field operation was aggregated with the remove operation because no unchanged node was found in between.
We were left with the inheriting view:
```xml
<xpath expr="[..]/group[2]" position="replace">
<field name="added_field" />
</xpath>
```
After this commit, this flow works and the two operations are independent.
part of task-4207793