Daily updates from Odoo
Thursday, February 13, 2025
30 changes
4 changes
Resolved issues and error corrections
This fix ensures dark mode styling files are only loaded when dark mode is used, instead of being included in the standard light mode view. It helps prevent visual inconsistencies in restaurant appointment planning screens that use Gantt views.
Original PR description
This commit fixes an asset issue with web_gantt where the dark mode specific assets from web_gantt were included in the main (light mode) assets from pos_restaurant_appointment. Part of task-4571228
Users with Invoicing and Banks access can now open customer statements, partner ledger information, and follow-up tools without needing full Accounting access. This aligns reporting permissions with the newer invoicing role and makes key customer payment workflows available to the intended users.
Original PR description
With the introduction of Invoicing Enterprise (access to bank recon etc) a new user group was created "Invoicing & Banks" (`group_account_basic`)
This group should also be able to access the customer statement / partner ledger (from the partner smart button), as well as the followup wizard.
Implications: The module dependencies change because account_reports are now available with just Invoicing.
Old dependencies
----------------
- `account_asset` ... (and other accounting features)
- `account_reports` (auto installed)
- `accountant` **[Accounting]**
- `account_accountant` (auto installed)
- `account` **[Invoicing]**
New
---
- `account_asset` ... (and other accounting features)
- `accountant` **[Accounting]**
- `account_reports` (auto install)
- `account_accountant` (auto install)
- `account` **[Invoicing]**
Task-4465208The WhatsApp test coverage was updated to match recent shared platform changes around attachment handling, including voice attachments. This helps keep WhatsApp messaging behavior reliable and aligned with the latest expected workflows.
The Sign app now has the missing icon mapping needed to show the correct sidebar icons when new item types are used. This prevents errors and keeps the signing template setup experience working smoothly.
Original PR description
After #75291 we are using `icon_type` map to display the sidebar type icon if it's not defined on the item type. However the `icon_type` map wasn't defined anywhere which causes an error with new types.
26 changes
Resolved issues and error corrections
This fixes a recruitment access issue that prevented users with the Interviewer role from searching applications by applicant name. Interviewers assigned to applications can now find relevant candidates more easily in the recruitment list view.
Original PR description
### Steps to reproduce: - Create a user with 'Interviewer' group - Assign that user as interviewer to few applications - Log in as this user - Go to All applications list view in Recruitment module - Search on 'Applicant' ### Cause: In https://github.com/odoo-dev/odoo/commit/de79f671150ba29737ffc92d22687463b561524d#diff-3a7fc7935e58656320cc3e13fe8311415c847ae6a4273d87ef606ed520f83754 after introducing the hr_candidate we added an access rule for interviewer group to access this class but he can only write on it and can't search on it. ### Fix: We updated the access rule of the interviewer group so hec an be able to search on Applicant name. opw-4501932
The login flow now handles missing passwords correctly by showing the expected access denied message instead of an unexpected system error. This makes failed login attempts clearer for users and avoids confusing error pages.
Original PR description
Whenever you supply no password you are supposed to get an AccessDenied error. However in this case there will no be password supplied. This happens because of: https://github.com/odoo/odoo/blob/1f9f4dd165fccfaadf06c3ae68d742f5348bc9b6/addons/web/controllers/home.py#L122 When there is no value the key will also not be present. Therefore you will receive a keyerror instead of an accessdenied. This commit fixes that behavior and now you will get the accessdenied error as was originally intended.
The Point of Sale search box now keeps the text a user is typing when connected IoT devices refresh their status. This prevents interruptions during product searches and makes cashier workflows smoother.
Original PR description
Before this commit, when an IoT device was connected, if you kept typing in the search box, the input would be reset to its previous state with each statusLoop execution. This fix cancels the debounce on re-render, ensuring that the search word is preserved. opw-4562152 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an intermittent issue in the HTML editor's automated tests where focus tracking could sometimes use outdated selection information. The change helps make editor behavior and testing more reliable without altering visible business workflows.
Original PR description
Fix a non-deterministic error happening during the HOOT unit Test. The cause seems to be related to the hoot mock selection which do not always return the latest focused element in the document.getSelection(). runbot-115550 Related to : #197287 & #197345 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Employees without Time Off administration rights could be blocked from opening their Time Off dashboard when one of their allocations used an accrual plan. This fix ensures the dashboard can check the needed accrual plan details safely, preventing an access rights error for regular employees.
Original PR description
Accrual plans are not readable for regular users, so once a user has an accrual plan set on one of their allocations, they cannot open their time off dashboard. Access rights error gets thrown. The…
Accrual plans are not readable for regular users, so once a user has an accrual plan set on one of their allocations, they cannot open their time off dashboard. Access rights error gets thrown. The bug was supposedly fixed in commit: https://github.com/odoo/odoo/commit/30f7fe62ef2579ed0a0c3ad9dbec5edf2ca60b18 but it did not consider adding the sudo() for the condition based on the carryover_policy. Steps to Reproduce on Runbot: As Mitchell Admin: 1. Install Time Off app 2. Create a time off type (show in dashboard,requires allocation) 3. Create an accrual plan (accrued_gain_time: end, carryover_date: year_start) 4. Create a rule for the accrual plan (Accumulate 0.5 days, month at the 1st of the month, carryover policy is either none or maximum) 5. Create an allocation for Marc Demo,who has no time off rights, for the time off type. Set to accrual allocation and link to the accrual plan.Then, set the start date to the 1st of the month and run until some future date. As Marc Demo: 1. Attempt to click into the Time Off app 2. Observe Access Right error opw-4551392 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Link previews in Mail now handle page text encoding more reliably, so accented characters display correctly. This improves readability when users preview shared links from sources that use different encodings.
Original PR description
### Steps to reproduce: - Open the To-do app. - Paste the link into the editor (e.g., https://drive.google.com/file/d/1oNZsDWEUjxpwbB8tkv1CRCfp-pcKHhGG/edit). - Click on the link to open the preview. - Notice that accents are displayed incorrectly. ### Solution: - Retrieved encoding from the response or detected it using `chardet`. - Decoded the content using the detected encoding or fell back to UTF-8 if decoding failed. - Processed the decoded content to parse the HTML tree. ### Description of the issue/feature this PR addresses: Accents were not displayed correctly on the preview due to encoding mismatches. ### Desired behavior after PR is merged: Accents in the preview are displayed correctly as the content is decoded using the appropriate encoding, with a fallback to UTF-8 if needed. task-4435229
This fixes an issue in the HTML editor where pressing Enter after right-to-left headings, preformatted text, or quotes created a new paragraph in the wrong left-to-right direction. Users writing in right-to-left languages now get consistent text direction when continuing their content.
Original PR description
**Current behavior before PR:** When there is a `heading`, `pre` or `blockquote` tag in `rtl` direction, pressing enter at the end of element creates a new `p` tag in `ltr` direction rather than `rtl`. **Desired behavior after PR:** Now, pressing enter at the end of `heading`, `pre` or `blockquote` tag in `rtl` direction creates a new empty paragraph tag with `rtl` direction. task-4484619 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Product pages are now accessible to public shoppers when the “Pick up in store” delivery method is enabled. This prevents affected e-commerce visitors from seeing a 403 error and helps keep the shopping experience uninterrupted.
Original PR description
__Current behavior before commit:__ Since [this pr][1], a 403 error appears on the product page if the "Pick up in store" delivery method is set. __Description of the fix:__ Add a missing sudo on the `product_or_template` like it is done 2 lines above. __Steps to reproduce the issue on runbot:__ 1. Configure and publish the delivery method "Pick up in store" 2. Go to a product page in the e-shop as a Public User opw-4574924 [1]: https://github.com/odoo/odoo/pull/195033
The Project kanban view now correctly shows the Assign button when users hover over task assignment tags. This restores an expected action that had disappeared after a prior layout update, making task assignment easier from the board view.
Original PR description
The 'Assign' button of the field many2many_tags_avatar is always invisible in the kanban views with the class o_kanban_project_tasks. This happens because the condition that make it appear when the line of the field is hovered is never met: the class oe_kanban_content no longer exists since the refactoring of the kanban archs (see task: 3992107). Here we modify a bit the css rule so that the 'Assign' button can become visible when appropriate.
Internal users can now mark portal messages as to-do by toggling the star, and the portal correctly reflects that status. This fixes a visible workflow issue for users who manage messages from the portal and adds coverage to prevent regressions.
Original PR description
Before this PR, toggling the star on a message (`Mark as Todo`) didn't work for internal users, even though the feature is available to them in the portal environment. This happens because: - The…
Before this PR, toggling the star on a message (`Mark as Todo`) didn't work for internal users, even though the feature is available to them in the portal environment. This happens because: - The `starred` value is not sent with the message data when fetching the messages in the portal. - Sending over the bus is not available in the portal. This PR fixes the issue by returning the proper data either when fetching the messages or when toggling the star. There is an extra query when calling `portal_message_format` because of `mail_message_res_partner_starred_rel`. Also, there is `sometimes` another extra query when calling `portal_message_format` on multiple messages depending on which partner is already in the cache. This is what happens: Without extra query: - Query on res_partner by `_read_format` for `5 partners` - Computing starred starts (_compute_starred) - Query for mail_message_res_partner_starred_rel - Computing starred ends With extra query: - Computing starred starts (_compute_starred) - Query for mail_message_res_partner_starred_rel - Query on res_partner by `_read_format` for `4 partners` - Computing starred ends - Query on res_partner by `_read_format` for `1 partner` Although it doesn't happen all the time, this PR considers an extra query count for this process to avoid unwanted crashes on related tests. task-4526370
A missing test setup link was added so recently introduced website sale collection checks are included when the test suite runs. This helps prevent future issues from slipping through, with no expected change for everyday users.
Original PR description
Commit 2d4be3a added tests but import was missed.
Fixed how taxes are calculated when fixed or points-based discounts are applied to sales orders. This ensures tax amounts reflect the actual reduced product price, helping businesses stay aligned with accounting and tax requirements.
Original PR description
Commit db12319e8b3b662a1498ee9a519fbced457174cc introduced a wrong behaviour for the discounts applied to an order when they are fixed or depending on the number of points. With this commit, the taxes applied would the ones set on the reward product if at least one line in the sale order had these taxes. Disregarding any other taxes applied, or not setting taxes at all. This was done to facilitate the reading of a sale order. Accounting wise, this is wrong. A product is paid less, so less taxes needs to be recorded. It's not optimization, it's regulation. Reverting part of db12319e8b3b662a1498ee9a519fbced457174cc to evaluate how to ease the user life without having them getting on the warpath of their accountant. opw-4486030 TODO in master: take off taxes fields.
The blog post snippet's horizontal layout now removes the divider from the final entry as intended. This fixes a small visual inconsistency on website pages, making blog lists look cleaner and more polished.
Original PR description
`s_dynamic_snippet_blog_posts` in the horizontal layout is displaying a border on the last entry while it should not. This is due to the `record_last` instead of `data_last` introduced in https://github.com/odoo/odoo/commit/dbb72d1f68cf7f462e1d6bdf8998f29627ccc2f0 Steps to reproduce: - Add a blog post snippet `s_blog_posts` in the page - Change the template option to "Horizontal" in the editor - Scroll to the last entry, it shouldn't have a border task-4182265 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes a validation gap that allowed more than one reference unit in the same unit category when editing inactive records before saving. The change protects data consistency and avoids upgrade problems caused by invalid unit relationships.
Original PR description
Steps to reproduce: * Open the form view of any UoM category. * Add a new line in the units list. * Without saving, Uncheck "Active" checkbox. * Before saving, change the type of this unit to reference. * Save the form. Expected behavior: An error should be thrown as it's not allowed to have more than one reference unit for some category. Current behavior: The record is normally saved without any errors. This issue caused an inconsistency when upgarding a database in such state to saas18.1, where each unit points to its reference as a parent. Having multiple references in the same category caused a having a cycle in this link. See: https://github.com/odoo/upgrade/blob/master/migrations/uom/saas~18.1.1.0/pre-migrate.py#L16-L25 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
French VAT reimbursement amounts are now recorded in the correct closed reporting period without requiring new accounting entries in that period. This helps ensure VAT declarations remain accurate after period closure.
Original PR description
When we ask for a reimbursement for the VAT that is due from the state, we close the period, then we send the declarations, with the amount that is asked as reimbursement. The issue is that we need this amount to be registered in the report of this period. But it is closed, so we can't post moves with the tag in it. Let's transform it into an external value. task-4328721 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix adjusts the calendar view styling so short or compact events display more cleanly. It helps users read and manage calendar entries with fewer visual glitches.
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
This fix avoids conflicts when automated subscription payments and payment webhooks try to update the same invoice at the same time. Payment notifications will still be recorded on the related sales order, helping keep records consistent without interrupting automated billing.
Original PR description
Scenario ======== the subscription cron that automate the payment, start a payment transaction get the response and post process the the payment. In the meanwhile, the webhook receive also the response and try to post a message on the invoice in _log_message_on_linked_documents This lead to concurrent update on the invoice Solution ======== use _get_invoices_to_notify to remove the invoice currenctly handled by the invoice cron from the payment notification. The notification won't appear on the invoice in this flow, that's not a problem. Payment notification is also set on the sale order
Shared spreadsheet links that include Odoo charts now load correctly instead of showing a blank screen. This ensures recipients can reliably view shared spreadsheets containing graph-based data.
Original PR description
1. Insert a graph view into the spreadsheet. 2. Click the "Share" button to generate a shareable link. 3. Open the link in an incognito window. 4. A blank screen appears, with errors logged in the console. The condition for detecting live data in the spreadsheet was incorrect, causing shared links to break. This PR updates the condition to correctly check for the presence of Odoo charts. Task: 4551470
Subscription billing details now show recurring amounts in the order's currency, so customers and sales teams see the right values. The update also improves how the last invoiced date is identified, preventing incorrect next invoice or deferred date information in customized setups.
Original PR description
Before this commit, the _next_billing_details would not compute the amount in the currency of the order.
This fixes an issue where timesheet changes made from an employee’s grid view could be saved against the wrong person. Updates now respect the context of the page, so hours remain correctly linked after refreshing.
Original PR description
Before this commit, the context of the action was just ignored in the grid view and so the default values stored inside that context are not taken into account during `grid_update_cell` method. Steps…
Before this commit, the context of the action was just ignored in the grid view and so the default values stored inside that context are not taken into account during `grid_update_cell` method. Steps to reproduce the issue ---------------------------- 0. Install timesheet_grid module 1. Open Employees app 2. Click on an employee to open the form view 3. Click on the timesheets smart button to view the timesheet grid view for that employee 4. Navigate to a week that already contains hours for the current user 5. Update the grid cell containing a timesheet to reduce the number of hours for instance 6. Update another cell without any timesheets linked and set a hour Current Behavior ---------------- After refreshing the page and going to the same week, the changes made in step 5 and 6 are no longer applied. The reason is because those changes have generated new timesheets for the current user instead of the employee displayed in the form view before doing the step 3. Expected behavior ----------------- The grid view should be unchanged after refreshing the page, the changes made in 5 and 6 should be applied without any issues. opw-4491850
This fixes an issue where opening the Planning Gantt view with a start date in the link could display too many time columns. The schedule view now stays easier to read and avoids confusion for users planning shifts or resources.
Report buttons now correctly trigger the intended error action when something goes wrong. This restores behavior that was accidentally lost during a previous update, helping users get clearer guidance instead of a missing or broken response.
Original PR description
During this forward port the feature error_action was lost: https://github.com/odoo/enterprise/pull/79108 This commit aims to bring it back.
This update fixes visual issues in the appointment type kanban view so appointment cards display more consistently. It corrects ribbon spacing, standardizes empty avatar sizing, and improves mobile alignment for easier reading.
Original PR description
Purpose ======= Fix some UI issues in the appointment type kanban view. Specification ============= - The ribbon is now wrapped around a div which is messing up the kanban display. Applying some style to make it position absolute and avoid a strange spacing. - Keep UI consistency by resizing the empty avatar card for resources to match the one used for users. - On mobile view, align the appointment title with its details. Task-4518542
Fixed an issue where warehouse users could not create a new product from a scanned barcode when restricted product scanning was enabled for receipts. This restores the expected barcode lookup flow and prevents unnecessary blocking during receiving operations.
Original PR description
Barcode lookup is not working when activating `restrict_scan_product` Steps: - Go to 'Receipts' operations type - On the barcode tab, activate `restrict_scan_product` - Go to barcode app, receipts operation and scan a new product (eg 510002952387) -> Error: "Not the expected scan - You must scan a product" We should be able to create a new product. With this commit we make an extra check on the guilty condition in the stock_barcode_barcodelookup module opw-4429769
Subscriptions will no longer assign a salesperson as the customer contact if that salesperson has no email address. This prevents customers from seeing portal errors caused by invalid email links and keeps subscription portal access working reliably.
Original PR description
Steps to Reproduce: 1. Create a user partner without an email address. 2. Create a subscription and set the salesperson to the newly created user. 3. Confirm the subscription order. 4. Log in as the subscription partner. Issue: This happens because `sales_user.email` is `False`, leading to an invalid `mailto:` link. Cause: The system sets the salesperson as the contact person for the partner, even when the salesperson does not have an email address configured. Fix: Added a condition to ensure the salesperson's email (`subscription_user.email`) is defined before aligning the partner's `user_id` with the salesperson. This prevents setting a salesperson without an email as the partner's contact person, thereby avoiding the error. Impact: This fix ensures that the portal view does not encounter issues due to missing email addresses for salespersons.
Fixes an issue where closing entry PDFs for past tax return periods could show the current period instead of the selected one. This helps accountants generate accurate tax documentation for historical reporting periods.
Original PR description
### Steps to reproduce: - Go to Accounting > Reporting > Tax return - Select a period in the past - Click on "Closing Entries" - Post - The period on the generated PDF is wrong ### Cause: This…
### Steps to reproduce: - Go to Accounting > Reporting > Tax return - Select a period in the past - Click on "Closing Entries" - Post - The period on the generated PDF is wrong ### Cause: This [commit](https://github.com/odoo/enterprise/commit/22878ec7e38c2a9fbf871beb239d01a42a17546a) changes `options['date']['filter']` to replace `tax_period` by the period (`'month', 'quarter', 'year'`). This causes `custom_tax_period` to be replaced by `custom_month` for example. Then in `_init_options_date` which computes the date for the report `options['date']['filter']` is checked: - If any of these strings: `'month', 'quarter', 'year'` are in the filter name then it computes the period with today's date - If `tax_period` and `custom` is in the filter name then it keeps the correct date So since this commit, `_init_options_date` always return today's date with `custom_tax_period` as filter. ### Solution: The value `custom_tax_period` wasn't expected by the commit introducing the issue and values like `custom_month` doesn't make sense. So this commit checks if `custom` is in the filter before replacing `tax_period`. opw-4543231