Daily updates from Odoo
Navigate
Branch
Tuesday, January 21, 2025
52 changes
11 changes
Miscellaneous changes
**Before this PR:** Steps to reproduce: - In an empty paragraph write something, press shift + enter - Write something in new line break - Select whole text in second line - Paste any text, notice that an extra <br> is added above pasted text. In other words, `<p>abc<br>[def]</p> + insert('x')` becomes `<p>abc<br><br>x[]</p>` instead of `<p>abc<br>x[]</p> `. **Desired behaviour after PR:** Now, pasting something at line-break doesn't add an extra an extra `<br>` . task-4231
Original PR description
**Before this PR:**
Steps to reproduce:
- In an empty paragraph write something, press shift + enter
- Write something in new line break
- Select whole text in second line
- Paste any text, notice that an extra <br> is added above pasted text.
In other words,
`<p>abc<br>[def]</p> + insert('x')` becomes `<p>abc<br><br>x[]</p>` instead of `<p>abc<br>x[]</p> `.
**Desired behaviour after PR:**
Now, pasting something at line-break doesn't add an extra an extra `<br>` .
task-4231290
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#185854When an error occurs on IAP side for Peppol we display the content of `message` while we have a more friendly-user text stored in `display_message`. Use the latter when logging in Odoo. See: https://github.com/odoo/iap-apps/blob/5dde71627dfd6c6168935346bece0018d4701ce3/iap_services/peppol_proxy/exceptions.py#L14 task-no Forward-Port-Of: odoo/odoo#194352
Original PR description
When an error occurs on IAP side for Peppol we display the content of `message` while we have a more friendly-user text stored in `display_message`. Use the latter when logging in Odoo. See: https://github.com/odoo/iap-apps/blob/5dde71627dfd6c6168935346bece0018d4701ce3/iap_services/peppol_proxy/exceptions.py#L14 task-no Forward-Port-Of: odoo/odoo#194352
Before this commit, the base.automation form view displays the filter_domain field when on_change trigger type is selected but the code does not take into account the filter_domain value for this type of trigger. After this commit, this field is simply hidden in that case. Task: opw-4492554 Forward-Port-Of: odoo/odoo#194321 Forward-Port-Of: odoo/odoo#194158
Original PR description
Before this commit, the base.automation form view displays the filter_domain field when on_change trigger type is selected but the code does not take into account the filter_domain value for this type of trigger. After this commit, this field is simply hidden in that case. Task: opw-4492554 Forward-Port-Of: odoo/odoo#194321 Forward-Port-Of: odoo/odoo#194158
When creating a new working schedule, the duration (days) was not computed correctly. This was due to a missing field in the depends of the compute method. This commits fixes the issue by adding the hours per day in the depens of the duration days compute method. That way, the duration days will be computed after that the hours per day are computed. task-4457200 Forward-Port-Of: odoo/odoo#193715
Original PR description
When creating a new working schedule, the duration (days) was not computed correctly. This was due to a missing field in the depends of the compute method. This commits fixes the issue by adding the hours per day in the depens of the duration days compute method. That way, the duration days will be computed after that the hours per day are computed. task-4457200 Forward-Port-Of: odoo/odoo#193715
Debugging outgoing emails is fastidious. Only the mail record id and Message-Id are logged, but most of the time the mail record is removed once the mail is sent, making it impossible to find back who the recipients were. In this work we also log the (redacted) From and To headers. We decided to redact the headers out of excessive caution regarding the GDPR. The new `email_anonymize` function must balance disambiguation and redaction. Disambiguation so it is easy to tell two different emai
Original PR description
Debugging outgoing emails is fastidious. Only the mail record id and Message-Id are logged, but most of the time the mail record is removed once the mail is sent, making it impossible to find back…
Debugging outgoing emails is fastidious. Only the mail record id and Message-Id are logged, but most of the time the mail record is removed once the mail is sent, making it impossible to find back who the recipients were. In this work we also log the (redacted) From and To headers. We decided to redact the headers out of excessive caution regarding the GDPR. The new `email_anonymize` function must balance disambiguation and redaction. Disambiguation so it is easy to tell two different email addresses appart (for debugging). Redaction so it hard to find the original email address back (for privacy). It must also be simple. We conducted several experiments using a dataset of 600ish email address (95% of which have a local part that is at least 6 characters long) to determine a nice function. The final function keep the first character for shorter inputs (length of local part < 6) and the first plus two lasts chars for longer inputs (>=6). Using that function we achieve a 99% disambiguation of emails in the dataset (with or without redacting the domain) while retaining minimal info (3 chars at most). Redacting the domain isn't that useful as most addresses use gmail, hotmail, outlook, yahoo. Task-4361561 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#192724 Forward-Port-Of: odoo/odoo#188697
steps to reproduce: - create a leave with several employees and select 'custom hours' - validate leave - check linked leaves (one per employee) issue: - linked leaves do not use the parent start/date hours note: 8bfd00e9325ffc490d1b470cecb38c75800b8a86 fixed the issue in 16.0 and the feature has been removed in 260b999922766668713c92418bf7431d465b532e in 17.4. opw-4355770 Forward-Port-Of: odoo/odoo#193494
Original PR description
steps to reproduce:
- create a leave with several employees and select 'custom hours'
- validate leave
- check linked leaves (one per employee)
issue:
- linked leaves do not use the parent start/date hours
note: 8bfd00e9325ffc490d1b470cecb38c75800b8a86 fixed the issue in 16.0 and the feature has been removed in 260b999922766668713c92418bf7431d465b532e in 17.4.
opw-4355770
Forward-Port-Of: odoo/odoo#193494It's not *entirely* clear which and when, but some tours apparently trigger downloads, which by default will make a mess of the user's Downloads folder when running tests locally. This has mostly been observed in 18.0 / master with Studio exports but there are a few others as well (e.g. a few reports). Either way, seems like a good idea to just configure chrome to block them. Forward-Port-Of: odoo/odoo#194393
Original PR description
It's not *entirely* clear which and when, but some tours apparently trigger downloads, which by default will make a mess of the user's Downloads folder when running tests locally. This has mostly been observed in 18.0 / master with Studio exports but there are a few others as well (e.g. a few reports). Either way, seems like a good idea to just configure chrome to block them. Forward-Port-Of: odoo/odoo#194393
Fixes an issue on the partner view where a compute would try to read the proxy user, while not all users who can read the partner would have read access to the proxy user. Also fix a similar case in the action used to validate the ID, which tries to read the proxy user. error-105104 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#194459
Original PR description
Fixes an issue on the partner view where a compute would try to read the proxy user, while not all users who can read the partner would have read access to the proxy user. Also fix a similar case in the action used to validate the ID, which tries to read the proxy user. error-105104 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#194459
# Description The 'See Records' icon was missing when attempting to open `AccountMoveLines` records from the context menu in the spreadsheet. Task: 0 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#194464
Original PR description
# Description The 'See Records' icon was missing when attempting to open `AccountMoveLines` records from the context menu in the spreadsheet. Task: 0 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#194464
Since chrome 132, the shape of error events for the `ResizeObserver loop completed with undelivered notifications.` error changed: the `error` key is now set in the event (its value is this specific message, i.e. a string, not an Error instance). As a consequence, those errors are no longer swallowed as they're expected to be, and are thus wrongly identified as CORS errors. Those errors are shown to the user in debug mode. This happens for instance in the ir.ui.view form view, which contains
Original PR description
Since chrome 132, the shape of error events for the `ResizeObserver loop completed with undelivered notifications.` error changed: the `error` key is now set in the event (its value is this specific…
Since chrome 132, the shape of error events for the `ResizeObserver loop completed with undelivered notifications.` error changed: the `error` key is now set in the event (its value is this specific message, i.e. a string, not an Error instance). As a consequence, those errors are no longer swallowed as they're expected to be, and are thus wrongly identified as CORS errors. Those errors are shown to the user in debug mode. This happens for instance in the ir.ui.view form view, which contains an AceEditor field. His CodeEditor component listens on the `resize` event to redrawn itself, which causes this error. This also happens with the website builder, which does not involve the CodeEditor. It probably happens at other places as well. We thus need a global solution, like we had before. This commit thus fixes the condition in the error service to keep swallowing that error. opw-4500350 opw-4496862 opw-4496782 opw-4495448 opw-4493209 opw-4495309 opw-4472997 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#194483
The event listeners are never removed when the component is unmounted which means to global `env.bus` always keeps a reference to this component and everything that goes with it, including its (child)env. In version 18.0, the spreadsheet client action instantiates its own `BurgerMenu` component and also adds the spreadsheet `model` in the action child env (which can be expensive memory-wise) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forw
Original PR description
The event listeners are never removed when the component is unmounted which means to global `env.bus` always keeps a reference to this component and everything that goes with it, including its (child)env. In version 18.0, the spreadsheet client action instantiates its own `BurgerMenu` component and also adds the spreadsheet `model` in the action child env (which can be expensive memory-wise) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#194485
22 changes
Enhancements to existing features
Changes made through the Edit Payslip Lines wizard are now recorded in the payslip chatter. This improves transparency and makes it easier for payroll teams to review who changed payroll line values and what was updated.
Original PR description
When you change the values of lines in the 'Edit Payslip Lines' wizard, the changes are not logged in the chatter. Now, the changes made when editing payslip lines will be logged. task-4353585
Chat windows in Odoo Enterprise now keep their open, collapsed, or expanded state in the user's browser. This makes conversations feel more consistent between navigation or reloads and reduces disruption for users working across apps.
Original PR description
Enterprise counter-part. task-3707836 https://github.com/odoo/odoo/pull/193245 https://github.com/odoo/upgrade/pull/7056
Resolved issues and error corrections
The Appointments website block now keeps any custom destination set for its “See all” link after the page is saved. This prevents visitors from being sent back to the default appointments page when the website editor intended the link to point elsewhere.
Original PR description
Steps to reproduce: - Install the appointments module. - Go to the homepage. - Enter edit mode. - Drag and drop a "Appointments" block onto the page. - Click on the "See all" link. - Edit the link (e.g., change "/appointment" to "/contactus"). - Save the page. - Click on the "See all" link. - Bug: You are redirected to the "/appointment" page instead of the "/contactus" page as expected. The bug occurs since commit [1], where the "See all" link was added to "Dynamic" snippets. Each time a "Dynamic" snippet is rendered during a page load, the href of the "See all" link is reset to the main module page. While this behavior is useful when the snippet is first rendered after being dropped onto the page, it is problematic afterward. Once the user has edited the link with a different href, it should not be reset on every page load. [1]: bbcff74 opw-4418048
The Manufacturing barcode app now prevents users from adding unexpected products when the operation type does not allow extra products. This helps teams enforce manufacturing rules consistently and avoid incorrect materials being added to production orders.
Original PR description
Issue Before This Commit ======================== The barcode application for the 'Manufacturing' operation type allowed products to be scan and added to a Manufacturing Order (MO) even when the 'Allow Extra Product' setting was disabled. Steps to Produce ================= - Disable the 'Allow Extra Product' option for the 'Manufacturing' operation type. - Create a new MO or open an existing MO. - Scan a product other than the MO product still allowed it to be added, despite the setting being disabled. This commit removes the code that allowed extra products to be added, ensuring compliance with the operation type setting. Task: [4369998](https://www.odoo.com/odoo/my-tasks/4369998)
This fix prevents Odoo Studio from triggering background updates when a user edits a view for a model where they do not have permission to create records. This avoids unnecessary warning messages and makes Studio behave more smoothly for users with restricted access.
Original PR description
This commit adapts studio for commit odoo/odoo@74c5cd56a0539edab6a61efa517ca6a08c08d915 which prevents doing an onchange if the user doesn't have create access on the model. Before the present commit, there were warnings in some cases because we tried just that: opening studio to edit a form view without a record, on a model on which there was no create access rights. After the present commit, we prevent such cases using the view's activeActions. runbot-error-112212
This fix restores access to the bank reconciliation screen for Invoicing, Banks, and Accounting Manager users. It adds the required permissions explicitly so eligible users can continue reconciling bank transactions without access errors.
Original PR description
The bank.rec.widget models are not stored and are primarily used for onchange computations The Invoicing and Banks user, and Manager user were somehow able to use the bank.rec.widget models until https://github.com/odoo/odoo/commit/74c5cd56a0539edab6a61efa517ca6a08c08d915 By granting access to the models with explicit security records, this issue is resolved. `group_account_user` implies `group_account_basic` Why did it work before? JS uses the bank.reco.widget model directly, see `fetch_initial_data` https://github.com/odoo/enterprise/blob/00d8bf44824858d322fbe05682f50ad3b53d07ff/account_accountant/static/src/components/bank_reconciliation/kanban.js#L578-L580 runbot-112206 runbot-112205
Features or functions removed from Odoo
Manufacturing orders can no longer be moved from Confirmed to In Progress by clicking the header of shop floor cards. This removes a rarely used and unintuitive shortcut that could cause inconsistent order handling, making the workflow clearer for users.
Original PR description
The ability to change the status of a Manufacturing Order (MO) from 'Confirmed' to 'In Progress' by clicking on the header of MO cards in the shop floor has been removed. This feature was rarely used, hard to find, unintuitive, and introduced several inconsistencies. Since it does not add much value in retrospective, we decided to remove it. TaskId: 4416695
Miscellaneous changes
This commit fixes the second query count in `test_visible_menu_ids` where it is sometimes 1 if `account_reports` is not installed (the xmlid is never cached since it does not exist yet) Runbot Error 109492 Forward-Port-Of: odoo/enterprise#77405
Original PR description
This commit fixes the second query count in `test_visible_menu_ids` where it is sometimes 1 if `account_reports` is not installed (the xmlid is never cached since it does not exist yet) Runbot Error 109492 Forward-Port-Of: odoo/enterprise#77405
This PR fixes two accessibility issues related to the gantt view connectors. Prior to this commit, the connectors were using the raw value when hovering the pill. This is mostly fine is light mode, but for some specific color, this was sometimes not enough to ensure a good visual separation between the connectors and the pill. To handle this issue, we add a pseudo element underneath the border, to make it stand out and prevent all the potential contrast issues. There was also a `z-index` is
Original PR description
This PR fixes two accessibility issues related to the gantt view connectors. Prior to this commit, the connectors were using the raw value when hovering the pill. This is mostly fine is light mode,…
This PR fixes two accessibility issues related to the gantt view connectors. Prior to this commit, the connectors were using the raw value when hovering the pill. This is mostly fine is light mode, but for some specific color, this was sometimes not enough to ensure a good visual separation between the connectors and the pill. To handle this issue, we add a pseudo element underneath the border, to make it stand out and prevent all the potential contrast issues. There was also a `z-index` issues with the connectors, the one at the bottom being hidden by the pill below. To fix the issue, we handle the `z-index` at the pill wrapper level to ensure it gets the right elevation. | 17.0 | This PR | |--------|--------| | <img width="366" alt="image" src="https://github.com/user-attachments/assets/f14d3c98-c2d5-4215-90ec-3cbe97b3ea56"> |  | task-3865935 Forward-Port-Of: odoo/enterprise#77420 Forward-Port-Of: odoo/enterprise#74859
**Issue:** In 17.0 and saas-17.2, The Cost of Scrap section does not appear in the the Cost Analysis Report despite having scrapped some components during manufacturing. **Steps to reproduce:** 1. Create a product with a BoM 2. Manufacture the product 3. Scrap some components during manufacturing 4. print the Cost Analysis Report 5. Notice the cost of scrap section does not appear in the report. **Solution:** - I added `raw_material_production_id` t
Original PR description
**Issue:**
In 17.0 and saas-17.2, The Cost of Scrap section does not appear
in the the Cost Analysis Report despite having scrapped some components
during manufacturing.
**Steps to reproduce:**
1. Create a product with a BoM
2. Manufacture the product
3. Scrap some components during manufacturing
4. print the Cost Analysis Report
5. Notice the cost of scrap section does not appear in the report.
**Solution:**
- I added `raw_material_production_id` to the search criteria to ensure scrap stock moves linked to raw materials are also included.
- I replaced `product_qty` with the `quantity` field for handling scrap quantities.
opw-4183097
Forward-Port-Of: odoo/enterprise#77451
Forward-Port-Of: odoo/enterprise#75221This commit makes sure that, in tax report, when tax_period is used to determine the report date, and when the tax_period periodicity matches one of the 3 standard filters (month, quarter, or year), that the correponding standard filter is selected with the right date set on it. Before this commit, the default date filter of the tax report would make use of the tax_period to set its date. The date was set properly, but the tax_period date filter would be hidden in case the periodicity matches
Original PR description
This commit makes sure that, in tax report, when tax_period is used to determine the report date, and when the tax_period periodicity matches one of the 3 standard filters (month, quarter, or year), that the correponding standard filter is selected with the right date set on it. Before this commit, the default date filter of the tax report would make use of the tax_period to set its date. The date was set properly, but the tax_period date filter would be hidden in case the periodicity matches monthly, quarterly, or annually. When its hidden, the date filter dropdown menu would show 3 standard filters with none of them selected, which was confusing. task-4373943 Forward-Port-Of: odoo/enterprise#75366
steps to reproduce: -Go to an indian company -Open the payroll application. -try to create salary register -the end date is current date issue: The end date should be set to the last day of the current month. solution: changed the code for '_get_default_date_to' to set default date to the last day of the current month task-4432414 Forward-Port-Of: odoo/enterprise#76246
Original PR description
steps to reproduce: -Go to an indian company -Open the payroll application. -try to create salary register -the end date is current date issue: The end date should be set to the last day of the current month. solution: changed the code for '_get_default_date_to' to set default date to the last day of the current month task-4432414 Forward-Port-Of: odoo/enterprise#76246
Before this Commit: -------------------------------------- - If only one failure location was available during quality checks (with control per quantity), it was not automatically selected by default. - This lack of default selection caused confusion, and as a result, products were mistakenly sent to the normal stock location instead of the failure location. After this Commit: -------------------------------------- - When only one failure location is available, it is now automatically pr
Original PR description
Before this Commit: -------------------------------------- - If only one failure location was available during quality checks (with control per quantity), it was not automatically selected by default. - This lack of default selection caused confusion, and as a result, products were mistakenly sent to the normal stock location instead of the failure location. After this Commit: -------------------------------------- - When only one failure location is available, it is now automatically pre-selected by default to enhance the user experience. - This change simplifies the user onboarding process by reducing the risk of products being sent to the normal stock location instead of the failure location. Task-id: 4348525 Forward-Port-Of: odoo/enterprise#74665
Issue Before This Commit: -------------------------------- The delivery label generated by the Shiprocket delivery method displayed an incorrect total when a discount or free delivery was applied, which caused confusion for users. Steps to Produce: -------------------------------- 1. Apply a discount or free delivery for a Shiprocket shipment. 2. Validate the delivery. 3. The total on the delivery label will show an incorrect value, not accounting for the discount or free delivery. W
Original PR description
Issue Before This Commit: -------------------------------- The delivery label generated by the Shiprocket delivery method displayed an incorrect total when a discount or free delivery was applied, which caused confusion for users. Steps to Produce: -------------------------------- 1. Apply a discount or free delivery for a Shiprocket shipment. 2. Validate the delivery. 3. The total on the delivery label will show an incorrect value, not accounting for the discount or free delivery. With This Commit: -------------------------------- The issue is fixed by ensuring the correct data is sent to the API, which now reflects the accurate total value on the delivery label, even when a discount or free delivery is applied. Task-id: 4395054 Forward-Port-Of: odoo/enterprise#75660
Forward-Port-Of: odoo/enterprise#77393
Original PR description
Forward-Port-Of: odoo/enterprise#77393
Task-4110505 https://github.com/odoo/odoo/pull/192953 Forward-Port-Of: odoo/enterprise#77184
Original PR description
Task-4110505 https://github.com/odoo/odoo/pull/192953 Forward-Port-Of: odoo/enterprise#77184
In list view and reports, the accounting entries were displayed in different manners. Sometimes in a stupid way (name of the move repeated twice). This commit aims to give a single and unified way to display them. ticket-4440711 Forward-Port-Of: odoo/enterprise#77362 Forward-Port-Of: odoo/enterprise#76522
Original PR description
In list view and reports, the accounting entries were displayed in different manners. Sometimes in a stupid way (name of the move repeated twice). This commit aims to give a single and unified way to display them. ticket-4440711 Forward-Port-Of: odoo/enterprise#77362 Forward-Port-Of: odoo/enterprise#76522
Steps: - Install the hr_holiday module - Configure Time Off Type with validation set to `Approved by Time Off Officer` or `Both` - Create a Time Off request without setting a Time Off Officer. --- Description of the issue/feature this PR addresses: When the validation type is set to `hr` or `both` and no Time Off Officer is configured, an activity is incorrectly generated upon creating a Time Off request. --- Fix: This PR requires adding responsible_ids in the test cases. The ch
Original PR description
Steps: - Install the hr_holiday module - Configure Time Off Type with validation set to `Approved by Time Off Officer` or `Both` - Create a Time Off request without setting a Time Off Officer. --- Description of the issue/feature this PR addresses: When the validation type is set to `hr` or `both` and no Time Off Officer is configured, an activity is incorrectly generated upon creating a Time Off request. --- Fix: This PR requires adding responsible_ids in the test cases. The changes made in this task remove activities when responsible_ids is not set, causing the test cases to fail. Adding responsible_ids will ensure the tests pass successfully. task-4351688 Forward-Port-Of: odoo/enterprise#77385 Forward-Port-Of: odoo/enterprise#75828
This commit's purpose is to make the profitability test works without demo data. The issue is that without some specific groups, the 'workorder_ids' field is not visible inside the views, making the creation of record impossible. Adding these groups in the config of the test fixes the issue version 18.0-master Forward-Port-Of: odoo/enterprise#77350
Original PR description
This commit's purpose is to make the profitability test works without demo data. The issue is that without some specific groups, the 'workorder_ids' field is not visible inside the views, making the creation of record impossible. Adding these groups in the config of the test fixes the issue version 18.0-master Forward-Port-Of: odoo/enterprise#77350
In this commit, we add 2 additionnal check steps to ensure the tour take the good way. runbot-error-id~109456 Forward-Port-Of: odoo/enterprise#77417
Original PR description
In this commit, we add 2 additionnal check steps to ensure the tour take the good way. runbot-error-id~109456 Forward-Port-Of: odoo/enterprise#77417
This reverts commit 6d00d4da05af71f17139cdb5a3a25ae9e0c10afb That commit was causing an exception in the code handling the response from the API call to the Ecuadorian Tax Agency (SRI), causing a transaction rollback and the loss of the information sent to the SRI as well as the SRI's response. Users with affected invoices need to take care to not reset the invoices to draft. After this fix is merged, the API handling code will be able to recover the invoice status from the SRI, so no data
Original PR description
This reverts commit 6d00d4da05af71f17139cdb5a3a25ae9e0c10afb That commit was causing an exception in the code handling the response from the API call to the Ecuadorian Tax Agency (SRI), causing a transaction rollback and the loss of the information sent to the SRI as well as the SRI's response. Users with affected invoices need to take care to not reset the invoices to draft. After this fix is merged, the API handling code will be able to recover the invoice status from the SRI, so no data-fix should in principle be needed. task-none Forward-Port-Of: odoo/enterprise#77461
Before this commit, if the user alters the grid view to have this kind of ranges: ```xml <range name="month" string="Month" span="month" step="month"/> ``` the `step="month"` will not be used to load the data for the grid view and will continue to load data per day (when this range is the current one in the grid view). This commit makes sure the step is correctly used to fetch the data for each columns displayed in the grid view (in this case only one column for the whole month should b
Original PR description
Before this commit, if the user alters the grid view to have this kind of ranges: ```xml <range name="month" string="Month" span="month" step="month"/> ``` the `step="month"` will not be used to load the data for the grid view and will continue to load data per day (when this range is the current one in the grid view). This commit makes sure the step is correctly used to fetch the data for each columns displayed in the grid view (in this case only one column for the whole month should be displayed). Forward-Port-Of: odoo/enterprise#75056
19 changes
Enhancements to existing features
Barcode and RFID scans now load stock quantity information in batches instead of one item at a time. This reduces delays and network calls when processing many serial numbers, improving performance for large warehouse operations or slower mobile connections.
Original PR description
In quant_barcode_model we fetch the quant at the new line creation. It's use in order to define the current theorical inventory quantity. But with rfid, it could be heavy since each serial number can be a new line and doing an rpc by line will be a bottleneck. To improve it, each time we add a product in the cache, we also add the associated quants. During the new line creation, we search for the product in the cache rather than doing an rpc with a specific domain
Resolved issues and error corrections
Refunded point-of-sale orders now send only positive amount values to Kenya's eTIMS tax system, as required. This prevents refund transactions from being rejected or reported incorrectly because of negative values.
Original PR description
When sending pos_order to eTims, all numeric values must be positive values, but when computing refunded pos_order, some fields are computed with negative value. This commit manage to transform negative fields from refunded pos_order to positive field. no-task
Control panel buttons now keep a consistent width on smaller screens across Knowledge and account reports. This improves visual alignment and makes the interface feel more polished and easier to use on compact displays.
Original PR description
*: account_reports On smaller screen, the ControlPanel's buttons for CogMenu, Buttonbox, Knowledge, Search don't have a consistent width. This commit fixes it by giving those buttons' icon a fixed width, independently of the character's size and adjusting the horizontal padding for this use case. task-4492690
Subscription project dashboards now show only billable order lines, excluding section and note entries. This prevents non-billable informational lines from being counted or displayed where users expect actual subscription items.
Original PR description
Steps to reproduce: --- 1) Go to a Subscription with a Project 2) Add a section and/or note line 3) Navigate Project smart button -> Dashboards -> Subscription dropdown 4) Notice the order lines Issue: ---- In the subscription the sections and notes are taken into account this is due to the fact that all the line are retrieved and not only the "billable". Fix: --- Adding a condition on the display type of the line. opw-4394767
The Indian payroll salary register now automatically sets its end date to the last day of the current month instead of today's date. This reduces manual correction and helps payroll users create monthly reports with the expected date range.
Original PR description
steps to reproduce: -Go to an indian company -Open the payroll application. -try to create salary register -the end date is current date issue: The end date should be set to the last day of the current month. solution: changed the code for '_get_default_date_to' to set default date to the last day of the current month task-4432414
This update fixes an issue that could prevent scheduled Monster.com job board campaigns from starting correctly. It also adds regression tests to help ensure the Monster recruitment integration and its shared base logic keep working as expected in future updates.
Original PR description
This PR adds non regression tests for the integration of monster in hr_recruitment. These tests also cover at the same time the code of the hr_recruitment_integration_base module. The PR also fixes a bug in the hr_recruitment_integration_base module which was found thanks to the tests. The bugfix is about fixing variable names in the _start_new_campaign to match the fields of the module. task-4199469
The tax report now clearly shows the correct default date option when a tax period matches a monthly, quarterly, or yearly reporting period. This removes a confusing state where the report used the right dates but showed no selected date filter in the dropdown.
Original PR description
This commit makes sure that, in tax report, when tax_period is used to determine the report date, and when the tax_period periodicity matches one of the 3 standard filters (month, quarter, or year), that the correponding standard filter is selected with the right date set on it. Before this commit, the default date filter of the tax report would make use of the tax_period to set its date. The date was set properly, but the tax_period date filter would be hidden in case the periodicity matches monthly, quarterly, or annually. When its hidden, the date filter dropdown menu would show 3 standard filters with none of them selected, which was confusing. task-4373943
This fix restores safer handling of responses from Ecuador's tax authority when users click "Process Now" for electronic invoices. It prevents failed transactions from losing submitted invoice data and tax authority responses, helping affected invoices recover their official status without a manual data fix.
Original PR description
This reverts commit 6d00d4da05af71f17139cdb5a3a25ae9e0c10afb That commit was causing an exception in the code handling the response from the API call to the Ecuadorian Tax Agency (SRI), causing a transaction rollback and the loss of the information sent to the SRI as well as the SRI's response. Users with affected invoices need to take care to not reset the invoices to draft. After this fix is merged, the API handling code will be able to recover the invoice status from the SRI, so no data-fix should in principle be needed. task-none
The map view for contacts now displays the correct group name when records are grouped by related fields such as country. This prevents groups from appearing as "None," making the map sidebar clearer and easier to use.
Original PR description
Before this commit, for map views on res.partner (which have attribute res_partner = id), if the user group by a relational field (X2many, many2one), the name of the group is "None" ### Steps to reproduce: - Contacts > Map view - in the search bar, group by "Country" - On the left side of the map view, the group name is "None" #### Expected - Name of partner country should be visible instead of "None"
Miscellaneous changes
This PR fixes two accessibility issues related to the gantt view connectors. Prior to this commit, the connectors were using the raw value when hovering the pill. This is mostly fine is light mode, but for some specific color, this was sometimes not enough to ensure a good visual separation between the connectors and the pill. To handle this issue, we add a pseudo element underneath the border, to make it stand out and prevent all the potential contrast issues. There was also a `z-index` is
Original PR description
This PR fixes two accessibility issues related to the gantt view connectors. Prior to this commit, the connectors were using the raw value when hovering the pill. This is mostly fine is light mode,…
This PR fixes two accessibility issues related to the gantt view connectors. Prior to this commit, the connectors were using the raw value when hovering the pill. This is mostly fine is light mode, but for some specific color, this was sometimes not enough to ensure a good visual separation between the connectors and the pill. To handle this issue, we add a pseudo element underneath the border, to make it stand out and prevent all the potential contrast issues. There was also a `z-index` issues with the connectors, the one at the bottom being hidden by the pill below. To fix the issue, we handle the `z-index` at the pill wrapper level to ensure it gets the right elevation. | 17.0 | This PR | |--------|--------| | <img width="366" alt="image" src="https://github.com/user-attachments/assets/f14d3c98-c2d5-4215-90ec-3cbe97b3ea56"> |  | task-3865935 Forward-Port-Of: odoo/enterprise#77420 Forward-Port-Of: odoo/enterprise#74859
**Problem**: When splitting a document, the `output` should include the attachments from the `input_pdf`. Currently, the attachments are missing in the output after splitting. **Steps to reproduce**: 1. In the Documents app, upload a PDF that contains attachments (example file provided in the ticket). 2. Split the uploaded PDF. 3. Preview the split file and check the left panel. 4. Notice that the attachments are missing in the left panel. opw-4191327 Forward-Port-Of: odoo/enterprise
Original PR description
**Problem**: When splitting a document, the `output` should include the attachments from the `input_pdf`. Currently, the attachments are missing in the output after splitting. **Steps to reproduce**: 1. In the Documents app, upload a PDF that contains attachments (example file provided in the ticket). 2. Split the uploaded PDF. 3. Preview the split file and check the left panel. 4. Notice that the attachments are missing in the left panel. opw-4191327 Forward-Port-Of: odoo/enterprise#77450 Forward-Port-Of: odoo/enterprise#74989
## Description - when applying sort by for a non-stored field in a list view, it leads to traceback. - when fetching data, when attempting to convert it into an SQL query, now throws error after this [commit](https://github.com/odoo/odoo/commit/fb0569eeba0a8909a067f2ad90b80edbe8d2d915), form this [line](https://github.com/odoo/odoo/blame/de47ec932742ef82b315990cbac8787f82aa91d5/odoo/models.py#L2846) - This pr ensures that only stored fields are available for sorting in the list view editor,
Original PR description
## Description - when applying sort by for a non-stored field in a list view, it leads to traceback. - when fetching data, when attempting to convert it into an SQL query, now throws error after this…
## Description
- when applying sort by for a non-stored field in a list view, it leads to traceback.
- when fetching data, when attempting to convert it into an SQL query, now throws error after this [commit](https://github.com/odoo/odoo/commit/fb0569eeba0a8909a067f2ad90b80edbe8d2d915), form this [line](https://github.com/odoo/odoo/blame/de47ec932742ef82b315990cbac8787f82aa91d5/odoo/models.py#L2846)
- This pr ensures that only stored fields are available for sorting in the list view editor, preventing such issues.
## steps to reproduce
- Start a db ( version 17.2 or greater)
- install studio and contacts app
- open studio editor for contact app's list view.
- Add display_name in list and set `sort by` attribute with `display_name` field.
## Traceback
```py
File "/home/odoo/odoo/codebase/odoo/saas-17.2/addons/web/controllers/dataset.py", line 34, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "/home/odoo/odoo/codebase/odoo/saas-17.2/odoo/api.py", line 458, in call_kw
result = getattr(recs, name)(*args, **kwargs)
File "/home/odoo/odoo/codebase/odoo/saas-17.2/addons/web/models/models.py", line 46, in web_search_read
records = self.search_fetch(domain, specification.keys(), offset=offset, limit=limit, order=order)
File "/home/odoo/odoo/codebase/odoo/saas-17.2/odoo/models.py", line 1626, in search_fetch
query = self._search(domain, offset=offset, limit=limit, order=order or self._order)
File "/home/odoo/odoo/codebase/odoo/saas-17.2/odoo/models.py", line 5454, in _search
query.order = self._order_to_sql(order, query)
File "/home/odoo/odoo/codebase/odoo/saas-17.2/odoo/models.py", line 5266, in _order_to_sql
term = self._order_field_to_sql(alias, field_name, sql_direction, sql_nulls, query)
File "/home/odoo/odoo/codebase/odoo/saas-17.2/odoo/models.py", line 5324, in _order_field_to_sql
sql_field = self._field_to_sql(alias, field_name, query)
File "/home/odoo/odoo/codebase/odoo/saas-17.2/odoo/models.py", line 2846, in _field_to_sql
raise ValueError(f"Cannot convert field {field} to SQL")
ValueError: Cannot convert field res.partner.display_name to SQL
```
Forward-Port-Of: odoo/enterprise#77411
Forward-Port-Of: odoo/enterprise#76351Without this change it's impossible to remove the user groups from internal users, because they're being re-added upon the module updates. The reason is because there's a mechanism in place that synchronizes the newly added groups to the default user, so they're automatically added to all internal users ([ref](https://github.com/odoo/odoo/blob/6b5a839428b06e09d90631e9824a9b594ff8f4f5/odoo/addons/base/models/res_users.py#L621-L626)). For this reason and by convention, groups added t
Original PR description
Without this change it's impossible to remove the user groups from internal users, because they're being re-added upon the module updates.
The reason is because there's a mechanism in place that synchronizes the newly added groups to the default user, so they're automatically added to all internal users ([ref](https://github.com/odoo/odoo/blob/6b5a839428b06e09d90631e9824a9b594ff8f4f5/odoo/addons/base/models/res_users.py#L621-L626)).
For this reason and by convention, groups added to the default user should be non-updateable, so system administrators can remove them if they wanted to.
Related to: https://github.com/odoo/enterprise/commit/621824fb3fe1b5b895d1a37a15d45e903bc7dc6f
--
ping @tde-banana-odoo @tivisse
Forward-Port-Of: odoo/enterprise#75177
Forward-Port-Of: odoo/enterprise#55024Issue Before This Commit: -------------------------------- The delivery label generated by the Shiprocket delivery method displayed an incorrect total when a discount or free delivery was applied, which caused confusion for users. Steps to Produce: -------------------------------- 1. Apply a discount or free delivery for a Shiprocket shipment. 2. Validate the delivery. 3. The total on the delivery label will show an incorrect value, not accounting for the discount or free delivery. W
Original PR description
Issue Before This Commit: -------------------------------- The delivery label generated by the Shiprocket delivery method displayed an incorrect total when a discount or free delivery was applied, which caused confusion for users. Steps to Produce: -------------------------------- 1. Apply a discount or free delivery for a Shiprocket shipment. 2. Validate the delivery. 3. The total on the delivery label will show an incorrect value, not accounting for the discount or free delivery. With This Commit: -------------------------------- The issue is fixed by ensuring the correct data is sent to the API, which now reflects the accurate total value on the delivery label, even when a discount or free delivery is applied. Task-id: 4395054 Forward-Port-Of: odoo/enterprise#75660
Before this commit, the button label displayed as 'Comparison: <previous_period>' (where 'previous_period' was the period preceding the compared period), regardless of the comparison type selected. For example, if comparing October 2024 to previous months, the label would appear as 'Comparison: Sep 2024'. This caused confusion for users when comparing a period to multiple previous ones, as only the last period was displayed in the label. After this commit, the button label is now dynamic and
Original PR description
Before this commit, the button label displayed as 'Comparison: <previous_period>' (where 'previous_period' was the period preceding the compared period), regardless of the comparison type selected.…
Before this commit, the button label displayed as 'Comparison: <previous_period>' (where 'previous_period' was the period preceding the compared period), regardless of the comparison type selected. For example, if comparing October 2024 to previous months, the label would appear as 'Comparison: Sep 2024'. This caused confusion for users when comparing a period to multiple previous ones, as only the last period was displayed in the label. After this commit, the button label is now dynamic and reflects the selected comparison: - When comparing to previous periods: 'Comparison: <periods_number> Previous Periods' - When comparing to the previous period: 'Comparison: Previous Period' - When comparing to the same period in previous years: 'Comparison: <periods_number> Previous Years' - When comparing to the same period in the previous year: 'Comparison: Previous Pear' - When we don't compare to another period/year: 'Comparison' Here, 'periods_number' refers to the number of periods or years being compared. task-id: 4267209 Forward-Port-Of: odoo/enterprise#76407 Forward-Port-Of: odoo/enterprise#73944
Before this commit, for map views on res.partner (which have attribute res_partner = id), if the user group by a relational field (X2many, many2one), the name of the group is "None" ### Steps to reproduce: Contacts > Map view in the search bar, group by "Salesperson" On the left side of the map view, the group name is "None" ### Expected Name of partner salesperson should be visible instead of "None" original PR : #74205 Forward-Port-Of: odoo/enterprise#76248
Original PR description
Before this commit, for map views on res.partner (which have attribute res_partner = id), if the user group by a relational field (X2many, many2one), the name of the group is "None" ### Steps to reproduce: Contacts > Map view in the search bar, group by "Salesperson" On the left side of the map view, the group name is "None" ### Expected Name of partner salesperson should be visible instead of "None" original PR : #74205 Forward-Port-Of: odoo/enterprise#76248
The value sent from IAP was never sent. So what was printed was always None. So we remove its uses (and will change the method definition in non-stable Forward-Port-Of: odoo/enterprise#77102
Original PR description
The value sent from IAP was never sent. So what was printed was always None. So we remove its uses (and will change the method definition in non-stable Forward-Port-Of: odoo/enterprise#77102
Steps: - Install the hr_holiday module - Configure Time Off Type with validation set to `Approved by Time Off Officer` or `Both` - Create a Time Off request without setting a Time Off Officer. --- Description of the issue/feature this PR addresses: When the validation type is set to `hr` or `both` and no Time Off Officer is configured, an activity is incorrectly generated upon creating a Time Off request. --- Fix: This PR requires adding responsible_ids in the test cases. The ch
Original PR description
Steps: - Install the hr_holiday module - Configure Time Off Type with validation set to `Approved by Time Off Officer` or `Both` - Create a Time Off request without setting a Time Off Officer. --- Description of the issue/feature this PR addresses: When the validation type is set to `hr` or `both` and no Time Off Officer is configured, an activity is incorrectly generated upon creating a Time Off request. --- Fix: This PR requires adding responsible_ids in the test cases. The changes made in this task remove activities when responsible_ids is not set, causing the test cases to fail. Adding responsible_ids will ensure the tests pass successfully. task-4351688 Forward-Port-Of: odoo/enterprise#77385 Forward-Port-Of: odoo/enterprise#75828
**Issue:** In 17.0 and saas-17.2, The Cost of Scrap section does not appear in the the Cost Analysis Report despite having scrapped some components during manufacturing. **Steps to reproduce:** 1. Create a product with a BoM 2. Manufacture the product 3. Scrap some components during manufacturing 4. print the Cost Analysis Report 5. Notice the cost of scrap section does not appear in the report. **Solution:** - I added `raw_material_production_id` t
Original PR description
**Issue:**
In 17.0 and saas-17.2, The Cost of Scrap section does not appear
in the the Cost Analysis Report despite having scrapped some components
during manufacturing.
**Steps to reproduce:**
1. Create a product with a BoM
2. Manufacture the product
3. Scrap some components during manufacturing
4. print the Cost Analysis Report
5. Notice the cost of scrap section does not appear in the report.
**Solution:**
- I added `raw_material_production_id` to the search criteria to ensure scrap stock moves linked to raw materials are also included.
- I replaced `product_qty` with the `quantity` field for handling scrap quantities.
opw-4183097
Forward-Port-Of: odoo/enterprise#75221