Daily updates from Odoo
Navigate
Branch
Monday, March 3, 2025
36 changes
30 changes
Enhancements to existing features
This update aligns several Odoo apps with an improved internal Record component API, allowing customization hooks to be handled in a more consistent way. It helps keep Payroll, Sign, Timesheets, Gantt, Grid, and Studio features compatible with the broader platform change without introducing major user-facing behavior changes.
Timers started from tasks or helpdesk tickets now stay in sync with the Timesheets app timer, so users can start and stop work tracking from either place. Timesheets are created when the timer starts, with a stop confirmation dialog to adjust time and description, reducing duplicate steps and inconsistent records.
Original PR description
* = helpdesk_timesheet,timesheet_grid,industry_fsm{_sale} PURPOSE ======= Currently, the timer on tasks/tickets works "independently" from the timer header of the Timesheets app. For instance, if the…
* = helpdesk_timesheet,timesheet_grid,industry_fsm{_sale}
PURPOSE
=======
Currently, the timer on tasks/tickets works "independently" from the timer header
of the Timesheets app. For instance, if the timer was launched from a task,
it is not reflected in the Timesheets app. The goal of this task to make these
two behaviors consistent.
Implementation details
----------------------
### Uniform the using of timer
The main goal is to directly link the timer on the timesheet and so the
will be generated when a timer is started. Also, the timer has to be
linked to the task/ticket to be able to stop the timer in the related
task/ticket (if the timesheet is linked to task/ticket or if the timer
is launched in a task/ticket). To do that, a new mixin called
`timer.parent.mixin` will be used for the task/ticket instead of
`timer.mixin` to keep the functionalities as before and in the
`timer.timer`, 2 new fields will be added to linked the task/ticket on
the timer.
### Replace fields created to display the buttons for timer by domain
Before, some boolean fields are created to display the right button for
the timer. Now, those boolean fields have been removed and the domain of
those buttons has been updated to keep the same behavior as before even
if those fields will no longer exist.
### Align timer on tasks/tickets with timer header
Use the new mixin in `project.task` and `helpdesk.ticket` models
instead of `timer.timer` and adapt the code to be able to start
and stop the timer as before.
### Remove the `project.task.create.timesheet` and `helpdesk.ticket.create.timesheet` wizards
Since a timesheet will be automatically generated when a timer is started
those wizards are no longer necessary since it will no longer create a
timesheet since it will already exist when the user stops the timer.
### Remarks
The timer has been uniform to have the same behavior in the Timesheets app
and in `project.task` and `helpdesk.ticket` form views. More precisely,
the behavior in the Timesheets app will be kept and so, the pause button
will be removed in `project.task` and `helpdesk.ticket`. The user could
only starts and stops the timer.
Also, before the user could start a timer in `helpdesk.ticket` and at the
same time, starts a timer in `project.task` and/or in Timesheet. Now, since
the main link on the timer will always be with the timesheet, it means only
one timer can be started in the same time. That is, if the timer is launched
on a ticket, the user will can see a timer is running in the Timesheet app but
if he starts a timer on a task via the `project.task` form view or in another
timesheet in Timesheet app, the existing timer will be stopped and removed before
starting the new timer.
task-2276015Recruitment reporting pivots now show information that better matches each report’s purpose. Business users can more easily compare applicants by stage, recruiter performance, and recruitment source without manually reconfiguring the reports.
Original PR description
This PR improves the pivot view of the `Applicant Analysis`, `Source Analysis`, and `Team Performance ` reports. The pivot view for `Source Analysis` and `Team Performance` previously displayed exactly the same information by default as the `Applicant Analysis` report. This PR improves that by making the default data of those pivot views the same as what is displayed in the graph view, while also improving the `Applicant Analysis` report. - `Applicant analysis` now has `applicant`,`hired`, and `refused` sub columns for each stage. - `Team Performance` now has the recruiters on one axis and the amount of applicants in each state (`in progress`, `hired`, etc.) on the other axis. - `Source Analysis` now has the recruitment source on one axis and the amount of applicants in each state on the other axis. task-4146657
CRM lead conversion to helpdesk tickets now aligns with stricter partner matching that relies on email rather than lead names. This reduces the chance of linking new leads to the wrong customer when generic names are reused.
Original PR description
We removed extra criteria from '_find_matching_partner' to improve partner accuracy in CRM. This PR removes some tests based on those criteria for the CrmLeadConvert2ticket wizard. Related PR - https://github.com/odoo/odoo/pull/135793 Task-3235935
The itinerary wizard now suggests addresses as users type, so field service teams no longer need to enter full addresses manually. This speeds up scheduling and reduces the chance of incorrect or inconsistent address details.
Original PR description
Before this commit: the address in the itinerary wizard did not provide suggestions when users enter an address. This required users to manually type the full address, which was time consuming and and increased the risk of error for user. After this commit: the address field now supports autocomplete, providing address suggestions as users input. This improves the user experience by making address entry faster and reducing the chances of incorrect addresses and save users time. task-4461146
Resolved issues and error corrections
Email templates across several Odoo apps now use the colors selected in Settings instead of defaulting to Odoo purple. This keeps outgoing emails visually aligned with each company’s branding, including button and button text colors.
Original PR description
**Specifications:** Even after selecting the color of the email templates from the settings, the templates' color was not updating, and the email was sent with the default odoo purple color. **After this PR:** The templates' color will be dynamic, and the emails will be sent with the color selected in the settings app. Task-3929699
This fix restores an email address for the admin user during Knowledge UI tests. It prevents automated test failures in setups without demo data, helping keep the Knowledge app validation process stable.
Original PR description
The removal of `MailCommon` in https://github.com/odoo/enterprise/pull/80180 for `TestKnowledgeUICommon` had the unintended side effect of removing the email from the user `admin`. It happens that tours using that class actually send emails and thus require the email address to be set on the user, which is not the case in no demo runs. Runbot Error 145750
The Belgian payroll calculation now respects the “No ONSS” option for posted employees when estimating yearly employer costs. This prevents employer costs from being overstated by excluding ONSS contributions when the checkbox is selected.
Original PR description
For posted employees, the no ONSS checkbox can be checked. If this is the case, the employer yearly cost should take it into account and not include ONSS. Before the fix: the ONSS was taken into account in the employer yearly cost computation After the fix: the ONSS is only taken into account when no ONSS in uncheked task-4559137
The salary configurator now shows only the states or regions that belong to the selected country, making offer setup clearer and reducing selection mistakes. Search fields in selection menus also focus automatically, helping users find options faster.
Original PR description
Behavior before the fix: - When selecting a country in the salary configurator, the list of states was not adapted correctly and showed all states. Behavior after the fix: - The list of states shown corresponds to the ones of the selected country. Steps to reproduce: - Create an employee with a contract - Generate an offer This commit also adds an improvement with the autofocus of the search bar on selection fields. task-4522433
Code cleanup and technical improvements
Global filter labels in spreadsheets now use the standard text input component instead of a one-off custom editor. This keeps the editing experience consistent and makes the feature easier to maintain without changing how users work.
Original PR description
Before this commit, the label edition in the global filters sidepanel was done using a custom component, used only for this purpose. This commit replaces this custom component by the TextInput component, which is more standard. Task: 4609132
Miscellaneous changes
Steps to reproduce =================== Admin: 1. Create an article 2. Share the article 3. Add a portal user as a member 4. Write a comment (using the editor, select the text, and use the toolbar to write a comment) 5. Attach a file to the new message Portal: 6. Go to the created article 7. Go to the comment with the message and attachment 8. Download/view the attachment => No access to the document After this commit ================= Portal user who has read or write access t
Original PR description
Steps to reproduce =================== Admin: 1. Create an article 2. Share the article 3. Add a portal user as a member 4. Write a comment (using the editor, select the text, and use the toolbar to write a comment) 5. Attach a file to the new message Portal: 6. Go to the created article 7. Go to the comment with the message and attachment 8. Download/view the attachment => No access to the document After this commit ================= Portal user who has read or write access to the linked article is granted the access Task-4223292 Forward-Port-Of: odoo/enterprise#80519 Forward-Port-Of: odoo/enterprise#75819
Steps to reproduce: 1. Upload a document and click the "Sign Now" button. 2. Attempt to refuse the document → traceback occurs. Issue: A traceback error occurs. Cause: the functionality to cancel a document from an email was merged into the `/sign/refuse/` controller. when `signRequestToken` is assigned in `sign_request_action.js` and the document is refused, the controller calls the `cancel()` method, which updates the document's access token. as a result, the thankyoudialog encount
Original PR description
Steps to reproduce:
1. Upload a document and click the "Sign Now" button.
2. Attempt to refuse the document → traceback occurs.
Issue:
A traceback error occurs.
Cause:
the functionality to cancel a document from an email was merged into the `/sign/refuse/` controller. when `signRequestToken` is assigned in `sign_request_action.js` and the document is refused, the controller calls the `cancel()` method, which updates the document's access token. as a result, the thankyoudialog encounters an error due to an invalid access token of a sign request during the RPC call.
Fix:
Avoid returning http.request.not_found() which will translate into a string and it will crash because map is not available on strings: result.map((doc) => { ... } Make sure _refuse call cancel method which will reset the access token.
task-4551799
Forward-Port-Of: odoo/enterprise#79381- Adding DIAN UBL codes for the existing UoM provided in the task description. Code '94' is returned if the UoM for some reason doesn't have a defined code. - Adjusting the relevant method in the DIAN module to match. - Adjusting test XMLs to use correct UBL codes. task: 4396119 Forward-Port-Of: odoo/enterprise#79134 Forward-Port-Of: odoo/enterprise#75745
Original PR description
- Adding DIAN UBL codes for the existing UoM provided in the task description. Code '94' is returned if the UoM for some reason doesn't have a defined code. - Adjusting the relevant method in the DIAN module to match. - Adjusting test XMLs to use correct UBL codes. task: 4396119 Forward-Port-Of: odoo/enterprise#79134 Forward-Port-Of: odoo/enterprise#75745
Update l10n_ar_reports and l10n_uy_edi translations. Task Adhoc side: 44224 Forward-Port-Of: odoo/enterprise#79104
Original PR description
Update l10n_ar_reports and l10n_uy_edi translations. Task Adhoc side: 44224 Forward-Port-Of: odoo/enterprise#79104
In Knowledge, on chromium-based browsers, zooming at certain levels will cause the comment icon to flail around the editor and lock in unwanted places. (This behavior was not reproductible in Firefox.) To circumvent this, the margin calculations for the purposes of calculating the comment icon horizontal location are now done manually. task-4558391 Forward-Port-Of: odoo/enterprise#80531 Forward-Port-Of: odoo/enterprise#79165
Original PR description
In Knowledge, on chromium-based browsers, zooming at certain levels will cause the comment icon to flail around the editor and lock in unwanted places. (This behavior was not reproductible in Firefox.) To circumvent this, the margin calculations for the purposes of calculating the comment icon horizontal location are now done manually. task-4558391 Forward-Port-Of: odoo/enterprise#80531 Forward-Port-Of: odoo/enterprise#79165
This commit is a patch to the following PR: https://github.com/odoo/enterprise/pull/76478#discussion_r1946575309 Steps to reproduce the bug: - Create two storable products “P1” and “P2”: - Tracked by Serial Number - Create a quality control point: - Operation: Receipt - Control per: Quantity - Create a receipt: - 10 units of P1 - 10 units of P2 - Mark it as "To Do." - Open the detailed operation of P1: - Assign two SNs: - SN1 - SN2 - Save. - The “Quantity” f
Original PR description
This commit is a patch to the following PR: https://github.com/odoo/enterprise/pull/76478#discussion_r1946575309 Steps to reproduce the bug:
- Create two storable products “P1” and “P2”:
- Tracked by Serial Number
- Create a quality control point:
- Operation: Receipt
- Control per: Quantity
- Create a receipt:
- 10 units of P1
- 10 units of P2
- Mark it as "To Do."
- Open the detailed operation of P1:
- Assign two SNs: - SN1 - SN2 - Save.
- The “Quantity” field of the P1 move is updated to 2.
- Mark the move of P1 as "Picked."
- Validate the receipt.
- The backorder wizard is triggered → Validate it.
Problem:
A wizard to process the quality check is triggered, but 12 quality checks (2 for P1 and 10 for P2) are loaded instead of only 2 for P1.
Expected Behavior:
Quality checks should only be triggered for picked moves
opw-4442564
Forward-Port-Of: odoo/enterprise#80467…onus Forward-Port-Of: odoo/enterprise#80515 Forward-Port-Of: odoo/enterprise#80376
Original PR description
…onus Forward-Port-Of: odoo/enterprise#80515 Forward-Port-Of: odoo/enterprise#80376
Followup report title and columns were not added to `.pot` file for translation Forward-Port-Of: odoo/enterprise#80421 Forward-Port-Of: odoo/enterprise#80131
Original PR description
Followup report title and columns were not added to `.pot` file for translation Forward-Port-Of: odoo/enterprise#80421 Forward-Port-Of: odoo/enterprise#80131
### Issue: Since 18.0, the catalog is used in certain actions of the shopfloor However, if you leave the catalog fast enough after your last change (something of the order of ~0.5 sec in localhost), you can trigger a reload of the shopfloor records and call a `web_read` prior to the update of these records. ### Note: This is easily reproducible by hand in localhost and should worsen if you have server delay. In addition, it makes it impossible to write a proper tour involving the catalo
Original PR description
### Issue: Since 18.0, the catalog is used in certain actions of the shopfloor However, if you leave the catalog fast enough after your last change (something of the order of ~0.5 sec in localhost),…
### Issue: Since 18.0, the catalog is used in certain actions of the shopfloor However, if you leave the catalog fast enough after your last change (something of the order of ~0.5 sec in localhost), you can trigger a reload of the shopfloor records and call a `web_read` prior to the update of these records. ### Note: This is easily reproducible by hand in localhost and should worsen if you have server delay. In addition, it makes it impossible to write a proper tour involving the catalog in the shopfloor. ### Steps to reproduce: - Create a product with a bom and an operation op1 - Create and confirm an MO for 1 unit of that product - Go to the shopfloor > on the operation > wheel > Add component - Add a component to be consumed in that operation - Close the catalog fast (using ESC for instance) #### > While the componenet was correctly added to the MO and linked to the WO it is not visible on the shopfloor. ### Cause of the issue: When a product is added from the catalog it triggers an rpc call to update the data's of the MO (notably creating a new raw move): https://github.com/odoo/odoo/blob/193c9a49dfc039ee93fbc8e171819236697b5c50/addons/product/static/src/product_catalog/kanban_record.js#L62-L69 https://github.com/odoo/odoo/blob/193c9a49dfc039ee93fbc8e171819236697b5c50/addons/mrp/models/mrp_production.py#L2898-L2901 On the other hand, closing the product catalog will reload the mrp record that started the action that opened the catalog: https://github.com/odoo/enterprise/blob/c1346dd2279bf3882b47b260b8d03ef9651ffaf1/mrp_workorder/static/src/mrp_display/dialog/mrp_menu_dialog.js#L41-L45 Since this reload is currently not waiting for the update of the record the associated `web_read` might be called prior to the last update of the record and the newly created raw moves might not be displayed. ### Fix: We use the props option of the action opening the catalog to transfer a callback to reload the records when all the record update promisses are resolved. #### To be more precise: The `ProductCatalogKanbanController` component contains a list of promises (initially empty): `catalogKanbanUpdates` aswell as an optional callback props `onCatalogUpdated`. This list is going to be populated each time that a `ProductCatalogKanbanRecord` make a quantity update (used stock moves on the mrp.production). To populate this array of promises a method is defined in the controller: `pushCatalogKanbanUpdate`. This method needs to be called by the `KanbanRecords` an hence is transported using xpath from the `ProductCatalogKanbanController` to the `ProductCatalogKanbanRecord` via the `ProductCatalogKanbanRenderer`. Once the controller is detroyed (and hence each kanban record that had to update a quantity started its call) if a callback was given to the props of the Kanban controller we wait for all the update promises to be resolved and we call that call back. opw-4199156 --- Forward-Port-Of: odoo/enterprise#79190 Forward-Port-Of: odoo/enterprise#74151
When confirming a vendor bill imported from an uploaded document and pressing the "Update SAT" button, the SAT state is not updated. This commit adds the missing EDI document state, `invoice_received`, in a validation that triggers the update of the SAT state for the current invoice. Steps to reproduce: <img width="1301" alt="Screenshot 2025-02-13 at 11 23 47 PM copy" src="https://github.com/user-attachments/assets/bad64936-bae1-4846-8cde-12f6d1748d46" /> <img width="1301" alt="Screenshot 2
Original PR description
When confirming a vendor bill imported from an uploaded document and pressing the "Update SAT" button, the SAT state is not updated. This commit adds the missing EDI document state,…
When confirming a vendor bill imported from an uploaded document and pressing the "Update SAT" button, the SAT state is not updated. This commit adds the missing EDI document state, `invoice_received`, in a validation that triggers the update of the SAT state for the current invoice. Steps to reproduce: <img width="1301" alt="Screenshot 2025-02-13 at 11 23 47 PM copy" src="https://github.com/user-attachments/assets/bad64936-bae1-4846-8cde-12f6d1748d46" /> <img width="1301" alt="Screenshot 2025-02-13 at 11 24 12 PM copy" src="https://github.com/user-attachments/assets/b4a839c2-a5ab-4638-b46d-3eb9ccf1b59d" /> <img width="1307" alt="Screenshot 2025-02-13 at 11 26 30 PM copy" src="https://github.com/user-attachments/assets/14645d48-5e90-405c-8a36-3ec7b0af50ef" /> <img width="1306" alt="Screenshot 2025-02-13 at 11 26 47 PM copy" src="https://github.com/user-attachments/assets/839349bf-be83-408a-bbd4-676d84a34493" /> <img width="1305" alt="Screenshot 2025-02-13 at 11 26 57 PM copy" src="https://github.com/user-attachments/assets/1e3773de-f3ab-47b4-9548-b5633c078943" /> Actual result: <img width="1306" alt="Screenshot 2025-02-13 at 11 27 08 PM copy" src="https://github.com/user-attachments/assets/a385847e-20cc-4410-8802-6d6b2c363633" /> Expected result: <img width="1307" alt="Screenshot 2025-02-13 at 11 27 49 PM copy" src="https://github.com/user-attachments/assets/8974cd49-13b6-40c0-8fa2-fd1fce45faf3" /> Forward-Port-Of: odoo/enterprise#80217 Forward-Port-Of: odoo/enterprise#79314
Seems like the tour takes steps while there may have been a delay in the web_save... seeming like there is an open form view in edition mode. runbot-111772 Forward-Port-Of: odoo/enterprise#79473
Original PR description
Seems like the tour takes steps while there may have been a delay in the web_save... seeming like there is an open form view in edition mode. runbot-111772 Forward-Port-Of: odoo/enterprise#79473
We cannot properly handle the case where one line is shipped from multiple addresses. But we gave up too early: just because one sale line is linked to multiple stock moves doesn't necessarily mean that's the case. Here's an example that uses a single warehouse: 1/ create a sale order with one line with qty 2 2/ confirm the sale order 3/ validate the picking with qty 1 and create backorder for the other 4/ create the invoice from the sale order 5/ compute taxes No line-level address
Original PR description
We cannot properly handle the case where one line is shipped from multiple addresses. But we gave up too early: just because one sale line is linked to multiple stock moves doesn't necessarily mean that's the case. Here's an example that uses a single warehouse: 1/ create a sale order with one line with qty 2 2/ confirm the sale order 3/ validate the picking with qty 1 and create backorder for the other 4/ create the invoice from the sale order 5/ compute taxes No line-level address is sent because len(line.sale_line_ids.move_ids) is 2. This causes Avatax to calculate taxes based on the company address which could result in wrong taxes. After this commit, we only set None if a line was sent from warehouses with different addresses (partner_id). opw-4486746 Forward-Port-Of: odoo/enterprise#80326 Forward-Port-Of: odoo/enterprise#78556
The term used by group by should be the same term in the select, avoiding the alias and posible error like ERROR: column "account_account.name" must appear in the GROUP BY clause or be used in an aggregate function Forward-Port-Of: odoo/enterprise#78982 Forward-Port-Of: odoo/enterprise#52832
Original PR description
The term used by group by should be the same term in the select, avoiding the alias and posible error like ERROR: column "account_account.name" must appear in the GROUP BY clause or be used in an aggregate function Forward-Port-Of: odoo/enterprise#78982 Forward-Port-Of: odoo/enterprise#52832
This commit will do a backport of: https://github.com/odoo/enterprise/commit/eaf8361f44208346c20e4c50c2d9914ab2d4f3f5 and also remove some margin to have a more compacted view and will put most of the information in one div. task:4542756 Forward-Port-Of: odoo/enterprise#80282 Forward-Port-Of: odoo/enterprise#79233
Original PR description
This commit will do a backport of: https://github.com/odoo/enterprise/commit/eaf8361f44208346c20e4c50c2d9914ab2d4f3f5 and also remove some margin to have a more compacted view and will put most of the information in one div. task:4542756 Forward-Port-Of: odoo/enterprise#80282 Forward-Port-Of: odoo/enterprise#79233
Have a field in a view like this ```<field name="" options="{ some_boolean: 1 }" />``` And have the corresponding supportedOption (defined on the field widget): ```{ somme_boolean: { type: "boolean" } }``` Open studio and click on that field, in debug mode. Before this commit, there was a crash because 1 or 0 were directly passed to a component which expected a boolean value. After this commit, before displaying the options we convert 0 or 1 to the corresponding boolean. Forw
Original PR description
Have a field in a view like this
```<field name="" options="{ some_boolean: 1 }" />```
And have the corresponding supportedOption (defined on the field widget):
```{
somme_boolean: {
type: "boolean"
}
}```
Open studio and click on that field, in debug mode.
Before this commit, there was a crash because 1 or 0 were directly passed to a component which expected a boolean value. After this commit, before displaying the options we convert 0 or 1 to the corresponding boolean.
Forward-Port-Of: odoo/enterprise#80014Before this commit, in the wave and bubble layouts, the SVG acting as an overlay background of the footer was displayed on top of the report when entering the XML Editor of the reportEditor. This is due to multiple factors, all of which linked to how wkhtmltopdf works: - header and footers seem to be rendered in their own viewport, the top parameter is the start of the footer itself, not that of the page. - absolute positioning wrecks havoc in z-index with SVG's ..... Even though the HTM
Original PR description
Before this commit, in the wave and bubble layouts, the SVG acting as an overlay background of the footer was displayed on top of the report when entering the XML Editor of the reportEditor. This is due to multiple factors, all of which linked to how wkhtmltopdf works: - header and footers seem to be rendered in their own viewport, the top parameter is the start of the footer itself, not that of the page. - absolute positioning wrecks havoc in z-index with SVG's ..... Even though the HTML of the waves' and bubbles' layouts doesn't seem very well written, it does work in the current state of the art of Odoo's PDF rendering. This commit adapts the JS code in the XML editor of the reportEditor to account for it. opw-4508900 Forward-Port-Of: odoo/enterprise#77863
- update upper and lower limits for nssf parameter Task: 4599150 Forward-Port-Of: odoo/enterprise#80016
Original PR description
- update upper and lower limits for nssf parameter Task: 4599150 Forward-Port-Of: odoo/enterprise#80016
Test changed in d5da2b62263f85fbce0f2548085c066cbbf10371 needs to be changed back because of https://github.com/odoo/odoo/pull/198086 opw-4512877 Forward-Port-Of: odoo/enterprise#79576
Original PR description
Test changed in d5da2b62263f85fbce0f2548085c066cbbf10371 needs to be changed back because of https://github.com/odoo/odoo/pull/198086 opw-4512877 Forward-Port-Of: odoo/enterprise#79576
Remove the restrictions of the make_scss_customizations from the website generator and instead let the website scraper have full control. Forward-Port-Of: odoo/enterprise#80266
Original PR description
Remove the restrictions of the make_scss_customizations from the website generator and instead let the website scraper have full control. Forward-Port-Of: odoo/enterprise#80266
Following feedbacks from partners and clients, we add the following improvements: - Employee Address on the payslip - Employee bank account on the payslip - Private phone and email on the employee view Forward-Port-Of: odoo/enterprise#80366
Original PR description
Following feedbacks from partners and clients, we add the following improvements: - Employee Address on the payslip - Employee bank account on the payslip - Private phone and email on the employee view Forward-Port-Of: odoo/enterprise#80366
6 changes
Resolved issues and error corrections
Field service users on mobile can now create appointments from empty calendar slots with the correct default dates and open existing calendar items for editing. This prevents accidental creation of duplicate tasks and makes mobile scheduling more reliable.
Original PR description
Steps to reproduce ================== - Use a mobile viewport - Go to field service - Switch to the calendar view - Click on an empty slot to create a new record => The default dates are missing - Go back to the calendar view - Click on an existing record => We should be able to edit the selected record, but instead, we can create a new one opw-4596689
This fix prevents document uploads and related sharing flows from crashing when a custom action leaves an invalid token behind. Users should see more reliable document handling instead of unexpected errors caused by malformed links or request data.
Original PR description
Bug === Some custom actions might change the token for some reason, if that code is badly implemented, it will result in a crash when uploading on the request. Task-4492764
Miscellaneous changes
<img width="1047" alt="Captura de pantalla 2024-12-12 a las 10 23 09 a m" src="https://github.com/user-attachments/assets/89e3ced3-7a62-4ae8-b661-f40d4e312df0" />
Original PR description
<img width="1047" alt="Captura de pantalla 2024-12-12 a las 10 23 09 a m" src="https://github.com/user-attachments/assets/89e3ced3-7a62-4ae8-b661-f40d4e312df0" />
This commit fixes the runbot test failures related to invoice generation when the user is not logged in and VAT values are missing. Runbot Errors: 111328, 111329 Related: https://github.com/odoo/odoo/pull/198506 Forward-Port-Of: odoo/enterprise#79646
Original PR description
This commit fixes the runbot test failures related to invoice generation when the user is not logged in and VAT values are missing. Runbot Errors: 111328, 111329 Related: https://github.com/odoo/odoo/pull/198506 Forward-Port-Of: odoo/enterprise#79646
__Steps to reproduce:__ 1. Create a project (billable). 2. Give the user access to Company A + B, while the default is A 3. Add a task with a customer belonging to company B 4. Create a task and add products to it. __Description of the issue:__ - The **"Decrease"** button is disabled, with raised error message that the amount is delivered. - This happens because the domain fetching `stock.move` uses user’s default company instead of SO’s company which leads to the wrong default WH _
Original PR description
__Steps to reproduce:__ 1. Create a project (billable). 2. Give the user access to Company A + B, while the default is A 3. Add a task with a customer belonging to company B 4. Create a task and add products to it. __Description of the issue:__ - The **"Decrease"** button is disabled, with raised error message that the amount is delivered. - This happens because the domain fetching `stock.move` uses user’s default company instead of SO’s company which leads to the wrong default WH __Description of the solution:__ - Update warehouse logic to fetch the default warehouse using the SO’s company context, ensuring `stock.move` domain aligns with the sale order’s company - opw-4471366 Forward-Port-Of: odoo/enterprise#80007
When users attempt to send a template with 10 body variables, the sample values for `Free Text 1` and `Free Text 10` are swapped. Steps to Produce: - Create a template with 10 body variables - Give sample value for `Body - {{1}}` as 1 and `Body - {{10}}` as 10 - Open the WhatsApp composer using the created template - `Free text 1` will have a value of 10 instead of 1 - `Free text 10` will have a value of 1 instead of 10 Problem: The variables are sorted by name, causing `{{10}}`
Original PR description
When users attempt to send a template with 10 body variables, the sample values for `Free Text 1` and `Free Text 10` are swapped.
Steps to Produce:
- Create a template with 10 body variables
- Give sample value for `Body - {{1}}` as 1 and `Body - {{10}}` as 10
- Open the WhatsApp composer using the created template
- `Free text 1` will have a value of 10 instead of 1
- `Free text 10` will have a value of 1 instead of 10
Problem:
The variables are sorted by name, causing `{{10}}` to appear before `{{1}}`, which leads to the values being swapped.
Solution:
Sort the variables by extracting the index from the variable name, so they are ordered numerically rather than alphabetically.
Task-4212923
Forward-Port-Of: odoo/enterprise#71307