Daily updates from Odoo
Navigate
Branch
Friday, April 19, 2024
79 changes
1 change
Miscellaneous changes
**Current behavior:** If a recurring sale order has an associated sale order option and the recurring plan of the order is changed, a trace back occurs. **Expected behavior:** The recurring plan can be changed as it ordinarily would. **Steps to reproduce:** 1. Add a recurring product to a sale order 2. Add an optional recurring product to the order 3. Try to change the recurring plan of the order to encounter the trace back **Cause of the issue:** This flow causes some 'phanto
Original PR description
**Current behavior:** If a recurring sale order has an associated sale order option and the recurring plan of the order is changed, a trace back occurs. **Expected behavior:** The recurring plan can…
**Current behavior:** If a recurring sale order has an associated sale order option and the recurring plan of the order is changed, a trace back occurs. **Expected behavior:** The recurring plan can be changed as it ordinarily would. **Steps to reproduce:** 1. Add a recurring product to a sale order 2. Add an optional recurring product to the order 3. Try to change the recurring plan of the order to encounter the trace back **Cause of the issue:** This flow causes some 'phantom' sale order lines to have their price recalculated (phantom because they have no price, qty, currency, nor order_id field values). During this recalculation a currency_id is expected either in the line itself or in the sale order it is a part of. Because there is no value for either of these, it fails the ensure_one() method in the sequence (0 vals, expects 1). The phantom lines are created in the `sale.order.option` model in the `sale_management` module, in `_compute_price_unit()` and `_compute_discount()`. **Fix:** Call `invalidate_recorset(flush=False)` on these cached records at the end of the methods in which they are created. Test added in https://github.com/odoo/enterprise/pull/58264 opw-3754297 Forward-Port-Of: odoo/odoo#158950 Forward-Port-Of: odoo/odoo#157515
45 changes
Enhancements to existing features
Accounting move PDFs now include deferred start and end dates when applicable. This makes documents clearer for users reviewing deferred revenue or expense timing and reduces the need to look up dates elsewhere.
Original PR description
Before this commit the start date and end date were not present in the pdf of moves. task-3817563
Odoo Enterprise now uses a newer Bootstrap version, improving the foundation for screens, styling, and future theme options across several apps. The update also includes small visual fixes for dialogs, barcode lists, modal backgrounds, and dark-mode alert colors to keep the user interface consistent.
Original PR description
*: account_followup, account_reports, documents, frontdesk, room, sign, snailmail_account_followup, web_studio This commit upgrades Bootstrap library from versison 5.1.3 to 5.3.3. In a nutshell, the…
*: account_followup, account_reports, documents, frontdesk, room, sign, snailmail_account_followup, web_studio This commit upgrades Bootstrap library from versison 5.1.3 to 5.3.3. In a nutshell, the big changes are : - A lot more CSS custom properties all over the place - ScrollSpy has been completely rewritten (moving from onscroll listener to IntersectionObserver) - Support for color modes (aka. light/dark modes ; but currently disabled as we don't take advantage of it yet). Note: even though the new color modes have a lot of potential, as we don't take advantage of it yet, the built-in dark mode is currently disabled. It should be enabled once actually implemented. This commit also removes the `.bg-text-*` helpers backported from Bootstrap 5.2 (and now built-in) and an override of the `Tooltip.prototype.setElementContent()` function as the Tooltip component now delegates the its content assignation to the `TemplateFactory` class. References: - https://getbootstrap.com/docs/5.3/migration task-3600468 Related PR: https://github.com/odoo/odoo/pull/158560
Appointment scheduling is now easier to understand in the Gantt view, with clearer wording around unavailable attendees and improved display for longer attendee lists. Events marked as available are also shown correctly, reducing confusion when reviewing appointment availability.
Original PR description
The enhancement addresses several aspects of the appointment's usability and performance in managing attendees and displaying availability within the Gantt view. **Key Improvements:** - Attendee Alignment: Adjusted the alignment of the unavailable attendee list to comply with updated guidelines. - Terminology Update: Replaced 'user' with 'attendees' in the appointment event form view (unavailable attendee alert) to better reflect the context and improve clarity. - Availability Visibility: Modified the Gantt view logic to correctly represent events marked as "available." Previously, events set to available erroneously displayed as unavailable, leading to confusion. - Unavailable Attendees Handling: Improved the UI for displaying a long list of unavailable attendees. Now, if the list exceeds a certain length, the title is positioned at the top, with the names of the attendees listed below, enhancing readability and user experience. Task-3815370
Odoo VoIP can now be configured to work with multiple providers instead of being limited to a single setup. This gives businesses more flexibility to manage phone services across teams, vendors, or deployment needs while keeping user configuration and access controls aligned.
Original PR description
* = test_discuss_full_enterprise, voip_onsip Add the support for multiple voip providers. Task-3130964
Employee skills in demo data are now generated and improved on a more regular timeline. This makes sample HR data feel more realistic and consistent for demonstrations and testing.
Original PR description
To improve demo data quality and consistency : skills are generated randomly and have a 1/3 chance of being improved every 3 months. task : 3682538
Managers can now resend appraisal feedback requests to all employees linked to an appraisal, making follow-up easier when responses are missing. The appraisal survey status badge color was also aligned with other views for a more consistent user experience.
Original PR description
With this commit, a new action resend is available to resend a feedback message to all employees linked to an appraisal. And the color of state badge changed to be consistent with others views. task : 3749709
The document split tool now detects blank pages and uses them to suggest where a document should be split by default. This saves users time when separating scanned or combined documents, while still allowing them to adjust the split points manually.
Original PR description
This commit allows the split tool to take blank pages into account to determine where to split the document by default. One can change that afterward if he wants to.
Task-3478062Users can now turn existing attachments into managed Documents directly from the attachment area. This reduces manual steps, helps teams organize files into workspaces faster, and makes document management more accessible from everyday workflows.
Original PR description
task-2360547
Scheduled social and event notifications are now sent much closer to the time chosen by users, reducing delays that could cause people to miss live events. The scheduling process is also more resilient because interrupted jobs can restart and continue processing unsent posts, though rare duplicate posts may occur after failures.
Original PR description
Goals: - Have a more accurate scheduler Previously, the push notification system used a cron job that was executed once every hour. For the event module, having such delay can be really problematic…
Goals: - Have a more accurate scheduler Previously, the push notification system used a cron job that was executed once every hour. For the event module, having such delay can be really problematic as an event can start at any time. If an event starts right after the execution of the cron job, the users will be notified one hour after the begining of the event. The users could hence miss the event which is pretty unfortunate. Now, the posts will be posted via a cron job that will be executed at a specific point in time. With the new cron jobs, the moment when the posts is actually posted will be much closer than the moment specified by the end-user. This is mainly due to the fact that the daemon process that executes the cron jobs will do a lookup once every minute. - Improve the reliability of the scheduler Thanks to the cron job, the system will also be more resilient: If the cron job crashes while sending the posts, the cron job will be restarted and the system will be able to process the posts that have not been marked as processed (i.e: "posted" or "failed"). The system will guarantee an "at-least-once delivery" of the live posts meaning that there could be some potential duplicates in case of failures: If the server crashes after having sent the request to the external services and before marking the "live posts" as processed, the cron job will be restarted. It will then re-select the live posts that has not been marked as "processed" and will send another request to the external services. As those services are not idempotent, the services will produce another post. LINKS Task id: 2336219
Document folder and tag filters can now be displayed in a defined order, making long filter lists easier to scan and use. This helps teams organize document navigation consistently based on the fields that matter to their workflow.
Original PR description
PURPOSE Allow to sort the items of a folder/tag filter by a specific field of the comodel. SPEC Add an 'order' attribute on the tag of the searchpanel. Task 2001615
Manufacturing work orders now show the reserved lot for components assigned during picking validation and pre-fill the quantity to produce instead of starting at zero. This helps shop floor users work faster and reduces the chance of entering the wrong lot or production quantity.
Original PR description
Tablet view - Pre fill Production Quantity
Manufacturing work orders now handle partial production more consistently by creating follow-up manufacturing orders from any relevant work order, not just the first one. The tablet view no longer starts work automatically, and backorders are avoided when multiple people are actively working on the same manufacturing order, reducing confusion and duplicate follow-up work.
Resolved issues and error corrections
The preparation display is now shown in the main menu when the restaurant point-of-sale module is installed. This makes the kitchen display easier for restaurant staff to find and access during daily operations.
Original PR description
In this commit: =============== The `pos_preparation_display` (preparation display) will be visible in the main menu if the `pos_restaurant` module is installed." task-3725031
The Mail app now tells the web interface which chat types support seen-status tracking. This avoids unnecessary work for chats where the feature does not apply, providing a small performance improvement without changing user workflows.
Original PR description
This info was only available to python/server code. This is now provided to JS/client code, so that it can avoid computing fields related to seen feature on threads that do not support this feature. This very slightly helps performance. https://github.com/odoo/odoo/pull/162445
Users without marketing-related permissions will no longer see campaign menus or email marketing options they cannot access. This prevents confusing navigation and avoids permission errors when social users open restricted campaign features.
Original PR description
User has only the access rights for social poster and, no access rights for email marketing, marketing automation and sms marketing, is still able to see the email marketing icon similarly this issue is for social manager rights. Which leads to record rule error. In social module the campaigns menu shows without any access rights. this commit solve this issue, i.e. the email marketing icon will not shown if user dont have any access rights. and also campaigns menu is hidden if user dont have any access related to that menu. **TaskID - 2417993**
This fixes an issue where cancelling an appointment too close to the allowed cancellation deadline could fail instead of showing the expected result. The appointment flow now keeps the needed customer information during cancellation, improving reliability for website bookings.
Original PR description
Fix following up : https://github.com/odoo/enterprise/pull/17141
Manufacturing users can now record partial quantities across work orders without getting stuck or needing to create a backorder just to continue. The tablet view also shows more accurate quantities for remaining work and component consumption, reducing confusion during production.
Original PR description
When processing production across various work orders, if after the first work order, less quantity is produced in any of the work orders, Odoo locks the WO and it is not possible to go back to it and treat the remaining quantity again (as in V12/V13). The only way to treat the remaining quantity is to create a backorder from the source MO. Also a misleading message appears when this under production is recorded : https://drive.google.com/file/d/1NppBavfj30IjkhbCwBcIMrsw_ohDrec1/view?usp=sharing FIX : If the user only records partial quantity, leave the field open and let the user record the rest.
When users open Studio from a form with multiple tabs, the same tab now stays open instead of switching back to the first one. This makes editing smoother by preserving the user's context and avoiding extra navigation.
Original PR description
currently, When enabling studio on a form view, it reset the notebook page and activate the first page instead of the currently activated page. this commit fixes the issue by adding autofocus on the activated node and therefore enabling studio on a form view, it will display the currently activated page instead of the first page. TaskID-2416755
Creating a custom stat button in Studio no longer fails because of invalid generated field names. This restores the expected ability for users to add stat buttons without encountering a naming error.
Original PR description
currently, when try to create state button, it raise error 'Custom field names cannot contain double underscores' this is happening because, we give explicitly '__' while creating field_name in commit- 3ee34f4b869998d8a6f5f29b1792bc70add9da00 and before we did not check for '__' in field_name so error does not raise. we start to check for '__' after Task-2060257. after this commit, replace '__' with '_' so now The stat button is created. Task - 2475554
Code cleanup and technical improvements
The VoIP module was reorganized and cleaned up to align with newer coding practices used elsewhere in Odoo. This should make future VoIP improvements easier and safer to deliver, with little expected change for end users.
Original PR description
Pursue the refactoring of the VoIP module: - Remove unnecessary newlines in xml attributes - Rename widget css classes as follows: o_widget_WidgetName_templatePart Part of task 2376357
The VoIP module’s internal files have been reorganized into clearer widget-based sections, and older code structure has been updated to modern module standards. This does not introduce a new user-facing feature, but it should make future improvements and maintenance easier and more reliable.
Original PR description
Start refactoring the VoIP module by reorganizing files: - Move files from /js/ and /xml/ to newly created /widgets/ subdirectories - Split systray_voip_menu.xml from dialing_panel.xml - Replace old odoo modules with ES modules Part of task 2376357
Financial reports now apply styling and value formatting more consistently after report lines are prepared. This makes reports more uniform for users and simplifies future report maintenance by centralizing formatting behavior.
Original PR description
Put the classes and format automatically the values. This will help to have a better harmony, and also makes implementation of reports more subject to use the `no_format` key; which can be useful in multiple cases.
Miscellaneous changes
Forward-Port-Of: odoo/enterprise#61138 Forward-Port-Of: odoo/enterprise#60420
Original PR description
Forward-Port-Of: odoo/enterprise#61138 Forward-Port-Of: odoo/enterprise#60420
Package is wrongly set on product line in barcode scan Steps: - Have a product P tracked by lot - Set 2 stock quant in 2 locations: 1st in loc1 with lot L and package P 2nd in loc2 with lot1 and no package - Create a picking (Customer delivery) for P with source loc2 - With barcode make the delivery, scan the lot number -> The pack P is set on the product line, even if the package P is in loc1 We pass the location id through the context in order to adapt the domain in `pref
Original PR description
Package is wrongly set on product line in barcode scan Steps: - Have a product P tracked by lot - Set 2 stock quant in 2 locations: 1st in loc1 with lot L and package P 2nd in loc2 with lot1 and no package - Create a picking (Customer delivery) for P with source loc2 - With barcode make the delivery, scan the lot number -> The pack P is set on the product line, even if the package P is in loc1 We pass the location id through the context in order to adapt the domain in `prefilled_owner_package_stock_barcode()`, doing that we ensure we also cover the case where we have 2 stock quant with one with no package and the other with package. opw-3746608 Forward-Port-Of: odoo/enterprise#61110 Forward-Port-Of: odoo/enterprise#59342
Steps to reproduce: - Install Contacts, Accounting and l10n_mx_edi_extended - Switch to a Mexican company (e.g. ESCUELA KEMPER URGATE) - Go to company form and configure its address (*) - Create a US customer (e.g. Foreign Customer) (*) - In Accounting settings: * activate "Customer Addresses" * use Mexican Bank for automatic currency rates (*) - Configure a product for external trade (e.g. Office Chair) (*) - Create an invoice: (*) * Customer: Foreign Customer * Delivery Addr
Original PR description
Steps to reproduce: - Install Contacts, Accounting and l10n_mx_edi_extended - Switch to a Mexican company (e.g. ESCUELA KEMPER URGATE) - Go to company form and configure its address (*) - Create a US…
Steps to reproduce: - Install Contacts, Accounting and l10n_mx_edi_extended - Switch to a Mexican company (e.g. ESCUELA KEMPER URGATE) - Go to company form and configure its address (*) - Create a US customer (e.g. Foreign Customer) (*) - In Accounting settings: * activate "Customer Addresses" * use Mexican Bank for automatic currency rates (*) - Configure a product for external trade (e.g. Office Chair) (*) - Create an invoice: (*) * Customer: Foreign Customer * Delivery Address: [different than customer] (e.g. Deco Addict) * Journal in: USD * Usage: Without fiscal effects * Product: Office Chair * Incoterm: EX WORKS * External Trade: Definitive - Confirm the invoice - Try to generate CFDI via "Send & Print" button (it will probably fail) (*) https://www.odoo.com/documentation/17.0/applications/finance/fiscal_localizations/mexico.html#external-trade Issue: Check the generated CFDI in CFDI tab. The data for element `<cce20:Destinatario><cce20:Domicilio /></cce20:Destinatario>` are incorrect. "Calle", "NumeroExterior", "NumeroInterior", "Pais" and "CodigoPostal" are coming from the current company instead of the delivery address. opw-3715960 Forward-Port-Of: odoo/enterprise#61088 Forward-Port-Of: odoo/enterprise#60829
- Ensure that only managers can see the "Add a Leave" button to prevent crashes caused by unauthorized user groups attempting to access it. - Replace the "Share Availability" and dropdown button with "Share Appointment Link" which will work the same as the dropdown was working but will not contain the "Select Dates" and "Any time" options for user groups without permission to access the "appointment.type" record. - "Share Appointment Link" button will only appear if we have some custom lin
Original PR description
- Ensure that only managers can see the "Add a Leave" button to prevent crashes caused by unauthorized user groups attempting to access it. - Replace the "Share Availability" and dropdown button with "Share Appointment Link" which will work the same as the dropdown was working but will not contain the "Select Dates" and "Any time" options for user groups without permission to access the "appointment.type" record. - "Share Appointment Link" button will only appear if we have some custom link means current user is assigned in some appointment. - Now the buttons creating the custom appointment and the any-time appointment are hidden for the user who lacks access so we can clean some sudo from the controller as "group_appointment_user" already have rights to create the appointment types. Task-3697864 Forward-Port-Of: odoo/enterprise#61054 Forward-Port-Of: odoo/enterprise#61009
# Introduction: `JSON.stringify` was used to serialize the properties for the `/article` command instead of the classical `encodeDataBehaviorProps` which also uses `encodeURIComponent` above the `JSON.stringify`, to avoid having some special characters as an attribute value. # The issue: `html_field.js:getEditingValue` is recovering the current value in the DOM using `innerHTML` which converts some characters from tag attributes to HTML entities, i.e.: `"` for `"`. `mail.py
Original PR description
# Introduction: `JSON.stringify` was used to serialize the properties for the `/article` command instead of the classical `encodeDataBehaviorProps` which also uses `encodeURIComponent` above the…
# Introduction: `JSON.stringify` was used to serialize the properties for the `/article` command instead of the classical `encodeDataBehaviorProps` which also uses `encodeURIComponent` above the `JSON.stringify`, to avoid having some special characters as an attribute value. # The issue: `html_field.js:getEditingValue` is recovering the current value in the DOM using `innerHTML` which converts some characters from tag attributes to HTML entities, i.e.: `"` for `"`. `mail.py:html_normalize` is using `lxml.html.tostring` is receiving such a string with HTML entities, and is returning a string without HTML entities. The database value (without HTML entities) is later given to the `html_field` as a prop and is used as a comparison reference (`updateValue`) with the current value in edition (that is still being converted to have HTML entities). Since both values are different, the field is considered as dirty and in need of being saved, which will trigger a write, even though the normalized value is the same. # Fix: Using `encodeDataBehaviorProps` to serialize props as the Behavior anchor attribute (like for any other Behavior) will prevent the use of characters that are being converted to HTML entities. In order to update existing `/article` blocks, the behavior will overwrite its `data-behavior-props` attribute when it is mounted in edit mode. task-3853291 Forward-Port-Of: odoo/enterprise#60985 Forward-Port-Of: odoo/enterprise#60177
# FIX] knowledge: remove useless popover This commit fixes an issue where the popover would open inside the comments panel when replying to a comment with a small enough window, even though in this situation it's not useful at all. Now when the panel is open and we have a small window, the popover will not open when replying to a comment. # [FIX] knowledge: show panel's comments in small windows This commit fixes an issue with the comments panel when using it with a small window.
Original PR description
# FIX] knowledge: remove useless popover This commit fixes an issue where the popover would open inside the comments panel when replying to a comment with a small enough window, even though in this…
# FIX] knowledge: remove useless popover This commit fixes an issue where the popover would open inside the comments panel when replying to a comment with a small enough window, even though in this situation it's not useful at all. Now when the panel is open and we have a small window, the popover will not open when replying to a comment. # [FIX] knowledge: show panel's comments in small windows This commit fixes an issue with the comments panel when using it with a small window. Before, when you opened the panel when in a small enough window, the comments aren't properly displayed meaning that you only have empty boxes inside the panel. This was caused by a styling issue inside of the template that applied a wrong style to the comment boxes inside panel, which is not necessary inside it. Now, we modified the inline style in the template so that it is not applied inside the panel, showing back those comments in all circumstances. task-3786282 Forward-Port-Of: odoo/enterprise#58045
Previously, it was easy to bypass the maximum_amount field on payment.provider by going to a subscription and clicking "Set Payment Method". The subscription would then be charged with the token, regardless of the maximum_amount set on the payment.provider. This filters out ineligible acquirers through _get_compatible_providers() so it's not possible to use them for new payment methods. The existing override wasn't working because sale_order_id was a string and sale.order('1').exists() alway
Original PR description
Previously, it was easy to bypass the maximum_amount field on payment.provider by going to a subscription and clicking "Set Payment Method". The subscription would then be charged with the token,…
Previously, it was easy to bypass the maximum_amount field on payment.provider by going to a subscription and clicking "Set Payment Method". The subscription would then be charged with the token, regardless of the maximum_amount set on the payment.provider.
This filters out ineligible acquirers through
_get_compatible_providers() so it's not possible to use them for new payment methods. The existing override wasn't working because sale_order_id was a string and sale.order('1').exists() always returns False. Casting sale_order_id to a string was added in a small /my/payment_method route override.
Filtering out already existing payment methods is harder because the sale order isn't available in _get_available_tokens(). Instead we raise a UserError when a user assigns an ineligible payment method. This is handled well in the frontend.
This focuses only on customer-facing flows. The maximum_amount field isn't checked either on e.g. account.payment but that's only accessible to internal users. Other customer-facing flows aren't affected because typically _get_available_tokens() is called with eligible payment providers as its first parameter.
Attempted alternative approaches:
- odoo/odoo#161021, odoo/enterprise#60294
- odoo/enterprise#60382
opw-3858340
Forward-Port-Of: odoo/enterprise#60482Currently, on large databases (several million move lines), the XAF export can cause a `MemoryError`. The way to bypass this limitation is threefold: 1. Reduce memory usage during query results post processing. - First by removing the unnecessary `res_list`, and directly writing each batch in former `vals_dict`. - Second by updating former `vals_dict` instead of creating an additional (and useless) `values` dictionary. 2. Instead of rendering the entire file at once, the process is now di
Original PR description
Currently, on large databases (several million move lines), the XAF export can cause a `MemoryError`. The way to bypass this limitation is threefold: 1. Reduce memory usage during query results post processing. - First by removing the unnecessary `res_list`, and directly writing each batch in former `vals_dict`. - Second by updating former `vals_dict` instead of creating an additional (and useless) `values` dictionary. 2. Instead of rendering the entire file at once, the process is now divided in two steps: - Render the header first using Qweb (as before). - Generate the journals, moves and move lines manually. 3. Use a generator and stream the content of the file to the user, which will prevent having the entire dataset/file in memory. task-3816030 opw-3332771 Forward-Port-Of: odoo/enterprise#60867 Forward-Port-Of: odoo/enterprise#58612
**Steps to reproduce:** 1) Open any view of any module. 2) Click on insert a link in the article from Favorites. 3) Now publish the article from the share panel. 4) Copy that link and open it from the portal user. 5) Click on the embedded link(if only read access), double click on it(if write access). **Solution:** Notify the portal user with a toaster notification that only internal members can open that view. **Task**-3082042 Forward-Port-Of: odoo/enterprise#60892 Forward-Port-Of:
Original PR description
**Steps to reproduce:** 1) Open any view of any module. 2) Click on insert a link in the article from Favorites. 3) Now publish the article from the share panel. 4) Copy that link and open it from the portal user. 5) Click on the embedded link(if only read access), double click on it(if write access). **Solution:** Notify the portal user with a toaster notification that only internal members can open that view. **Task**-3082042 Forward-Port-Of: odoo/enterprise#60892 Forward-Port-Of: odoo/enterprise#57347
[FIX] account_reports: skip the 'draft entries' warning for tax closings properly for all tax report Some specific code was added by https://github.com/odoo/enterprise/commit/649960d66eaf0c1cdf0c81b86a6226d77d244b98 in order to ignore the tax closing entries in the warning stating there are draft entries in the period, if on the tax report. However, this was badly forward-ported, and only worked for the generic tax report. With this fix, every tax report will benefit from it, as originally in
Original PR description
[FIX] account_reports: skip the 'draft entries' warning for tax closings properly for all tax report Some specific code was added by https://github.com/odoo/enterprise/commit/649960d66eaf0c1cdf0c81b86a6226d77d244b98 in order to ignore the tax closing entries in the warning stating there are draft entries in the period, if on the tax report. However, this was badly forward-ported, and only worked for the generic tax report. With this fix, every tax report will benefit from it, as originally intended. [FIX] account_reports: re-enable the warning about inactive tags in period for tax reports This warning was dropped by mistake when introducing the new warning mechanism for accounting reports. Forward-Port-Of: odoo/enterprise#60774
*: hr_referral, knowledge, marketing_automation, social, social_demo, social_twitter, website_event_twitter_wall, website_twitter_wall This commit involves adjustments to a few images and SVG files to incorporate the new X (previously called Twitter) logo, and also adjustments to all instances of Twitter references within text (titles, descriptions, messages, demo datas, labels..) to align with the new branding. related to: https://github.com/odoo/odoo/pull/148126 task-3463530 Forwar
Original PR description
*: hr_referral, knowledge, marketing_automation, social, social_demo, social_twitter, website_event_twitter_wall, website_twitter_wall This commit involves adjustments to a few images and SVG files to incorporate the new X (previously called Twitter) logo, and also adjustments to all instances of Twitter references within text (titles, descriptions, messages, demo datas, labels..) to align with the new branding. related to: https://github.com/odoo/odoo/pull/148126 task-3463530 Forward-Port-Of: odoo/enterprise#59322 Forward-Port-Of: odoo/enterprise#53644
Steps to reproduce: - Install helpdesk - Add an alias domain to send ticket - Send a mail to add a ticket, with the mail of the demo user Error: No mail is sent to the user confirming the reception of the ticket. This is due to condition here https://github.com/odoo/enterprise/blob/1502f8b3e519d41f4a58e2acc846f315f6f5eeda/helpdesk/models/helpdesk_ticket.py#L789-L790 This was done to prevent mail being sent if we created the ticket through the frontend. Desired behaviour as checked with
Original PR description
Steps to reproduce: - Install helpdesk - Add an alias domain to send ticket - Send a mail to add a ticket, with the mail of the demo user Error: No mail is sent to the user confirming the reception of the ticket. This is due to condition here https://github.com/odoo/enterprise/blob/1502f8b3e519d41f4a58e2acc846f315f6f5eeda/helpdesk/models/helpdesk_ticket.py#L789-L790 This was done to prevent mail being sent if we created the ticket through the frontend. Desired behaviour as checked with PO is to keep this behaviour in frontend but to send a mail back if we submitted ticket through mail. By looking at the context we can the origin of the ticket (frontend or mail) and send a mail if it came from an email. Context key we used is set here https://github.com/odoo/enterprise/blob/1502f8b3e519d41f4a58e2acc846f315f6f5eeda/helpdesk/models/helpdesk_ticket.py#L742 opw-3786152 Forward-Port-Of: odoo/enterprise#59776
The readonly flag on `res_partner`.`search` was not respected because of `CREATE TEMP TABLE followup_data_cache`. It was used to create a transactional cache. Instead of putting this cache on the database side, put it on the Python side. On the Python side, the memory spike should be the same (we've retrieved all the data at some point), but the memory won't be free until the end of the transaction/cursor. If the memory problem still occurs, we can easily reduce the memory usage by 3 by
Original PR description
The readonly flag on `res_partner`.`search` was not respected because of `CREATE TEMP TABLE followup_data_cache`. It was used to create a transactional cache. Instead of putting this cache on the database side, put it on the Python side. On the Python side, the memory spike should be the same (we've retrieved all the data at some point), but the memory won't be free until the end of the transaction/cursor. If the memory problem still occurs, we can easily reduce the memory usage by 3 by avoiding the use of dict and dictfetchall usages. https://github.com/odoo/odoo/pull/162390 Forward-Port-Of: odoo/enterprise#61076 Forward-Port-Of: odoo/enterprise#60951
Currently, receipts are not accounted for in the model 347 report (issue 1). The same happens for invoices for which a payment has been registered (issue 2). ### Setup * install `l10n_es_reports` * switch to a Spanish company ### Steps to reproduce issue 1 * with a new partner, create and confirm a customer receipt for more than €3005.06 (threshold for appearing in the report) * open the model 347 tax report We would expect the new partner to be listed in the report, but they ar
Original PR description
Currently, receipts are not accounted for in the model 347 report (issue 1). The same happens for invoices for which a payment has been registered (issue 2). ### Setup * install `l10n_es_reports` *…
Currently, receipts are not accounted for in the model 347 report (issue 1). The same happens for invoices for which a payment has been registered (issue 2). ### Setup * install `l10n_es_reports` * switch to a Spanish company ### Steps to reproduce issue 1 * with a new partner, create and confirm a customer receipt for more than €3005.06 (threshold for appearing in the report) * open the model 347 tax report We would expect the new partner to be listed in the report, but they aren't. ### Steps to reproduce issue 2 * with a new partner, create and confirm an invoice for more than €3005.06 * if you open the model 347 report, you will see the new partner listed there * go back to that invoice and register a payment for it. * open the model 347 report again We expect the new partner to still be listed, but they are not. ### Cause issue 1: receipts are missing in the corresponding domains. issue 2: all account moves are used to calculate the threshold. This means that, for example, invoices and payments can cancel each other out in the calculation. opw-3816370 Forward-Port-Of: odoo/enterprise#60432 Forward-Port-Of: odoo/enterprise#59343
This commit fixes the note handling in the UBL tags for the l10n_pe_edi module by ensuring notes contain only alphanumeric characters and spaces, conforming to UBL specifications. This change: - Removes all non-alphanumeric characters except spaces. - Ensures notes are truncated to a maximum of 200 characters. Legal Reference: https://cpe.sunat.gob.pe/sites/default/files/inline-files/AjustesValidacionesCPEv20240205_.xlsx  Forward-Port-Of: odoo/enterprise#60888
New car on the contract, which is now a simple technical field has currently an effect on the employer cost, leading to an employer cost increase after signing with a wishlist car. We fix that by neutralizing the field. Forward-Port-Of: odoo/enterprise#60947
Original PR description
New car on the contract, which is now a simple technical field has currently an effect on the employer cost, leading to an employer cost increase after signing with a wishlist car. We fix that by neutralizing the field. Forward-Port-Of: odoo/enterprise#60947
Version: ----------- saas-16.3 Steps to produce: ------------------------- 1. Open Sales or any other app. 2. Schedule an activity for Request Signature 3. Once the activity is scheduled, click on the Request Signature field 4. In the New signature Request pop-up click on cancel button ->Traceback occurs Issue: -------- A traceback occurs when we click on Request Signature after creating any Request Signature activity and click on cancel button. Cause: --------- The error occ
Original PR description
Version: ----------- saas-16.3 Steps to produce: ------------------------- 1. Open Sales or any other app. 2. Schedule an activity for Request Signature 3. Once the activity is scheduled, click on…
Version: ----------- saas-16.3 Steps to produce: ------------------------- 1. Open Sales or any other app. 2. Schedule an activity for Request Signature 3. Once the activity is scheduled, click on the Request Signature field 4. In the New signature Request pop-up click on cancel button ->Traceback occurs Issue: -------- A traceback occurs when we click on Request Signature after creating any Request Signature activity and click on cancel button. Cause: --------- The error occurs because when the cancel button is clicked, the onUpdate component is triggered to load and update the ID. However, a special parameter is passed incorrectly, leading to an error. Fix: ----- The issue can be resolved by changing the props from onUpdate to reloadParentView, the component correctly reload the parent view upon cancelation, This prevents the traceback error by ensuring that the activity is updated appropriately. task-3768008 Forward-Port-Of: odoo/enterprise#60243 Forward-Port-Of: odoo/enterprise#58729
This PR adds the same description for Worldline as we already do for Ingenico to clearly state that our Worldline intergration is only available in Benelux. task-3866802 Forward-Port-Of: odoo/enterprise#60676 Forward-Port-Of: odoo/enterprise#60649
Original PR description
This PR adds the same description for Worldline as we already do for Ingenico to clearly state that our Worldline intergration is only available in Benelux. task-3866802 Forward-Port-Of: odoo/enterprise#60676 Forward-Port-Of: odoo/enterprise#60649
Currently, when trying to settle due accounts though the PoS session, the due balance doesn't change on the customer form. Steps to reproduce: ------------------- * Install **Point of Sale** and **Accounting** * Go to the **Point of Sale** App * Open a shop session * Navigate to a customer with a due ammount and select **Details** * Select **Settle due accounts** * Select any payment method * Validate * Close session * Under **Orders** select **Customers** * Select the customer for
Original PR description
Currently, when trying to settle due accounts though the PoS session, the due balance doesn't change on the customer form. Steps to reproduce: ------------------- * Install **Point of Sale** and…
Currently, when trying to settle due accounts though the PoS session, the due balance doesn't change on the customer form.
Steps to reproduce:
-------------------
* Install **Point of Sale** and **Accounting**
* Go to the **Point of Sale** App
* Open a shop session
* Navigate to a customer with a due ammount and select **Details**
* Select **Settle due accounts**
* Select any payment method
* Validate
* Close session
* Under **Orders** select **Customers**
* Select the customer for which you just settled the due accounts
> Observation: The due amount hasn't changed.
Why the fix:
------------
The following commit introduced a new relational system to be able to access data within the PoS frontend in the same way as it is done within the ORM in python: https://github.com/odoo/enterprise/commit/bb06fdead097bdec1582e3cdecb99fa63c2ff799
This commit modified the definition of `paylaterPaymentMethod`. Before the commit, it was defined as: https://github.com/odoo/enterprise/blob/4a5bb11bd59dd76f2df957225bf25d38ad5beb0c/pos_settle_due/static/src/overrides/components/payment_screen/payment_screen.js#L23-L26 and would return `{id: 3, name: 'Customer Account', is_cash_count: false, use_payment_terminal: false, split_transactions: true, …}`
Now it is defined as
https://github.com/odoo/enterprise/blob/daf09109a209f87e4f2fbb3275f55095e48d8b4d/pos_settle_due/static/src/overrides/components/payment_screen/payment_screen.js#L23-L26 and returns `undefined`.
We also notice a change in the value of `this.pos.config.payment_method_ids`. Where it previously returned
```js
Proxy(Array) {0: 1, 1: 2, 2: 3}
[[Handler]]: Object
[[Target]]: Array(3)
0: 1
1: 2
2: 3
length: 3
[[Prototype]]: Array(0)
[[IsRevoked]]: false
```
It now returns
```js
Proxy(Array) {0: Base, 1: Base, 2: Base}
[[Handler]]: Object
[[Target]]: Array(3)
0: Base {models: {…}, records: Proxy(Object), model: {…}, _raw: {…}, id: 1, …}
1: Base {models: {…}, records: Proxy(Object), model: {…}, _raw: {…}, id: 2, …}
2: Base {models: {…}, records: Proxy(Object), model: {…}, _raw: {…}, id: 3, …}
length: 3
[[Prototype]]: Array(0)
[[IsRevoked]]: false
```
Thus we need to use `.some()` to retreive the id.
opw-3802560
Forward-Port-Of: odoo/enterprise#60655
Forward-Port-Of: odoo/enterprise#59626Currently, the xsd validation tries to fetch a part of the xsd from internet. There is no need for it, we should just have it (as the others). It causes issues when running the tests if you can't make the request. (reproducible if you have no internet). Linked to runbot error 30521 Forward-Port-Of: odoo/enterprise#60964
Original PR description
Currently, the xsd validation tries to fetch a part of the xsd from internet. There is no need for it, we should just have it (as the others). It causes issues when running the tests if you can't make the request. (reproducible if you have no internet). Linked to runbot error 30521 Forward-Port-Of: odoo/enterprise#60964
The post-init hook of this module runs `ChartTemplate._load_data` and that might reference the xmlid of a general journal from the company. If that xmlid is missing, it will fail with the error: ``` KeyError: ('ir.model.data', <function IrModelData._xmlid_lookup at 0x7f9ff24b1240>, 'account.1_general') ``` Steps to reproduce on a fresh 17.0 database: - Install a localization module, eg `l10n_be`. - This will create the necessary xmlids. Delete the `X_general` xmlids from the dabase. - I
Original PR description
The post-init hook of this module runs `ChartTemplate._load_data` and that might reference the xmlid of a general journal from the company. If that xmlid is missing, it will fail with the error:
```
KeyError: ('ir.model.data', <function IrModelData._xmlid_lookup at 0x7f9ff24b1240>, 'account.1_general')
```
Steps to reproduce on a fresh 17.0 database:
- Install a localization module, eg `l10n_be`.
- This will create the necessary xmlids. Delete the `X_general` xmlids from the dabase.
- Install `account_accountant`. Installation will fail with the aforementioned error.
This also happens during upgrades:
- On a fresh 16.0 database, install module `l10n_uk`.
- The `X_general` xmlids are not created as they don't exist in this version.
- Upgrade to 17.0
- `l10n_uk` doesn't load data from its template, so the xmlids still don't exist.
- Module `account_accountant` is automatically installed, triggering the error.
Forward-Port-Of: odoo/enterprise#59512**Steps to reproduce:** - Install Contacts, Accounting and l10n_mx_edi_extended - Switch to a Mexican company (e.g. ESCUELA KEMPER URGATE) - Go to company form and configure its address (*) - Create a US customer (e.g. Foreign Customer) (*) - In Accounting settings: * activate "Customer Addresses" * use Mexican Bank for automatic currency rates (*) - Configure a product for external trade (e.g. Office Chair) (*) - Create an invoice: (*) * Customer: Foreign Customer * Delivery
Original PR description
**Steps to reproduce:** - Install Contacts, Accounting and l10n_mx_edi_extended - Switch to a Mexican company (e.g. ESCUELA KEMPER URGATE) - Go to company form and configure its address (*) - Create…
**Steps to reproduce:** - Install Contacts, Accounting and l10n_mx_edi_extended - Switch to a Mexican company (e.g. ESCUELA KEMPER URGATE) - Go to company form and configure its address (*) - Create a US customer (e.g. Foreign Customer) (*) - In Accounting settings: * activate "Customer Addresses" * use Mexican Bank for automatic currency rates (*) - Configure a product for external trade (e.g. Office Chair) (*) - Create an invoice: (*) * Customer: Foreign Customer * Delivery Address: [different than customer] (e.g. Deco Addict) * Product: Office Chair * Incoterm: EX WORKS * External Trade: Definitive - Confirm the invoice - Generate CFDI via "Send & Print" button (*) https://www.odoo.com/documentation/17.0/applications/finance/fiscal_localizations/mexico.html#external-trade **Issue:** A traceback is raised because an inexisting method (i.e. `_get_customer_cfdi_values`) is called. **Cause:** The missing method has been renamed from "_l10n_mx_edi_get_customer_cfdi_values" to "_get_customer_cfdi_values" during a refactoring, but the original method has been deleted without implementing the new one. **Solution:** "_l10n_mx_edi_get_customer_cfdi_values" method was used to generate the data for the delivery address without altering the existing CFDI values. These data were used to populate the external trade data of the CFDI. "_add_customer_cfdi_values" method is similar to removed "_l10n_mx_edi_get_customer_cfdi_values" method, except that it also updates "receptor" in the CFDI. It is used with a copy of the cfdi values to compute the values for the delivery address. opw-3849153 Forward-Port-Of: odoo/enterprise#60758
1>To activate the complete form view, allowing additional details beyond the fields in the 'calendar_event_view_form_gantt_booking' view to be included without requiring users to open a new tab and search for the event separately, which is highly inefficient. 2>The logged user was being set as an organizer by default even though a particular attendee's slot had been clicked on the gantt view. so the attendee will be set as an organizer by default when clicking on the slot. A test case has
Original PR description
1>To activate the complete form view, allowing additional details beyond the fields in the 'calendar_event_view_form_gantt_booking' view to be included without requiring users to open a new tab and search for the event separately, which is highly inefficient. 2>The logged user was being set as an organizer by default even though a particular attendee's slot had been clicked on the gantt view. so the attendee will be set as an organizer by default when clicking on the slot. A test case has been added to ensure the above functionality for the gantt view does not break. Task-3679307 Forward-Port-Of: odoo/enterprise#60967 Forward-Port-Of: odoo/enterprise#56123
33 changes
Security fixes and vulnerability patches
This update fixes a security vulnerability in the Italian EDI withholding module by properly escaping user and external system input in HTML content. Without proper escaping, malicious code could potentially be injected into error messages and other displayed content. This change ensures compliance with security standards and protects your system from potential attacks.
Original PR description
Every string we use in HTML that holds user or external system input has to be escaped for compliance.
New functionality added to Odoo
This update adds a new capability to check the processing status of Dutch tax reports submitted to the Belastingdienst (Dutch tax authority). The new module integrates with the government's status information service, allowing users to monitor their report submissions directly within Odoo. This improves compliance tracking and reduces manual follow-up work for Dutch companies.
Original PR description
The Belastingdienst for the Dutch government has a service to check the status of the processing of the submitted report. This adds this functionality through a new module (which will be merged in master). Forward-Port-Of: odoo/enterprise#61017 Forward-Port-Of: odoo/enterprise#60777
Enhancements to existing features
This update removes an unused field called "Other Purchase Documents" from the partner records in the Argentina localization module. This field was not being actively used and is being deprecated to simplify the system and reduce unnecessary complexity for users in Argentina.
Original PR description
Task Adhoc side: 34375 Task Latam side: 1177 Deprecate l10n_ar_special_purchase_document_type_ids (Other Purchase Documents) field on model res.partner --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
A technical error in the Indian payroll system has been corrected by removing an incorrect minus sign that was preventing salary calculations from working properly. This fix ensures that payroll processing runs smoothly without errors.
Original PR description
This commit removes the unnecessary "-" (minus) that was mistakenly added before `inputs['ATTACH_SALARY'].name`. This addition was causing a traceback error. task-3794116
This fix ensures that recurring tasks are created consistently regardless of who confirms a sale order. Previously, customer portal users couldn't create recurring tasks because they lacked specific user permissions, even though the sale order and product were configured for recurring tasks. The fix removes this unnecessary permission check, allowing both internal users and customers to generate recurring tasks properly.
Original PR description
…ating recurrent tasks Steps to reproduce: - Create a new recurring prepaid service product, and Create on Order: Project & Task or Task. - Enable "Recurring Tasks" in the setting and grant the…
…ating recurrent tasks Steps to reproduce: - Create a new recurring prepaid service product, and Create on Order: Project & Task or Task. - Enable "Recurring Tasks" in the setting and grant the current user "Use Recurring Tasks" access in the user configuration. - Create a new sale order, select that recurring product and a "Recurring Plan", confirm the sale order with the current user and check the task. - Duplicate the same sale order, confirm the sale order with the customer portal user in the portal view and pay. Current behaviour: The task created by the current user is recurring. However, the other task that the customer created in the portal view is not recurring. Both of them should be recurring since the sale orders are the same. The person who confirms the sale order should not affect the status of the task. Cause It is checking if the user has the access right to create recurrent tasks. Where in this case, customers will always be portal users, and they will not have that access right. Solution Remove the check, since the recurrent attributes are already defined in the SO and Product.
This fix resolves a synchronization problem in account reports where user-selected grouping preferences were not properly aligned with the actual report grouping. The correction ensures that when users customize how their financial reports are organized, those preferences are consistently applied throughout the report display.
This update fixes two issues with warning messages in tax reports. First, it ensures that draft entry warnings properly exclude tax closing entries across all tax reports, not just the generic one. Second, it restores a warning about inactive tags that was accidentally removed. These fixes improve the accuracy of financial reporting alerts.
Original PR description
[FIX] account_reports: skip the 'draft entries' warning for tax closings properly for all tax report Some specific code was added by https://github.com/odoo/enterprise/commit/649960d66eaf0c1cdf0c81b86a6226d77d244b98 in order to ignore the tax closing entries in the warning stating there are draft entries in the period, if on the tax report. However, this was badly forward-ported, and only worked for the generic tax report. With this fix, every tax report will benefit from it, as originally intended. [FIX] account_reports: re-enable the warning about inactive tags in period for tax reports This warning was dropped by mistake when introducing the new warning mechanism for accounting reports. Forward-Port-Of: odoo/enterprise#60774
This update adds a clear description to the Worldline payment integration settings to specify that it is only available in Benelux countries. This matches the existing documentation for Ingenico and helps users understand the geographic limitations of this payment method option.
Original PR description
This PR adds the same description for Worldline as we already do for Ingenico to clearly state that our Worldline intergration is only available in Benelux. task-3866802 Forward-Port-Of: odoo/enterprise#60676 Forward-Port-Of: odoo/enterprise#60649
This fix resolves an issue where XML validation for Mexican accounting documents was attempting to download validation rules from the internet, causing test failures when internet access is unavailable. The validation rules are now stored locally, making the system more reliable and independent of external connectivity.
Original PR description
Currently, the xsd validation tries to fetch a part of the xsd from internet. There is no need for it, we should just have it (as the others). It causes issues when running the tests if you can't make the request. (reproducible if you have no internet). Linked to runbot error 30521 Forward-Port-Of: odoo/enterprise#60964
This fix resolves an issue where the wrong package was being assigned to a product line during barcode scanning in warehouse operations. When scanning a lot number for a product that exists in multiple locations with different packaging, the system was incorrectly selecting a package from a different location. The fix ensures the correct package is matched based on the actual source location being scanned.
Original PR description
Package is wrongly set on product line in barcode scan Steps: - Have a product P tracked by lot - Set 2 stock quant in 2 locations: 1st in loc1 with lot L and package P 2nd in loc2 with lot1 and no package - Create a picking (Customer delivery) for P with source loc2 - With barcode make the delivery, scan the lot number -> The pack P is set on the product line, even if the package P is in loc1 We pass the location id through the context in order to adapt the domain in `prefilled_owner_package_stock_barcode()`, doing that we ensure we also cover the case where we have 2 stock quant with one with no package and the other with package. opw-3746608 Forward-Port-Of: odoo/enterprise#61057 Forward-Port-Of: odoo/enterprise#59342
Fixed an issue where the helpdesk module was not sending confirmation emails to internal users when tickets were created by submitting an email to the system. The fix ensures that confirmation emails are sent for email-submitted tickets while maintaining the existing behavior of not sending emails for tickets created through the web interface.
Original PR description
Steps to reproduce: - Install helpdesk - Add an alias domain to send ticket - Send a mail to add a ticket, with the mail of the demo user Error: No mail is sent to the user confirming the reception of the ticket. This is due to condition here https://github.com/odoo/enterprise/blob/1502f8b3e519d41f4a58e2acc846f315f6f5eeda/helpdesk/models/helpdesk_ticket.py#L789-L790 This was done to prevent mail being sent if we created the ticket through the frontend. Desired behaviour as checked with PO is to keep this behaviour in frontend but to send a mail back if we submitted ticket through mail. By looking at the context we can the origin of the ticket (frontend or mail) and send a mail if it came from an email. Context key we used is set here https://github.com/odoo/enterprise/blob/1502f8b3e519d41f4a58e2acc846f315f6f5eeda/helpdesk/models/helpdesk_ticket.py#L742 opw-3786152 Forward-Port-Of: odoo/enterprise#59776
This fix corrects an issue where delivery address information was incorrectly pulled from the company's address instead of the actual delivery address when generating Mexican tax documents (CFDI) for international trade invoices. This ensures that tax documents accurately reflect where goods are being delivered, which is critical for proper compliance with Mexican external trade regulations.
Original PR description
Steps to reproduce: - Install Contacts, Accounting and l10n_mx_edi_extended - Switch to a Mexican company (e.g. ESCUELA KEMPER URGATE) - Go to company form and configure its address (*) - Create a US…
Steps to reproduce: - Install Contacts, Accounting and l10n_mx_edi_extended - Switch to a Mexican company (e.g. ESCUELA KEMPER URGATE) - Go to company form and configure its address (*) - Create a US customer (e.g. Foreign Customer) (*) - In Accounting settings: * activate "Customer Addresses" * use Mexican Bank for automatic currency rates (*) - Configure a product for external trade (e.g. Office Chair) (*) - Create an invoice: (*) * Customer: Foreign Customer * Delivery Address: [different than customer] (e.g. Deco Addict) * Journal in: USD * Usage: Without fiscal effects * Product: Office Chair * Incoterm: EX WORKS * External Trade: Definitive - Confirm the invoice - Try to generate CFDI via "Send & Print" button (it will probably fail) (*) https://www.odoo.com/documentation/17.0/applications/finance/fiscal_localizations/mexico.html#external-trade Issue: Check the generated CFDI in CFDI tab. The data for element `<cce20:Destinatario><cce20:Domicilio /></cce20:Destinatario>` are incorrect. "Calle", "NumeroExterior", "NumeroInterior", "Pais" and "CodigoPostal" are coming from the current company instead of the delivery address. opw-3715960 Forward-Port-Of: odoo/enterprise#60829
This fix resolves an issue where toggling the all-day field on calendar events was not properly syncing changes to Google Calendar. The problem occurred because Google Calendar requires different date formats for all-day events versus timed events, and the system was not clearing the unused field when switching between these types. Users can now successfully toggle events between all-day and timed formats with changes reflecting correctly in Google Calendar.
Original PR description
Before this commit when we have a synced event with google and then we toggle the all-day field changes didn't reflect on google side This happened because google uses two separate fields for…
Before this commit when we have a synced event with google and then we toggle the all-day field
changes didn't reflect on google side
This happened because google uses two separate fields for start/end.
1. dateTime (used for normal events)
2. date (used for all-day events)
when one of them is set, the other must be null.
Before this commit when we did a patch update, we set only one, but forget about the other which raises an error.
Task: 3681668
==============================
I couldn't find it in google calendar api documentation supporting my claim. But I based my conclusion on these facts:
1. when sending a get request to google API for all-day events it would look like this, we can observe that for both start/end it doesn't have a `dateTime` but only `date`.
```js
{
"kind": "calendar#event",
"etag": "\"3420874125486000\"",
"id": "11qeiguv96iei6nkd4helg421b",
"status": "confirmed",
"htmlLink": "https://www.google.com/calendar/event?eid=MTFxZWlndXY5NmllaTZua2Q0aGVsZzQyMWIgYWxhaEBvZG9vLmNvbQ",
"created": "2024-03-14T10:39:50.000Z",
"updated": "2024-03-14T17:24:22.743Z",
"summary": "all day from google",
"creator": {
"email": "alah@odoo.com",
"self": true
},
"organizer": {
"email": "alah@odoo.com",
"self": true
},
"start": {
"date": "2024-03-20"
},
"end": {
"date": "2024-03-21"
},
"transparency": "transparent",
"iCalUID": "11qeiguv96iei6nkd4helg421b@google.com",
"sequence": 2,
"reminders": {
"useDefault": false
},
"eventType": "default"
}
```
2. When doing the same for an event that is not marked as all-day. we would get this
```js
{
"kind": "calendar#event",
"etag": "\"3420880154840000\"",
"id": "6ngnlju6nofaa0h478nkqgrhna",
"status": "confirmed",
"htmlLink": "https://www.google.com/calendar/event?eid=Nm5nbmxqdTZub2ZhYTBoNDc4bmtxZ3JobmEgYWxhaEBvZG9vLmNvbQ",
"created": "2024-03-14T18:14:37.000Z",
"updated": "2024-03-14T18:14:37.420Z",
"summary": "aaa",
"creator": {
"email": "alah@odoo.com",
"self": true
},
"organizer": {
"email": "alah@odoo.com",
"self": true
},
"start": {
"dateTime": "2024-03-14T15:00:00+02:00",
"timeZone": "Africa/Cairo"
},
"end": {
"dateTime": "2024-03-14T16:00:00+02:00",
"timeZone": "Africa/Cairo"
},
"iCalUID": "6ngnlju6nofaa0h478nkqgrhna@google.com",
"sequence": 0,
"reminders": {
"useDefault": true
},
"eventType": "default"
}
```
so on google side, it's either `date` or `dateTime` but not both. Hence when doing a patch update for either `date` or `dateTime` we should unset the other.This fix resolves an issue where product images uploaded from external URLs would disappear after saving in the e-commerce shop editor. The problem occurred when browsers couldn't fetch image data due to CORS restrictions. The solution now allows the server to fetch the remote image data when the client browser cannot, ensuring images are properly saved and displayed.
Original PR description
### Steps to reproduce: - Install **E-commerce** app - Go to **Website** > **Shop**, and open a product - Click on **edit** on the upper right corner. - Double click the product image to change it. A…
### Steps to reproduce:
- Install **E-commerce** app
- Go to **Website** > **Shop**, and open a product
- Click on **edit** on the upper right corner.
- Double click the product image to change it. A popup is shown.
- In the popup, click on Add URL and place this URL [1]
- Click **Save**. The image disappears!
### Investigation:
- The issue was introduced here [2]
- As URL now starts with `/web/image/` which will be later used here [3]
- The condition to enter this line is `url_object.path.startswith('/web/image')`
- `item[field]` is used which equals to `attachment[datas]`
- But actually `datas` is empty as the image upload fails because of **CORS**
- `add_url` is called [4] saving attachment without `datas` but with type URL
### Fix
- The commit solves the issue by fetching the remote data from the server if the url is a remote redirection, which still happens when the image data cannot be fetched by the client browser at upload time.
[1]: https://lowendbox.com/wp-content/uploads/2022/09/odoo_logo_1200.png
[2]: https://github.com/odoo/odoo/commit/943944dd249c15de870d6800d89e48d54a422e5a#diff-0897c80484208197b0aff67f2b06509e864c3976de1589e3cebad2788eef008fR49
[3]: https://github.com/odoo/odoo/blob/f72968561acec164697a7a9ee0965ec304854dd5/addons/web_editor/models/ir_qweb_fields.py#L473
[4]: https://github.com/odoo/odoo/blob/f72968561acec164697a7a9ee0965ec304854dd5/addons/web_editor/controllers/main.py#L268
opw-3746245This fix resolves an issue where lot numbers entered in the Point of Sale were being created but not properly assigned to inventory stock movements. When customers purchase tracked products and enter a new lot name at checkout, the lot will now be correctly linked to the order's inventory records, ensuring accurate stock tracking in the inventory app.
Original PR description
Current behavior: When entering a lot name that doesn't exist in the PoS, the lot is being created. But the lot is not being assigned to the stock move line. Steps to reproduce: - Create a product with tracking by lot - Open PoS and make an order for this product - Enter a lot name that doesn't exist - Validate the order - Close the session - Go to the order picking in the inventory app - The lot is not assigned to the stock move line opw-3710125 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix corrects a bug where the payment registration wizard for employee expense reimbursements was incorrectly using the company's bank account instead of the employee's bank account. Now when processing expense reimbursements, the system will properly route payments to the employee's designated bank account, ensuring accurate and timely reimbursements.
Original PR description
To reproduce: * Add a bank account to Employee, and a bank account to your company. * Set the company on the employee's contact to yours. * Create an expense to be reimbursed to the employee, submit it and try to "Register Payment". Current behaviour: the recipient bank account in the wizard is set to the company's. Expected behaviour: the bank account in the wizard should be set to the employee's bank account. This commit solves this. task-3837305
This fix ensures the website checkout page works correctly for customers who upgraded during a recent transition period. When the checkout layout was updated, an HTML element type was changed, which caused issues for some users. The fix now supports both the old and new element types, ensuring a smooth experience for all customers regardless of when they upgraded.
Original PR description
While updating the checkout page an element was changed from div to t To handle the intermediate value used by users who installed this version a new selector was added to the xpath to account for both cases Previous commit that was fixing the same issue 12e5296c1d4dbfe202ad2dcb2690c2e60828f6e1 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix resolves an issue where printing ZPL labels for multiple lots of the same product would fail when sent to IoT devices. The system was incorrectly formatting the label identifiers as nested lists instead of a simple flat list, causing errors during processing. After this fix, labels print correctly to IoT devices.
Original PR description
## Steps to reproduce:
1. Go to IoT > Devices
2. Select a device and add the report "Lot/Serial Number (ZPL)"
3. Create a product tracked by lots
4. Purchase 5 units of this product
5. Validate the reception (with a lot)
6. Print labels > Lot/SN Labels
- Quantity to print: One per unit
- Format: ZPL Labels
## Before this commit:
When printing labels for multiple lots of the same product, the wizard was incorrectly generating the docids as a `list[list[int]]`. It works correctly as the ids are joined thanks to JavaScript magic. However, when sending the report to an IoT device, the ids are sent as-is in the context, which raises an error when calling `browse()`.
## After this commit:
The docids are now generated as a flat list of integers, which is correct and works as expected.
opw-3850631
Forward-Port-Of: odoo/odoo#161932This update fixes the printer icon display in the Point of Sale system so it only appears when a printer is actually configured. Previously, the icon may have been visible even without a printer setup, which could confuse users. This ensures a cleaner interface that accurately reflects available hardware.
Original PR description
In this commit: =============== printer icon will visible based on printer configuration task - 3869678
This fix resolves an access error that occurred when users with restricted access to specific company branches attempted to open the POS QR Menu. The issue was caused by an unused color field that triggered unnecessary permission checks. By removing this unused field, branch-restricted users can now access the QR Menu without errors.
Original PR description
Current behavior: If you create a user that only have access to a branch of a company. If this user try to access the QR Menu of any PoS he will get an access error. Steps to reproduce: - Create a branch B for company A - Change access of user U to only have access to branch B - Login with user U, and try to open any PoS QR Menu - You get an access error opw-3745256 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix restores the ability to create new contacts directly when adding attendees to a course. Previously, users couldn't see the "Create and edit" option when typing a new recipient's name. The feature now works again with a requirement that users must enter a valid email address during contact creation.
Original PR description
How to reproduce: 1. Go to any course 2. Click on the button 'Add attendees' 3. Type the recipients name "Create and edit ..." should be displayed but is not. To reenable this feature, we remove the option no_create_edit on partner_ids of the slide_channel_invite_view_form form to enable the creation of partner when adding attendee to a course. As the support for the force_email context has been discontinued, we don't reenable the quick_create as it can create partner without email (if the user enter a non-valid email). But we reenable the "create edit" option with a view that force the user to enter an email: base.view_partner_simple_form (like done on some views in odoo/odoo#149806). Task-3868824
This fix resolves an issue where expense amounts were not displaying on the journal dashboard, showing only the count of expenses. The problem occurred because the system was not correctly calculating the total amount to pay for expenses when viewing the dashboard summary. After this fix, users will now see both the number of expenses and their corresponding amounts on the journal dashboard.
Original PR description
Video to reproduce on runbot odoo: https://github.com/odoo/odoo/assets/56789189/3e63fb2c-11b6-40f5-99e9-9c4f98f9ba60 STEP TO REPRODUCE: -Create some expenses, create sheet for them and approve and…
Video to reproduce on runbot odoo: https://github.com/odoo/odoo/assets/56789189/3e63fb2c-11b6-40f5-99e9-9c4f98f9ba60 STEP TO REPRODUCE: -Create some expenses, create sheet for them and approve and then post journal entry. -Go to journal dashboard to view the expense summary info and see only the number of the expense is display without the amount on it REASON: since [1] the amount of the method '_count_results_and_sum_amounts' will take the total_amount base on 'amount_total_company' if we have same currency else it takes the 'amount_total' to sum. Because at 'hr.expense.sheet' doesn't have amount_residual_signed like account.move has so we will use only 'amount_residual' to consider it as 'amount_total_company' 1: d8627c4e38ce9310197979dfbd5307810edf8201 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 a crash that occurred when users tried to open a stock move line from a newly added product in a receipt that hadn't been saved yet. The system now properly handles this scenario by saving the receipt first and then correctly locating the stock move record, preventing the "Cannot read properties of undefined" error.
Original PR description
Steps to reproduce ================== - Create two new storable products tracked by USN - Create a new RFQ with one of the created product - Confirm the order - Open the receipt - Add a new line with the other product - Click on the open move button in the new line - Add a new SN - Save & close => Cannot read properties of undefined (reading 'resId') Cause of the issue ================== When calling openRecord, if the record is dirty, it is saved before proceeding. After saving, we call super.openRecord with the old record. Since that record is no longer linked to the root record (the stock.picking), when we try to save it, it won't match an existing id. Solution ======== If the record is new, we don't save as there would be no way of knowing which of the returned line would come from this one. If we are opening an existing record, we find the new datapoint by matching it's ID. opw-3777615
This fix resolves a problem where refunds in the Point of Sale system were being rounded differently than the original order payments, causing discrepancies in refund amounts. Now, full refunds will match exactly what the customer originally paid, while partial refunds will be based on the base price of selected items. This ensures customers receive accurate refund amounts that align with their original transactions.
Original PR description
Currently, when you refund an order that was paid with bank, thus not rounded, the refund is rounded wich result in a difference between the original order and the refund. This also happens when the…
Currently, when you refund an order that was paid with bank, thus not rounded, the refund is rounded wich result in a difference between the original order and the refund. This also happens when the original order was paid with multiple payments and one of them was not rounded and the other was. The refund will be rounded as one single payment. This also results in a difference between the original order and the refund. Steps to reproduce: ------------------- * Setup a rounding method with a precision of 5.0 * Create a product with a price of 138.0 * Open the POS and add the product to the order * Pay the order with 2 payments, one bank of 55 and one cash that will be rounded to 80. * Validate the order * Go in the backend and refund the order * The refund will be rounded to 135.0 Why the fix: ------------ The new behavior after this fix: * When refunding the entire original order, the amount to refund should be equal to what the customer paid on the original order (thus taking into account the rounding). * When doing a partial refund, the amount that should be refunded correspond to the base price of the article(s) selected. The issue was about the fact that refunds differed in prices compared to the original order. With this fix, there could still be a difference in the prices if a customer comes multiple times to do a partial refund and end up refunding the total order. This difference exists only if the original order was paid with rounding and will be maximum the rounding defined. Since this is a rare event, we consider this difference to be acceptable. Post-fixup: ----------- The function `_get_rounded_amount()` was modified as we are not computing cash rounding when refunding anymore. opw-3701574 Forward-Port-Of: odoo/odoo#162280 Forward-Port-Of: odoo/odoo#161564
This update resolves an issue where the Point of Sale system would fail to load if the browser cache contained invalid orders from a previous database version. After system upgrades, cached unpaid orders may become incompatible with new field structures. The fix automatically removes these problematic cached orders, allowing the PoS to load successfully without manual intervention.
Original PR description
Prior to this commit, the presence of an invalid order in the browser cache could prevent the PoS from loading. This issue typically arises after a database upgrade, where changes in fields can render unpaid orders in the cache unloadable. This commit resolves this issue by discarding any problematic unpaid orders that can no longer be loaded. opw-3874858 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix corrects a bug where reserved inventory quantities were calculated incorrectly when users changed the unit of measure (e.g., from dozens to individual units) during stock transfers. The system now properly recalculates reserved quantities to reflect the new unit of measure, ensuring accurate inventory tracking and preventing discrepancies in stock levels.
Original PR description
### Steps to reproduce the issue: 1. Create a Storable Product and give it a UOM 2. Create an On Hand stock in a certain location 3. Go to Barcode and create a new Internal Transfer 4. Add the…
### Steps to reproduce the issue: 1. Create a Storable Product and give it a UOM 2. Create an On Hand stock in a certain location 3. Go to Barcode and create a new Internal Transfer 4. Add the Product and with any quantity and click on Confirm (not Validate) 5. Edit the line of the Product (pencil icon), change the quantity and the UOM and click on Confirm 6. Validate the Transfer 7. Go back to the Product and click on the "On Hand" or the "Update Quantity" button 8. The reserved quantity is not null ### Explanation: When you change `stock.move.line.product_uom_id`, `stock.quant.reserved_quantity` (using `product.product.uom_id`) is not changed to reflect the new `uom.uom.factor`. You then have two routes: - In `stock_barcode`, `stock.move.line.product_uom_id` changes first, `stock.move.line.quantity` change is triggered through `stock.move.line._inverse_qty_done` afterwards. https://github.com/odoo/enterprise/blob/d04b69ba03877a9b4aae82fb061dca23b1bfc4bc/stock_barcode/models/stock_move_line.py#L58-L61 When calling `stock.move.line._synchronize_quant`, `stock.move.line.quantity_product_uom` will use the new `stock.move.line.product_uom_id` while `stock.quant.reserved_quantity` still reflects the old `uom.uom.factor`. https://github.com/odoo/odoo/blob/1b0dbb3645ad8b52c5260f1cbbc4f6bdee48461e/addons/stock/models/stock_move_line.py#L421-L422 (e.g.: going from `1 Dozens` to `2 Units` would give you `1.09 Dozens` in `stock.quant.reserved_quantity` instead of `0.17`) - There is a similar issue in _Inventory > Transfers > Internal_, where `stock.move.line.product_uom_id` changes at the same time instead. In that case, the whole operation will be done using the previous `stock.move.line.product_uom_id`, and changing `stock.move.line.product_uom_id` before changing `stock.move.line.quantity` would cause the same issue as in `stock_barcode`. (e.g.: going from `1 Dozens` to `2 Units` would give you `2 Dozens` in `stock.quant.reserved_quantity` instead of `0.17`) ### Suggested fix: The fix is made to be as simple as possible, the two conditions will be reduced to simple assignations: - The first one will be `product_uom_id`, with which `uom.uom._compute_quantity` will be called. - The second condition will be `quantity`, which will be set in a `vals.get` in the `qty` parameter of the compute. To make everything uniform, there will be no exception where `stock.move.line.quantity_product_uom` is used. opw-3798046 Forward-Port-Of: odoo/odoo#162169 Forward-Port-Of: odoo/odoo#160656
Fixed an issue where attachments added to the Survey Invite email template were not appearing when sending survey invitations. The fix ensures that any attachments configured in the email template are now automatically included and displayed in the survey invite form, improving the user experience when sending surveys with supporting documents.
Original PR description
**Current behavior:** Adding an attachment to a mail template record associated with the survey invite wizard will not cause the attachment to populate the relevant field when actually sending a new…
**Current behavior:**
Adding an attachment to a mail template record associated with
the survey invite wizard will not cause the attachment to
populate the relevant field when actually sending a new survey
invite email.
**Expected behavior:**
The attachments linked in the email template which is used by
the survey invite wizard will appear in the form when sending a
survey invite.
**Steps to reproduce:**
1. In settings, go to the email templates management page
2. Select the Survey: Invite template and upload some
attachment
3. Go to the Survey application and click on one of the surveys
listed, observe the lack of attachments despite having the
email template with the attachment selected
**Cause of the issue:**
The survey invite wizard never uses its template's attachments
to modify/update its own attachment_ids field.
**Fix:**
Make the attachment_ids field a stored computed field.
opw-3709830
Forward-Port-Of: odoo/odoo#162273
Forward-Port-Of: odoo/odoo#152728This update improves error handling when generating EMV QR codes on invoices. Previously, users would see a confusing error message when a bank account wasn't configured. Now the system provides clearer feedback to help users understand what needs to be set up correctly before EMV QR codes can be generated.
Original PR description
Description of the issue/feature this PR addresses: Improved error handling for EMV QR generation for invoices Current behavior before PR: Currently, if EMV QR is selected on the invoice where the country does not support EMV QR an error is raised. Desired behavior after PR is merged: However, this error is also raised if EMV QR is selected but the bank account is not set. The following error is raised `No EMV QR Code is available for the country of the account False.` This commit adds a check to ensure the bank account is set and it raises a better error message. Task# 3868467 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#162319
This update adds and corrects missing Romanian translations for the CRM module. Romanian language support was not previously available in the translation system for this version, so these translations are now being added to ensure Romanian-speaking users have proper language support in the CRM application.
Original PR description
Some parts of the translation were missing and Romanian isn't available as a language in Transifex for this version. Therefore we add it in now. English grammar mistakes of original string are left untouched. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#162418
Fixed a confusing error message that appeared when users tried to register payments for both customer invoices and vendor bills simultaneously. The new message is clearer and more accurately describes the issue, helping users understand why the action cannot be completed.
Original PR description
When registering payment for customer invoices and vendor bills at the same time, a misleading error message appears"You can't register payments for journal eithers being both inbound and outbound". Replacing it with a clear message "You can't register payments for both inbound and outbound moves at the same time." Task id: 3638740 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#162224 Forward-Port-Of: odoo/odoo#162101
This update fixes errors in the Spanish language labels for withholding tax invoices in the Ecuador localization module. The corrections ensure that tax-related documents display accurate and properly translated text to users in Ecuador, improving the clarity and professionalism of financial documents.
Original PR description
Fix errors in some of the spanish invoice_labels for withholding taxes. Thanks to @AlmustafaNET #147867
This fix improves the clarity of payment information in Point of Sale sales reports by adding the session name to payment entries. When generating reports that span multiple POS sessions, users can now easily identify which session each payment belongs to, eliminating confusion when reviewing multi-session reports.
Original PR description
Current behavior: When generating a sale report for multiple pos sessions, the payment name is not clear which session it belongs to. Steps to reproduce: - Open PoS and make some sales - Close the session, and do the first step again. - Go in reporting and generate the report for a period that includes the two sessions. - In the payments table you will see the payment name, but you won't know which session it belongs to. opw-3684937 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#160369
This fix removes a duplicate "no sales orders" message that was appearing twice in the customer portal after a recent redesign. Users will now see only one clear message when they have no orders, providing a cleaner and less confusing experience.
Original PR description
Description of the issue/feature this PR addresses: After the portal redesign, messages for no quotations or sale orders were moved before the portal_table template, which is called when there are entries of quotations or sale orders. However, the previous version of the message for sale orders was left after the template call. This commit removes the previous version of the message to avoid having duplicated messages. Current behavior before PR: Two similar messages are displayed in the portal when there are no sale orders. - There are currently no sales orders for your account. - There are currently no orders for your account. Desired behavior after PR is merged: Only one message is shown in the portal when there are no sale orders, as it happens for the quotations. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr