Daily updates from Odoo
Wednesday, June 17, 2026
225 changes
4 changes
Resolved issues and error corrections
This update resolves an issue that caused a traceback when accessing the Time Off feature on mobile devices. The fix ensures the system consistently returns an array of data, preventing errors that occurred when receiving an empty dictionary. This improves the stability and usability of the Time Off module for all users.
Original PR description
Steps to reproduce: 1. Access the database from a mobile device (or a small browser window) 2. Sign in as a user who has access to the Time Off module, but doesn't have an employee record 3. Open Time Off 4. Observe the traceback When we try to access Time Off with a user who has no employee record, we get a traceback due to receiving an empty dictionary from the backend. The error occurs because we try to iterate over this dictionary, even though we normally expect an array from the request we make. This commit will ensure we always return an array to the frontend, preventing the error. [opw-6295568](https://www.odoo.com/odoo/project/49/tasks/6295568?debug=assets) Forward-Port-Of: odoo/odoo#269882
This update corrects a bug where the website's recruitment search function wasn't finding refused applicants. The issue stemmed from a recent change in how refused applications were being searched, combined with the fact that refused applications are automatically archived. This fix ensures the website correctly displays all refused applicants during searches.
Original PR description
Searching on `[("application_status", "=", "refused")]` is always empty. It is an overlook from [odoo/206645] ([b6e4817]), where the `_search` query was changed to search only active refused applications. However, refused applications are always archived.
This was breaking `website_hr_recruitment` which was searching for refused applications, without finding any.
[odoo/206645]: https://github.com/odoo/odoo/pull/206645
[b6e4817]: https://github.com/odoo/odoo/commit/b6e48176219b2b123bcbf0353b8586c888fc6a94
opw-6204868
Forward-Port-Of: odoo/odoo#270396
Forward-Port-Of: odoo/odoo#266370This update fixes an issue where Peppol invoices generated for certain German companies were missing the correct buyer reference information. The change ensures that the configured Leitweg-ID is properly included in the XML invoice data, guaranteeing compliance with Peppol standards. This improves the accuracy of invoice data exchange.
Original PR description
**Steps to reproduce:** - Install the `l10n_de` module and switch to a `DE Company`. - Enable `Peppol` in the Invoicing app settings. - Open the `DE Company` customer record. - In the `Invoicing`…
**Steps to reproduce:** - Install the `l10n_de` module and switch to a `DE Company`. - Enable `Peppol` in the Invoicing app settings. - Open the `DE Company` customer record. - In the `Invoicing` tab, change the Peppol ID code from `Germany VAT` to `Germany Leitweg-ID` and set a code (e.g., `13075957-K000-52`). - In the `Contacts & Addresses` tab, create an invoice-type contact named `test`. - Create a new invoice using the `test` contact. - Send the invoice via Peppol. - Download the generated `XML` and inspect the `BuyerReference` field. **Observation:** The `<cbc:BuyerReference>` field is set to `N/A` instead of the configured `Leitweg-ID`. **Root Cause:** At [1], the `BuyerReference` node is populated using `vals['customer']`. For invoices addressed to an invoice-type contact, the contact itself does not contain the Peppol configuration, which is stored on the commercial partner. As a result, the code fails to retrieve the customer's `Leitweg-ID` and leaves the `BuyerReference` field empty. **Fix:** This commit ensures that the configured Leitweg-ID is correctly added to the `BuyerReference` field for child contact. [1]: https://github.com/odoo/odoo/blob/281658e86971687656f3235ac1ff8afcb52f2908/addons/account_edi_ubl_cii/models/account_edi_xml_ubl_xrechnung.py#L87-L97 opw-6269478 Forward-Port-Of: odoo/odoo#270459 Forward-Port-Of: odoo/odoo#269818
This update ensures that the Intermediary SWIFT code for US bank accounts remains visible in Odoo, regardless of the selected country. Previously, this field was hidden when the company wasn't set to the US fiscal localization. This change simplifies bank account setup and reporting for US businesses.
Original PR description
**Steps to reproduce:** - Install the `l10n_us_account` module and switch to a My US company - Navigate to Invoicing > Configuration > Journals > Bank - Click the internal link of the `Bank Account…
**Steps to reproduce:** - Install the `l10n_us_account` module and switch to a My US company - Navigate to Invoicing > Configuration > Journals > Bank - Click the internal link of the `Bank Account Number` - Go to the `Bank Information` tab - Observe that the `Intermediary SWIFT` field is visible - Remove `United States` from the bank address **Observation:** The `Intermediary SWIFT` field becomes `invisible` when the country is not set to `United States`. **Root Cause:** At [1], the field Intermediary SWIFT( `intermediary_bank_bic`) is defined with a condition that makes it invisible when the country is not 'US'. **Fix:** This commit ensures that the `Intermediary SWIFT` field remains visible when the company uses the US fiscal localization package, even if the bank country is not set to United States. [1]: https://github.com/odoo/odoo/blob/1d4715e58613912bfd0ded4fd370c50c131ff164/addons/l10n_us_account/views/res_partner_bank_views.xml#L9 opw-6145872 Forward-Port-Of: odoo/odoo#260989
7 changes
Enhancements to existing features
This update changes Odoo's behavior to allow the LC116 code to be sent to Avalara without pre-sanitization. Avalara requires this dotted format for their city web services, and this change ensures compatibility with their automated data processing tool. This improves integration with Avalara and avoids potential data loss.
Original PR description
Purpose: Avalara requires the LC116 code to be dotted for certain city webservices. Their tool will automatically sanitize the dots for cities that don't support it. Current Behavior: Odoo sanitizes the LC116 code before sending the JSON payload. Expected Behavior: The LC116 code is sent in the JSON payload with the dots. task-6304351 Forward-Port-Of: odoo/enterprise#120648
Resolved issues and error corrections
This update ensures that message links in the Odoo portal chatter remain formatted and visually appealing after a page refresh. Previously, a refresh would remove the prettified link. The fix addresses an issue where the system wasn't correctly sending the message thread's display name, which is necessary for generating the formatted link.
Original PR description
Before this commit, a message link posted on a portal chatter would lose it's prettified link (introduced in [1]) upon page refresh. This happens because `prepareMessageBody` needs the thread's `displayName` to create the prettified message link, which is not sent on portal chatter init. This commit fixes the issue by sending the thread's `display_name`. [1] https://github.com/odoo/odoo/pull/221069 task-6204819 Forward-Port-Of: odoo/odoo#269126 Forward-Port-Of: odoo/odoo#263488
This update corrects a bug where the timesheet timer was incorrectly adding extra seconds, leading to inaccurate overtime calculations and incorrect overtime flags in the My Timesheets grid. The fix ensures that the user-entered time duration is accurately saved, preventing the system from misinterpreting timer ticks as actual work hours.
Original PR description
Steps to reproduce --- 1. Set an employee to work 8 hours per day. 2. Open the timesheet timer in the systray, type a duration like 8:00 and save. 3. Open the My Timesheets grid for that day. The day…
Steps to reproduce --- 1. Set an employee to work 8 hours per day. 2. Open the timesheet timer in the systray, type a duration like 8:00 and save. 3. Open the My Timesheets grid for that day. The day is marked as overtime (yellow) even though only 8 hours were logged. Issue --- While the entry is open the timer keeps running and, every second, writes the elapsed time into unit_amount down to the second. https://github.com/odoo/enterprise/blob/a3c9295cf28b47f43233ac6a9f4106810842e37a/timesheet_grid/static/src/components/timesheet_timer_inline_form/timesheet_timer_inline_form.js#L89-L102 When the duration is set by hand, the save skips the usual rounding and keeps the value as it is. https://github.com/odoo/enterprise/blob/a3c9295cf28b47f43233ac6a9f4106810842e37a/timesheet_grid/static/src/components/timesheet_timer_inline_form/timesheet_timer_inline_form.js#L120-L132 So the clean 8:00 the user typed gets a few extra seconds from the next timer tick (8h 1s, stored as 8.000277) and is saved with them. The seconds are hidden in the HH:MM display but are enough to push the day above its working hours, so the grid paints it as overtime. This timer form is new in saas-19.2 (c3dac6ccdb5), which is why earlier versions are not affected. The fix ignores timer ticks once the duration has been set by hand, so the typed value is kept. opw-6180676 ---
This update fixes an error that prevented users from viewing the Gantt chart for work orders. The issue stemmed from how the system handled resources without defined calendars, leading to a system error. The fix ensures the Gantt view functions correctly by safely handling these resources.
Original PR description
Currently, an error occurs when opening the gantt view of work orders. **Steps to Reproduce:** - Install `mrp_workorder` with demo data. - Go to `Settings` > `Technical` > `Resource` > `Resources`. -…
Currently, an error occurs when opening the gantt view of work orders. **Steps to Reproduce:** - Install `mrp_workorder` with demo data. - Go to `Settings` > `Technical` > `Resource` > `Resources`. - Open the `Assembly 1` resource and remove its `working time`. - Go to `Manufacturing` > `Operations` > `Work Orders`. - Switch to the `Gantt view`. `KeyError: 22` when the user opens the Gantt view, the system checks the unavailability of work centers and employees based on their resource calendars. While computing unavailable intervals for resources [1], resources without a calendar are flexible resources. If no leave interval exists within the specified start and end range that matches the domain, the resource is not included in the result [2]. when updating the unavailable intervals dictionary [3], the resource is missing. As a result, when it later tries to access the unavailable intervals for that resource, it raises an error [4]. This commit prevents the error by safely handling resources that are not present in the unavailable intervals dictionary by using an empty list instead. [1]: https://github.com/odoo/odoo/blob/1f666de440479dd3d30b7b6cf7c42862c5fcb37a/addons/resource/models/resource_resource.py#L186 [2]: https://github.com/odoo/odoo/blob/1f666de440479dd3d30b7b6cf7c42862c5fcb37a/addons/resource/models/resource_calendar.py#L532-L536 [3]:https://github.com/odoo/odoo/blob/1f666de440479dd3d30b7b6cf7c42862c5fcb37a/addons/resource/models/resource_resource.py#L187 [4] https://github.com/odoo/enterprise/blob/47f2e9e88fa0bbb8852fe7734c6bece4dca8b9d0/mrp_workorder/models/mrp_workorder.py#L692-L694 sentry-7525704808
This update ensures that the Intermediary SWIFT field remains visible in US company bank accounts, regardless of the selected country. Previously, the field was hidden when the US fiscal localization package wasn't active. This change improves data accuracy and simplifies bank account setup for US businesses.
Original PR description
**Steps to reproduce:** - Install the `l10n_us_account` module and switch to a My US company - Navigate to Invoicing > Configuration > Journals > Bank - Click the internal link of the `Bank Account Number` - Go to the `Bank Information` tab - Observe that the `Intermediary SWIFT` field is visible - Remove `United States` from the bank address **Observation:** The `Intermediary SWIFT` field becomes `invisible` when the country is not set to `United States`. **Root Cause:** At [1], the field Intermediary SWIFT( `intermediary_bank_bic`) is defined with a condition that makes it invisible when the country is not 'US'. **Fix:** This commit ensures that the `Intermediary SWIFT` field remains visible when the company uses the US fiscal localization package, even if the bank country is not set to United States. [1]: https://github.com/odoo/odoo/blob/1d4715e58613912bfd0ded4fd370c50c131ff164/addons/l10n_us_account/views/res_partner_bank_views.xml#L9 opw-6145872
This update resolves a requirement from Luxembourg auditors regarding the classification of partners in our SAFT reports. Specifically, it ensures less than 30% of transactions with payable or receivable accounts have missing supplier or customer IDs. The changes add partners to the appropriate lists based on transaction type and maintain existing logic for older reports.
Original PR description
This PR is one of many triggered by responses from Luxembourg auditors. See PR #113316 for a full list of these PRs. As described in PR #117799, the \CustomerID and \SupplierID elements on…
This PR is one of many triggered by responses from Luxembourg auditors. See PR #113316 for a full list of these PRs. As described in PR #117799, the \CustomerID and \SupplierID elements on \Transaction\Line elements is determined by a partner's `customer_rank` and `supplier_rank`. This is a binary designation, one or the other. The Luxembourg FAIA report requires that less than 30% of \Transaction\Line elements with payable accounts (class 6) can not have \SupplierID. The same applies for \Transaction\Line elements with receivable accounts (class 7) and the \CustomerID element. TSB clarified that any partner on an receivable or payable line should be added to the Customer list or Supplier list respectively https://github.com/odoo/enterprise/pull/100749#issuecomment-3655127511. In addition, I verified that Luxembourg's analysis of four separate FAIA files (from ticket 5427296) aligns with this expectation. <img width="1322" height="690" alt="image" src="https://github.com/user-attachments/assets/1a82f99e-5b32-4dbb-96e1-1b25bab2629b" /> This commit adds partners to the \Supplier and \Customer lists if they have any payable or receivable lines, respectively. It also picks between the \CustomerID and \SupplierID based on a line's `account_type`. This logic is applied to `account_saft` and updates the other, country-specific SAFT reports where appropriate. It also retains the previous `customer_rank` and `supplier_rank` logic as a fallback for older XML reports and for accounts other than `asset_receivable` or `liability_payable`. opw-6118024 Forward-Port-Of: odoo/enterprise#120365 Forward-Port-Of: odoo/enterprise#118714
This update fixes an issue where the quantity on hand for products across multiple companies was incorrectly calculated. The fix ensures that all company branches are considered when determining inventory levels, leading to more accurate valuation and pricing, especially for lot-based products.
Original PR description
The quantity on hand for a main company with branches is calculated to be the the sum of all its child companies + its own quantities. `_run_fifo_get_stack()` doesn't include the child companies in…
The quantity on hand for a main company with branches is calculated to be the the sum of all its child companies + its own quantities. `_run_fifo_get_stack()` doesn't include the child companies in the `moves_domain`, so it is unable to create a FIFO stack for moves from a child. This leaves extra quantity unaccounted for, which defaults to the standard_price. **Video of the bug:** https://drive.google.com/file/d/11PIfNAIb_Yyo4A-3R0CRF0NV6_HE6EwF/view **Issue:** When multiple companies are selected, the displayed quantity on hand for a product is calculated as the sum of all selected companies. However, the moves domain only looks at the main selected company instead of all selected companies, leading to an incorrectly calculated standard price when using FIFO. This is more apparent on lot-valuated products because the lot standard price is recalculated every time the field is accessed. **Reproduction steps:** - Have a main company - Create a branch company - Create a product, configure it as FIFO on both the main company and branch company - Let the product be tracked by lots and set to `Valuation by Lot` (for demonstrative purposes) - On the main company, set the product cost to $15 (for demonstrative purposes) - Go to only the branch company, make a purchase for one unit of the FIFO product at $100 (make a warehouse for delivery) , validate the receipt - Go to the lot -> When logged in to only the branch company, quantity is 1 and cost is $100 (correct). When logged in to both the main and branch company and viewing from the main company, quantity is 1 and cost is $15 (incorrect) **Fix:** Allow `_run_fifo_get_stack()` to see the moves from all companies in the environment instead of just the main company Related ticket: opw-6064126 Forward-Port-Of: odoo/odoo#269942 Forward-Port-Of: odoo/odoo#258199
1 change
Resolved issues and error corrections
This update fixes an issue where Point of Sale reports were incorrectly showing the session's start date instead of the user-selected date range. The change ensures that reports accurately reflect the date range specified by the user, improving the accuracy of sales data analysis. This impacts users generating sales reports from the PoS interface.
Original PR description
Steps to reproduce ------------------ 1. Open a PoS session, e.g. at 1h45 2. Wait a bit and make an order, e.g. at 1h55 3. Keep the session open and go to PoS > Reporting > Sale Details. 4. Select a…
Steps to reproduce ------------------ 1. Open a PoS session, e.g. at 1h45 2. Wait a bit and make an order, e.g. at 1h55 3. Keep the session open and go to PoS > Reporting > Sale Details. 4. Select a starting date before the ordre and after the session open, e.g. at 1h50 5. Generate the report. The header shows the starting date of the session, i.e. at 1h45, instead of that of the selected date, i.e. 1h50 Why it's happening ------------------ Commit 5003774bf2a7 changed the way the report decides if the data comes from a single session: now if all the orders in the user selected start and end date belong to one particular session, the start and end date on the report are overriden to be those of that particular session, ignoring the user selected ranges. The fix ------- Only overwrite the start and end dates when `session_ids` was passed (i.e. the report is about a specific session). When called via date range + `config_ids` (from the backend wizard like in our reproduction steps), keep the user-selected range. opw-6185106 Forward-Port-Of: odoo/odoo#267200
2 changes
Resolved issues and error corrections
This update resolves a technical issue preventing receipt printing in the Italian POS module. Specifically, a race condition caused printer deadlocks when automatic receipt printing was enabled. Now, printing is tied to the 'Skip Preview Screen' option, ensuring reliable receipt generation.
Original PR description
Module: l10n_it_pos Steps to reproduce: - In the POS settings, enable "Automatic Receipt Printing"; - Enable "ePos Printer" to make the "Skip Preview Screen" option appear; - Disable "Skip Preview…
Module: l10n_it_pos Steps to reproduce: - In the POS settings, enable "Automatic Receipt Printing"; - Enable "ePos Printer" to make the "Skip Preview Screen" option appear; - Disable "Skip Preview Screen"; - Disable "ePos Printer"; - Set up an Italian Fiscal Printer; - Open a POS session and process a first order. Issue: After the first receipt, no other messages (price display, receipt, open register) are sent to the fiscal printer. A page reload is required. Issue: After the first receipt, no other messages (price display, receipt, open register) are sent to the fiscal printer. A page reload is required. Cause: When "Automatic Receipt Printing" is true but "Skip Preview Screen" is false, a race condition occurs. `afterOrderValidation` triggers a print job while simultaneously transitioning to the `ReceiptScreen`. When the `ReceiptScreen` mounts, it triggers a second fiscal print job before the first has resolved. This creates a deadlock in `toHtml` of `renderService`, permanently blocking the printer queue. Solution: Since the italian localisation sending the receipt to the fiscal printer is mandatory, the printing route is now tied to the "Skip Preview Screen" option. Enterprise PR: https://github.com/odoo/enterprise/pull/112654 [opw-5979212](https://www.odoo.com/odoo/project/49/tasks/5979212) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#270343 Forward-Port-Of: odoo/odoo#256932
This update resolves a bug that prevented receipt printing after the initial order in the Italian POS module. The fix ensures receipts are consistently printed via the payment screen, eliminating a printer deadlock and improving the user experience. The change also simplifies settings for Italian fiscal printers.
Original PR description
Module: l10n_it_pos Steps to reproduce: - In the POS settings, enable "Automatic Receipt Printing"; - Enable "ePos Printer" to make the "Skip Preview Screen" option appear; - Disable "Skip Preview…
Module: l10n_it_pos Steps to reproduce: - In the POS settings, enable "Automatic Receipt Printing"; - Enable "ePos Printer" to make the "Skip Preview Screen" option appear; - Disable "Skip Preview Screen"; - Disable "ePos Printer"; - Set up an Italian Fiscal Printer; - Open a POS session and process a first order. Issue: After the first receipt, no other messages (price display, receipt, open register) are sent to the fiscal printer. A page reload is required. Cause: When "Automatic Receipt Printing" is true but "Skip Preview Screen" is false, a race condition occurs. `afterOrderValidation` triggers a print job while simultaneously transitioning to the `ReceiptScreen`. When the `ReceiptScreen` mounts, it triggers a second fiscal print job before the first has resolved. This creates a deadlock in `toHtml` of `renderService`, permanently blocking the printer queue. Solution: Since the italian localisation sending the receipt to the fiscal printer is mandatory, the printing route is now tied to the "Skip Preview Screen" option. UI settings are adjusted to hide the redundant auto-print checkbox when an IT fiscal printer is configured. Community PR: https://github.com/odoo/odoo/pull/256932 [opw-5979212](https://www.odoo.com/odoo/project/49/tasks/5979212) Forward-Port-Of: odoo/enterprise#120747 Forward-Port-Of: odoo/enterprise#112654
1 change
Resolved issues and error corrections
This update resolves an issue preventing users with appropriate sales access from inserting data into Quotation templates via the spreadsheet management feature. The update ensures the necessary session flag is automatically set when the module is installed and the user meets the required access criteria. This enhances usability for users working with spreadsheets and quotations.
Original PR description
Current behavior before PR: - The `can_insert_in_spreadsheet` session flag was not set by the spreadsheet_sale_management module. - Users with proper Sale access rights still could not insert into Quotation templates. Desired behavior after PR is merged: - Added logic to set `can_insert_in_spreadsheet` when the module is installed and the user has the required access rights. Task: [5960761](https://www.odoo.com/odoo/project/2328/tasks/5960761) Forward-Port-Of: odoo/enterprise#108674
5 changes
Enhancements to existing features
This update enhances navigation between sold assets and related customer invoices. Now, invoices linked to a sold asset are directly accessible from the asset's chatter, and vice versa. This streamlines workflows by providing quick access to relevant invoice information.
Original PR description
This commit improves the navigation from a sold asset to the customer invoice and vice versa. A reference link of the sold asset is added to the chatter of each invoice used in sale. Also, all invoices used in sale are added as reference link to the asset's chatter. task-4413649
Resolved issues and error corrections
This update resolves an issue where the appointment calendar displayed 'no available slots' in subsequent months when appointment scheduling lead times were long. The fix accounts for lead times and appointment start dates to accurately calculate availability, ensuring correct month navigation and accurate slot displays. This improves the user experience for booking appointments.
Original PR description
The website appointment calendar fills availabilities one month at a time and the update_available_slots route maps the calendar month index to an absolute month from datetime.now(). This only…
The website appointment calendar fills availabilities one month at a time and the update_available_slots route maps the calendar month index to an absolute month from datetime.now(). This only matches the displayed months when the first one is the current month. When the first bookable slot is later, a punctual appointment starting in a future month or any appointment whose "at least X hours before start time" lead time pushes the first slot past the current month, navigating forward requests the wrong month and the reached month renders empty. In update_available_slots, take the lead time into account when computing the reference month so it lands on the first displayed month: the start datetime for a punctual appointment starting in the future, otherwise now plus the minimum schedule hours. The navigated month index is then added to that reference. This extends https://github.com/odoo/enterprise/commit/f0e5b14a823cf97218f4094d287a328e2744fd73 which only handled the future start datetime. Steps to reproduce: 1. Open the Appointments app 2. Open an appointment type, set Schedule to Weekly and Allow Bookings to On specific dates with a range ending a few months out 3. Set the "at least N hours before start time" field to 360 4. Save and click the Preview button in the header 5. Pick a resource or staff member to reach the calendar 6. Click the right arrow to navigate to the next month => the next month shows "Sorry, we have no more slots available for this month" opw-6206293
This update resolves an issue where the auto-reschedule buffer wasn't correctly applied when tasks had dependencies. The fix ensures that buffers are calculated accurately between dependent tasks, preventing scheduling conflicts and maintaining project timelines. This improves the reliability of the project scheduling feature.
Original PR description
Steps to reproduce: ---------------------------------------- - Have the company calendar work from 9 to 17 on weekdays - In project gantt view, create tasks with dependencies like this: ``` - [Task…
Steps to reproduce:
----------------------------------------
- Have the company calendar work from 9 to 17 on weekdays
- In project gantt view, create tasks with dependencies like this:
```
- [Task 1] (June 08, 09:00 AM - 10:00 AM) ──┐
├─> [Task 3] (June 11, 09:00 AM - 10:00 AM)
- [Task 2] (June 10, 09:00 AM - 10:00 AM) ──┘
```
- Make sure the "Auto-Reschedule (Keep Buffer)" is selected
- Then reschedule task 1 to `(June 09, 09:00 AM - 10:00 AM)`
- Task 3 is rescheduled to `(June 15, 09:00 AM - 10:00 AM)`
**Expected behavior:**
To respect the buffers, task 3 should have been rescheduled to `(June 12, 09:00 AM - 10:00 AM)`:
- The buffer from task 1 is 23 working hours after `June 09, 10:00 AM` is `June 12, 09:00 AM`
- The buffer from task 2 doesn't affect the rescheduling.
Cause:
----------------------------------------
From `_web_gantt_update_next_candidates_dates()` we call `_get_new_dates()` with `seconds_between_tasks` being the duration of working hours between the end of task 1 and the start of task 3. We also call it with `first_possible_start_date_per_candidate` being the end of task 3 also depends on task 2.
Then `_get_new_dates()` counts the working hours from `first_possible_start_date_per_candidate` until it reaches `seconds_between_tasks`. Which means the buffer between task 1 and task 3 is actually applied between task 2 and task 3.
Solution:
----------------------------------------
The value contained in `first_possible_start_date_per_candidate` is irrelevant, the correct value to give to `_get_new_dates()` would be `compute_end_date` as we want to keep the buffer to be calculated from this datetime.
So we create a fake dictionary with only the task and `compute_end_date` and give it to `_get_new_dates()`.
The same logic applies when moving tasks backwards.
opw-5973597This update fixes an issue where quality alerts weren't being created when incoming emails were processed without a company assigned. The fix ensures that a default company is now automatically applied, preventing errors and guaranteeing that all emails trigger the correct quality alert record creation. This improves the reliability of the quality control process.
Original PR description
Steps to reproduce 1. Install quality 2. Create an incoming email server 3. Go to Quality > Configuration > Quality Teams > Team > add alias email 4. Do not fill the company field 5. Send email to this alias 6. Fetch emails from incoming email server Issue: - Record is not created in the quality alert Root cause: - For the Quality alert model, the field `company_id` is required, but while we fetch emails We haven't set the `company_id` on the quality alert team, resulting in trying to insert a null value on the quality alert model. Solution: - Give a default value to company_id. - Raise a validation error on not having a company_id - Update alias default values on changing company_id opw-5917791 Forward-Port-Of: odoo/enterprise#117846 Forward-Port-Of: odoo/enterprise#109947
This update fixes a discrepancy in the start dates of semi-monthly payrolls. Previously, payslips were incorrectly aligned with the end of the first half of the month. Changing the start date to the 16th ensures accurate payroll scheduling for employees on this payment cycle.
Original PR description
Issue: ---------------------------------------- The start date of semi-monthly payslips on second half of the month is the 15 which is also the end date of the first half of the month. Steps to reproduce: ---------------------------------------- - Have an employee with a semi-monthly payroll - When in the first half of the month, create a payslip for this employee - The payslip is from 1st to 15th - Do the same when in the second half of the month - The payslip is from 15th to end of the month Cause: ---------------------------------------- In `_schedule_period_start()` we set the start date to th 15th for semi-monthly payslips. Solution: ---------------------------------------- Set it to the 16th. opw-6281556 Forward-Port-Of: odoo/enterprise#120172
5 changes
Resolved issues and error corrections
This update corrects a bug in the Outlook calendar synchronization process. Previously, events could include the same attendee multiple times due to a missing check for existing attendees. This fix ensures accurate attendee lists are synchronized, preventing potential confusion and improving the reliability of event scheduling.
Original PR description
In the Outlook calendar sync, it's possible to have the same attendee twice. That's because the normalized email wasn't used to check for preexisting attendee. To reproduce, sync event with the organizer, also an attendee, using high case in the email such as: ORGANIZER: Mike@organizer.com ATTENDEE: Mike@organizer.com ATTENDEE: John@attendee.com opw-6186606 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an access error that occurred when creating RFQ approval requests with supplier pricelists where some vendors were inaccessible to the user. The fix ensures that the system correctly handles scenarios with multiple vendors, preventing errors related to accessing vendor information.
Original PR description
**Issue** Having supplier pricelists with at least one vendor inaccessible to the current user can trigger an access error when creating an RFQ approval request. **Steps to reproduce** - Have two…
**Issue** Having supplier pricelists with at least one vendor inaccessible to the current user can trigger an access error when creating an RFQ approval request. **Steps to reproduce** - Have two companies A and B and two users u1 and u2 - user u2 only have access to company A - With user u1: - Create two vendors v1 and v2 without any company assigned - Create vendor pricelists for a product for each vendor and assign the company A to the pricelist - Add the company B for the vendor v2 - With user u2: - Open approval application - Try to create an approval for an RFQ for that product (the vendor v1 will be automatically selected) - Save it -> An access error is thrown **Cause** Saving the approval request computes `has_no_seller`, which calls `_select_seller`: https://github.com/odoo/enterprise/blob/03c737685ff6dfc95a8bc72491646774fc426b1f/approvals_purchase/views/approval_product_line_views.xml#L9 https://github.com/odoo/enterprise/blob/03c737685ff6dfc95a8bc72491646774fc426b1f/approvals_purchase/models/approval_product_line.py#L32 https://github.com/odoo/enterprise/blob/03c737685ff6dfc95a8bc72491646774fc426b1f/approvals_purchase/models/approval_product_line.py#L62-L70 Which filtered the right seller https://github.com/odoo/odoo/blob/c37e76850d3ff790b76493bd1003d80e170bd4bf/addons/product/models/product_product.py#L759 By preparing the sellers: https://github.com/odoo/odoo/blob/c37e76850d3ff790b76493bd1003d80e170bd4bf/addons/product/models/product_product.py#L721 https://github.com/odoo/odoo/blob/c37e76850d3ff790b76493bd1003d80e170bd4bf/addons/product/models/product_product.py#L712 Please note that `self.seller_ids` contains both sellers (even v2) By filtering the suppliers: https://github.com/odoo/odoo/blob/c37e76850d3ff790b76493bd1003d80e170bd4bf/addons/product/models/product_supplierinfo.py#L104-L105 But at that point, one of the supplier in `self`, can be accessed, thus an access error is thrown while trying to access its associated `partner_id`. opw-6203910
This update resolves an issue where creating approval requests could trigger access errors when using suppliers with inaccessible vendors. The fix ensures that the system correctly handles vendor access restrictions, preventing errors during the approval process. This improves the reliability of the approval workflow.
Original PR description
**Issue** Having supplier pricelists with at least one vendor inaccessible to the current user can trigger an access error when creating an RFQ approval request. **Steps to reproduce** - Have two…
**Issue** Having supplier pricelists with at least one vendor inaccessible to the current user can trigger an access error when creating an RFQ approval request. **Steps to reproduce** - Have two companies A and B and two users u1 and u2 - user u2 only have access to company A - With user u1: - Create two vendors v1 and v2 without any company assigned - Create vendor pricelists for a product for each vendor and assign the company A to the pricelist - Add the company B for the vendor v2 - With user u2: - Open approval application - Try to create an approval for an RFQ for that product (the vendor v1 will be automatically selected) - Save it -> An access error is thrown **Cause** Saving the approval request computes `has_no_seller`, which calls `_select_seller`: https://github.com/odoo/enterprise/blob/03c737685ff6dfc95a8bc72491646774fc426b1f/approvals_purchase/views/approval_product_line_views.xml#L9 https://github.com/odoo/enterprise/blob/03c737685ff6dfc95a8bc72491646774fc426b1f/approvals_purchase/models/approval_product_line.py#L32 https://github.com/odoo/enterprise/blob/03c737685ff6dfc95a8bc72491646774fc426b1f/approvals_purchase/models/approval_product_line.py#L62-L70 Which filtered the right seller https://github.com/odoo/odoo/blob/c37e76850d3ff790b76493bd1003d80e170bd4bf/addons/product/models/product_product.py#L759 By preparing the sellers: https://github.com/odoo/odoo/blob/c37e76850d3ff790b76493bd1003d80e170bd4bf/addons/product/models/product_product.py#L721 https://github.com/odoo/odoo/blob/c37e76850d3ff790b76493bd1003d80e170bd4bf/addons/product/models/product_product.py#L712 Please note that `self.seller_ids` contains both sellers (even v2) By filtering the suppliers: https://github.com/odoo/odoo/blob/c37e76850d3ff790b76493bd1003d80e170bd4bf/addons/product/models/product_supplierinfo.py#L104-L105 But at that point, one of the supplier in `self`, can be accessed, thus an access error is thrown while trying to access its associated `partner_id`. opw-6203910
This update resolves an issue where Odoo could incorrectly process direct debit mandates for partner banks. The change adds a constraint to ensure the correct bank is associated with the mandate, improving the reliability and accuracy of direct debit transactions. This ensures compliance and prevents potential payment errors.
This update fixes an issue where the CFDI payment rate was incorrectly displayed when payments were made in foreign currencies (like USD). The fix ensures the correct payment amount and rate are shown on the generated CFDI documents, improving accuracy for Mexican tax reporting. This resolves a discrepancy between the payment and invoice amounts.
Original PR description
The rate and payment amount shown on the CFDI document generated after updating payments was wrong when the payment was made in a foreign currency. Steps to reproduce: ------------------- * Create a journal that use USD as currency and set the rate to 20 MXN for 1 USD * Create an invoice in MXN and make sure it is set to PPD * Add any product to the invoice for 300$ and post it * Send the invoice to CFDI (a first document should be generated) * Create a payment of 15 USD in the new journal and reconcile it with the invoice * Go back to the invoice and click on "Update payments" to generate the second CFDI document > Observation: The payment document shows an amount of 300 USD with a rate of 1 instead of 15 USD with a rate of 20. Why the fix: ------------ We make sure to use the amount from the statement line when there is one. opw-5974519