Daily updates from Odoo
Wednesday, April 1, 2026
70 changes ยท master
New functionality added to Odoo
This update adds support for multiple French fiscal declaration reports (2033-D, 2033-F, 2033-G, 2031, 2065 SD, and 2069-RCI) to the Odoo system. These reports are part of the "Liasse Fiscale" bundle required for French tax compliance, enabling businesses to generate and submit required tax documentation directly from Odoo.
Original PR description
- **[IMP] l10n_fr_reports: add 2033-D report** - **[IMP] l10n_fr_reports: 2033-F** - **[IMP] l10n_fr_reports: add 2033-G report** - **[IMP] l10n_fr_reports: 2031 tax income report** - **[IMP] l10n_fr_reports: add 2065 SD corporate tax return report** - **[IMP] l10n_fr_reports: add report 2069-RCI** - **[IMP] Fixup commit** - **[IMP] Fixup commit** Task ID: 5913160
This update enables users to share content directly to LinkedIn with higher quality images through LinkedIn's official API. Previously, shares were limited to small preview images. The change improves the social media sharing experience by allowing full-size image posts when users authorize the integration.
Original PR description
The linkedin API allows us to post on behalf of users if they authorize it. Notably this allows us to post large images instead of the tiny preview we get with opengraph. Additionally we move some of the linkedin API logic into a class to make it more easily reusable. task-5059124
Enhancements to existing features
This update refines the M3.1 design system styling by introducing a new outlined box style for views outside of groups. The changes revert previous M3 modifications to templates and restore previous layouts with necessary adjustments, improving visual consistency across the application while addressing some remaining styling refinements needed in specific areas.
Original PR description
In some view outside the groups we want the boxes anyway so we introduce the `o_outlined` class. This commit reverts the changes made for M3 to the arch, and bring back the previous template with some adaptation when needed. Note: * clipboard: more refactoring needed in some case icons are not visible * M3: some class are still present task-6054024 Co-authored-by: Luca Vitali <luvi@odoo.com> Co-authored-by: Romain Estievenart <res@odoo.com>
The spreadsheet printing functionality has been enhanced with a proper printing wizard that is now built into the spreadsheet tool itself. This improvement allows us to remove outdated printing code and assets from Odoo, making the system cleaner and more maintainable while providing users with a better printing experience.
Original PR description
A real printing wizard was introduced in o_spreadsheet, we can now remove the `useSpreadsheetPrint` hook in odoo as well as the print asset bundle. Task: 5891329
The self-check-in QR code displayed on the frontdesk kiosk now includes the kiosk's selected language, ensuring visitors see the mobile check-in page in the correct language instead of always defaulting to English. This improvement enhances the user experience for international visitors and multi-language facilities.
Original PR description
Previously, the self-check-in QR code did not include the kiosk's selected language, so the mobile page always defaulted to English. Now, the kiosk language is included in the QR code URL, ensuring visitors see the mobile page in the intended language.
Documents now display clear, standardized messages showing who created them, where they came from, and other important details. This makes it easier for users to understand a document's origin and history without confusion or wasted time searching for information.
Original PR description
Currently, when documents are created, their chatter messages are inconsistent, lack important details, or simply do not exist. This creates confusion and wastes users' time when trying to trace aโฆ
Currently, when documents are created, their chatter messages are inconsistent, lack important details, or simply do not exist. This creates confusion and wastes users' time when trying to trace a document's origin. To solve this problem and improve the user experience, this PR introduces a standardized chatter message format that cleanly captures all essential information. Displayed information: - Document Author - Original document name - Document source (e.g., user upload, email, PEPPOL, or an Odoo app) - Notes section (hidden if empty; used to display the related record when saving an attachment from the chatter) Implementation notes: - Hid redundant creation/tracking chatter messages. - Added a new message subtype (`mt_document_source`) to easily retrieve this information later. - These document messages will be used in future AI tasks, so they are posted even if tracking is disabled. However, a `no_documents_creation_message` context flag was added to forcefully disable them when needed.
The payroll dashboard has been improved to provide a cleaner user experience. The 'set schedule' wizard now automatically hides the working hours field when company working hours are already configured, and displays a more helpful placeholder text. Additionally, the schedule confirmation message is removed once the payroll schedule is set, reducing visual clutter and improving dashboard clarity.
Original PR description
Specifications ============== In 'set schedule' wizard: - If Working Hours is set on the company, hide the field - Change the place holder : "Default working hours used for this company" Remove the 'Monthly payrun is scheduled on xxx' line on top once the schedule is set. Task-6067733
Call settings like push-to-talk preferences and voice duration are now stored locally on each device instead of being shared across all your devices. This improvement allows each device to have its own customized call settings, which is more practical since different devices may have different keyboards and input methods.
Original PR description
Currently "use_push_to_talk", "push_to_talk_key", "voice_active_duration" settings are saved on server, which means they are shared among all devices of the user. Different devices are likely to use different input methods / keyboards, therefore these settings should be per device instead. This commit converts these server settings to localStorage. task-5992929 https://github.com/odoo/odoo/pull/255566
This update fixes a data caching issue in the system's core database layer that was affecting relationship fields (like one-to-many and many-to-many connections). The fix prevents stale or incorrect data from being reused, which improves system reliability across multiple modules including HR, planning, and point-of-sale operations. This ensures users always see accurate, up-to-date information.
This update enhances the Belgian payroll DIMONA declaration system with improved views and wizard functionality. The changes make it easier for HR teams to manage employee declarations and related data through a more intuitive interface and streamlined workflows.
Original PR description
Task: [6035146](https://www.odoo.com/odoo/project/1251/tasks/6035146)
This update strengthens the Odoo system by adding comprehensive tests across multiple modules to ensure tracking features work correctly and won't break with future changes. It also fixes several bugs including incorrect data display and missing validation checks. These improvements help maintain system stability and data accuracy across accounting, HR, and customer management features.
This update reorganizes how Belgian employee salary calculations work in the payroll system. The changes simplify the salary rules by using better categorization of different types of pay and deductions, making the system more flexible and easier to maintain. This also enables the ability to create separate payslips for different types of compensation (like commissions) while ensuring taxes and contributions are calculated correctly.
This update improves how tax declarations (281.10) are organized and shared with employees. Documents are now automatically organized into employee-specific Payroll folders, existing files can be overwritten through a confirmation dialog, and employees receive email notifications with document access links regardless of their user status. This makes the tax declaration process more organized and ensures all employees receive their documents.
Original PR description
Currently, when when a tax declaration (281.10) is generated and posted to Documents, the PDF is generated in the main Documents folder, and an email is only sent to the partner of the employee is the employee is a user. If the document already exists, the PDF posting logic skips that document. - Adds logic to create the employee folder in the Payroll folder if it doesn't already exist, and posts the PDF file into the folder. - Adds a wizard to open a dialog box display existing files and prompts the user to confirm whether they should be overwritten. If the user chooses to overwrite the files, the post logic is called again to overwrite the existing files. - Changes the declaration email template to match the payslip email template to send the employee an email with a link to access the document even as a non-user. Task: 5955050
This update enhances the Belgian payroll system to better validate employees' Joint Committee and Employer Category combinations. The improvement helps ensure payroll data accuracy by identifying and warning about incorrect category assignments, reducing potential compliance and payment processing errors.
Original PR description
Task: 5973879
The spreadsheet printing functionality has been enhanced with a dedicated printing wizard that was introduced in the o_spreadsheet library. This improvement allows us to remove the previous printing hook and related print assets, resulting in cleaner and more maintainable code. Users will benefit from a more streamlined and professional printing experience when working with spreadsheets.
Original PR description
A real printing wizard was introduced in o_spreadsheet, we can now remove the `useSpreadsheetPrint` hook in odoo as well as the print asset bundle. Task: [5891329](https://www.odoo.com/web#id=5891329&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form)
The data cleaning module now uses a single "Similarity Threshold" setting instead of two separate threshold fields, making it simpler to configure. This unified approach works the same way in both manual and automatic merge modes, reducing confusion and configuration complexity.
Original PR description
The data merge model had two separate threshold fields (merge_threshold and create_threshold) that are never used together. This change replaces them with a single field, "Similarity Threshold". Behavior: - Manual merge mode: duplicates with a similarity below the threshold are not suggested - Automatic merge mode: duplicates with a similarity above the threshold are merged automatically task-5892405
This update allows HR teams to filter job applicant offers by the specific benefits package (such as company car or charging station) after the offer is signed. Previously, this filtering capability was not available for applicant-based offers, making it difficult to manage onboarding for candidates with different benefit selections. Now when an offer is fully signed, the system automatically records which benefits package version was selected, enabling proper filtering and reporting.
Original PR description
**Version**: - master **Issue**: - For onboarding purposes, it is currently not possible to filter on the signed version for applicants. (e.g., offers with car, charging station, etc.). **Cause**: - employee_version_id is not set on applicant based offer after the offer is fully signed. **Fix**: - Recompute employee_version_id and set it on applicant based offers when it is fully signed. **Testing**: - Ensure offers still appear in recruitment as they originate from an applicant. - Ensure filtering by employee version works correctly with different benefit values. **Task-5322433**
The system now automatically tracks inventory for products sold through the Urban Piper online food delivery platform. When Urban Piper is enabled for a point of sale location, a dedicated inventory storage location is created to separately manage online orders from regular in-store sales, ensuring accurate stock levels across both channels.
Original PR description
Following this commit: - We will track the inventory for products that are sold online on urban piper side and in our pos sytem also. - As soon as urban piper is enabled for a config then a new `stock.location` is been created for that `pos.config`. - New stock.location is been set in pos.config under `Food Delivery Connector` section. We will track inventory for online order through `urbanpiper_stock_location_id` while normal orders will be tracked through location set in `Inventory` section in pos.config. task-4896303
This update refines the M3.1 design styling by introducing a new outlined box style for certain views. The changes revert previous M3 modifications and restore earlier templates with adjustments to improve visual consistency across the application. This ensures that boxes display correctly in all view contexts, not just within grouped sections.
Original PR description
In some view outside the groups we want the boxes anyway so we introduce the `o_outlined` class. This commit reverts the changes made for M3 to the arch, and bring back the previous template with some adaptation when needed. Note: * clipboard: more refactoring needed in some case icons are not visible * M3: some class are still present task-6054024 Co-authored-by: Luca Vitali <luvi@odoo.com> Co-authored-by: Romain Estievenart <res@odoo.com> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The spreadsheet application has been updated to the latest version with a new built-in print wizard feature. This update includes bug fixes for panel layouts, performance improvements to the rendering engine, and removes the need for separate print handling code. Users will now have a more integrated and streamlined printing experience when working with spreadsheets.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/22e42c7745 [REL] 19.3.0-alpha.7 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)โฆ
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/22e42c7745 [REL] 19.3.0-alpha.7 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/d735bb4198 [REV] spreadsheet: remove `o-spreadsheet-engine` package [Task: 6081583](https://www.odoo.com/odoo/2328/tasks/6081583) https://github.com/odoo/o-spreadsheet/commit/cf03c6cf50 [FIX] side panels: fix layout of panels with tabs [Task: 6022696](https://www.odoo.com/odoo/2328/tasks/6022696) https://github.com/odoo/o-spreadsheet/commit/addf8c6353 [IMP] index : export `collapseHierarchicalDisplayName` [Task: 4734875](https://www.odoo.com/odoo/2328/tasks/4734875) https://github.com/odoo/o-spreadsheet/commit/cdc8e17622 [IMP] spreadsheet: implement a print wizard [Task: 5891329](https://www.odoo.com/odoo/2328/tasks/5891329) https://github.com/odoo/o-spreadsheet/commit/098bc8bb16 [IMP] viewport_collection: pass frozen pane division as argument [Task: 5891329](https://www.odoo.com/odoo/2328/tasks/5891329) https://github.com/odoo/o-spreadsheet/commit/94533b527d [IMP] spreadsheet: use `GridRenderingContext` to draw plugins [Task: 5891329](https://www.odoo.com/odoo/2328/tasks/5891329) https://github.com/odoo/o-spreadsheet/commit/3ff7f8d432 [REF] renderer: decouple rendering logic from getters [Task: 5891329](https://www.odoo.com/odoo/2328/tasks/5891329) https://github.com/odoo/o-spreadsheet/commit/a5bb1d5da3 [IMP] renderer: don't run any animations on `PASTE` [Task: 5891329](https://www.odoo.com/odoo/2328/tasks/5891329) https://github.com/odoo/o-spreadsheet/commit/9378338f1e [FIX] renderer: disable correct animations on `UPDATE_CELL` [Task: ???](https://www.odoo.com/odoo/2328/tasks/???) Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefรจvre (lul) <lul@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya (rmbh) <rmbh@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Rรฉmi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com> Co-authored-by: Marceline Thomas (matho) <matho@odoo.com>
When users click on task activities, they will now automatically see subtask activities even if they haven't enabled the "show subtasks" option. This ensures no activity notifications are missed because subtasks are hidden from view.
Original PR description
Purpose ======= When clicking on the task activities menu, we might have activities on subtask, and if the user doesn't have "show subtask" activated, then he won't see them. This commit force the activation of the subtask when coming from the activity menu. Task-6071691
This update significantly speeds up how the system processes and normalizes text containing special characters and accents from different languages. The improvement makes text processing 4 to 60 times faster depending on the language, which means better performance for users working with international content and large datasets.
Original PR description
This commit refactors the string normalization utility to significantly improving performance on large datasets. It also adds support for four new specific characters that cannot be decomposed usingโฆ
This commit refactors the string normalization utility to significantly
improving performance on large datasets.
It also adds support for four new specific characters that cannot be decomposed
using the standard NFKD process.
The previous fragmented implementation (expandLigatures, unaccent and casefold)
has been replaced by a streamlined, single-pipeline approach.
This new approach also adds explicit handling for the following:
- Expansion of the Icelandic 'รพ' (thorn) to 'th'.
- Mapping of 'ฤ' and 'รฐ' to 'd' and 'ล' to 'n'.
- Proper handling of the Catalan middle dot (lยทl and ล -> ll).
- Removal of invisible soft hyphens (U+00AD).
Performance analysis:
Benchmarks (100,000 iterations) show a drastic reduction in execution time:
- English (ASCII): ~3,800 ms decreased to ~60 ms (60x faster).
- Heavy Unicode: ~3,600 ms decreased to ~900 ms (4x faster).
- Mixed Spanish/French: ~3,100 ms decreased to ~450 ms (7x faster).
Full benchmark datasets and environment details are available in the
linked PR description.
task-id: 6070941
----
### Performance Tests
Tests were executed to check whether performance improvements has been achived. Four scenarios were run :
Scenario 1 : English phrases, without any special characters;
Scenario 2: Heavy Unicode (different languages);
Scenario 3: Spanish phrases, sometimes without any special characters;
Scenario 4: French phrases, sometimes without any special characters.
Each scenario contained ten phrases, each of which was normalised 100,000 times.
The test was executed ten times. (all times are in ms)
New algorithm:
Execution | 1. 100% Fast (English) | 2. 0% Fast (Heavy Unicode) | 3. Spanish | 4. French
-- | -- | -- | -- | --
1 | 57.52 | 1332.46 | 419.21 | 544.33
2 | 66.73 | 967.36 | 410.92 | 476.44
3 | 61.33 | 843.91 | 413.31 | 474.22
4 | 911.26 | 867.30 | 427.60 | 483.63
5 | 92.86 | 1440.15 | 412.41 | 478.56
6 | 47.74 | 900.05 | 426.44 | 479.42
7 | 560.73 | 852.69 | 457.85 | 498.32
8 | 555.90 | 820.31 | 417.67 | 480.84
9 | 83.46 | 1353.63 | 428.43 | 476.67
10 | 615.31 | 832.67 | 418.25 | 485.74
Old algorithm:
Execution | 1. 100% Fast (English) | 2. 0% Fast (Heavy Unicode) | 3. Spanish | 4. French
-- | -- | -- | -- | --
1 | 3432.58 | 3562.92 | 3011.84 | 3106.51
2 | 4161.04 | 3572.33 | 2976.03 | 3138.82
3 | 3347.17 | 3595.12 | 2995.45 | 3102.06
4 | 3384.33 | 3609.53 | 2991.99 | 3123.45
5 | 4047.70 | 3578.22 | 3007.90 | 3128.58
6 | 3922.18 | 3570.60 | 3014.55 | 3109.19
7 | 3827.15 | 3618.92 | 3010.13 | 3132.55
8 | 3857.01 | 3582.42 | 3006.35 | 3156.09
9 | 4126.79 | 3599.13 | 3034.81 | 3104.93
10 | 3830.63 | 3542.27 | 2989.18 | 3125.55
---
### The executed test
```js
test.debug("Performance Test", () => {
const BATCHES = {
"1. 100% Fast (English)": [
"The quick brown fox jumps over the lazy dog",
"Please send the invoice to the main office",
"The meeting is scheduled for next Tuesday at ten",
"Quality control passed for all items in this batch",
"New user registration was successful yesterday",
"Check the stock levels before placing the order",
"Standard shipping usually takes three to five days",
"Update the customer profile with the new address",
"The system will restart in five minutes for updates",
"Follow the instructions provided in the manual",
],
"2. 0% Fast (Heavy Unicode)": [
"L'ลuvre de l'artiste est trรจs cรฉlรจbre ici",
"La niรฑa camina por la calle de la montaรฑa",
"Diyarbakฤฑr ve ฤฐstanbul arasฤฑndaki mesafe รงok",
"รingvellir er fallegur staรฐur รก รslandi",
"Die Straรe fรผhrt direkt zum groรen Mรผnchener Platz",
"Hรธsten er her og bladene faller fra trรฆrne",
"Paweล kupiล ลwieลผe buลki w lokalnej piekarni",
"Cลur de pirate est un groupe de musique",
"Maltese ฤงobลผ is famous for its crunchy crust",
"ฤร Nแบตng is a beautiful coastal city in Vietnam",
],
"3. Spanish": [
"El sol brilla en el cielo azul hoy", // Fast
"La maรฑana estรก muy fresca y agradable", // Heavy (รฑ)
"Necesito comprar pan y leche en la tienda", // Fast
"Mi perro corre por el parque nacional", // Fast
"El niรฑo juega con su pelota de fรบtbol", // Heavy (รฑ, รบ)
"Barcelona es una ciudad muy bonita", // Fast
"Espaรฑa es famosa por su deliciosa comida", // Heavy (รฑ)
"El libro estรก sobre la mesa de madera", // Fast
"La acciรณn de la pelรญcula fue increรญble", // Heavy (รณ)
"El telรฉfono suena en la oficina central", // Heavy (รฉ)
],
"4. French": [
"Bonjour tout le monde comment allez vous", // Fast
"L'รฉtรฉ est ma saison prรฉfรฉrรฉe de l'annรฉe", // Heavy (รฉ)
"Le chat dort sur le tapis du salon", // Fast
"Franรงais est une langue magnifique ร parler", // Heavy (รง)
"Il faut manger pour vivre et non vivre pour", // Fast
"La fenรชtre est ouverte pour laisser l'air", // Heavy (รช)
"Le garรงon court dans le jardin public", // Heavy (รง)
"Le soleil brille trรจs fort cet aprรจs midi", // Fast
"Le chรขteau est situรฉ sur la colline", // Heavy (รข)
"Merci beaucoup pour votre aide prรฉcieuse", // Fast
],
};
const ITERATIONS = 10000;
for (const [name, phrases] of Object.entries(BATCHES)) {
console.time(`perf scenario: ${name}`);
for (let i = 0; i < ITERATIONS; i++) {
for (const phrase of phrases) {
normalize(phrase);
}
}
console.timeEnd("perf scenario: ${name}");
}
expect("").toBe("");
});
```Voice call settings like push-to-talk preferences and microphone duration are now stored locally on each device instead of being shared across all your devices. This allows you to customize these settings differently for each device based on its keyboard and input methods, providing a better user experience when using Odoo on multiple devices.
Original PR description
Currently "use_push_to_talk", "push_to_talk_key", "voice_active_duration" settings are saved on the server, which means they are shared among all devices of the user. Different devices are likely to use different input methods/keyboards, these settings should be per device instead. This commit converts these server settings to localStorage. task-5992929 https://github.com/odoo/enterprise/pull/111982 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The survey module's "Allow Roaming" feature has been renamed to "Free Navigation" to better communicate its purpose to users. A helpful tooltip has also been added to explain that when enabled, respondents can move back and forth between survey questions. This change improves the user experience by making the feature's functionality more intuitive and easier to understand.
Original PR description
The "Allow Roaming" label on the users_can_go_back field was confusing and didn't clearly convey its purpose. Renaming it to "Free Navigation" makes the feature more intuitive for users. Also added a help tooltip to clarify that when enabled, users can navigate back and forth between questions. Task-5864998
Users can now easily add attachments from invoices when sending them through the send wizard. A dropdown menu in the paperclip button displays available attachments, making it simpler to select and include relevant documents without manual file browsing.
Original PR description
This commit allows to add attachments from account.move in the account.move.send.wizard The paperclip button now can show a dropdown menu of these attachments to select from them task-5905527
This update improves how email template errors are reported to users and logged by the system. Instead of showing entire template code and generic error messages, the system now displays specific error details and template names, while limiting log output to prevent system bloat. This makes it easier for support teams to diagnose and fix template issues.
Original PR description
When a QWeb template fails to render, the current logic logs the entire template source and raises a generic UserError. This leads to significant log bloat and makes it difficult for developers andโฆ
When a QWeb template fails to render, the current logic logs the entire template source and raises a generic UserError. This leads to significant log bloat and makes it difficult for developers and support staff to identify the specific failing template or the root cause of the error. This commit improves the error handling in `mail.render.mixin` and `mail.template` by: - mail.render.mixin: Added logic to identify the failing template's name and ID if it belongs to a `mail.template` or `mail.compose.message` (mass mailing). - Log Truncation: Implemented truncation for identified templates, showing only a snippet (first and last 500 chars) in logs and UserErrors to prevent log/UI bloat while keeping full source logging as a fallback for unidentified templates. - mail.template: Improved the `_check_can_be_rendered` constraint to extract and display the specific exception message (e.g., AttributeError) in the ValidationError popup, rather than just showing the field value. - Explicit Error Context: Replaced generic logging with structured calls that include the template label, target model, specific error details, and the technical traceback. OPW-5980295 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update improves the visual design and user experience of the delivery date selection tool in the checkout process. The changes refine the appearance and functionality of the datepicker to provide customers with a better interface when choosing their delivery date during purchase.
Original PR description
followup of task-4486380 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The spreadsheet printing functionality has been enhanced with a native printing wizard integrated directly into the o_spreadsheet component. This improvement allows users to print spreadsheets more efficiently with a better user experience, while simplifying the underlying code by removing legacy print hooks and asset bundles that are no longer needed.
Original PR description
### [IMP] spreadsheet_*: add printing wizard in o_spreadsheet A real printing wizard was introduced in o_spreadsheet, we can now remove the `useSpreadsheetPrint` hook in odoo as well as the print asset bundle. Task: [5891329](https://www.odoo.com/web#id=5891329&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Public holiday timesheet entries are now locked and cannot be edited by users, preventing accidental modifications that could cause payroll and reporting errors. This change ensures consistency with how other time-off entries are handled and protects the integrity of payroll calculations.
Original PR description
Timesheet entries generated from public holidays are currently editable by users with minimal rights. Although these entries appear greyed out, they can still be modified, which can lead to inconsistencies in reporting and payroll calculations. This behavior is inconsistent with other time-offโrelated entries, which are non-editable by default. Hence, this commit makes global time off timesheet entries non-editable in all views, except the grid, which instead displays a user error if they try to edit the timesheet amount. task-5360222
Full-size popups now display with a solid background instead of transparent, making content easier to read and consistent with other popup sizes. This prevents dialog content from visually blending into the page background, improving the overall user experience.
Original PR description
The full-size popup option can be misleading when using a transparent background, as the dialog content may visually merge with the page and become difficult to read. This change removes the transparent background for the full-size popup option and aligns its behavior with other popup sizes, ensuring better readability and visual consistency across all popup layouts. | Before | After | | ------------- | ------------- | | <img width="1646" height="456" alt="image" src="https://github.com/user-attachments/assets/122b266d-8391-45fe-a6be-08177b97f99c" /> | <img width="1659" height="466" alt="image" src="https://github.com/user-attachments/assets/df4e09de-850e-4735-9169-5115465c1372" /> | | <img width="1641" height="707" alt="image" src="https://github.com/user-attachments/assets/51d549f8-f7ff-42de-aba1-52ab0b4adaf0" /> | <img width="1655" height="687" alt="image" src="https://github.com/user-attachments/assets/2085b8ec-f318-4f04-a9ed-af8ecb0d6fa8" /> | task-5435802
This update improves the Razorpay payment setup experience by showing users the most appropriate connection method based on their location. In regions where OAuth is available, users are guided toward the simpler OAuth connection while still supporting manual setup for upgrades. In other regions, manual credential entry is now visible and editable, making it easier for users to get started.
Original PR description
After enabling Razorpay's OAuth for India, we moved the credential fields to debug mode. This makes it hard for users from regions where OAuth is not available to onboard their accounts, as theโฆ
After enabling Razorpay's OAuth for India, we moved the credential fields to debug mode. This makes it hard for users from regions where OAuth is not available to onboard their accounts, as the "Connect" button doesn't work for them and manual credential entry is hidden. Furthermore, in countries where OAuth is supported, we should strongly encourage users to change from manual credential entry to OAuth, while still supporting upgrades. In this commit we adapt the form view of Razorpay to each user's situation, making the default onboarding method the most intuitive one. We hide/show/make readonly each of the fields as necessary. In particular: For countries where OAuth is not supported: - Show editable Key ID, Key Secret and Webhook Secret For countries where OAuth is supported: - Show Key ID and Key Secret only if they are filled, make them invisible if they are blank (to support upgrades, but push users to use OAuth) - OAuth "Connect" button - Show readonly AccountId and Webhook Secret task-4766035
This update improves how mailing lists handle forwarded emails. Previously, forwarding an email to another mailing list's address would be treated as a reply to the original message. Now, when an email is forwarded directly to another mailing list without other recipients, it's properly recognized as an intentional forward and handled accordingly. This makes it easier for users to escalate or redirect messages within mailing list systems.
Original PR description
Standard behavior: when recipients of an incoming email replying to a document contains aliases of records "of the same model" we consider this is a mistake and consider the reply as a reply to the original document, not a forward to a new alias. Use case: people adding randomly alias of projects when answering support emails, hoping this is going to help escalading their ticket. However for mailing lists (mail_group), we want to ease direct forward to other mailing lists. When destination email is the alias of another group, without any other recipient, we consider it is a forward done "in toute conscience" and we handle it as such. Task-4575296
The Time Off and Allocations views now display more clearly with better spacing, no overlapping text, and properly positioned buttons across all devices. The attachments button is now always visible, making it easier for employees to manage documents related to their time off requests on mobile, tablet, and desktop.
Original PR description
This PR enhances the kanban view layout for Time Off and Allocations by: - optimizing spacing - avoiding text overlap - preventing ribbon from covering buttons - improving the mobile layout - alwaysโฆ
This PR enhances the kanban view layout for Time Off and Allocations by: - optimizing spacing - avoiding text overlap - preventing ribbon from covering buttons - improving the mobile layout - always showing the attachments button (previously it was only shown on mobile) task-5072771 | Before | After | |--------|--------| | <img width="414" height="896" alt="mobile-before" src="https://github.com/user-attachments/assets/dfcab16b-08a9-407e-8bf1-b4b135648053" /> | <img width="654" height="1416" alt="All-Time-Off-03-18-2026_10_10_AM" src="https://github.com/user-attachments/assets/a4096e99-9789-44a1-a90b-3f98163808d3" /> | | <img width="820" height="961" alt="tablet-before" src="https://github.com/user-attachments/assets/2a67e342-f293-4cf2-994c-747116082eb9" /> | <img width="2048" height="1962" alt="All-Time-Off-03-18-2026_10_11_AM" src="https://github.com/user-attachments/assets/3de1f259-cae3-4106-b12d-8f21e525a9fc" /> | | <img width="1646" height="1035" alt="desktop-before" src="https://github.com/user-attachments/assets/24d2b131-0f14-4f87-9682-ee635a5f9673" /> | <img width="3380" height="2096" alt="All-Time-Off-03-18-2026_10_12_AM" src="https://github.com/user-attachments/assets/3e98639f-8ac7-4f8f-8daa-7e3b5ee012da" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Point of Sale system has been improved to make order picking creation more flexible and customizable. A new method was created to allow other modules to override how orders are picked from inventory, which enables better tracking of online orders by using dedicated storage locations configured in the Point of Sale settings.
Original PR description
Following this commit: - ` _create_pos_order_picking` method is been created for creating order picking. The reason behind making it separate is to override it in `pos_urban_piper` module. For inventory tracking in online order, we need to select a dedicated `stock.location` that is been selected in `pos.config`. task-4896303
Resolved issues and error corrections
Fixed a display issue in the Australian payroll ATO submission wizard where the checkbox for accepting Terms & Conditions could become misaligned with its text depending on window width. The checkbox now stays properly aligned on the same line as the text, improving the user experience when submitting payslips or payruns to the Australian Tax Office.
Original PR description
- Step to reproduce: with l10n_au_hr_payroll_account installed and validated payslips or payruns click "Sign & Submit to ATO" -> wizard opens with checkbox to accept T&C, mght be misaligned depending on window width. - Cause: if text fills full width then checkbox is moved above. - Solution: using d-flex and utilities, force checkbox on same line as text and allow text to split if necessary. Task: 6051482
This fix resolves crashes that occurred when generating receipts for Colombian POS orders sent to DIAN (tax authority). The issue was caused by incorrect QR code paths and outdated code references. The fix ensures receipts generate properly without errors.
Original PR description
1. When generating the full receipt for a pos order sent to DIAN the receipt generation crashes because the qr code url is a relative path, which makes wkhtmltopdf crash. 2. For invoiced pos orders we were still using old code which would also crash because the `'barcode_src`' key is not returned by `_l10n_co_dian_get_extra_invoice_report_values` anymore Forward-Port-Of: odoo/enterprise#112133
This fix resolves an error that occurred when HR users opened the employee kanban view. The update adjusts access permissions for the first contract date field to ensure it displays correctly for payroll users, with added tests to prevent future issues.
Original PR description
Description of the issue/feature this PR addresses: . Fix traceback when user with group_hr_user rights open employees kanban-view Current behavior before PR: Desired behavior after PR is merged: . Update first_contract_date access group . Verify that first_contract_date is visible for hr_payroll_user group . Add corresponding tests task-6030294 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix resolves an issue where XML files were not being generated for quarterly tax returns in the Italian localization module. The problem was caused by incorrect date logic that used the start date instead of the end date for quarterly period detection. The fix ensures that quarterly tax returns can now be properly exported to XML format, and also improves data accuracy by simplifying the calculation method to avoid duplicate carryover amounts.
Original PR description
## Issue: When the tax return periodicity is set to quarterly and the return is validated, the XML file is not generated and downloaded ## Cause: The quarter detection logic was based on the `date_from` field of the return However, for quarterly returns, the correct reference should be `date_to` Using `date_to` also works correctly for monthly returns ## Steps to reproduce: - Install `l10n_it_xml_export` - Switch to the IT Company - Go in the Tax Report (Monthly VAT Report (IT)) to do a Tax Return (Opening Date: 01/01/2025, Periodicity: Quarterly) - If needed change the Tax Return Periodicity in Settings to Quaterly - Select the first report and ignore the error in Review Before the fix, it is only possible to close the return without generating the XML export opw-5707544 Forward-Port-Of: odoo/enterprise#112399 Forward-Port-Of: odoo/enterprise#108548
This update fixes how decimal separators are displayed in financial report pop-ups to match each user's language settings. Previously, the system always used a period (.) regardless of the user's locale, which could cause confusion for users in regions that use commas or other decimal separators. Now the decimal separator will automatically adjust based on the user's language preference.
Original PR description
Description of the issue this commit addresses: The external value pop up doesn't take into account the locale to chose which decimal separator to use. --- Desired behavior after this commit is merged: The decimal separator is the one determined by the language of the user rather than always a dot. --- task-6010533 Forward-Port-Of: odoo/enterprise#112212 Forward-Port-Of: odoo/enterprise#109948
The placeholder text for the NISS field in the Belgian salary configurator was showing an invalid example format that would actually trigger an error. This fix updates the placeholder to display the correct format (xx.xx.xx-xxx.xx) so users understand what input is expected, improving the user experience and reducing confusion.
Original PR description
As of now, the placeholder text for the NISS field on the salary configurator is "00.00.00-000.00 or / for no NISS" but 00.00.00-000.00 is actually not recognized and shows the error that says to put a valid NISS. For this reason, we modify the placeholder to instead show "Input your NISS in the format xx.xx.xx-xxx.xx or / for no NISS". Task: 6067653
This update fixes unreliable automated tests in the Point of Sale system by making test triggers more precise. The change ensures that tests run consistently and reliably, reducing false failures and improving the quality of our testing process.
Original PR description
Fix undeterministic tours by making some triggers more precise in a few steps.
This update improves the test suite by preventing unnecessary warning messages when certain modules aren't installed. The test now only checks and warns about fields from modules that are actually active in the system, making test results cleaner and more relevant.
Original PR description
For test `TestWriteOverrideTranslatedFields`: before this commit, the whitelist of checked fields could raise warnings when not all relevant modules were installed. This commit refactors the code to check and warn only for installed modules. 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 update fixes a problem where test execution times were being incorrectly measured, sometimes showing negative or extremely large values. The fix switches from using simulated time to real time for measuring test performance statistics, ensuring accurate and reliable test results.
Original PR description
When using faketime the test that can be impacted leading to negative or hudge execution time. Using real time should solve this issue.
This update fixes an issue where the tour service would crash if a previously stored tour was no longer available. The fix also adds a safety check to ensure the DOMPurify library is loaded before displaying special messages, preventing potential errors during the onboarding experience.
Original PR description
When the tour service starts, it looks for the last tour that was stored in localStorage. If the tour is not found, it triggers an error. This commit fixes that issue. It also adds a condition to ensure that DOMPurify is available before displaying the rainbow message. 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 resolves an issue where replacing the contact form on the /contactus page would cause submission errors. The problem occurred because the system was using email settings from the old form configuration even after the form was deleted and recreated. The fix ensures that email settings are only applied when the original form is still present.
Original PR description
Problem: There is a data-for span in the /contactus page that sets specific values on the page's form. If this form is deleted and a new form is added, an error will occur when trying to submit the new form. This is because the value set for website_form_signature will use the email set in the data-for, which will not match with the new form. Purpose: Modify the code that sets the website_form_signature value to ensure that the original form is present as well if using the data-for values. Steps to Reproduce in Runbot: 1. Use the Website Editor to delete the form on the /contactus page and create a new one. 2. Attempt to submit the new form. opw-5956030 Forward-Port-Of: odoo/odoo#253410
This fix corrects a valuation error that occurs when billing purchase orders containing kit products with multiple components. Previously, each component was incorrectly assigned the full kit cost instead of its proportional share, resulting in inflated inventory values. The fix ensures components receive the correct cost allocation based on their share of the kit's total cost.
Original PR description
**Issue**: Billing a PO containing kit with several components can lead to incorrect valuation of its components **Steps to reproduce**: - Create a kit product (by creating a BOM with 2 components)โฆ
**Issue**: Billing a PO containing kit with several components can lead to incorrect valuation of its components **Steps to reproduce**: - Create a kit product (by creating a BOM with 2 components) with AVCO valuation - Create a PO for 1 unit at unit price 10 - Confirm PO and validate the receipt - Go to the BOM of the kit product and check BOM overview -> The cost of the two components are 5, which is correct - Go to Accounting > Vendors > Bill - Create a new bill by indicating the PO in "Auto-Complete" field and validate - Go back to the BOM of the kit product and check BOM overview -> The cost of the two components are 10, which is correct This also occurs with FIFO valuation **Cause**: While computing the value of the move: https://github.com/odoo/odoo/blob/2e4a4f2d063f9b09263e6c137e1c04358020c668/addons/stock_account/models/stock_move.py#L282 https://github.com/odoo/odoo/blob/2e4a4f2d063f9b09263e6c137e1c04358020c668/addons/stock_account/models/stock_move.py#L313-L314 It checks the value of the Bill: https://github.com/odoo/odoo/blob/2e4a4f2d063f9b09263e6c137e1c04358020c668/addons/stock_account/models/stock_move.py#L357-L358 Which relies directly on the AML price of the kit: https://github.com/odoo/odoo/blob/a2b3a10255dba290ea462b9193ae11c54d8dd5e0/addons/purchase_stock/models/stock_move.py#L170 This ignores the `cost_share` of each BOM component. As a result, each component receives the full kit value instead of its proportional share This means that the value of the move is 10 instead of 10/2=5, which makes the valuation computation wrong: https://github.com/odoo/odoo/blob/2e4a4f2d063f9b09263e6c137e1c04358020c668/addons/stock_account/models/product.py#L393 **Aditionnal note** The computation of the quantity is also incorrect: https://github.com/odoo/odoo/blob/a2b3a10255dba290ea462b9193ae11c54d8dd5e0/addons/purchase_stock/models/stock_move.py#L169 since it assumes the quantity of component of the kit is the same than the quantity of the kit itself, which is not true in the general case. opw-5924940 Forward-Port-Of: odoo/odoo#252853 Forward-Port-Of: odoo/odoo#249264
This fix restores the custom header and footer formatting for invoices in Argentina that were not displaying correctly in version 19.2. The issue affected both standard invoices and delivery guides. After this fix, Argentine companies will see their customized invoice layouts properly applied again, matching the behavior from version 19.1.
Original PR description
### Issue: In 19.2, the custom header and footer defined by `l10n_ar` were not displayed on invoices The standard layout was used instead ### Cause: This change: https://github.com/odoo/odoo/commit/eb6e88a25050fff2bd09317739dd51ba451450df modified the `t-call` behavior to ignore `t-set` inside the call Since the `o` variable is defined within the `t-call` in the invoice report: https://github.com/odoo/odoo/blob/a08e84e84aa26e86a291ef0de5bdd4ac20f6274e/addons/account/views/report_invoice.xml#L110-L115 the custom parameters (header and footer) were ignored ### Steps to reproduce: - Install `l10n_ar` and switch to the AR company - Create an invoice - Open the preview ### Before the fix: The default header and footer are used ### After the fix: The custom header and footer are correctly applied (as in 19.1) ### Fix: This PR also fix the delivery guide document opw-6046454 Forward-Port-Of: odoo/odoo#255502
Fixed an issue where Turkish e-invoice XML documents with special characters were failing to save properly. The system now correctly encodes these documents before storage, ensuring that invoices with Turkish characters and other non-ASCII text can be processed without errors.
Original PR description
# Description of the issue/feature this PR addresses: In master, ir.attachment._check_contents() now enforces normalization of the raw field by passing it through fields.Binary.convert_to_cache().โฆ
# Description of the issue/feature this PR addresses: In master, ir.attachment._check_contents() now enforces normalization of the raw field by passing it through fields.Binary.convert_to_cache(). This change exposes an issue where the Nilvera client returns XML content as a decoded Unicode string (str), which is directly assigned to raw. Since convert_to_cache() expects binary-compatible input, passing a Unicode string containing non-ASCII characters (e.g., Turkish characters) results in a failure during base64 decoding. # Current behavior before PR: The XML response from Nilvera is returned as a Unicode string and passed directly to the raw field of ir.attachment. In master, this leads to a crash when convert_to_cache() attempts to process the string, raising a ValueError due to non-ASCII characters. # Desired behavior after PR is merged: The XML content is encoded to UTF-8 bytes before being assigned to the raw field. This ensures compatibility with fields.Binary.convert_to_cache() and allows attachments to be created successfully without errors, even when the XML contains non-ASCII characters. ------------------- taskId - 6084442 I confirm I have signed the CLA and read the PR guidelines at [www.odoo.com/submit-pr](http://www.odoo.com/submit-pr)
This fix restores the custom invoice header that was not displaying for Chilean companies in version 19.2. The header now appears correctly on invoices when using the Chilean localization module, matching the behavior from version 19.1.
Original PR description
### Issue: In 19.2, the custom header defined by `l10n_cl` was not displayed on invoices The standard layout was used instead ### Cause: This change: https://github.com/odoo/odoo/commit/eb6e88a25050fff2bd09317739dd51ba451450df modified the `t-call` behavior to ignore `t-set` inside the call Since the `o` variable is defined within the `t-call` in the invoice report: https://github.com/odoo/odoo/blob/a08e84e84aa26e86a291ef0de5bdd4ac20f6274e/addons/account/views/report_invoice.xml#L110-L115 the custom parameter header was ignored ### Steps to reproduce: - Install `l10n_cl` and switch to the CL company - Create and confirm an invoice - Open the preview ### Before the fix: The default header is used ### After the fix: The custom header are correctly applied (as in 19.1) opw-6057122 Forward-Port-Of: odoo/odoo#255820
Mozambique users were seeing the incorrect Brazilian tax ID label "CPF/CNPJ" on their sales orders and invoices instead of the correct Mozambican label "NUIT". This fix adds the proper tax ID label for Mozambique so users now see the correct terminology on their business documents.
Original PR description
Currently the "Tax ID" title used e.g. on sales orders, invoices, etc. was translated as "CPF/CNPJ" in Portuguese, which is the tax ID used in Brazil. However, in Mozambique, the tax ID is called "NUIT", and there is no language variant for Portuguese in Mozambique. This caused Mozambique users to see "CPF/CNPJ" instead of "NUIT" on their documents, which was wrong. This commit adds a `vat_label` field for Mozambique to display the correct tax ID label. Issue reported by functional support. Forward-Port-Of: odoo/odoo#256603
This fix improves error messages when developers use forbidden operations in functions. Instead of showing a generic 'lambda' label, the system now displays the actual function name, making it much easier to identify and fix problematic code. This is especially helpful when troubleshooting complex server actions.
Original PR description
### Before this commit:
When using a forbidden opcode in a function, it would tell you the opcode was used in the expression 'lambda', which is not useful.
### After this commit:
The function's name is used instead of the hardcoded 'lambda', to provide more useful debugging information.
```python
def foo(x):
x.bar = 2
```
Now raises `ValueError: forbidden opcode(s) in 'foo': STORE_ATTR` instead of `ValueError: forbidden opcode(s) in 'lambda': STORE_ATTR`, which is not helpful in big server actions.This fix improves the payment demo module by adding validation for provider configuration settings. The change ensures that payment provider configurations are properly validated before use, preventing potential errors and improving system reliability for users processing payments through the demo payment provider.
Original PR description
opw-3097856 Forward-Port-Of: odoo/odoo#256362
Fixed a timezone issue that was causing the Inventory Valuation report to run significantly slower than necessary. When users in certain timezones viewed the report, the system was unnecessarily recalculating the entire inventory history instead of using a quick calculation for today's data. This fix reduces report load time from over 40 seconds to just 3 seconds for large inventories.
Original PR description
When accessing the Inventory Valuation report, we check if the selected date correspond to the current day:โฆ
When accessing the Inventory Valuation report, we check if the selected date correspond to the current day: https://github.com/odoo/odoo/blob/3610d16ae47e53860e6e047b98de6a60733a5408/addons/stock_account/report/stock_valuation_report.py#L33-L34 If the date is today, the method _run_average_batch() simply computes the value as qty_available * standard_price. But if it is not, it will replay the whole AVCO history which can be heavy. https://github.com/odoo/odoo/blob/3610d16ae47e53860e6e047b98de6a60733a5408/addons/stock_account/models/product.py#L394-L397 The "date" variable used in the comparison is the local date obtained from the browser while fields.Date.today() returns the UTC date. In certain case, when the local timezone is not on the same day as UTC anymore, this causes the report to be very slow to load because it replays the full history when it should not. We propose to use the context_today() method instead to get the date from the user's timezone. Benchmark: | No AVCO Products | Before PR | After PR | |------------------|-----------|----------| | 12000 | > 40 s | 3 s | opw-6050007 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#256727 Forward-Port-Of: odoo/odoo#255841
This update fixes an unreliable test in the One2Many field component that could occasionally fail due to duplicate record creation. The fix ensures the test runs consistently by preventing a second record from being created when users press Enter to validate input. This improves the reliability of our automated testing process.
Original PR description
This commit fixes a non deterministic one2many field test by ensuring that we don't quick create the record twice.
Before this commit, it might sometimes happen that the validation of the input ("Enter", by default) produced a second name_create. Note that in practice this is highly unlikely to happen as if the user presses Enter, the "Quick create" item in the dropdown only appears during a single frame, thus making impossible for the user to click on it.
runbot error~242204
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#256746
Forward-Port-Of: odoo/odoo#256582This update fixes a bug that could cause the mail system to get stuck in an infinite loop when processing certain types of data. The fix improves how the system compares different values to prevent this issue from occurring. This ensures the mail and messaging features work reliably without unexpected freezes.
Original PR description
This commit prevents possible infinite loops in the Store by comparing the `__code__` attribute of identity objects when available. This is necessary for cases like lambda functions which would otherwise be compared by reference.
This update corrects the size and alignment of the favorite icon that appears in form headers across Odoo. The fix ensures the icon displays properly and is visually consistent with the rest of the form interface, improving the overall user experience when marking records as favorites.
Original PR description
This commit fixes size and alignment for the favorite icon located in forms. task-6080108 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 update fixes a unit test in the website profile module that was failing when running with demo data. The test `test_portal_access` has been adjusted to work properly in demo environments, ensuring that quality assurance processes run smoothly without errors.
Original PR description
runbot-242166
This update fixes unreliable automated tests by making test triggers more precise across several modules. The changes ensure that test steps wait for the correct conditions before proceeding, reducing random test failures and improving overall system stability.
Original PR description
Fix undeterministic tours by making some triggers more precise in a few steps. 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 corrects an issue where loyalty programs were incorrectly matching and accumulating points even when price list functionality was disabled. Previously, disabled price lists were still being retained in the system, causing loyalty rewards to be applied incorrectly. This update ensures that loyalty programs only match when the appropriate conditions are actually active.
Original PR description
When `use_pricelist` is disabled, `available_pricelist_ids` retains previously configured pricelists. This caused loyalty programs restricted to a specific pricelist to still match and accumulate points incorrectly. opw-5952960 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#256398 Forward-Port-Of: odoo/odoo#252718
This fix allows users in countries like Iceland to successfully send invoices through Peppol, even when their VAT numbers don't include a country code prefix. Previously, the system rejected these VAT numbers, preventing invoice transmission. The system now automatically adds the country prefix during export if it's missing.
Original PR description
Current behavior before PR: - There was a restriction that VAT must start with the country code. - But for some countries (like Iceland), VAT does not include the country code. - Because of this, Peppol validation failed (Schematron error) and users could not send invoices. Desired behavior after PR is merged: - Users can now send invoices through Peppol even if the VAT does not start with the country code. Changes implemented: - If VAT does not start with the country code, the prefix is added during export. task-6050791 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix prevents interactive tours from being triggered in the POS when their content isn't available, which was causing the system to crash every time the POS was opened or refreshed. The solution adds a flag to pause tours until they're properly loaded, improving the stability and user experience of the POS module.
Original PR description
When loading the POS, interactive tours were triggered but their steps were not included in the POS bundle. This caused a traceback each time the POS was opened or refreshed. To prevent this, we added a flag `onHold` onto the tour if no steps were found from the database and the registry wasn't loaded. --- Task: https://www.odoo.com/odoo/project/1737/tasks/605029
This update fixes a security issue where cached relationship data (like linked tags or contacts) could show records a user shouldn't have access to. Previously, if an administrator accessed a record's relationships first, regular users would see the same unrestricted data from cache. Now the system properly filters cached data based on each user's actual permissions, ensuring users only see records they're authorized to view.
Original PR description
The values in cache are put in sudo and filtered when converting to records. This way, no matter who reads the field first, the cache contains all ids of corecords which we can filter as we convert from cache to recordset. In other words, `record.tag_ids` returns accessible tags to the current user linked to the record. However, if we had code `record.sudo().tag_ids` that returned all records, `record.tag_ids` would return the same records afterwards directly from cache. Now we filter only accessible corecords before returning them.
This fix resolves an error that occurred when HR users tried to view the employee list in Kanban format. The update ensures that the first contract date field is properly accessible to HR and payroll users, improving the user experience when managing employee information.
Original PR description
Description of the issue/feature this PR addresses: . Fix traceback when user with group_hr_user rights open employees kanban-view Current behavior before PR: Desired behavior after PR is merged: . Update first_contract_date access group . Verify that first_contract_date is visible for hr_payroll_user group . Add corresponding tests task-6030294 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update improves the consistency and reliability of the mail system by adding explicit ordering rules to various mail-related data records. When data doesn't have a defined sort order, it can appear unpredictably to users. This fix ensures that emails, notifications, and related messages are displayed in a consistent, predictable sequence.
Code cleanup and technical improvements
This update removes an outdated payslip tags feature from the HR Payroll documents module that is no longer needed due to workflow changes. The removal simplifies the settings interface and reduces unnecessary configuration options for users managing payroll documents.
Original PR description
According to the linked task, this is not needed anymore since the workings changed. We can fully remove the override since it's the only thing it's adding Task: 5936989
The web push notification code in the mail system has been streamlined by removing unnecessary utility methods and improving documentation. This cleanup aligns the enterprise version with improvements made in the community version, making the codebase more maintainable without affecting user-facing functionality.
This update simplifies how HTML content is processed in the system by removing redundant conversion steps and consolidating the logic into a single, more efficient flow. The change reduces code complexity and makes the system more maintainable while preserving all existing functionality for handling HTML fields.
Original PR description
Drop the `Html.convert_to_column` override and rely on `BaseString`, which already delegates to `convert_to_cache`. Normalize bytes/string values in `convert_to_cache` during create/write, so `convert_to_record` and `convert_to_read` can just wrap cached values as `Markup` without duplicating decoding logic. The record value of Html fields is either `Markup` or `False` (no `''`) Drop `Html.convert_to_read` since record values are already `Markup` or `False`. 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
The mail module's web push notification code has been reorganized and simplified for better maintainability. The changes streamline how notifications are processed by removing redundant code extraction methods and consolidating logic, making the system more efficient and easier to maintain without affecting user-facing functionality.
This update reorganizes how Odoo handles In-App Purchase (IAP) services by creating dedicated bridge modules between IAP and other systems like CRM and Mail. The changes clean up the codebase, remove unused code, and make it easier for developers to add new IAP services in the future. This improves system maintainability without affecting end-user functionality.
Original PR description
PURPOSE Clead and improve IAP services integration in Odoo. SPECIFICATIONS LINKS Task ID 2248367 Community PR odoo/odoo#50556 Enterprise PR odoo/enterprise#10342 Upgrade PR odoo/upgrade#1138 IAP PR odoo/iap-apps#183
This update removes an unnecessary model from the Mail module to streamline the codebase and improve maintainability. The change simplifies the mail system by eliminating redundant code without affecting user-facing functionality.
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