Thursday, September 12, 2024
34 changes · master
New functionality added to Odoo
Spreadsheet pivot tables now let users show measures in alternative formats, such as percentages of row or column totals. This makes it easier to compare results and understand relative performance directly in documents and spreadsheets.
Original PR description
This commits adds the "Show value as" feature to measures. This allow users to display the value of a measure in a different way, like percentage of column total, percentage of row total, etc. Task: [4045799](https://www.odoo.com/odoo/2328/tasks/4045799?cids=1)
Enhancements to existing features
Indian payroll now has a dedicated structure type that groups all Indian payroll structures together. This makes payroll configuration clearer and easier to manage for companies operating in India.
Original PR description
This PR enhances the payroll structure and types by introducing a new structure type and integrating all Indian structures into it. task-3505344
Resolved issues and error corrections
This change removes automation-related setup from the Approvals app because it could unintentionally move customers from the standard price plan to a custom plan. Approvals users keep the expected app behavior without triggering an unwanted pricing change.
Original PR description
Approvals app has a dependence on automation and automation makes user go from standard price plan to custom price which shouldn't happen.
Code cleanup and technical improvements
Accounting reports now consistently receive prior report settings instead of sometimes receiving no settings at all. This internal cleanup reduces the risk of reporting errors and makes future maintenance of financial reports easier without changing day-to-day user workflows.
Original PR description
Keeping `previous_options` as None is error-prone and can be made simpler. This commit makes `previous_options` a mandatory parameter. Task ID: 3977823
Miscellaneous changes
…nvoice Before this commit, subscriptions automatic invoices are skipped when the flag pending transactions is set. it is correct to avoid double payment for the same period but there is a problem if the flag stays while the subscription has been renewed since. This commit aimes to remove that flag when an invoice is posted for this subscruption. taskid: 4107185 Forward-Port-Of: odoo/enterprise#69589 Forward-Port-Of: odoo/enterprise#68713
Original PR description
…nvoice Before this commit, subscriptions automatic invoices are skipped when the flag pending transactions is set. it is correct to avoid double payment for the same period but there is a problem if the flag stays while the subscription has been renewed since. This commit aimes to remove that flag when an invoice is posted for this subscruption. taskid: 4107185 Forward-Port-Of: odoo/enterprise#69589 Forward-Port-Of: odoo/enterprise#68713
Australian payroll now uses the shared payroll period calculation method instead of a separate custom list. This keeps pay period handling more consistent and easier to maintain, with no expected change for day-to-day users.
Original PR description
After this commit, instead of using a dictionary, we will use a standard method to get the factors of a pay period in `l10n_au_hr_payroll`. task-4029012
The Aged Receivable report now lets users look a set number of days beyond a past reporting date while still excluding later invoices, credit notes, and receipts. This helps auditors and finance teams identify debts that were still unpaid after a defined follow-up period, supporting doubtful debt assessment.
Original PR description
Add a "X days after" filter to the Aged Receivable report. This computes the report at "as of date" + X days but excludes any invoice/credit note/receipt with accounting dates > "as of date." This filter helps identify doubtful debt at a past date while applying later reconciliations, ignoring irrelevant entries after the specified date. Example: - Invoice in December - Payment in January - Matching in February => In April, the auditor asks the status of all the lines of the report on the 31/12 which are not matched at the 31/03, to create doubtful debt. task-4008838
Accounting teams can now create exceptions that effectively remove a lock date, rather than only moving it to another date. This makes lock date management more flexible while preserving the existing exception workflow.
Original PR description
Currently we do not allow removing lock dates completely with an exception (except in the special 'everyone' / 'forever' case in which we just change the actual lock date instead of creating an exception). It was designed like this for technical reasons. An exception stores a "new date" for all the lock date field; a missing value for a lock date field means "no change". E.g.: `exception.sale_lock_date == False` means the exception does not change the sale lock date. After this commit we (pseudo-) allow removing a lock date with an exception. We "simulate" the removal of a lock date by setting the "new date" to a very early date. 1000-01-01 was chosen for technical reasons. It should be before any needed accounting entries. (See comment in the code). related: task-3891414 (lock dates rework)
Accounting entries are now secured when they are posted rather than later in the process, helping ensure records are protected earlier and more consistently. A new Secure Entries wizard also helps companies secure past accounting entries up to a chosen date, supporting stronger compliance workflows.
Original PR description
### commits #### [IMP] account: back to hash on post In the related community PR we move from hash on send (back) to hash on post See community PR. This commit adapts enterprise to the changes. #### [IMP] account: new secure entries wizard In the related community PR we add the Secure Entries Wizard. It's a wizard to secure (hash) all moves up to including a certain dates. See community PR. This commit adapts enterprise to the changes. ### task community PR: https://github.com/odoo/odoo/pull/178915 documentation PR: https://github.com/odoo/documentation/pull/10906 upgrade PR: https://github.com/odoo/upgrade/pull/6458 task-4095970
The Indian payroll yearly salary reports now generate PDFs directly and include both completed and paid payslips. Employee reports adjust to the selected date range up to 12 months, and currency symbols follow the current company for clearer local reporting.
Original PR description
In this PR, - The preview of the report is removed from the yearly salary by head The report will now generate the PDF directly - Payslips in done and paid state are calculated in the yearly salary by head report - Yearly salary by employee is dynamic based on the start-end date, which is not going to exceed 12 months. - The currency symbol is based on the current company. Task - 3981488
Customers can now see cancellation guidance even when an appointment has already been paid, avoiding confusion on the validation screen. If cancellation is not allowed from the summary page, they receive a clearer alert with available staff contact details when possible.
Original PR description
Before, users were sometimes lost when it came to cancelling a paid appointment, as the validation screen did not have any cancelling link. In this PR, we show the link even for paid bookings. However, we do not allow cancelling from the event summary page. Therefore, we display an alert when trying to cancel a paid event. The wording is improved to include name, email and phone of the staff user. It is also updated in existing 'no-cancel' message and status (to `no_time_left`). To do this, the controller is slightly reworked to include an overridable method to return the cancel status. Task-4143212
The recruitment app has been refreshed to make common hiring tasks clearer and faster, including simpler job and applicant creation, better labels, placeholders, and reporting names. Recruiters also gain practical workflow improvements such as candidate email updates during refusal, email/SMS actions from candidate lists, safer job archiving prompts, and improved demo data.
Original PR description
A rework of the UX/UI for parts of the recruitment app which includes - Simplify the UI for creating job position for a more seamless UX. - Improved and added missing placeholders. - Fixed spelling…
A rework of the UX/UI for parts of the recruitment app which includes - Simplify the UI for creating job position for a more seamless UX. - Improved and added missing placeholders. - Fixed spelling errors. - A new toggle widget with a clickable label!. - Improved naming of Reports, Refusal Reasons. - Adds the possibility of loading demo recruitment data. - Simplified and restructured the create applicant form view for better UX. - Added the ability to update the email of a candidate (in case the candidate did not have one set) when refusing the candidate. - Removed the ability to create applications and candidates through calendar view. - Improved naming for reporting views and filters. - Graph and Pivot view now display the same information. - Improved naming for the settings to better display the intent. - Improved demo data to make skill search work. - Offers for refused candidates will now have the refusal reason set to "Others" if it exists. - A confirmation dialog for when archiving a job position that has at least one application. - Only department manager and recruiter are now the default followers of job positions. - "CV" renamed to "Résumé" in settings. - It is now possible to send and email or SMS to candidates from the list view, just like on applications. - Job positions now have properties. task-3850740
Sales orders and projects can no longer be moved to a different company when they are linked to shifts belonging to another company. This prevents inconsistent company data and ensures teams update the related shifts first before changing the sales order or project company.
Original PR description
After this commit, it is no longer possible to change the company of an SO or a project if they have been tied to shifts that are not in the company we want to change the SO/project. One must change the company of the shifts before changing the company of the SO/project. Ther rationale is that we want to avoid inconsistent situations where the shifts and the SO/project have different companies. task-3857690
Marketing automation campaign activity cards now display the percentage of messages opened instead of the bounced percentage. This gives marketers a more useful engagement metric directly in the campaign view, helping them assess campaign performance at a glance.
Original PR description
This commit removes the bounced percentage from activity kanban card in the mareting_automation's campaign form view and adds the opened percentage. Task-4125818
Businesses in Brazil can now import official NF-e XML files for vendor bills related to goods, reducing manual entry and improving compliance with local invoicing standards. The import fills bills using existing company data and can automatically create the vendor when needed; service bills remain out of scope due to city-specific formats.
Original PR description
This adds support for importing electronically invoiced vendor bills for goods. We follow the official Brazilian specification [1]. Service bills are out of scope because each city has its own format.
This populates the bill with data that already exists in the database, the only exception is that the vendor will be automatically created if it doesn't yet exist.
task-3860901
[1] Esquema XML NF-e/NFC-e - Pacote de Liberação nº 9o on
https://www.nfe.fazenda.gov.br/portal/listaConteudo.aspThe UAE payroll module now uses updated payslip printouts tailored to employee status. Active employees receive the monthly salary slip format, while archived employees receive the end-of-service payslip, helping payroll teams provide the right document automatically.
Original PR description
Link to task: [#4133896](https://www.odoo.com/web#model=project.task&id=4133896) This update to the UAE HR payroll module introduces the following changes: - New EOS Payslip Printout: This format will be used as the primary payslip for archived employees. - Updated Monthly Salary Slip Printout: This format will be used for active employees. These enhancements ensure the correct payslip format is automatically selected based on the employee's status.
The Accounting dashboard has been refreshed to better support accountants in reviewing key financial information. This improvement should make day-to-day reporting and monitoring clearer and more useful for business users.
Original PR description
…hboard Task: 4109556
This fix aligns asset-related screens with the newer "list" view naming instead of the older "tree" wording. It helps keep the interface and configuration consistent with recent platform changes, reducing small display or compatibility issues.
Original PR description
[FIX] base/ir.ui.view: fix use 'list' instead of 'tree' see: https://github.com/odoo/odoo/pull/159909
Fixed a visual issue where WhatsApp partner message bubbles appeared unnecessarily faded. This keeps message bubbles easier to read and consistent with the intended conversation styling.
Original PR description
The WhatsApp partner message bubble had an unnecessary `opacity-25` class assigned. The original purpose of the line was to apply a `light-green` background to the bubble. However, as this would conflict with the existing color formatting for message bubbles, this line has now become redundant.  
This fix prevents a validation error when adding a new work order step to a manufacturing order after another step has already started. It keeps work order dependencies in the correct sequence, so production teams can update operations without creating false circular dependencies.
Original PR description
### Steps to reproduce: - Create a MO for a product without BOM (no need of components) - Go to the "Work Orders" tab and create 2 operations: op1 and op2 - Confirm the MO - Start the operation…
### Steps to reproduce: - Create a MO for a product without BOM (no need of components) - Go to the "Work Orders" tab and create 2 operations: op1 and op2 - Confirm the MO - Start the operation waiting for an other WO (op2) - Create a third operation: op3 - Save #### > Validation Error: You cannot create a cyclic dependency. ### Cause of the Issue: During the creation of op3, all the workorders of our MO will be confirmed to ensures that the links of the 3 operations are correctly made: https://github.com/odoo/odoo/blob/d2ce6622f2d6f1917dc319112a688e35a73c2088/addons/mrp/models/mrp_workorder.py#L469-L474 This will trigger a call of the `_link_workorders_and_moves` to re-link them all. However, during this call since op2 has been started the order of the workorders will be op2 > op1 rather than op1 > op2 and sincethe MO has no bom nor `operation_id` the records will not be reordered correctly before being linked: https://github.com/odoo/odoo/blob/d2ce6622f2d6f1917dc319112a688e35a73c2088/addons/mrp/models/mrp_production.py#L1472-L1473 https://github.com/odoo/odoo/blob/d2ce6622f2d6f1917dc319112a688e35a73c2088/addons/mrp/models/mrp_production.py#L1485-L1487 This will create a loop on the m2m dependency since op1 will be blocked by op2 and op2 is already blocked by op1. This is detected by the framework which raises the error. opw-4105603 X-original-commit: dda575f8c9fcdfcb3a1a72429d5c05ede86a7c4e
The barcode app now uses text buttons instead of relying on icons alone, making actions easier for users to understand. Related manufacturing and self-order kiosk dialogs were also adjusted for a more consistent, centered presentation.
Original PR description
*: mrp_workorder, pos_self_order_iot This commit aims to add more text to the UI of the barcode app, in case users don't know the meaning of the illustrations. A text is shown in a button now instead. For the IOT module, the template has been tweaked, to allow visual consistency with the Install Kiosk action dialog. Titles are centered horizontally. task-4160938
This draft refactors automated tour tests across several Odoo Enterprise apps, including accounting, helpdesk, manufacturing, signing, and rental flows. The changes are internal and should help maintain test reliability without changing day-to-day user workflows.
The Helpdesk forum tour relies on the forum containing at least one post. This PR manually creates a post in python before launching the tour. Task-4143944 Forward-Port-Of: odoo/enterprise#69066
Original PR description
The Helpdesk forum tour relies on the forum containing at least one post. This PR manually creates a post in python before launching the tour. Task-4143944 Forward-Port-Of: odoo/enterprise#69066
Currently, when a user requests an invoice from a POS ticket under a Mexican company, the CFDI document attached to the invoice incorrectly uses the buyer's name instead of using the provided company name. ### Steps to reproduce * install `l10n_mx_edi_pos` * Switch to a Mexican company * the settings enable "Generate a code on ticket" * validate a POS order * follow the instructions on the ticket to generate an invoice. Make sure to provide a company name on the customer form. When
Original PR description
Currently, when a user requests an invoice from a POS ticket under a Mexican company, the CFDI document attached to the invoice incorrectly uses the buyer's name instead of using the provided company name. ### Steps to reproduce * install `l10n_mx_edi_pos` * Switch to a Mexican company * the settings enable "Generate a code on ticket" * validate a POS order * follow the instructions on the ticket to generate an invoice. Make sure to provide a company name on the customer form. When checking the XML file that is forwarded to the Mexican tax authorities, you see that only the "individual name" is registered there as the buyer, when it should be the company name. opw-4103543 opw-4071503 Forward-Port-Of: odoo/enterprise#69872 Forward-Port-Of: odoo/enterprise#69126
Steps to reproduce: In field service, have a project on which you have to sell 3 of item A. Item a is tracked by serial number and the delivery route is in 2 steps. From stock to output and from output to customer. On the sale order make sure you have 3 separate lines of 1 quantity of product A separated or not by sections. Confirm this one. This will create two pickings. One picking linked to a global stock move for 3 units from stock to output. A second picking linked to 3 stock moves ea
Original PR description
Steps to reproduce: In field service, have a project on which you have to sell 3 of item A. Item a is tracked by serial number and the delivery route is in 2 steps. From stock to output and from output to customer. On the sale order make sure you have 3 separate lines of 1 quantity of product A separated or not by sections. Confirm this one. This will create two pickings. One picking linked to a global stock move for 3 units from stock to output. A second picking linked to 3 stock moves each linked to a sale line id. Prioritise the first one by starring it. Now go back to the project and mark is as done. Had to redo the tests as from 17.2 one picking is generated at a time. Here we modify rules to create the two pickings. We have to do this to mimic customers migrating from prior versions of 17.2 to later versions. Original closed PR: https://github.com/odoo/enterprise/pull/61079 OPW-4088696 Forward-Port-Of: odoo/enterprise#68801 Forward-Port-Of: odoo/enterprise#68630
### Steps to reproduce: - Install eCommerce and Subscription modules - Create a recurring product - Add a comparison price in the product's form - Have only one plan for the recurrence - Go to the product's page in eCommerce ### Current behavior before PR: If you set a comparison price for a recurring product that has only one plan it won't be shown at the product's page in eCommerce this starts happening after this commit https://github.com/odoo/enterprise/pull/53591/commits/325e9
Original PR description
### Steps to reproduce: - Install eCommerce and Subscription modules - Create a recurring product - Add a comparison price in the product's form - Have only one plan for the recurrence - Go to the product's page in eCommerce ### Current behavior before PR: If you set a comparison price for a recurring product that has only one plan it won't be shown at the product's page in eCommerce this starts happening after this commit https://github.com/odoo/enterprise/pull/53591/commits/325e9fa35486b1fa0c3622e93eef5eac54b22cf1 ### Desired behavior after PR is merged: We are now showing the striked price if we only have one plan for recurrency. opw-3990890 Forward-Port-Of: odoo/enterprise#69791 Forward-Port-Of: odoo/enterprise#69582
https://github.com/odoo/enterprise/pull/61962 introduces consistency check for the generic tax report. The check was a bit too strict (we didn't allow any mistake). This pr relaxes the constraint a bit by allowing an error as long as it's smaller than 0.1% of the base amount. task-4119817 Forward-Port-Of: odoo/enterprise#68632
Original PR description
https://github.com/odoo/enterprise/pull/61962 introduces consistency check for the generic tax report. The check was a bit too strict (we didn't allow any mistake). This pr relaxes the constraint a bit by allowing an error as long as it's smaller than 0.1% of the base amount. task-4119817 Forward-Port-Of: odoo/enterprise#68632
We overwrite the CSS of the thread popover to prevent it from being displayed in dark mode, but we missed the CSS of some elements. Task: [4111072](https://www.odoo.com/web#id=4111072&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form) Forward-Port-Of: odoo/enterprise#68445
Original PR description
We overwrite the CSS of the thread popover to prevent it from being displayed in dark mode, but we missed the CSS of some elements. Task: [4111072](https://www.odoo.com/web#id=4111072&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form) Forward-Port-Of: odoo/enterprise#68445
Since 4dfb9259762de we tokenize subscription payment when amount is sufficient, in some case that test was not true because the sum of order's recurring line was greater by an epsilon. This commit compare the two amounts relative the order's currency (rounding). opw-4176380 opw-4162841 opw-4117553 opw-4152609 Forward-Port-Of: odoo/enterprise#69808
Original PR description
Since 4dfb9259762de we tokenize subscription payment when amount is sufficient, in some case that test was not true because the sum of order's recurring line was greater by an epsilon. This commit compare the two amounts relative the order's currency (rounding). opw-4176380 opw-4162841 opw-4117553 opw-4152609 Forward-Port-Of: odoo/enterprise#69808
This reverts commit b9947b15024b8b04a87b592ca81770d5489924ea. The bugfix allows to renew an order even when the next_invoice_date != start_date for first period. The solution is to make sure the periods are correctly set at contract creation. task 4116538 Forward-Port-Of: odoo/enterprise#69825
Original PR description
This reverts commit b9947b15024b8b04a87b592ca81770d5489924ea. The bugfix allows to renew an order even when the next_invoice_date != start_date for first period. The solution is to make sure the periods are correctly set at contract creation. task 4116538 Forward-Port-Of: odoo/enterprise#69825
When there is no article to load, the form view creates a virtual record and saves it when the user closes the page or reloads it. To avoid creating empty articles, we will trigger an urgent save only if the record is dirty. Steps to reproduce the issue: 1. Delete all articles from the database 2. Open the Knowledge editor (you should see the no-content helper) 3. Reload the page (F5) => The system creates a new "Untitled" article (see the list view). TO BE: The system should not cre
Original PR description
When there is no article to load, the form view creates a virtual record and saves it when the user closes the page or reloads it. To avoid creating empty articles, we will trigger an urgent save only if the record is dirty. Steps to reproduce the issue: 1. Delete all articles from the database 2. Open the Knowledge editor (you should see the no-content helper) 3. Reload the page (F5) => The system creates a new "Untitled" article (see the list view). TO BE: The system should not create any article when reloading the view. task-4167335 Forward-Port-Of: odoo/enterprise#69560
Before this commit, assignment emails are sent when an account.move is created with a different user_id than the current one. For subscriptions it can send thousands of email depending on the database size. The user_id on the account.move is the same salesperson than the one in charge of the sale.order. It helps the consistency of communication between the customer and the company. taskid: 4096474 Forward-Port-Of: odoo/enterprise#68752
Original PR description
Before this commit, assignment emails are sent when an account.move is created with a different user_id than the current one. For subscriptions it can send thousands of email depending on the database size. The user_id on the account.move is the same salesperson than the one in charge of the sale.order. It helps the consistency of communication between the customer and the company. taskid: 4096474 Forward-Port-Of: odoo/enterprise#68752
commit [1] introduced new barcode structure. However different buisness already have printed their barcode and it could be difficult to adapt on migration. We have this issue. For the sake of the planet, we will add aliases and better alias management instead of printing in color thousands of scaleup The demo data for scale up will be removed in 19.0 [1] commit 073163f1ae3fd2c659653b773d3ed66836eb2cb2 Forward-Port-Of: odoo/enterprise#69639
Original PR description
commit [1] introduced new barcode structure. However different buisness already have printed their barcode and it could be difficult to adapt on migration. We have this issue. For the sake of the planet, we will add aliases and better alias management instead of printing in color thousands of scaleup The demo data for scale up will be removed in 19.0 [1] commit 073163f1ae3fd2c659653b773d3ed66836eb2cb2 Forward-Port-Of: odoo/enterprise#69639
When the salary configurator is in public, there is no submit button, so it raises a traceback. To avoid this we check the button exists beore disabling it Forward-Port-Of: odoo/enterprise#69821
Original PR description
When the salary configurator is in public, there is no submit button, so it raises a traceback. To avoid this we check the button exists beore disabling it Forward-Port-Of: odoo/enterprise#69821