Daily updates from Odoo
Tuesday, March 3, 2026
30 changes · saas-19.2
Resolved issues and error corrections
This update resolves an issue where the system didn't properly handle mismatched DIAN operation modes. When the user selects an incorrect mode for Colombian electronic invoicing, a warning is now displayed to prevent incorrect invoice generation. This ensures compliance with DIAN regulations.
Original PR description
Steps to reproduce: - Install `l10n_co_dian` module(demo data) > Switch to `CO Company` - Settings > Colombian Electronic Invoicing > Change the Operation Mode: `DIAN 2.1: Support Documents`(eg:…
Steps to reproduce:
- Install `l10n_co_dian` module(demo data) > Switch to `CO Company`
- Settings > Colombian Electronic Invoicing > Change the Operation Mode: `DIAN 2.1: Support Documents`(eg: [Image](https://www.awesomescreenshot.com/image/58874464?key=0cb74e446dcdb0f087df6ed619f785c2))
- Vendors > Create a Bill > Confirm > `Acknowledge Reception`
Traceback:
```py
File "/home/odoo/src/enterprise/saas-19.1/l10n_co_dian/models/account_move.py", line 293, in l10n_co_dian_send_event_update_status_received
self._l10n_co_dian_send_event_update_status('received')
File "/home/odoo/src/enterprise/saas-19.1/l10n_co_dian/models/account_move.py", line 313, in _l10n_co_dian_send_event_update_status
document = self.env['l10n_co_dian.document']._send_commercial_event(self, commercial_state_next)
File "/home/odoo/src/enterprise/saas-19.1/l10n_co_dian/models/l10n_co_dian_document.py", line 593, in _send_commercial_event
xml, errors = self.env['account.edi.xml.ubl_dian']._export_co_send_event_update_status_invoice(locked_move, commercial_state_next)
File "/home/odoo/src/enterprise/saas-19.1/l10n_co_dian/models/account_edi_xml_ubl_dian.py", line 1208, in _export_co_send_event_update_status_invoice
return self.with_context(l10n_co_next_commercial_state=next_commercial_state)._dian_sign_xml(xml, invoice)
File "/home/odoo/src/enterprise/saas-19.1/l10n_co_dian/models/account_edi_xml_ubl_dian.py", line 1524, in _dian_sign_xml
'software_security_code': self._dian_get_security_code(operation_mode, document_number),
File "/home/odoo/src/enterprise/saas-19.1/l10n_co_dian/models/account_edi_xml_ubl_dian.py", line 1443, in _dian_get_security_code
operation_mode.dian_software_id
TypeError: unsupported operand type(s) for +: 'int' and 'str'
```
We are getting this error because `_dian_get_operation_mode` [returns] an empty `l10n_co_dian.operation_mode()` record. This happens when the `Operation modes` do not match. As a result, [operation_mode] also contains an empty record.
[operation_mode]: https://github.com/odoo/enterprise/blob/84022deef3414096fcaf61f8d45c08393431e0ab/l10n_co_dian/models/account_edi_xml_ubl_dian.py#L1432
[returns]: https://github.com/odoo/enterprise/blob/84022deef3414096fcaf61f8d45c08393431e0ab/l10n_co_dian/models/account_edi_xml_ubl_dian.py#L1394-L1400
sentry-7273771732
Forward-Port-Of: odoo/enterprise#107885This update fixes inaccurate calculations of worked days and work entries for new employees, particularly those with contracts starting in the current month. It ensures work entries are generated correctly and prevents unintended entries when employees have no contract, improving payroll accuracy.
Original PR description
Problems: ------- 1. For a new employee, with a contract starting in the current month but before today: in the payslip for the current month number of days of attendance and days of out of contract…
Problems: ------- 1. For a new employee, with a contract starting in the current month but before today: in the payslip for the current month number of days of attendance and days of out of contract are not correct Same for an employee, with a contract ending in the current month (before today) 2. In both cases above worked entries are not generated correctly (from today to the end of month) 3. Additional bug: If we create an employee with no contract and create a payslip draft for him for the current month, work entries with type "Attendance" will be created Objective: --------- Problems 1 and 2 : date_version was equal to today (date of the employee's creation), so number of attendance days was calculated as ( end_of_payslip_month - today ) or ( today - start_of_payslip_month ) Problem 3 : Work entries are generated even when there is no active contract Solution: --------- Problems 1 and 2: This commit adds an additional part (already exists in v19) in the method write() of hr.version which sets date_version = contract_date_start Problem 3: by generating work entries check if contract_date_start is filled Tests ware added in odoo/hr: test_hr_version.py and in enterprise/hr_payroll: test_new_employee_worked_days, test_payslip_empty_contract.py task-5430759 Forward-Port-Of: odoo/odoo#251264 Forward-Port-Of: odoo/odoo#241978
This update corrects a previous issue where archived accounts could be incorrectly assigned as default journal accounts. The change ensures that only active accounts are considered when setting up new journals, maintaining data consistency and preventing potential reporting errors. This resolves a prior inconsistency in how the system handled archived accounts.
Original PR description
### Steps to Reproduce: 1. Go to Accounting > Create a journal. 2. Archive the company’s default income/expense or cash diff. accounts. 3. Change the journal type. 3. Observe that an archived account…
### Steps to Reproduce: 1. Go to Accounting > Create a journal. 2. Archive the company’s default income/expense or cash diff. accounts. 3. Change the journal type. 3. Observe that an archived account is assigned by the onchange method. ### Issue: - Prior to saas-18.3, no onchange logic existed for assigning default accounts. With the introduction of the [onchange] (https://github.com/odoo/odoo/commit/334a8161cd2feb092cafedc35d94645900b40518) , archived income/expense or default cash diff. accounts can be assigned to journals. - This creates an inconsistency, as the domain [defined] (https://github.com/odoo/odoo/blob/saas-18.3/addons/account/models/account_journal.py#L70-#L82) for `default_account_id` only returns active accounts. ### Solution: - Since the domain for `default_account_id` returns only active accounts, this commit aims to update the onchange [logic](https://github.com/odoo/odoo/blob/saas-18.3/addons/account/models/account_journal.py#L540-#L551) in order to follow the same restriction, ensuring that only active accounts are assigned thereby preventing inconsistent behavior. OPW-5501539 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246725
This update resolves a test issue related to the websiteUrlPicker component. The test previously relied on a real delay, leading to unpredictable failures. Now, the test uses a controlled time advance to accurately simulate the debounce process, ensuring consistent and reliable test results.
Original PR description
Issue: The websiteUrlPicker input has a 250ms debounce. The test was relying on a real 250ms delay to wait it out, creating a race condition that caused non-deterministic failures. Fix: The test now uses `advanceTime()` to advance the time to past the debounce. runbot-[241087](https://runbot.odoo.com/odoo/runbot.build.error/241087) Forward-Port-Of: odoo/odoo#251199
This update fixes a visual inconsistency in the Discuss app's dark mode. The background colors of breadcrumbs and navbar buttons were previously mismatched compared to the control panel. This change ensures a more polished and professional user experience across all Odoo modules in dark mode.
Original PR description
The background color of navbar buttons and breadcrumbs in discuss app differed from that of control panel. This PR aligns and syncs these colors for a consistent UI. | Before | After | |--------|-------| |<img width="467" height="99" alt="image" src="https://github.com/user-attachments/assets/2def30f8-18aa-4399-a5d1-1cdc70b4cd81" /> |<img width="458" height="111" alt="image" src="https://github.com/user-attachments/assets/5578cd25-7686-4543-a8dc-3e0fe5aeb4fc" />| This PR contains backport of #217608 task-[4936733](https://www.odoo.com/odoo/project/1519/tasks/4936733) task-[5487197](https://www.odoo.com/odoo/project/1519/tasks/5487197) Forward-Port-Of: odoo/odoo#251360 Forward-Port-Of: odoo/odoo#250601
This update resolves an issue where posted 'Miscellaneous' journal entries in the Chilean localization were incorrectly flagged with a validation error regarding document numbers. The fix exempts these journal entries from the numeric folio validation rule, allowing users to correctly modify and save them. This ensures proper functionality for Chilean accounting operations.
Original PR description
Currently, editing a posted `miscellaneous` journal entry in Chile localization incorrectly raises a validation error. **Steps to reproduce:** - Install the `l10n_cl` module and switch to the `CL…
Currently, editing a posted `miscellaneous` journal entry in Chile localization incorrectly raises a validation error. **Steps to reproduce:** - Install the `l10n_cl` module and switch to the `CL company`. - Go to Accounting > Accounting > Journal Entries. - Create a balanced entry using the `Miscellaneous journal `and `post` it. - Reset it to draft, modify the `name`, and try to `save` it. **Observation:** `Validation error`: `The DTE document number (folio) must contain only digits.` **Root cause:** At [1], the constraint validation is applied to all journal entries in Chilean companies, including `miscellaneous` journals. However, `miscellaneous journals (move_type = 'entry')` are not linked to Chilean electronic documents, so the numeric folio validation should not apply to them. **Fix:** This commit ensures that the validation is not raised for `miscellaneous` journal types by excluding miscellaneous journals from the numeric folio validation constraint. [1]: https://github.com/odoo/odoo/blob/f39785bcddd1eb5b7fb503d053c9bb66e2a0f15c/addons/l10n_cl/models/account_move.py#L20-L30 opw-5926773 Forward-Port-Of: odoo/odoo#248965
A technical issue preventing payrun creation for Hong Kong employees has been fixed. The update corrects a naming error that was causing errors during payrun generation, ensuring accurate payroll processing for our HK clients. This resolves a previous disruption to the payrun workflow.
Original PR description
In the big commit adding eMPF to the hk localization, a function was miss named and was causing an error when trying to create a payrun. Steps to reproduce: - Install belgian localization - Install HK localization - Select the belgian company - Create a payslip for a belgian employee (works fine) - Create a payrun and select the same employee from the list - Get an error In this commit we fix the naming of the function and everything goes back to working. Task: 5960503 Forward-Port-Of: odoo/enterprise#109196
This update fixes an issue where new tables on restaurants with multiple floors were assigned numbers based on the highest number across all floors, leading to potential conflicts. Now, new tables are assigned numbers based on the highest number on the current floor, simplifying table management and preventing numbering errors.
Original PR description
Before this commit: =================== When multiple floors exist, creating a new table assigns the next table number based on the maximum table number across all floors. After this commit: ================== When multiple floors exist, creating a new table assigns the next table number based on the maximum table number of the current floor. Task: 5888449 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246975
This update adjusts the size of custom snippet titles within Mass Mailing to ensure they are easily readable. A recent update to the preview snippet selector required a change in font size for these titles. This fix maintains the original appearance of custom snippets at the new scale, improving user experience.
Original PR description
In Mass Mailing, users can save modified snippets as Custom Snippets, allowing for their later reuse. These snippets can be found in the Custom category. However, their title was too large. This is due to d2b56435736e8d507434c1378cb68fae23e8511f rescaling the preview snippet selector, allowing for better readability of each snippet's text from the selector. As the default builder font size for custom snippet titles was set for the previous scale (50px at 0.3 scale), it has to be halved to restore its previous appearance at the new scale (25px at 0.6 scale). task-5959033 Forward-Port-Of: odoo/odoo#250609
This update corrects a technical issue in the Hungarian tax audit export process. Previously, changes to invoice data were unintentionally saved to the database, causing potential errors. The fix ensures data is properly cleared from the cache before and after savepoints, preventing these unwanted database updates.
Original PR description
At the moment, the Hungarian tax audit export wizard's `action_export` creates a savepoint with `flush=False`. The intention of this savepoint is to roll back the changes to `l10n_hu_edi_invoice_chain` once the savepoint exits. But because the changes to `l10n_hu_edi_invoice_chain` stay in cache, and the cache is not flushed before the savepoint is created nor cleared afterwards, those changes end up being committed to DB. Which is precisely what the savepoint was there to prevent. Solution: we use `flush=True` to make sure the cache is flushed before and cleared after the savepoint. task-none Forward-Port-Of: odoo/odoo#251322 Forward-Port-Of: odoo/odoo#250971
This update fixes an issue where the lot number for products tracked by lot in POS sales orders wasn't consistently displayed. The fix ensures that the correct lot number is accurately reflected across all product lines within the POS interface. This improves order accuracy and traceability for products with lot tracking.
Original PR description
When opening an SO in POS that has a product tracked by lot that is split into several location, the lot number will only appear in one of the line and not the others Steps to reproduce:…
When opening an SO in POS that has a product tracked by lot that is split into several location, the lot number will only appear in one of the line and not the others Steps to reproduce: ------------------- 1. Create a Product A tracked by lot, create lot 111 and add 1 unit to location A and another one to location B 1. Create a sales order 2. Add two units of the product to the sale order 3. Confirm the sales order 4. Open the transfer, make the transfer retrieve the product from several location with the same lot. 5. Save the transfer 6. Open the sales order in POS 7. Load the SN/lots -> Two line of qty 1 appear for the product A but only the first one has the lot number Additional Issue: 8. Change the number of the product for the first line to 2 and erase the second line 9. Confirm and Pay 10. Close POS 11. Open move lines for this product (Inventory>product>In/out) -> It moves 2 product from one location (when there is only product) Observation: ------------- When loading the SO in POS, we will retrieve the SO: https://github.com/odoo/odoo/blob/cb1f5d9c6db64b9ace9b7aa46bd6f94e4462176b/addons/pos_sale/static/src/app/order_management_screen/sale_order_management_screen/sale_order_management_screen.js#L104 While retrieving the SO, we will also retrieve the SOL, with additional information: https://github.com/odoo/odoo/blob/d9b2e5ee730a4e79586bfd3f09adfb794d2dc1f3/addons/pos_sale/models/sale_order.py#L79 -> Issue is that when several moves_line have the sale lot_id.name, their quantity will be overwritten. Addition Issue : When closing pos, all the move will be processed, when processing those moves, the origin only check if the quantity is more than 0 and not if there is enought units. https://github.com/odoo/odoo/blob/cb1f5d9c6db64b9ace9b7aa46bd6f94e4462176b/addons/point_of_sale/models/stock_picking.py#L293-L297 opw-5347992 Forward-Port-Of: odoo/odoo#251270 Forward-Port-Of: odoo/odoo#243347
This update fixes a display issue in the website editor where an incorrect 'Custom URL' field was appearing. The change prevents this field from showing when the website URL doesn't support customization, ensuring a cleaner and more accurate SEO experience for users. This improves the usability of the website editor.
Original PR description
This PR hides the "Custom Url" field in the "Search Engine Optimization" when the URL of the current page do not contain any editable slug. Previously, this field could be filled when the URL did not…
This PR hides the "Custom Url" field in the "Search Engine Optimization" when the URL of the current page do not contain any editable slug. Previously, this field could be filled when the URL did not contain any modifiable slug. However, the value was not take into account since the route of the page did not expect slug. Reproduce: With an admin user, activate the website editor on an appointment page. Clicking on "Optimize SEO" in the "Site" dropdown menu, a form containing the "Cutsom Url" field is displayed. This field should represent the current page's URL but with fillable field instead of the editable URL part. In this case, this is not correct as the URL is repeated before and after the fillable field, which does not represent the current URL. Also, the URL is not modified with the value entered in the fillable field. After the fix: The "Custom Url" field must not be displayed when URL does not contain a customisable slug. Task-5114394 Forward-Port-Of: odoo/odoo#251294 Forward-Port-Of: odoo/odoo#231609
A recent update to the Document linking dialog caused a minor error when users tried to add documents via the command palette. This fix updates a key part of the software's code to correctly identify the 'Add as link(s)' button, ensuring the dialog functions as intended. This resolves a display issue and improves the user experience.
Original PR description
How to reproduce: Open any record, go to the Activity, select Document, then type “/File” in the command palette and click it. An error is raised. Issue: The xpath expression `contains(., 'Paste Link')` cannot locate the element because the button label was renamed to `Add as link(s)` in commit a4ca17329d7c21be487a53c5e0b9afa39e6dad3a. Resolution: Update the xpath to correctly target the new button definition `Add as link(s)` instead of the old label, preventing the element lookup failure and restoring proper dialog rendering. Task-5946396
This update resolves an issue where archived employees were still visible in the attendance Gantt view. The change ensures that only currently active employees are displayed, improving the accuracy and clarity of the attendance reporting tool. This prevents confusion and outdated information.
Original PR description
Steps to reproduce: 1. install `hr_attendance_gantt` 2. create an employee 3. make attendance records for the employee in the previous months 4. archive the employee When opening the gantt view of the attendance, a row appears for the archived employee, with no attendance showing up. This commit adds a constraint to only show the active employees. opw-5490119 Forward-Port-Of: odoo/enterprise#107972 Forward-Port-Of: odoo/enterprise#106486
This update resolves an issue where a security check was incorrectly performed on multiple records within the account module. The fix ensures the check is now executed only once, strengthening the system's security posture. This change improves the reliability and efficiency of user trust validation.
Original PR description
In some cases, the check was done on multiple records, though the method should be called on one and only one record. Forward-Port-Of: odoo/odoo#251589 Forward-Port-Of: odoo/odoo#251457
This update corrects a bug where the removal date for products with expiration dates was incorrectly recalculated after modifications. The fix allows users to directly edit the removal date, ensuring accurate tracking of product expiration. This resolves a previous issue impacting inventory management accuracy.
Original PR description
version : saas-18.4+e Steps to reproduce ------------------ Create a product tracked by lots and enable the expiration date use (use_expiration_date = True). Create a receipt with this product and mark it as to do. Open the stock.move.line list view using the "Details" button on the receipt form and try to modify expiration date, it should modify the removal date due to the compute method. Then, try to modify the removal date and save the modifications. If you reopen the list view, the removal date has been computed again and its value changed. The fix ------------------ We explicitly set the readonly field to False for the removal_date field from the stock.move.line model in product_expiry. opw-5368007 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#251256 Forward-Port-Of: odoo/odoo#241659
This update corrects a display issue where vendor product names and codes were appearing twice in the purchase receipt descriptions. The root cause was a redundant addition of vendor information during the receipt generation process. This change ensures accurate and consistent product descriptions in purchase receipts.
Original PR description
Version : saas-18.4+e Steps to reproduce ------------------ Create a product and add a line in the purchase tab with a “Vendor Product Name” and/or a “Vendor Product Code”. Create a purchase order…
Version : saas-18.4+e Steps to reproduce ------------------ Create a product and add a line in the purchase tab with a “Vendor Product Name” and/or a “Vendor Product Code”. Create a purchase order for this product with the right vendor and confirm it. Go to the delivery receipt, the vendor code and/or name are added twice in the description. Why is it happening ------------------ The _compute_description_picking method from stock.move, which is overridden in purchase_stock module, adds the vendor code and name to the description. However, if no description_picking has been set on the product, the description is already defined as the vendor code and name. Solution ------------------ I propose to remove the code and the name from the vendor_reference variable if the original description already contains them. opw-5392855 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#251337 Forward-Port-Of: odoo/odoo#242075
This update fixes a JavaScript error that occurred when users closed the signing certificate wizard without saving. The fix ensures the system correctly handles wizard dismissals, preventing a crash and improving stability. This resolves a potential disruption for users completing the certificate signing process.
Original PR description
**Issue:**
Closing the signing certificate wizard without saving triggers a client-side traceback (`UncaughtPromiseError: Invalid ids list: [object Object]`).
**Cause:**
When the wizard dialog is discarded, Odoo's dialog manager passes a dismissal object (`{dismiss: true}`) to the `onClose` callback. The existing code only checked if the payload was truthy (`if (cert_id)`), causing it to attempt to update the `signing_certificate_id` Many2one field with the event object. The framework's validation (`validatePrimitiveList`) expects an integer or array of integers, resulting in a crash when it tries to parse the object.
**Fix:**
Updated the `onClose` callback to strictly verify the type of the payload (`typeof cert_id === 'number'`). The record is now only updated when the wizard successfully returns a valid primitive integer ID.
task: 5975643
Forward-Port-Of: odoo/enterprise#108864This update fixes an issue where the VAT exigibility mention was incorrectly shown on French invoices. The change ensures that the mention is only displayed when required by French tax regulations – specifically, when a service VAT uses invoice-based tax exigibility. This ensures compliance and accurate invoice presentation.
Original PR description
The VAT exigibility mention on French invoices was incorrectly displayed. - For goods, VAT on debits is the default regime, therefore the mention is not mandatory and must not be shown. - For services, VAT is normally due on payment. The mention “TVA payée sur les débits” must be displayed only when a service VAT uses tax exigibility based on invoice. This commit updates the logic to display the mention only in this specific case and omits it otherwise. Task:5418502 Forward-Port-Of: odoo/odoo#248588
This update fixes a visual issue with the API documentation tooltips, ensuring they display correctly and consistently. The changes align the text, improve how tooltips are hidden, and prevent empty tooltip content from appearing, resulting in a cleaner and more reliable user experience for developers.
Original PR description
In api_doc, the method parameters tooltips were broken. This commit fixes them by: - aligning the text to the left - improving the hideTooltip behavior - preventing `undefined` tooltip content from being displayed task-5246075 Forward-Port-Of: odoo/odoo#248289
This update ensures that loyalty rewards are correctly applied to orders loaded from the TicketScreen, even after switching to other orders. Previously, the system didn't properly refresh loyalty state when loading an order, causing rewards to disappear. This fix guarantees rewards are accurately reflected in loaded orders.
Original PR description
Reward disappeared from an order when it was loaded from the Orders tab (TicketScreen) in restaurant mode after working on other tables. Steps to reproduce: ------------------- * Configure a Buy X Get Y (or similar) loyalty program and open a POS restaurant session. * On table A, create an order that triggers the program and confirm the reward line is applied. * Leave table A, create or edit another order on a different table (so another order becomes current). * Go to the Orders tab (TicketScreen), select the order from table A and click "Load Order". > Observation: The order from table A is loaded without its reward line, even though it was present when the order was first created. Why the fix: ------------ TicketScreen’s "Load Order" flow was only switching the current order without refreshing loyalty state, so after changing tables and coming back, later loyalty recomputations could drop the existing reward lines. opw-5909899 Forward-Port-Of: odoo/odoo#248000
This update corrects a problem where the system wasn't properly tracking the status of batch payments processed in the background for Danish accounting (l10n_dk). This fix ensures that all payment attempts are accurately recorded and managed, improving the reliability of financial transactions. It addresses a technical issue impacting payment processing functionality.
Original PR description
State is not being correctly managed in case of background processing. task-5963885 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#251219
This update fixes a visual issue where group names in list views were being cropped due to incorrect column spanning. The change ensures group names have sufficient space, regardless of the list's content, improving readability and the overall user experience. This resolves a minor aesthetic problem that could have impacted how users viewed grouped data.
Original PR description
Have a grouped list view with no aggregate fields. Before this commit, the colspan of the first `th` in group header rows wasn't optimally computed. These `th` can span to the very last cell…
Have a grouped list view with no aggregate fields. Before this commit, the colspan of the first `th` in group header rows wasn't optimally computed. These `th` can span to the very last cell (excluded), which may contain a cog menu. However, they only spanned to the second to last cell. As a consequence, in a list with only 2 columns, e.g. a handle and a name, the groups' name only got a few px available, and were hence cropped. The issue came from successive reworks of the group header row, leading to the pager being finally moved from its own column (after the last aggregate column), to the group name cell (with ms-auto). The logic is easier now, as a group header row looks like this: - a single `<th colspan="n">` (n >= 1) to display the group name: spans to the first aggregate column excluded or to the last cell excluded if no aggregate (colspan + 1 if rows have selectors) - one `<th colspan="1">` for each aggregate column - optionally one `<th colspan="m">` (m >= 1) for all columns after the last aggregate column - a single `<th colspan="1">` for the potential cog menu (optional dropdown column) opw~5730396 Before <img width="1918" height="471" alt="image" src="https://github.com/user-attachments/assets/8f55322b-1603-42cc-a48b-a2010ff12e25" /> After <img width="1909" height="423" alt="image" src="https://github.com/user-attachments/assets/0bca4865-88a1-424d-a1af-1523dbfa911c" /> Forward-Port-Of: odoo/odoo#251411
This update corrects a bug where the invoice section was disappearing when the product price was hidden. The fix also resolves a related issue where removing tax caused a duplication of the invoice subsection. This ensures invoices are correctly rendered in previews and PDFs, providing accurate financial information.
Original PR description
**STEP TO REPRODUCE** 1. Create an invoice, with: - Section A - Subsection 1 - product a, with tax Click on hide price on section A, and preview the invoice. Notice the Section A is missing from the preview/pdf. If you remove the tax on product a, there will also be a bug where Subsection 1 is duplicated, with one copy with no children lines below it. opw-5927563 Forward-Port-Of: odoo/odoo#251344 Forward-Port-Of: odoo/odoo#249808
This update resolves an issue where planners couldn't see available shifts for resources with no scheduled shifts. The fix removes a filter that was incorrectly limiting the shift options in the planning dialog, ensuring planners have full visibility to assign resources effectively. This improves scheduling efficiency and reduces wasted time.
Original PR description
Steps to Reproduce ------------------ 1. Open the Planning Gantt view. 2. Click a cell that belongs to a resource with **no** scheduled shifts. 3. The Plan dialog opens with an empty list. Issue…
Steps to Reproduce ------------------ 1. Open the Planning Gantt view. 2. Click a cell that belongs to a resource with **no** scheduled shifts. 3. The Plan dialog opens with an empty list. Issue ----- A previous change keeps the clicked resource in the dialog context; the Gantt model turns it into a default search filter, so only shifts already linked to that resource are shown. Unassigned shifts are therefore hidden, preventing planners from assigning them by role or availability. Current Behaviour ----------------- The Plan dialog is always filtered by `resource_id`, which returns no results for unscheduled resources, even when they have the right roles. Expected Behaviour ------------------ The dialog should list all unscheduled shifts that match the resource’s roles, or every unscheduled shift if the resource has no roles, while still preserving full context for scheduling once a shift is selected. Fix --- Remove the automatic resource filter from the dialog context in `getSelectCreateDialogProps()`. This prevents the unwanted search restriction; role defaults remain, so the dialog now displays the correct shifts. Task-4922525 Issue – https://github.com/odoo/enterprise/pull/87424/commits/a218a7cedce61f992fbe76284c273be8f937d28d Forward-Port-Of: odoo/enterprise#92100
This update fixes an issue where Point of Sale session messages were consistently displayed in English, regardless of the user's selected language. The fix ensures that all cash-related messages within POS sessions are now translated accurately based on the user's language preference, improving the user experience for international customers.
Original PR description
**Problem:** When opening or closing a POS session, chatter messages display untranslated English text regardless of the user's language setting. **Steps to reproduce:** 1. Set user language to any non-English language (e.g., Spanish) 2. Open a POS session and register cash in/out operations 3. Close the session 4. Check the chatter messages - labels appear in English **Current behavior:** Messages display in English: "Opening cash difference", "Opening cash expected", "Opening cash counted", "Closing difference", etc. **Expected behavior:** Messages should be translated according to the user's language setting. **Cause of the issue:** The hardcoded strings were not wrapped in the translation function `_()`, preventing them from being translated. **Fix:** Wrap the concatenated strings with `_()` to enable proper translation of all cash details messages. opw-5185310 Forward-Port-Of: odoo/odoo#248982 Forward-Port-Of: odoo/odoo#244501
This update resolves a technical issue where the new booking view for POS appointments was interfering with other modules. By restricting the view's usage to the POS system, this fix ensures compatibility and prevents disruptions to other parts of the Odoo platform. This improves stability and prevents potential conflicts.
Original PR description
The list view in pos appointment would replace the original list view on calendar event and break other modules. This PR will add the `primary` mode for the new view so it is only used inside the POS Runbot Error: [234914](https://runbot.odoo.com/odoo/runbot.build.error/234914) Forward-Port-Of: odoo/enterprise#107132
This update fixes a problem where archived employees incorrectly retained their appraisal dates, causing scheduling conflicts. The change ensures that archived employees are excluded from appraisal calculations, preventing date conflicts and ensuring accurate appraisal plan management. This improves the stability and usability of the appraisal feature for all companies.
Original PR description
**Steps to reproduce:** Based on this feedback https://www.odoo.com/odoo/project.task/5270281 companies with archived employees face an issue when they try to toggle Appraisals Plans from Appraisls -> Configuration -> Settings -> Appraisals Plans **Issue:** The propblem is that when employees with next appraisal date are archived, their next appraisal date is not cleared which leads to past date conflicts upon trying to set the next appraisals dates for all the employees (which is done through toggling the Appraisals Plans checkbox) **Solution:** - Unset the next appraisal date upon archiving an employee - exclude archived employees from _compute_next_appraisal_date method Task: 5354002 Forward-Port-Of: odoo/enterprise#109115 Forward-Port-Of: odoo/enterprise#100437
This update fixes an issue where newly hired employees were incorrectly receiving their private email address as their work email. The fix clears the employee's work_email field during the contract signing process, ensuring it reflects the correct work email from the salary configurator. This prevents confusion and ensures accurate employee record information.
Original PR description
**Steps to Reproduce:** 1. Send an offer to an applicant. 2. The applicant submits their details via the salary configurator and enters their private email in the Email field. 3. Once the offer and contract are signed, an employee record is created in Odoo. 4. In the created employee record, the `work_email` field is populated with the email entered in the salary configurator. This same value is also present in `private_email`, which is correct. **Reason:** - The email entered in the salary configurator is stored on the partner and represents the applicant's private email. - The employee's `work_email` field is linked to the partner's email via compute and inverse methods, causing it to inherit the private email value when the employee record is created. **Solution:** - Explicitly clear the employee's work_email field when the applicant sign. task: 5502797 Forward-Port-Of: odoo/enterprise#109074 Forward-Port-Of: odoo/enterprise#106974
This update prevents users from canceling subscriptions if they don't have access to the associated invoices. Previously, a sales representative could cancel a subscription even if they lacked visibility to the invoices. Now, the system ensures a user must see the invoice before they can initiate a cancellation, improving subscription management accuracy.
Original PR description
Before this commit, when a user had access to an invoiced subscription but not to the invoiced, he could cancel the subscription. Step to reproduce: - create a subscription in company A, with a pricelist available in company B. Sales person A belong to company A. - invoice the subscription and confirm the invoice - update the company (company B) and sales person of the subscription (B). The new salesperon don't see the invoice in the stat button. After this commit salesperson B can't cancel the subscription. task-5907345 Forward-Port-Of: odoo/enterprise#108550 Forward-Port-Of: odoo/enterprise#106441