Daily updates from Odoo
Tuesday, July 1, 2025
19 changes
9 changes
Enhancements to existing features
Purchase routing rules can now use either standard receipt or dropship operation types. This makes it easier to configure dropshipping flows separately from regular warehouse receipts, reducing setup confusion for businesses using both processes.
Original PR description
*: stock_dropshipping With this commit ======================== Previously, only 'Receipt' operation types could be selected for rules with the 'Buy' action. However, with a dedicated 'Dropship' operation type, it's now possible to distinguish between standard receipts and dropship flows. This commit enhances the route rule configuration by allowing both 'Receipt' and 'Dropship' operation types to be selectable for 'Buy' actions. Now that 'Dropship' is an operation type, allowing it for 'Buy' rules ensures correct flow setup for dropshipping scenarios. task-4353843
The Time Off app now shows a helpful balance banner when viewing an employee's time off from their profile, making remaining leave easier to understand. It also corrects manager access when creating leave for subordinates and fixes balances by excluding expired allocations.
Original PR description
When coming from the time off smartbutton on the employee, having a small banner indicating the number of leaves remaining is useful. This PR adds this banner, the same as in the time off dashboard. The PR also fixes two bugs: - When an employee is a time off manager of another employee, he has access to the time off management menu. There, he can create new time offs for all subordinates employees. The field employee_id had the group hr_holiday_user, which is wrong as the time off managers don't necessarilly have this group. Removing the group allows the time off managers to select the correct employee, and the domain on the employee field ensures that the manager can only select subordinates employees. - In hr_leave kanban cards, the time off balance for that time off type is shown. The amount were incorrectly computed. This PR fixes the issue by filtering out the expired leave allocations. Forward-Port-Of: odoo/odoo#213792
This update refines several website builder controls so users can pick colors, switch builder tabs, and edit links more reliably. It also improves the visual consistency of color pickers and prevents template preview images from being cropped, making page customization smoother and clearer.
Original PR description
### [IMP] html_builder, website: improve color palette select UI This brings back the color palette on two columns and styles closer to what it looked like before [1]. [1]:…
### [IMP] html_builder, website: improve color palette select UI This brings back the color palette on two columns and styles closer to what it looked like before [1]. [1]: https://github.com/odoo/odoo/commit/9fe45e2b7ddbbfd0445ffe25a859e67a316d02b2 task-4879833 ### [FIX] html_builder: fix colors of theme tab colorpicker Commit [1] was supposed to fix the theme tab in colorpickers, but the variables were set on the wrong element. As the picker's popover is in another part of the DOM, the variables need to be set either on the `html` or the `body` element. [1]: https://github.com/odoo/odoo/commit/4a48b7ce1257 task-4367641 ### [FIX] html_builder: improve focus on builder tabs The `:focus-visible` state on the builder tabs (Add, Edit, Theme) clashed with the highlight styles as the outline did not have the same width and height. Additionally, `:focus-visible` and `:hover` states were incompatible. task-4879833 ### [FIX] html_builder: prioritize link popover over button overlays In the website builder, the button overlays may sometimes appear over the link popover. Adding a sequence makes sure that the buttons will appear first in the DOM order, and therefore under most other overlays. Steps to reproduce: - Drop enough snippets to have a scrollbar. - On the 1st snippet, have an inner column with a small width (just to make sure that the buttons will appear at the "right" place) and a button or a link at the bottom. - Click on the button => The overlay buttons appear over the link popover. task-4879833 ### [IMP] html_builder, web: integrate BuilderColorPicker styles Use dark styles for the BuilderColorPicker, like the rest of the builder interface. task-4879833 ### [FIX] website: do not crop template option We now insert actual images instead of svgs for the "Template" option on dynamic snippets. The alt is also fixed. task-4879833
When an online payment provider is activated, Odoo now automatically assigns the appropriate outstanding account to the related payment method. This reduces manual setup work and keeps payment accounting consistent with the Invoicing module, while excluding manual payment methods without external integrations.
Original PR description
In this PR: - When activating an Online Payment provider that creates a payment.method.line in a journal, automatically assign an Outstanding account to the payment method. - Uses the existing Outstanding Account resolution method from Invoicing module to ensure consistency across the system. - Applied to all Online Payment Providers that rely on provider integration, excluding manual payment providers without external integrations. task-4826385 Forward-Port-Of: odoo/odoo#216364 Forward-Port-Of: odoo/odoo#213554
Invoices can no longer be sent by email when the customer has no email address on file. This prevents invoices from being marked as sent incorrectly and prompts users to add the missing email first.
Original PR description
On send and print, When a partner has no email a popup prompts the user to add one but the `Send` button remains active. As a result, the email is sent to an invalid address, and the invoice is incorrectly marked as sent. We should block sending invoices by email if the partner has no email (same behavior as on Sales Orders). Task [link](https://www.odoo.com/odoo/project.task/4882552) task-4882552 Forward-Port-Of: odoo/odoo#215425
Discuss now keeps conversations visually stable while loading and uses smoother scrolling when jumping to the latest message or a specific message. This makes chat navigation feel more polished, especially on slower connections or in long conversations.
Original PR description
Before this commit, jump to present and to message in a discuss conversation was visually unappealing. This comes from: - jump to present scrolling is instantaneous, instead of smooth. - jump to…
Before this commit, jump to present and to message in a discuss conversation was visually unappealing. This comes from: - jump to present scrolling is instantaneous, instead of smooth. - jump to message scroll direction is always from top, when the frequent use-case is jump to older message thus should scroll to top. - message list is empty while the thread is loading, so the slower the connection the most visually unappealing it was. This commit improves scrolling experience with jump to present and jump to message as follow: - jump to present uses a smooth scroll effect similarly to jump to message - jump to message scroll direction is based on whether the message is older or newer to loaded set of messages. - message list stay visually in place while thread is loading. Task-4589532 Before  After 
Payroll runs can now generate payslips from a selected list of employees as well as from existing contract versions. This makes payroll processing more flexible when employee work entries are used and helps ensure the right contracts are selected automatically for the pay period.
Original PR description
Problem ---------- Generation of payslip with valid_versions is not enough flexible With work entries, we have to generate payslips for employees. Objective ---------- Change the _get_valid_versions_domain to _get_valid_versions to get only ids Adapt the signature of generate_payslips to use employees or versions to generate payslips Solution ---------- Now the _get_valid_versions give the valid versions ids, so we can directly browse them or add them in a domain, the domain is not forced The generate_payslips can work with versions (first argument by default) and employees, if employee_ids are given, this will fetch valid versions for these employee depending on the pay run config directly. So via the front, we can call generate_payslips with a list of employees if we don't have versions directly. (it will automatically select all contracts valid in the range of payrun as before with contracts) task-4900019
Users registering SEPA Direct Debit payments now see a banner listing any partners who do not have a valid SEPA mandate. This helps staff quickly identify which customer records need attention before payments can be processed.
Original PR description
When users try to register one or multiple payments with 'SEPA Direct Debit' method, and one or more partners don't have a valid SEPA mandate, a banner alerts the user and mention the names of the concerned partners. This makes it easier for the user because he directly sees the partners for which he has to set a SEPA mandate. task-4575537 runbot : https://runbot.odoo.com/runbot/bundle/18-0-sepa-missing-links-roto-353391 Forward-Port-Of: odoo/enterprise#81019
HR users can now open the employee contract version linked to a partially signed offer in a read-only view before countersigning. The signed contract button also consistently opens the correct version, including after a page refresh, reducing confusion during contract review.
Original PR description
New Versions tied to partially signed contracts are now read-only. A smartbutton for HR to view the employee version before countersigning. The smart button exists within the offer form view when the offer is partially-signed, it redirects to a read-only view of the employee version based on the partially signed contract. Fixes When the contract is countersigned, clicking on the "signed contract" smart button now leads to the correct version view. When the page is refreshed, the correct version is still loaded. Task-4873800
2 changes
Enhancements to existing features
This update brings newer Colombian UBL electronic invoicing helpers into this version, aligning it with recent platform improvements. It prepares Colombian invoicing for upcoming point-of-sale electronic document support while keeping the new behavior controlled by a configuration setting.
Original PR description
In master, we recently refactored the UBL generation so that it uses the new tax helpers. This is a back-port of the Colombian part of that refactor. Users will be able to use the new helpers by setting the config param `account_edi_ubl_cii.use_new_dict_to_xml_helpers`. Additionally, back-porting these helpers enables us to reuse them for the Colombian PoS UBL which will be coming out soon. Community PR: https://github.com/odoo/odoo/pull/215610 task-4893999 Forward-Port-Of: odoo/enterprise#88917 Forward-Port-Of: odoo/enterprise#88366
When registering payments by SEPA Direct Debit, users now see a banner listing any partners without a valid SEPA mandate. This helps staff quickly identify which customer records need mandate setup before payments can proceed.
Original PR description
When users try to register one or multiple payments with 'SEPA Direct Debit' method, and one or more partners don't have a valid SEPA mandate, a banner alerts the user and mention the names of the concerned partners. This makes it easier for the user because he directly sees the partners for which he has to set a SEPA mandate. task-4575537 runbot : https://runbot.odoo.com/runbot/bundle/18-0-sepa-missing-links-roto-353391 Forward-Port-Of: odoo/enterprise#81019
6 changes
Enhancements to existing features
Salary offers can now include a contract end date. When an offer is accepted and the employee contract is created, that end date is automatically applied, reducing manual follow-up and improving contract accuracy.
Original PR description
this commit added contract end date in offer, If the offer contract end date is set, then the created contract will have the end date field populated task- 4853216
Payroll payment reports now use the clearer label “payment date,” and payslips are automatically updated with that date. US payslip layouts are simplified to show the payment date, hide less relevant employee details, and display only the last four digits of bank accounts for clearer employee communication.
Original PR description
When creating a payment report, the user must can choose the effective date. The term is ambiguous and is replaced by this commit by payment date. Additonnaly, the pay_date field on the payslip is automatically filled according to the payment date of the attached payment report. Also, this PR improves the US payslip template to better follow best practices: - The payment date is added - The job position, department and worked days are hidden - The phrasing of the bottom sentence has been changed and only the last four digits of the bank account are shown task-4814800
Australian payroll rule parameters have been updated for the 2025 period. This helps ensure payroll calculations use the latest applicable values, supporting accurate payslips and compliance for Australian employees.
Original PR description
Forward-Port-Of: odoo/enterprise#88323
Appointment sharing links are now generated in one consistent place, reducing duplicate behavior across calendar, form, Kanban, and Gantt flows. Users get cleaner name-based links when possible, fewer duplicate invites, and more reliable link editing and creation.
Original PR description
Purpose: The short_code generation mechanism is made central, such that Kanban, Form, and Gantt views' share invite's code duplication can be avoided. Specifications: 1. Generate a unique link. Case…
Purpose: The short_code generation mechanism is made central, such that Kanban, Form, and Gantt views' share invite's code duplication can be avoided. Specifications: 1. Generate a unique link. Case 1: Generate name based link when no link exists for the appointment eg. /schedule-a-demo. Case 2: If a link exists for the appointment: Retrieve the existing link for the current configuration, or else generate a random code. 2. Avoid invite duplication on appointment duplication. 3. Change the button string from Cancel to Discard and short_code_unique_warning in view appointment_invite_view_form. 4. Remove AppointmentInviteViewFormController and associated files, as the same code is done on the server side to avoid code duplication. 5. Generate an appointment name-based link(if the link does not exist)for the appointment listed in the dropdown on the calendar side. 6. We can now alter the short_code of existing link and generate a new link. 7. Set default appointment type when we click on New btn in list view of links of the appointment. 8. Update the appointment name which is created via 'Share Calendar' click. 9. Test case has been created so above functional flow doesn't break. Task-4610207 Co-authored-by: Aurélien awa@odoo.com
Belgian payroll now places the ONSS CO2 fee before the employer ONSS contribution and includes it in that employer contribution total. This helps ensure payslip calculations and reporting better reflect the required treatment of company car CO2 fees.
Original PR description
The ONSS CO2 Fee must appear before the ONSS employer rule and included in its sum. task-3506696
The Partner Ledger no longer shows debit and credit amounts on initial balance and total lines. This reduces confusion from large historical amounts that do not relate directly to the selected reporting period.
Original PR description
Users are sometimes confused because Debit and Credit can show quite high amounts not related to the present period because of the initial balance. We hide these columns for the initial balances, and to remain consistent, for the totals as well in the partner ledger. taskid: 4261294
2 changes
Enhancements to existing features
Starshipit deliveries no longer block when the final shipping cost is not immediately available. Odoo now records a temporary zero cost and later updates the delivery and sales order with the correct price automatically, improving checkout and fulfillment reliability.
Original PR description
**Description of the issue/feature this PR addresses:** This PR enhances the Starshipit integration to reliably handle scenarios where the exact shipping cost is not immediately available from…
**Description of the issue/feature this PR addresses:** This PR enhances the Starshipit integration to reliably handle scenarios where the exact shipping cost is not immediately available from Starshipit after label creation. Cost is fetched via a cron job and correctly applied to both the stock.picking's carrier_price and, crucially, the corresponding Sales Order delivery line. First commit removes the 3-tries loop, and was already reviewed on this [PR](https://github.com/odoo/enterprise/pull/85088). **Current behavior before PR:** When confirming a picking with a Starshipit Delivery method, the exact Shipping cost was not instantly available. The previous code had 3 attempts to retrieve it, before stopping the process, asking the user to try at a later time. **Desired behavior after PR is merged:** The price fetching becomes non-blocking. If Starshipit did not return an immediate `total_shipping_price`, a temporary price of 0.0 will be used. A Cron job will then run on all pickings with a 0.0 carrier price in order to fetch the exact price from Starshipit, and update the SO delivery lines. opw-4748113 When merging on `master`, further improvement might be to introduce a `starshipit_pending_price` boolean field instead of running the CRON job on all 0.0 carrier price pickings. With the new view `view_picking_form_inherit_stock` being introduced, runbot tests fail when migrating to saas-18.1. (Because view is not yet present in the saas-18.1 codebase) **How to test?** - On a runbot DB, install the `delivery_starshipit` module - Configure the DB to interact with the connector - Place a Sales Order with a delivery method configured to use Starshipit. - Confirm the Delivery. The shipping price, if not available, will be temporarily set to 0.0. - Run the Cron Job manually. You can check and activate the Cron by navigating to Settings > Technical > Automation > Scheduled Actions. - Check that the SO has been updated with the actual shipping price from Starshipit. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Sign app’s signature field configuration screens are easier to understand, with clearer labels, better layout, and an option to archive unused field types. Text field sizing is simplified into practical size choices, helping administrators configure signing templates faster and with fewer errors.
Original PR description
Changes include:
- Change of the model name text in form and list views from "Signature
Item Type" to "Signature fields".
- Addition of "active" field in the sign.item.type model to add the
option to archive/unarchive records.
- Capitalized default value of "tip" field from "fill in" to "Fill in".
- Removed "default_width" and "default_height" fields from the form view
and substituted them with a new field "field_size" which allows for 3
values (short, normal, long) and, on change, updates the two height and width fields accordingly. This new field is only displayed when the "field_type" is set to Text.
- Restructuring of the form view to have on the left normal fields and
on the right autocompleted ones.
- Change of the names of two columns on the list view: from "Specific
Model Linked" to "Linked to" and from "Auto-fill Field" to "Linked field".