Daily updates from Odoo
Wednesday, June 25, 2025
7 changes · 18.0
New functionality added to Odoo
Adds check printing support for Dominican Republic companies, including localized check templates, formatting, translations, and the required MICR font assets. This helps businesses in the Dominican Republic print checks directly from Odoo using layouts aligned with local bank check formats.
Original PR description
Essentially a copy of the l10n_us_check_printing module, adjusted to work with DO stuff. The layouts is adjusted to qualify as 'vaguely matching the target check layout', which I was told is enough.
Concern: I can't fit the layout closer without being able to overlay it over an example blank check background.
Concern: The width of partner address lines (ckdo_payee_addr class in print_check.xml) is a bit too limited (so even Azure Interior's ordinary address turns into a vertical mess) by the generic address line widget ir_qweb_widget_templates.xml -> <template id="contact">. Adding a width parameter directly to .ckdo_payee_addr{} in report_check_*.scss solves this, but it doesn't seem like the correct solution.
task-4290725Resolved issues and error corrections
This fix prevents email style content from being incorrectly removed when it contains more than one embedded data image. It helps outgoing emails keep their intended formatting and appearance while maintaining the existing cleanup safeguards.
Original PR description
In lxml from 4.6.0 to 5.2.0: [1] introduces an issue where "style" tags will always be cleaned if there is more than one data url inside it (the regex is too greedy) in 4.6.0 [2] fixes the issue in the lxml_html_clean module version 0.1.1 which is the dependency that replaces lxml.html.clean from lxml 5.2.0 and up We apply the fix from [2] in odoo directly. With many checks to ensure we don't override any potential deviation from the original regex. The issue only appear from 18.0 onwards, as that's when "email_outgoing" sanitation started being applied [3] [1]: https://github.com/lxml/lxml/commit/73778681f14359fe6d16644e69aaca276eba525a [2]: https://github.com/fedora-python/lxml_html_clean/commit/97402b5f6e94583c8f1c3f6070ef19ce1df90da8 [3]: https://github.com/odoo/odoo/commit/24731938f75358fd3c72b91465b72ab80d62d208 runbot-105525
Cyprus sales to EU customers now use 0% tax for goods and services, aligning invoices with cross-border EU VAT rules. EU purchases now apply and immediately deduct 19% VAT, keeping the net effect at zero while recording the tax correctly.
Original PR description
This PR changes the sales and purchase taxes for Cyprus when selling/purchasing within the EU. - All sales taxes changed to 0% when selling to country within the EU. - All purchase taxes changed to…
This PR changes the sales and purchase taxes for Cyprus when selling/purchasing within the EU. - All sales taxes changed to 0% when selling to country within the EU. - All purchase taxes changed to 19% when buying from country within the EU. However, a second tax repartition line is added at -100% of the tax. The tax is effectively applied and deducted at the same time. - Redundant taxes were removed like zero rate taxes and taxes with reverse charge. task-4488340 Current behavior before PR: - When selling to other EU countries, a 19% sales tax is added to goods and services. - When buying with other EU countries, a 0% VAT tax is added to goods and a 19% VAT tax is added to services. Desired behavior after PR is merged: - When selling to other EU countries, a 0% sales tax is added to goods and services. - When buying with other EU countries, a 19% VAT tax is added to goods and services, and a second tax repartition line is added at -100% of the tax effectively making it 0. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The website numbers-and-charts block now shows progress bars with the correct value when first added. It also prevents a website editor crash when users change label visibility, making page editing more reliable.
Original PR description
The `s_numbers_charts` snippet had two main issues: - The progress bar within `s_numbers_charts` visually appeared as 45% on initial rendering, despite its actual configured value being 25%. This was…
The `s_numbers_charts` snippet had two main issues: - The progress bar within `s_numbers_charts` visually appeared as 45% on initial rendering, despite its actual configured value being 25%. This was due to a mismatch between its `aria-valuenow` attribute and its style `width` property. The display would correct itself when the user manually changed the value. - A crash would occur when attempting to select the "Label" option after dropping the `s_numbers_charts` snippet. This happened because `s_progress_bar_text` was forgotten during the initial implementation of `s_numbers_charts` [1]. This commit addresses these problems by: - Adding the missing `s_progress_bar_text` to the `s_numbers_charts` template. - Including `s_progress_bar_text` in `_computeSnippetTemplates` to ensure that existing databases also receive this fix, as snippets are stored in the database. - Adding a check in the `progress` option to prevent the aforementioned crash. Steps to reproduce the crash: - Drop the `s_numbers_charts` snippet. - Click on a progress bar within the snippet. - Select the option `Label`. - Hover over "Hide" without any other prior interactions. - A crash will occur. [1]: https://github.com/odoo/odoo/commit/6c94fd66c1db75d74588ce670fb6cf1e960cf8bd
This fixes a website form editing issue where some custom property fields could disappear or become unavailable after form settings changed. Business users can keep configuring website forms with all relevant custom fields visible, reducing setup errors and missing form data.
Original PR description
To fix an issue in opw-4794903 where default value may not editable, we are intending to remove data-for values of forms when editing them. This will breaks the possibility to add property fields that was given by 5c08ac23bd4e14cdf12ed67bdd170419bcbb7582 based on the data-for data. In this commit, we are modifying ir.model().get_authorized_fields so it returns all property fields instead of only the one of the current records. opw-4794903 __PR NOTE:__ pull request put back in draft, see comment: https://github.com/odoo/odoo/pull/211083#pullrequestreview-2899441967
Large email marketing campaigns now report progress while processing recipient batches, so the scheduled job is not incorrectly delayed after repeated timeouts. This helps campaigns continue sending at the expected pace instead of being postponed for a day despite normal processing.
Original PR description
# Context : By design the CRON “Mail Marketing: Process queue” handling the email marketing campaigns is expected to time out for large mailing list. By default it tries to generate and commit…
# Context : By design the CRON “Mail Marketing: Process queue” handling the email marketing campaigns is expected to time out for large mailing list. By default it tries to generate and commit batches (default 50) of `mail.mail` records while working through the total list of remaining recipients. See `_action_send_mail_mass_mail` method https://github.com/odoo/odoo/blob/8ff5079b1f5c4df23d56b7f170151408fa7f6f8c/addons/mail/wizard/mail_compose_message.py#L752 In practice, for large mailing lists this will take longer than 15 mins (the default real time limit for CRON jobs) and thus implicitly we expect the worker to time out, re-initiate and continue where it left off. But since Odoo 18, the new refactor of `ir.cron` tries to penalize jobs that time out too often (>3) and don’t report at least a partial progress (`_notify_progress()`). See https://github.com/odoo/odoo/blob/8ff5079b1f5c4df23d56b7f170151408fa7f6f8c/odoo/addons/base/models/ir_cron.py#L361C1-L367C39 While `_process_mass_mailing_queue` does use the notify progress method (https://github.com/odoo/odoo/blob/8ff5079b1f5c4df23d56b7f170151408fa7f6f8c/addons/mass_mailing/models/mailing.py#L1167), it does so at a higher level or granularity (the `mailing.mailing` records in queue). But it will never called as long as the CRON keeps timing out while processing the mails for the remaining recipients (that get committed by batches). Which leads to the CRON being flagged as timing out to many times, and the `nextcall` date of the job being incremented by it’s default value of 1 day. So in practice: - mail marketing starts processing - will time out 3 times after 15 mins (default real time) - new system kicks in and increments the next execution date + 1 day - cron does not run until next day (so no new mail batches created) → artificially low sending rate of the campaign even-though everything is in order # Proposed solution: One could argue that the real unit of work is the committed mail records done in `_action_send_mail_mass_mail`. So we count the processed recipients/mails and call _notify_progress()` before the auto commit (which will be active when the method is called during the CRON). This should ensure that the CRON will not be penalized for timing out too often as long as the recipients are defacto being processed by batches. opw-4633353 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Emails with attachments sent to accounting journal aliases now work correctly when each company uses its own email alias domain and Documents folder. This prevents multi-company errors and ensures attached documents are parsed and linked to the expected accounting entry.
Original PR description
Before this commit ------------------ if a user had a multi-company setup with a different alias domain set for each company, a multi-company error could happen. It happens when sending a mail with…
Before this commit ------------------ if a user had a multi-company setup with a different alias domain set for each company, a multi-company error could happen. It happens when sending a mail with attachment to an accounting journal alias. The exact conditions required to enable the option to centralise all attachments in Documents for the journal in question. steps to reproduce: 1. clean DB with documents_account installed 2. create a 2nd company "company 2" 3. create an alias domain for company 1 "alias.company1.com" and another alias domain for company 2 "alias.company2.com" 4. in documents, create a "finance" folder for company 1 (i.e. set the company_id field on the folder) and another folder for company 2 5. configure the settings for both companies so that all attachments are centralized in documents for accounting, in the respective folder for that company 6. create an alias for some journals in company 2 (e.g. vendor-bills@alias.company2.com) 7. send an email with attachment to that alias -> you will get a multi-company error After this commit ------------------ Sending a mail with attachment to an accounting journal alias creates the account_move as expected. The attachment is parsed as expected. opw-4727873 opw-4655559 opw-4746321 opw-4766895