Tuesday, June 3, 2025
30 changes · 18.0
Enhancements to existing features
The Replenishment screen now uses clearer wording by renaming the confusing “Supplier” field to “Vendor Pricelist.” It also removes a duplicate grouping option, making custom filters and grouping easier for users to understand.
Original PR description
Task: 4642595 Description of the issue/feature this PR addresses: Custom filters in Replenishment display "Vendor" and "Supplier" fields separately. In some contexts, both of these words mean the same thing, which might be confusing for the users. Because of that, the "Supplier" field is being renamed to "Vendor Pricelist". Moreover, at the moment grouping by "Vendor" and "Vendor Pricelist" has the same effect. For that reason, "Vendor Pricelist" is being removed from "Add Custom Group" dropdown. 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
Payslip input type names in Payroll can now be translated, making payroll configuration clearer for users working in different languages. This improves localization support and helps multilingual teams see payroll labels in their preferred language.
Original PR description
In this PR, I enabled the translate setting for the name attribute within the hr_payslip_input_type model. Before:  After:    This work is related to the task: [4840358](https://www.odoo.com/odoo/project/1251/tasks/4840358).
Resolved issues and error corrections
This fixes report footers so documents without a tagline no longer show a large empty space. It also improves detection of empty footer content, helping reports display the standard footer layout consistently across affected localization templates.
Original PR description
commit https://github.com/odoo/odoo/commit/695b429d09887debe1a58e92abfd7e738350061d reworked the footer style but on boxed and bold if there is no tag line, it uses a col-8 that let a big empty space. Also it uses a wrong t-if condition on an html field. It should use is_html_empty since the field could contains empty tags (<br>) Fallback on standard template for report without report_header We keep a duplicate of class and t-attf-class in order to have a valid override of the template Fix l10n template to reduce the xpath and match the fix. Keeping the o_footer_content in both class for override and t-attf-class since `ir_qweb.py:def _compile_directive_att` ignore class attribute when t-attf-class is set opw-4618652
Miscellaneous changes
**Current behavior:** COGS dashboard items in a project's profitability report do not open any details when clicked on. **Expected behavior:** This should open a detailed view for an invoice linked via the analytic account on the project. **Steps to reproduce:** 1. Create a service product that generates a project on sale, on the project template set a specific analytic account 2. Create another product with real time valuation and assign the COGS account on the product category's ex
Original PR description
**Current behavior:** COGS dashboard items in a project's profitability report do not open any details when clicked on. **Expected behavior:** This should open a detailed view for an invoice linked…
**Current behavior:** COGS dashboard items in a project's profitability report do not open any details when clicked on. **Expected behavior:** This should open a detailed view for an invoice linked via the analytic account on the project. **Steps to reproduce:** 1. Create a service product that generates a project on sale, on the project template set a specific analytic account 2. Create another product with real time valuation and assign the COGS account on the product category's expense account 3. Sell some of the service product and the auto val product in the same order, deliver it -> generate invoice & post it 4. In the project's settings, open the profitability report and click on the `Cost of Goods Sold` dashboard item **Cause of the issue:** There is no action set up to return for this section, as it was just added in: 0fbc592 **Fix:** Add an action to return the account move line records with COGS display type for the invoice record in question (in the request's `res_id`). opw-4813885 Forward-Port-Of: odoo/odoo#212547
This fixes an issue in the HTML editor where double-clicking at the end of a link could place new text outside the link instead of inside it. Users editing website or document content can now extend linked text more reliably, reducing formatting mistakes.
Original PR description
Correct the double click selection at the end of a link to allow the new text input to be inside the link. task-4801000 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This change updates a product import test so it uses the correct file type information for older Excel files. It prevents false test failures in environments with Excel-reading libraries installed, helping keep product import validation reliable.
Original PR description
### Description of the issue/feature this PR addresses: Given https://github.com/odoo/odoo/blob/c494ca48eecab80e7310bf1c4ca1381d61f37f86/addons/base_import/models/base_import.py#L84-L90 Then…
### Description of the issue/feature this PR addresses:
Given
https://github.com/odoo/odoo/blob/c494ca48eecab80e7310bf1c4ca1381d61f37f86/addons/base_import/models/base_import.py#L84-L90
Then `test_import_product_demo_xls` incorrectly pairs .xls file extension with mime type `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`
### Current behavior before PR:
Tests in the product module fail when openpyxl is installed.
```
2025-05-19 15:08:32,243 1 ERROR odoo odoo.addons.product.tests.test_import_files: FAIL: Subtest TestImportFiles.test_import_product_demo_xls [product.supplierinfo]
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/odoo/addons/product/tests/test_import_files.py", line 35, in test_import_product_demo_xls
self.assertIsNone(result.get("error"))
AssertionError: "Unable to read file '<unknown>' as 'xlsx' (decided from user-provided mimetype 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')." is not None
2025-05-19 15:08:32,268 1 WARNING odoo odoo.addons.base_import.models.base_import: Unable to read file '<unknown>' as 'xlsx' (decided from user-provided mimetype 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet').
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/odoo/addons/base_import/models/base_import.py", line 429, in _read_file
return getattr(self, '_read_' + file_extension)(options)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/odoo/addons/base_import/models/base_import.py", line 509, in _read_xlsx
book = load_workbook(io.BytesIO(self.file or b''), data_only=True)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/openpyxl/reader/excel.py", line 344, in load_workbook
reader = ExcelReader(filename, read_only, keep_vba,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/openpyxl/reader/excel.py", line 123, in __init__
self.archive = _validate_archive(fn)
^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/openpyxl/reader/excel.py", line 95, in _validate_archive
archive = ZipFile(filename, 'r')
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/zipfile/__init__.py", line 1349, in __init__
self._RealGetContents()
File "/usr/lib/python3.12/zipfile/__init__.py", line 1416, in _RealGetContents
raise BadZipFile("File is not a zip file")
zipfile.BadZipFile: File is not a zip file
2025-05-19 15:08:32,269 1 ERROR odoo odoo.addons.product.tests.test_import_files: FAIL: Subtest TestImportFiles.test_import_product_demo_xls [product.template]
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/odoo/addons/product/tests/test_import_files.py", line 35, in test_import_product_demo_xls
self.assertIsNone(result.get("error"))
AssertionError: "Unable to read file '<unknown>' as 'xlsx' (decided from user-provided mimetype 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')." is not None
```
### Desired behavior after PR is merged:
Tests pass even when openpyxl is installed.
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis fix improves how Odoo's web testing tools handle errors during page element searches. It ensures internal cleanup happens reliably, reducing confusing follow-up errors for developers maintaining web features.
Original PR description
Before this commit, 'queryX' functions in Hoot would supposedly cleanup internal global variables on error thrown by the helpers. However, this only took into account the errors explicitly thrown, and NOT those that were thrown by other methods/native code, such as invalid native query selectors. This commit introduces a new internal method to "guard" exposed 'queryX' helpers, to properly cleanup internal variables on any error. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix prevents the HTML editor from crashing in Firefox when users press Enter rapidly while editing a To-do. It improves reliability by handling fast content changes safely, so users no longer see an error traceback during normal editing.
Original PR description
### Browser: Firefox ### Steps to reproduce: - Create a To-do. - Press Enter repeatedly and quickly. - A traceback occurs. ### Description of the issue/feature this PR addresses: - Pressing Enter quickly remove elements before their hooks are updated, causing hookElement to be undefined and triggering a crash. ### Desired behavior after PR is merged: - Traceback no longer occurs. task-4766147 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes a misleading warning that appeared when users created a delivery operation type even though a warehouse already existed. The change makes the dropshipping check use the current operation type, preventing unnecessary confusion during inventory configuration.
Original PR description
…compute **PROBLEM** When creating a new operation type, changing the type to Delivery throws a warning to create a warehouse first despite there already being one. **STEPS TO REPRODUCE** 1. On a…
…compute **PROBLEM** When creating a new operation type, changing the type to Delivery throws a warning to create a warehouse first despite there already being one. **STEPS TO REPRODUCE** 1. On a fresh database, install stock with drop shipping and storage locations enabled. 2. Create a new operation type and set the type to Delivery. 3. You will receive the following warning, despite an existing warehouse: ``` Please create a warehouse for company <company> ``` **CAUSE** https://github.com/odoo/odoo/blob/138983cc81cd1565c1582a1523efa8c0c4dcc434/addons/stock/models/stock_picking.py#L308-L316 https://github.com/odoo/odoo/blob/138983cc81cd1565c1582a1523efa8c0c4dcc434/addons/stock_dropshipping/models/stock.py#L70-L74 When the form is first loaded, the type is Receipt and the source location is consequently Vendors. After changing the type to Delivery, the source location is recomputed. Observe the above code snippets. Before the source location is done being computed, the warehouse is accessed and computed. When computing the warehouse (in the midst of the source location compute), the `default_location_src_id` is still Vendors and `default_location_dest_id` is Customers, thus `warehouse_id` is set to False. **FIX** In the conditional that checks if the picking type is drop shipping, check the `code` instead. The value in `code` is up-to-date at the conditional, unlike `default_location_src_id`. opw-4603495 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Belgian Acerta payroll export now handles a missing Acerta Affiliation Number more gracefully instead of crashing when users generate an export file. This helps payroll teams understand or resolve missing setup information without encountering a technical error.
Original PR description
When Acerta Affiliation Number is unset and user tries to generate export file, A traceback will appear. Steps to reproduce the error: - Install ``l10n_be_hr_payroll_acerta`` module and switch to…
When Acerta Affiliation Number is unset and user tries to generate export file,
A traceback will appear.
Steps to reproduce the error:
- Install ``l10n_be_hr_payroll_acerta`` module and switch to belgian company
- Create an employee A > Create a contract(Status: Running) for that employee A >
Details > Set Acerta code > save
- Go to Payroll > Configuration > Settings > Unset Acerta Affiliation Number
- Go to Payroll > Reporting > Export Work Entries to Acerta > New > Populate > Click on Generate Export File button
Traceback:
```
File "/home/odoo/src/enterprise/l10n_be_hr_payroll_acerta/models/hr_payroll_export_acerta.py", line 45, in _generate_line
return 'KLX1' + self.company_id.acerta_code + contract.acerta_code.zfill(20) \
TypeError: can only concatenate str (not "bool") to str
```
https://github.com/odoo/enterprise/blob/a4f68967a9826fac981c1141ece1791a0baf647a/l10n_be_hr_payroll_acerta/models/hr_payroll_export_acerta.py#L45
When ``self.company_id.acerta_code`` is not set,
It will lead to the above traceback.
sentry-6620429585This fix prevents Indonesian payroll payslips from crashing when the period start or end date is cleared. Users can edit payslip periods more safely without triggering an unexpected error.
Original PR description
Currently, An Error occurs on removing the **Date To** or **Date From** value from a payslip's period. **Steps to Reproduce** 1) Install **l10n_id_hr_payroll module**. 2) Create a new **Pay-Slip**. 3) Remove **Date** from **Period** **Error:** `AttributeError: 'bool' object has no attribute 'month'` **Root Cause:** The `_compute_l10n_id_include_pkp_ptkp` method at [1] assumes that `date_to` and `contract_id.date_end` are always set and valid. If either of them is missing (False), accessing `.month` or `.year` causes an error. [1] - https://github.com/odoo/enterprise/blob/34aa0ffb82c1bd7c90b4cb161ea515f2cad8e65f/l10n_id_hr_payroll/models/hr_payslip.py#L87 **Solution:** This commit prevents the computation from failing when `slip.date_to` and `slip.contract_id.date_end` fields are unset by adding a conditional check to ensure that both fields are valid date objects before accessing their `.month` and `.year` attributes. sentry-6608982173
…followers **Description of the issue/feature this PR addresses:** Currently all followers without portal access are able to see the button, in the email notification, that redirects to the portal (to see the quotation or sale order). This may be confusing and misleading, as the button will redirect them to the login page of the portal, to which they do not have access. This PR leaves the followers group options as default (button access disabled for followers) which ensures that only port
Original PR description
…followers **Description of the issue/feature this PR addresses:** Currently all followers without portal access are able to see the button, in the email notification, that redirects to the portal…
…followers **Description of the issue/feature this PR addresses:** Currently all followers without portal access are able to see the button, in the email notification, that redirects to the portal (to see the quotation or sale order). This may be confusing and misleading, as the button will redirect them to the login page of the portal, to which they do not have access. This PR leaves the followers group options as default (button access disabled for followers) which ensures that only portal users have access. **Current behavior before PR:** The 'follower' group in _notify_get_recipients_groups is being explicitly marked with 'has_button_access': True. Therefore followers without portal access are having access to the button. **Steps to reproduce:** 1. Configure odoo to be able to send out emails. 2. Install sale_management. 3. Create a sale order for a customer and add as follower another partner that has no portal access. This follower needs to have an email you have access to. 4. Send a message to the follower. 5. Test in the received email that the "View Quotation/Order" button is shown and when clicked, the user is redirected to the login page. **Desired behavior after PR is merged:** Only followers with portal access will have access to the button. Note that followers with portal access are directly categorized as 'portal_customer', so that is why it would make sense to simply remove the code where the followers without portal access are given access to the button. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#210343 Forward-Port-Of: odoo/odoo#208402
With two events having an calendar.alarm that is set for 1 hour before the event and a first event having attendees Partner1 and Partner2 and a second event has attendees Partner2 to Partner3. _do_sms_reminder will sent SMS once for each event to attendees from Partner1 to Partner3. Original issue introduced here: a1087e301122eea626ed30f34198de4666a81bdf Enabled by recent fix here ce574e5edf7bc848c867727d8c66a8e7802b029f that is batching events by alarm. opw-4812919 Forward-
Original PR description
With two events having an calendar.alarm that is set for 1 hour before the event and a first event having attendees Partner1 and Partner2 and a second event has attendees Partner2 to Partner3. _do_sms_reminder will sent SMS once for each event to attendees from Partner1 to Partner3. Original issue introduced here: a1087e301122eea626ed30f34198de4666a81bdf Enabled by recent fix here ce574e5edf7bc848c867727d8c66a8e7802b029f that is batching events by alarm. opw-4812919 Forward-Port-Of: odoo/odoo#212076 Forward-Port-Of: odoo/odoo#211948
Forward-Port-Of: odoo/odoo#212188
Original PR description
Forward-Port-Of: odoo/odoo#212188
Consider this situation: - Customer invoice. - All invoice lines use a tax type with l10n_es_type=no_sujeto_loc. - The sum of the invoice is 0€. - Sent to SII. Before this patch, the process would raise a wrong `UserError`. If the process was being executed by the cron, **no invoice would be sent**, even if there was only one failing. After this patch, the invoice will be notified nevertheless. If there's any kind of real validation problem, the SII servers will return an error that wi
Original PR description
Consider this situation: - Customer invoice. - All invoice lines use a tax type with l10n_es_type=no_sujeto_loc. - The sum of the invoice is 0€. - Sent to SII. Before this patch, the process would raise a wrong `UserError`. If the process was being executed by the cron, **no invoice would be sent**, even if there was only one failing. After this patch, the invoice will be notified nevertheless. If there's any kind of real validation problem, the SII servers will return an error that will get logged in the invoice. No exceptions raised in Odoo. The process can continue. Faulty invoices are marked; others work. Apart from that, there's also the fix to support the specific case outlined above. @moduon MT-7949 OPW-4344661 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#189529
Before this **PR**: Only HUF was allowed as valid currency on company for Hungarian EDI. After this **PR**: Now both HUF and EUR is allowed as valid currency for Hungarian EDI. **task**-4707271 Forward-Port-Of: odoo/odoo#211600
Original PR description
Before this **PR**: Only HUF was allowed as valid currency on company for Hungarian EDI. After this **PR**: Now both HUF and EUR is allowed as valid currency for Hungarian EDI. **task**-4707271 Forward-Port-Of: odoo/odoo#211600
When creating an invoice with a german customer, the domestic fiscal position is not applied. Instead, it's the european one which cause the invoice to have 0% taxes by default. opw-4448821 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#211277 Forward-Port-Of: odoo/odoo#192512
Original PR description
When creating an invoice with a german customer, the domestic fiscal position is not applied. Instead, it's the european one which cause the invoice to have 0% taxes by default. opw-4448821 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#211277 Forward-Port-Of: odoo/odoo#192512
*l10n_es_edi_sii,l10n_es_edi_tbai,l10n_es_edi_tbai_multi_refund Related to https://github.com/odoo/enterprise/pull/85966 Forward-Port-Of: odoo/odoo#210881 Forward-Port-Of: odoo/odoo#210804
Original PR description
*l10n_es_edi_sii,l10n_es_edi_tbai,l10n_es_edi_tbai_multi_refund Related to https://github.com/odoo/enterprise/pull/85966 Forward-Port-Of: odoo/odoo#210881 Forward-Port-Of: odoo/odoo#210804
When creating an inter-wh transfer, the replenish order was showing the product's supplier in the Received From (partner_id) field and not the correct wh. Steps to reproduce: ------------------- * In Inventory, activate Multi-step Routes * Create a new WH that can be Resupplied From another WH * On a product, in the Inventory tab, activate the Route 'ABC: Supply Product from XYZ' * On the forecast of that product, click on Replenish * Match fields: Warehouse = ABC, Preferred Route = 'AB
Original PR description
When creating an inter-wh transfer, the replenish order was showing the product's supplier in the Received From (partner_id) field and not the correct wh. Steps to reproduce: ------------------- * In…
When creating an inter-wh transfer, the replenish order was showing the product's supplier in the Received From (partner_id) field and not the correct wh. Steps to reproduce: ------------------- * In Inventory, activate Multi-step Routes * Create a new WH that can be Resupplied From another WH * On a product, in the Inventory tab, activate the Route 'ABC: Supply Product from XYZ' * On the forecast of that product, click on Replenish * Match fields: Warehouse = ABC, Preferred Route = 'ABC: Supply Product from XYZ' * Confirm * Open the generated order > Observation: > The field Receive From contains the supplier of the product instead of the supplying WH. Why the fix: ------------ The supplier_id was automatically set with the product's supplier_id. It's not correct for every routes. It's now updated accordingly to the route used and if we need the vendor. opw-4717654 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#210336
[FIX] website: update sitemap lastmod on website page view changes Before this commit, since the introduction of the website page model at commit [1], the lastmod for pages indicated in the sitemap was not entirely accurate: it only considered *page record* changes, not their internal *view changes*. Steps to reproduce: - Create a new website page and publish it - Go to /sitemap.xml, see the page is mentioned with correct lastmod - Wait for one day ** - Update the page URL - Go to
Original PR description
[FIX] website: update sitemap lastmod on website page view changes Before this commit, since the introduction of the website page model at commit [1], the lastmod for pages indicated in the sitemap…
[FIX] website: update sitemap lastmod on website page view changes
Before this commit, since the introduction of the website page model at
commit [1], the lastmod for pages indicated in the sitemap was not
entirely accurate: it only considered *page record* changes, not their
internal *view changes*.
Steps to reproduce:
- Create a new website page and publish it
- Go to /sitemap.xml, see the page is mentioned with correct lastmod
- Wait for one day **
- Update the page URL
- Go to /sitemap.xml, see the lastmod was updated
- Wait for one day **
- Update the page content
- Go to /sitemap.xml
=> The lastmod was unchanged
**: the lastmod does not show the hours. You will need to update the
write_date manually in your database to test this. Also, when
visiting the sitemap, you need to first delete the cached version
in the backend (Debug -> Settings -> Technical -> Attachments).
[1]: https://github.com/odoo/odoo/commit/4ecbacaf59576a22ff45615a5aa5c67244e4fb93
Forward-Port-Of: odoo/odoo#212055
Forward-Port-Of: odoo/odoo#211749…ivery **Problem:** When a product is added to a sale order from the delivery the cost is not computed **Steps to reproduce:** - Activate the "Margins" Settings - Open Sales/Products and create a product - In the product Type field, choose consumable and set a postive cost - Do the same for a second product - Navigate to Sales/Order and create a new quotation - Add your first product and Confirm - Click on the Delivery smart button and then on the Detailed Operations smart bu
Original PR description
…ivery **Problem:** When a product is added to a sale order from the delivery the cost is not computed **Steps to reproduce:** - Activate the "Margins" Settings - Open Sales/Products and create a…
…ivery **Problem:** When a product is added to a sale order from the delivery the cost is not computed **Steps to reproduce:** - Activate the "Margins" Settings - Open Sales/Products and create a product - In the product Type field, choose consumable and set a postive cost - Do the same for a second product - Navigate to Sales/Order and create a new quotation - Add your first product and Confirm - Click on the Delivery smart button and then on the Detailed Operations smart button - Click on New, add your second product and set a quantity of 1 - Go back to the delivery and validate it - Go back to the sale order **Current behavior:** A line has been added with the product but the Cost is zero **Expected behavior:** The cost should be computed **Cause of the issue:** Because of the elif logic here https://github.com/odoo/odoo/blob/799761246820eee73492277ab18f327ba04b6b96/addons/sale_stock_margin/models/sale_order_line.py#L17-L22 the cost of products added on delivery with a standard price will be computed using _compute_average_price https://github.com/odoo/odoo/blob/799761246820eee73492277ab18f327ba04b6b96/addons/sale_stock_margin/models/sale_order_line.py#L23 We should instead add the line to "line_ids_to_pass" so they're computed with the super method **Fix:** Changing the elif logic to make sure that if a product is added in delivery and has a non standard cost method it's cost is computed here https://github.com/odoo/odoo/blob/799761246820eee73492277ab18f327ba04b6b96/addons/sale_stock_margin/models/sale_order_line.py#L23 but if it's added in delivery and has a standard cost method, we call the super method for this line opw-4581531 Forward-Port-Of: odoo/odoo#208176
Steps to Reproduce: ----------------- 1) Create an Accrual - Set carryover_date to other - Set carryover_month to April. - Set carryover_day to Last Day. 2) Add an Accrual Rule to the accrual. 3) Create a Leave Allocation - Set allocation_type to Accrual. - Assign the Employee. - Define the Validity Period (date_from, date_to). **Issue:** ------------------- On accrual creation when the user selects the "last day" option for carryover_day, we are currently assigning th
Original PR description
Steps to Reproduce: ----------------- 1) Create an Accrual - Set carryover_date to other - Set carryover_month to April. - Set carryover_day to Last Day. 2) Add an Accrual Rule to the accrual. 3)…
Steps to Reproduce: ----------------- 1) Create an Accrual - Set carryover_date to other - Set carryover_month to April. - Set carryover_day to Last Day. 2) Add an Accrual Rule to the accrual. 3) Create a Leave Allocation - Set allocation_type to Accrual. - Assign the Employee. - Define the Validity Period (date_from, date_to). **Issue:** ------------------- On accrual creation when the user selects the "last day" option for carryover_day, we are currently assigning the 31st as the day Hardcoding the 31st as the `carryover_day` can lead to errors when the `_get_carryover_date` method is triggered. For example, this causes failures in months with fewer days (e.g., February or April). **Fix:** ----------- evaluate the correct carryover_day based on the selected month & year when the value is set to last day, before using it to prepare the final date. This ensures that the last day of each month is accurately determined and applied. **Traceback:** ------------ ValueError: day is out of range for month **OPW:** 4792938 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#211205
**Steps to reproduce:** - Install Accounting and l10n_es_edi_facturae - Switch to a Spanish company (e.g. ES Company) - Create or edit a Spanish customer and set "Facturae" as eInvoice format - Create an invoice: * Customer: [the Spanish customer] * Product: [any] * Customer Reference: [anything] - Confirm the invoice - Generate Facturae edi file via "Send & Print" button - Check the generated XML **Issue:** When submitting the XML to FACe service, the XML is rejected with th
Original PR description
**Steps to reproduce:** - Install Accounting and l10n_es_edi_facturae - Switch to a Spanish company (e.g. ES Company) - Create or edit a Spanish customer and set "Facturae" as eInvoice format -…
**Steps to reproduce:** - Install Accounting and l10n_es_edi_facturae - Switch to a Spanish company (e.g. ES Company) - Create or edit a Spanish customer and set "Facturae" as eInvoice format - Create an invoice: * Customer: [the Spanish customer] * Product: [any] * Customer Reference: [anything] - Confirm the invoice - Generate Facturae edi file via "Send & Print" button - Check the generated XML **Issue:** When submitting the XML to FACe service, the XML is rejected with the following error: "Element 'ReceiverContractReference': This element is not expected. Expected is one of ( FileDate, SequenceNumber, DeliveryNotesReferences, ItemDescription )." It is caused by "ReceiverContractReference" being set after "FileReference" in the invoice line section. Apparently, the order defined in the documentation should be respected. "ReceiverContractReference" should be set before "ReceiverTransactionReference". The issue has been introduced by this other fix: https://github.com/odoo/odoo/commit/ac1af565161d70d57f51d579d0530eb7766c0c76 opw-4579987 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#211177
Steps to reproduce: 1. Open Event > any upcoming event 2. make sure to check website submenu and showcase exhibitors 3. Create a sponsor with the exhibitor type and publish the website 4. Open private window in browser and go to exhibitor page by 5. Go to Events > Modfied Event > Exhibitor submenu 6. Turn on debug mode 7. Now click on more info button inside the exhibitor card Issue: - Invalid prop 'close' is used but not passed. Solution: - Add close prop in ExhibitorConnectClose
Original PR description
Steps to reproduce: 1. Open Event > any upcoming event 2. make sure to check website submenu and showcase exhibitors 3. Create a sponsor with the exhibitor type and publish the website 4. Open private window in browser and go to exhibitor page by 5. Go to Events > Modfied Event > Exhibitor submenu 6. Turn on debug mode 7. Now click on more info button inside the exhibitor card Issue: - Invalid prop 'close' is used but not passed. Solution: - Add close prop in ExhibitorConnectClosedDialog Backport of https://github.com/odoo/odoo/commit/a8a0e3b7a36e743aa24c51f96f1947e3bcaa5a5f opw-4737183 Forward-Port-Of: odoo/odoo#212308
### Before this commit: The `IBAN number` in the PDF footer is currently broken and displayed across multiple lines.  ### After this commit: Fix it by updating the CSS classes to ensure proper alignment and a cleaner UI layout.  > Task-4822070 --- I confirm I have signed the CLA and read the PR guidelines a
Original PR description
### Before this commit: The `IBAN number` in the PDF footer is currently broken and displayed across multiple lines.  ### After this commit: Fix it by updating the CSS classes to ensure proper alignment and a cleaner UI layout.  > Task-4822070 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#212144
The function `_get_consumed_leaves`, that was in the hr_employee model is used in a compute method of the hr_employee_base model. This was causing some issues as the inhertiance is from hr_employee_base to hr_employee. This commit fixes the issue by moving the function to hr_employee_base. Also, a function in `hr_org_chart` was not taking care that an employee can be public or not, which lead to model inconsistencies errors. task-4742768 Forward-Port-Of: odoo/odoo#207026
Original PR description
The function `_get_consumed_leaves`, that was in the hr_employee model is used in a compute method of the hr_employee_base model. This was causing some issues as the inhertiance is from hr_employee_base to hr_employee. This commit fixes the issue by moving the function to hr_employee_base. Also, a function in `hr_org_chart` was not taking care that an employee can be public or not, which lead to model inconsistencies errors. task-4742768 Forward-Port-Of: odoo/odoo#207026
*l10n_es_real_estates,l10n_es_reports,l10n_es_reports_2024 Related to https://github.com/odoo/odoo/pull/210804 Forward-Port-Of: odoo/enterprise#86009 Forward-Port-Of: odoo/enterprise#85966
Original PR description
*l10n_es_real_estates,l10n_es_reports,l10n_es_reports_2024 Related to https://github.com/odoo/odoo/pull/210804 Forward-Port-Of: odoo/enterprise#86009 Forward-Port-Of: odoo/enterprise#85966
Steps to reproduce: - Open Follow-up levels for 15 days -Check the option for “Automatic” - Go to the email template set in the “Content Template” and set a test email in the CC of the email configuration. - Open the follow up reports for a sample customer who is in the “15 days” stage and change the next reminder date to be a day before today. The reminder must be set to automatic. - There will appear a red ribbon on the right corner that says “In need of action” - In another tab, open sch
Original PR description
Steps to reproduce: - Open Follow-up levels for 15 days -Check the option for “Automatic” - Go to the email template set in the “Content Template” and set a test email in the CC of the email…
Steps to reproduce: - Open Follow-up levels for 15 days -Check the option for “Automatic” - Go to the email template set in the “Content Template” and set a test email in the CC of the email configuration. - Open the follow up reports for a sample customer who is in the “15 days” stage and change the next reminder date to be a day before today. The reminder must be set to automatic. - There will appear a red ribbon on the right corner that says “In need of action” - In another tab, open scheduled actions and Open the action “Account Report Followup; Execute followup” - Run this action manually Issue: Go to the previous tab and notice that the email is only sent out to the customer partner record and not the cc email address Note: This issue only occurs if the automatic followup is set. If we try to manually followup by clicking on the “Follow Up” button on the customer report, the email is sent correctly to both addresses. Cause: When running the cron, the recipients aren't in the options Solution: Add an helper to find all necessary recipients from the template if no recipient ids in the options opw-4527398 Forward-Port-Of: odoo/enterprise#84714 Forward-Port-Of: odoo/enterprise#83944
The current implementation to handle the rate for multi-currency entries in CAMT creates problems when fetching the source rate from the file: the source rate can be taken from the SrcCcy or the TrgtCcy node, which should be compared with the source currency and target currency respectively. It is not done that way and is too restrictive (when the SrcCcy is found, it is always compared to the target currency, which leads to an incorrect transaction amount). Moreover, when the currency convers
Original PR description
The current implementation to handle the rate for multi-currency entries in CAMT creates problems when fetching the source rate from the file: the source rate can be taken from the SrcCcy or the TrgtCcy node, which should be compared with the source currency and target currency respectively. It is not done that way and is too restrictive (when the SrcCcy is found, it is always compared to the target currency, which leads to an incorrect transaction amount). Moreover, when the currency conversion introduces a exchange loss/gain, it is put back on the largest transaction of the entry. Backport of https://github.com/odoo/enterprise/pull/76828 and https://github.com/odoo/enterprise/pull/42763 opw-4672283 Forward-Port-Of: odoo/enterprise#84775 Forward-Port-Of: odoo/enterprise#83131
Before this commit, when the user creates more than one fsm project, the default fsm project selected once a fsm task is created if the one with the lowest sequence and lowest id which could be confusing for the user since the default order displayed in the list view of projects is `sequence, name, id`. This commit makes sure the default fsm project fetched is the first one displayed in the list view of projects. opw-4791468 Forward-Port-Of: odoo/enterprise#86554
Original PR description
Before this commit, when the user creates more than one fsm project, the default fsm project selected once a fsm task is created if the one with the lowest sequence and lowest id which could be confusing for the user since the default order displayed in the list view of projects is `sequence, name, id`. This commit makes sure the default fsm project fetched is the first one displayed in the list view of projects. opw-4791468 Forward-Port-Of: odoo/enterprise#86554