Tuesday, November 26, 2024
55 changes · 18.0
Enhancements to existing features
Chatbot answer buttons in Live Chat now appear outside the message bubble. This makes the available responses easier to see and select, improving the visitor chat experience.
Original PR description
Moved chatbot answers buttons outside of the message bubble  task-4354009
A new link has been added in the UrbanPiper point-of-sale settings to direct users to an Odoo survey form. This makes it easier to collect the required information for UrbanPiper setup and onboarding.
Original PR description
In this commit: === - Added a link to redirect users to the Odoo survey form for gathering required details for urbanPiper. task-4350722
This change makes it easier to customize the date used when closing subscriptions. It helps businesses adapt subscription closing behavior to their own processes without changing the full closing workflow.
Original PR description
Before this commit it was not possible to change the end_date without override the whole function Since the end_date define the behavior (really closing or not) of set_close be able to easily override this behavior is handy
Resolved issues and error corrections
This fixes the live chat chatbot layout so answer buttons appear outside the message bubble as intended. The change improves readability and makes chatbot interactions look cleaner for website visitors.
Original PR description
Before this commit, chatbot answers buttons appear inside the message bubble. This happens because the new xpath target introduced in https://github.com/odoo/odoo/pull/188407 had the wrong position argument. This commit fixes the issue by changing the position to `after`. Before:  After: 
Code cleanup and technical improvements
This update cleans up automated guided test flows across several Odoo apps by removing unnecessary steps and using more realistic user interaction helpers. The change is internal, but it helps keep testing easier to maintain and better aligned with real user behavior.
Original PR description
In commit, we remove empty runs that no longer have a reason to exist. We also prefer to use tour helpers ( hover ) instead of using makeVisible functions in order to simulate user interactions as best as possible. We take advantage of this commit to remove the nextTick helper in webStudio (we no longer need it since 3bfd2e9cf8 ) https://github.com/odoo/enterprise/pull/74252
Miscellaneous changes
**task-4280164 opw-3985404** --- **[FIX] web_editor: removes figure parent of removed image** Steps to reproduce the issue: - In website, edit mode. - Drag and drop a "Picture" snippet onto the page. - Click the image in the "Picture" snippet. - Delete the image by clicking the "Remove" button in the image options. - Inspect the DOM of the "Picture" snippet. - Bug: The figure element which wrapped the image is still there. After this commit, when an image wrapped by a figure e
Original PR description
**task-4280164 opw-3985404** --- **[FIX] web_editor: removes figure parent of removed image** Steps to reproduce the issue: - In website, edit mode. - Drag and drop a "Picture" snippet onto the page.…
This fixes a timezone mismatch that could cause Odoo to incorrectly decide whether a page became outdated after a websocket disconnection. Users should see more accurate refresh warnings, reducing unnecessary confusion or missed prompts.
Original PR description
The outdated page watcher detects when the page is outdated i.e. when the autovacuum ran while the websocket was disconnected. To do so, it compares the last disconnection datetime with the last autovacuum datetime received from the server. However, last disconnected datetime is saved in UTC while value coming from the server is parsed using the default timezone. This PR fixes the issue by handling both datetime with the default timezone.
The blog author snippet now uses the stored author name instead of directly checking the author record. This prevents public website visitors from hitting permission-related issues when viewing blog posts, helping author information display consistently.
Original PR description
Author snippet previously used the author_id field on the blog post record which would run in to permission issues as public user. Used the already existing author_name field on the blog record which also seemed to be used in older versions of Odoo to bypass this permission issue. opw-4330319
The HTML editor now correctly detects when selected text has a custom font size, so users can use the remove formatting button to reset it. The toolbar also shows the correct font size when selecting all content, reducing confusion while editing formatted text.
Original PR description
**Behaviour before PR:** When a `font-size` is applied on a text, remove-format icon is disabled in toolbar when that text is selected and user is unable to reset `font-size`. This happens because in `formatSpecs` `isFormatted` method fails to get correct value in case of `setFontSizeClassName`. Same scenario is with `isFormatted` method of `fontSize`. **Behaviour after PR:** Now remove-format icon is enable when font-sized text is selected and user can remove and reset font-size of selected text. task-4263625 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Task records in Website Project will no longer log phone or company-name changes that are not useful for task history. This keeps task activity cleaner and avoids inconsistent behavior depending on which related apps are installed first.
Original PR description
Before this commit, the partner_phone field in `project.task` model is tracked because it is a related field linked to `partner_id.phone` and `phone` is tracked. Moreover, that field is also defined in `industry_fsm` module but its definition is different which could lead to unexpected behavior depending on the installation order. This commit duplicates the definition of that field from industry_fsm to website_project to make sure to not have a different behavior depending on the installation order of those modules. It also removes the tracking on `partner_company_name` since it is not really useful in task if one day `company_name` in `res.partner` model is tracked.
This fixes a visual issue in the mail area where logged notes displayed with an unnecessary border. The change makes note entries look cleaner and more consistent, improving readability without changing functionality.
Original PR description
Before / After <img width="254" alt="Screenshot 2024-11-25 at 14 23 16" src="https://github.com/user-attachments/assets/0ea6235e-ad18-4001-8c6c-31860e5d0371"> <img width="268" alt="Screenshot 2024-11-25 at 14 23 00" src="https://github.com/user-attachments/assets/efb3a21b-ce6c-4999-9aea-e67e52332011">
The sick leave relapse checkbox is now only visible to authorized time off officers. This prevents regular employees from seeing an internal payroll-related option that they should not access.
Original PR description
A checkbox to indicate if a Sick leave is a relapse of a previous sick leave was added to version 18.0. Regular users can see the checkbox when creating or viewing sick leave while the intention was for only time off officers to be able to see it. This patch fixes this issue by assigning the checkbox to the correct group. task-4354558
Fixed a layout issue in Appraisals where feedback editor buttons could appear broken when users clicked into feedback fields. This keeps the appraisal feedback experience cleaner and easier to use across screen sizes.
Original PR description
Steps ----- 1. Appraisals > Click on one or go to Configuration > Appraisal templates 2. Click on the feedback. A text 'Type "/" for commands' appears with buttons in a broken layout. Cause ----- With the new html_editor, editor buttons are descendants of `o_appraisal_input` in the DOM. Changes ----- - restrict the selector that is used to prevent overflow so it doesn't impact editor - hide the power buttons to avoid overflow when ui size is between `sm` and `md` (they are hidden automatically below `sm`) opw-4338929
This fix ensures overtime work entries are only generated when the relevant overtime setting/status allows it. It helps avoid incorrect overtime records, improving payroll and attendance accuracy for affected employees.
Original PR description
Purpose ======= The field was introduced when the overtime generation mechanism was already existing. But was included into the decision process to generate overtime work entries.
**Issue:** Two terms appear in English on an invoice. **Expected:** These terms should be translated in Spanish. **Steps to reproduce:** - Activate Accounting app in a Mexican database; - Create a customer invoice; - Send and print including the CFDI; - Open the PDF for the invoice; - The terms "Usage" and "Predial Account" appear untranslated. **Cause:** No translation have been found for these keys. **Fix:** Add Spanish translations for these terms. opw-4332513
Original PR description
**Issue:** Two terms appear in English on an invoice. **Expected:** These terms should be translated in Spanish. **Steps to reproduce:** - Activate Accounting app in a Mexican database; - Create a customer invoice; - Send and print including the CFDI; - Open the PDF for the invoice; - The terms "Usage" and "Predial Account" appear untranslated. **Cause:** No translation have been found for these keys. **Fix:** Add Spanish translations for these terms. opw-4332513
Users can now delete Data Cleaning storage records without hitting an unexpected system error. This prevents disruption during routine storage cleanup and keeps the Data Cleaning workflow reliable.
Original PR description
When the user tries to delete the storage record, A traceback will appear. Steps to reproduce the error: - Install ``data_cleaning`` module - Go to Data Cleaning > Storage > Select any record >…
When the user tries to delete the storage record,
A traceback will appear.
Steps to reproduce the error:
- Install ``data_cleaning`` module
- Go to Data Cleaning > Storage > Select any record > Actions > Delete > Delete
Traceback:
```
UndefinedTable: relation "ir_attachment_report" does not exist
LINE 1: DELETE FROM "ir_attachment_report" WHERE id IN (498, 963, 12...
^
File "odoo/http.py", line 2363, in __call__
response = request._serve_db()
File "odoo/http.py", line 1891, in _serve_db
return self._transactioning(
File "odoo/http.py", line 1954, in _transactioning
return service_model.retrying(func, env=self.env)
File "odoo/service/model.py", line 137, in retrying
result = func()
File "odoo/http.py", line 1921, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "odoo/http.py", line 2168, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
File "odoo/addons/base/models/ir_http.py", line 329, in _dispatch
result = endpoint(**request.params)
File "odoo/http.py", line 727, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "addons/web/controllers/dataset.py", line 35, in call_kw
return call_kw(request.env[model], method, args, kwargs)
File "odoo/api.py", line 517, in call_kw
result = getattr(recs, name)(*args, **kwargs)
File "odoo/models.py", line 4498, in unlink
cr.execute(SQL(
File "odoo/sql_db.py", line 354, in execute
res = self._obj.execute(query, params)
```
``ir.attachment.report`` model is ``_auto = False``.
So, a database table will not be created for the model.
When the user tries to delete the record of that model,
It will lead to the above traceback.
sentry-6073448766This update cleans up automated test flows across several Odoo apps by removing unnecessary steps and using more realistic interaction helpers. It does not change customer-facing features, but it should make internal test coverage easier to maintain and closer to real user behavior.
Original PR description
In commit, we remove empty runs that no longer have a reason to exist. We also prefer to use tour helpers ( hover ) instead of using makeVisible functions in order to simulate user interactions as best as possible. We take advantage of this commit to remove the nextTick helper in webStudio (we no longer need it since 3bfd2e9cf8 ) https://github.com/odoo/odoo/pull/187999
**task-4280164 opw-3985404** --- **[FIX] web_editor: removes figure parent of removed image** Steps to reproduce the issue: - In website, edit mode. - Drag and drop a "Picture" snippet onto the page. - Click the image in the "Picture" snippet. - Delete the image by clicking the "Remove" button in the image options. - Inspect the DOM of the "Picture" snippet. - Bug: The figure element which wrapped the image is still there. After this commit, when an image wrapped by a figure element is removed, the figure is also removed. --- **[FIX] web_editor: allows to edit events sidebar photos link** Before this commit, it was not possible to edit the link of the events sidebar photos. This occurred for 2 reasons: A - The image link option didn't work with images wrapped in a figure element. B - After fixing point A, the "href" attribute modification was ignored when saving the "/event" page. Steps to reproduce A: - Go to the "/event" page in edit mode. - Click on the 'Customize' tab and enable the sidebar. - Click a photo in the sidebar. - Bug: the URL input for setting the link is not available in the "Image" options. Steps to reproduce B (after fixing A): - Go to the "/event" page in edit mode. - Click on the 'Customize' tab and enable the sidebar. - Click a photo in the sidebar. - Edit the "Your URL" input. (e.g. [www.odoo.com](http://www.odoo.com/)) - Save the page. - Click the image with the modified link. - Bug: the new link was not saved. To fix issue B, we added the "href" attribute to the list of allowed root attributes. --- **[FIX] website_event: prevents removing sidebar photos** Steps to reproduce the issue: - Go to the "/event" page in edit mode. - Enable the sidebar. - Click a photo in the sidebar. - Click the "Delete" button in the image options. - The image is removed even though it shouldn't be allowed to remove it. This commit hide the "Delete" button for these sidebar images. --- **[FIX] website_event: fix editing of figcaption for event sidebar photos** Steps to reproduce the bug (only on Chrome): - Go to the "/event" page. - Enter edit mode. - Click the "Customize" tab and enable the "Sidebar". - Try to add a character at the end of the figcaption of the second photo in the sidebar. - Bug: it's not possible to add a new character. This requires further investigation, but the issue comes from how Chrome handles editing elements inside links. The fact that the <a> element was set to display inline caused the issue. This commit fixes the issue by setting the <a> element to display block, which is more appropriate anyway. Forward-Port-Of: odoo/odoo#186278
This commit fixes an issue where the Bill button was displayed even when early receipt printing was not enabled in the POS configuration. opw-4274728 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#184684
Original PR description
This commit fixes an issue where the Bill button was displayed even when early receipt printing was not enabled in the POS configuration. opw-4274728 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#184684
Steps to reproduce the issue: ============================= - Add a button in terms and conditions in an sale quotation - Print it as PDF - The button styles are missing Origin of the issue: ==================== After [1] the buttons are defined using css variables which are not supported by wkhtmltopdf. Solution: ========= Redefine the button styles for reports using scss variables in the same way they are done in `bootstrap_review_backend.scss` opw-4311049 [1]: https://gith
Original PR description
Steps to reproduce the issue: ============================= - Add a button in terms and conditions in an sale quotation - Print it as PDF - The button styles are missing Origin of the issue: ==================== After [1] the buttons are defined using css variables which are not supported by wkhtmltopdf. Solution: ========= Redefine the button styles for reports using scss variables in the same way they are done in `bootstrap_review_backend.scss` opw-4311049 [1]: https://github.com/odoo/odoo/commit/058212e12b5079eba870bde9775fe98f27928935 Forward-Port-Of: odoo/odoo#186907
Before this commit, if a sale order had some note lines and the rest of the lines had tax on them, there would be two lines created when applying a down payment. opw-4281589 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#187300
Original PR description
Before this commit, if a sale order had some note lines and the rest of the lines had tax on them, there would be two lines created when applying a down payment. opw-4281589 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#187300
Breadcrumb tooltips are not translated. This is because the tooltip is defined directly within props, which are not translated. This commit redefines the tooltip in a different way that allows translation. opw-4160838 Forward-Port-Of: odoo/odoo#187062 Forward-Port-Of: odoo/odoo#184555
Original PR description
Breadcrumb tooltips are not translated. This is because the tooltip is defined directly within props, which are not translated. This commit redefines the tooltip in a different way that allows translation. opw-4160838 Forward-Port-Of: odoo/odoo#187062 Forward-Port-Of: odoo/odoo#184555
### Steps to reproduce: - Install "l10n_pe_pos" - Switch to a Peruvian company and open a POS session - Sell a product with a partner specified (different from "Consumidor Final") - Try to refund the order - The partner is back to "Consumidor Final" and can't be changed ### Cause: The code supposed to put back the right partner is checking a wrong field (`this.pos.consumidorFinalAnonimoId` is undifined) so the partner is not correctly set. ### Solution: Use the correct field : `this
Original PR description
### Steps to reproduce: - Install "l10n_pe_pos" - Switch to a Peruvian company and open a POS session - Sell a product with a partner specified (different from "Consumidor Final") - Try to refund the order - The partner is back to "Consumidor Final" and can't be changed ### Cause: The code supposed to put back the right partner is checking a wrong field (`this.pos.consumidorFinalAnonimoId` is undifined) so the partner is not correctly set. ### Solution: Use the correct field : `this.pos.session._consumidor_final_anonimo_id` opw-4282195 Forward-Port-Of: odoo/odoo#187917
**Fix a bug that prevented approving allocation requests that required multiple approvers** **Steps to reproduce** 1. Create a new time off type and set `approval` to `By employee's approver and time off officer`. 2. Create a new allocation: * Use the time off type created above. * Set the number of days to 20. 3. Save the created allocation. 4. Go to `Management -> Allocations`. 5. Select the created allocation and press on the actions cog. 6. Press on `Approve Allocations`
Original PR description
**Fix a bug that prevented approving allocation requests that required multiple approvers**
**Steps to reproduce**
1. Create a new time off type and set `approval` to `By employee's approver and time off officer`.
2. Create a new allocation:
* Use the time off type created above.
* Set the number of days to 20.
3. Save the created allocation.
4. Go to `Management -> Allocations`.
5. Select the created allocation and press on the actions cog.
6. Press on `Approve Allocations`.
7. The allocation state doesn't change to `second approval`.
The action `Approve Allocations` doesn't take into account the allocations that are in the first stage of approval.
task-4207884
Forward-Port-Of: odoo/odoo#181364It is not necessary useful to prevent the event in our case, so we can just stop doing it while maintaining the same functionality. Preventing the event writes a log in the console, and we prefer to avoid having a log if we can keep the service without it. Forward-Port-Of: odoo/odoo#188418
Original PR description
It is not necessary useful to prevent the event in our case, so we can just stop doing it while maintaining the same functionality. Preventing the event writes a log in the console, and we prefer to avoid having a log if we can keep the service without it. Forward-Port-Of: odoo/odoo#188418
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#188421 Forward-Port-Of: odoo/odoo#188235
Original PR description
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#188421 Forward-Port-Of: odoo/odoo#188235
The `test_rate_limiting_base_ok` ensures that rate limiting does not activate when requests are made within the accepted delay. However, the test only waits for the exact delay duration, whereas the rate limiter expects the delay to be strictly greater than the threshold. This PR introduces a small additional wait time before each request to ensure it falls within the accepted range. It also verifies that the WebSocket (WS) remains connected at the end of the test. runbot-73027 Forward
Original PR description
The `test_rate_limiting_base_ok` ensures that rate limiting does not activate when requests are made within the accepted delay. However, the test only waits for the exact delay duration, whereas the rate limiter expects the delay to be strictly greater than the threshold. This PR introduces a small additional wait time before each request to ensure it falls within the accepted range. It also verifies that the WebSocket (WS) remains connected at the end of the test. runbot-73027 Forward-Port-Of: odoo/odoo#188461
In the overview, any user with no time off rights can go to the custom groupby filter "Leave" and see the time off type of other users. This commit hides this filter to prevent access. task-4241846 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#186597
Original PR description
In the overview, any user with no time off rights can go to the custom groupby filter "Leave" and see the time off type of other users. This commit hides this filter to prevent access. task-4241846 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#186597
Since October 2024, the Facebook mobile site (m.facebook.com) uses an 'X-Frame-Options' header set to 'deny', preventing iframe embedding across different domains. This header enforces a security policy restricting cross-origin access to the content. Meta has not provided any communication regarding this change. Until it is resolved, we have no choice but to hide the iframe on mobile to prevent users from seeing a "unavailable content" icon. Steps to reproduce: - In website edit mode. -
Original PR description
Since October 2024, the Facebook mobile site (m.facebook.com) uses an 'X-Frame-Options' header set to 'deny', preventing iframe embedding across different domains. This header enforces a security policy restricting cross-origin access to the content. Meta has not provided any communication regarding this change. Until it is resolved, we have no choice but to hide the iframe on mobile to prevent users from seeing a "unavailable content" icon. Steps to reproduce: - In website edit mode. - Drag and drop the "Facebook" snippet into the footer. - Save the page. - Open the dev tools and enable the mobile preview. - Bug: The "Facebook" snippet crashes. More info about the issue: https://developers.facebook.com/community/threads/550478830783215/ opw-4302563 opw-4309180 opw-4222359 opw-4277045 Forward-Port-Of: odoo/odoo#188200 Forward-Port-Of: odoo/odoo#186813
Using fiscal_country_codes in the invisible condition can result in the field being displayed multiple times, as multiple countries may meet the condition. Instead, we are using country_code, as it is more logical for the field to be visible only if the company is located in that specific country. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#188099
Original PR description
Using fiscal_country_codes in the invisible condition can result in the field being displayed multiple times, as multiple countries may meet the condition. Instead, we are using country_code, as it is more logical for the field to be visible only if the company is located in that specific country. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#188099
### Steps to Reproduce 1. Install i10n_il module 2. Go to Settings->Invoicing **Expected behavior:** Tax il_vat_inputs_17 (VAT inputs) is selected as default Purchase tax **Actual behavior:** Tax il_vat_self_inv_purchase (Self Invoice) is selected as default Purchase tax. This causes new Vendor Bills to be created without VAT Forward-Port-Of: odoo/odoo#186325
Original PR description
### Steps to Reproduce 1. Install i10n_il module 2. Go to Settings->Invoicing **Expected behavior:** Tax il_vat_inputs_17 (VAT inputs) is selected as default Purchase tax **Actual behavior:** Tax il_vat_self_inv_purchase (Self Invoice) is selected as default Purchase tax. This causes new Vendor Bills to be created without VAT Forward-Port-Of: odoo/odoo#186325
_*=payment_razorpay In This PR Razorpay payment onboarding form to take advantage of the Razorpay Connect Onboarding Flow. It integrates the Razorpay Onboarding using the IAP proxy. **Purpose** ======== Help users easily onboard with Razorpay by using the Razorpay Connect API. **Specification** =========== **1.Connect and authorized the razorpay account.** - To connect to a sub-merchant's Razorpay account, the application redirects the user to a Razorpay-hosted webpage. The
Original PR description
_*=payment_razorpay In This PR Razorpay payment onboarding form to take advantage of the Razorpay Connect Onboarding Flow. It integrates the Razorpay Onboarding using the IAP proxy. **Purpose**…
_*=payment_razorpay In This PR Razorpay payment onboarding form to take advantage of the Razorpay Connect Onboarding Flow. It integrates the Razorpay Onboarding using the IAP proxy. **Purpose** ======== Help users easily onboard with Razorpay by using the Razorpay Connect API. **Specification** =========== **1.Connect and authorized the razorpay account.** - To connect to a sub-merchant's Razorpay account, the application redirects the user to a Razorpay-hosted webpage. The user can approve or deny the authorisation request on this page. **2.Get an access token.** - After you obtain an access token, you can use it to access the sub-merchant data on Razorpay APIs. The access is controlled based on the scope requested for and granted by the user during the authorization process. **3.Get a refresh token.** - You can use refresh tokens to generate a new access token. If your access token expires, you will receive a 4XX response from the API. You can make a request using your refresh token to generate a new access token. **4.Revoke token.** - The API supports token revocation to enhance security and manage access. If needed, tokens can be revoked through this mechanism. **5.Create & update webhook.** - This method is responsible for creating or updating the Razorpay webhook associated with the current Odoo instance.The webhook is crucial for updating payment states within Odoo when changes occur in Razorpay. **6.Revoke the application from Razorpay.** - User can initiate the revocation of their application from the Razorpay side facilitating a seamless process for application revocation. task-3537535 Forward-Port-Of: odoo/odoo#188316 Forward-Port-Of: odoo/odoo#158578
The links created with the product_label_section_and_note_field widget won't work correctly. This commit, will change the link to the new format. This commit is a followup of odoo/odoo@98f7486 Forward-Port-Of: odoo/odoo#188403
Original PR description
The links created with the product_label_section_and_note_field widget won't work correctly. This commit, will change the link to the new format. This commit is a followup of odoo/odoo@98f7486 Forward-Port-Of: odoo/odoo#188403
When a SO is partially invoiced, and we change the 'Invoicing Switch Threshold' such that the partial invoices are before the new threshold, the SO will not take invoices into account for computation of amount to invoice / invoiced. Steps to reproduce (needs account_accountant installed): - Create a SO with a line having prod invoiced on delivery and qty 3 - Set delivered quantity to 1 - Click Create Invoice > create the draft invoice, set a date (date1) in the past - set a date2 Settin
Original PR description
When a SO is partially invoiced, and we change the 'Invoicing Switch Threshold' such that the partial invoices are before the new threshold, the SO will not take invoices into account for computation of amount to invoice / invoiced. Steps to reproduce (needs account_accountant installed): - Create a SO with a line having prod invoiced on delivery and qty 3 - Set delivered quantity to 1 - Click Create Invoice > create the draft invoice, set a date (date1) in the past - set a date2 Settings > Accounting > Invoicing Switch Threshold later than date1 - Back to the SO, set delivered quantity to 2 - Click Create Invoice > create a new invoice and confirm it Issue: Sale order amount invoiced will take into account only the latest invoice, while it should account also for the legacy invoices opw-4295531 Forward-Port-Of: odoo/odoo#188032 Forward-Port-Of: odoo/odoo#187211
# First fix Steps to reproduce: ------------------- 1. Install Project and Sales apps 2. Log in as admin user (e.g. Mitchell Admin), and create a billable project for a customer A 3. Invite user B (e.g. Marc Demo) to the project 4. Only give project (user) access rights to the user B, remove all other access rights 5. Create an SO with customer A as partner, add a service product (e.g. Junior Architect), confirm the SO and create a timesheet 6. Log in as user B, create a task in the bi
Original PR description
# First fix Steps to reproduce: ------------------- 1. Install Project and Sales apps 2. Log in as admin user (e.g. Mitchell Admin), and create a billable project for a customer A 3. Invite user B…
# First fix Steps to reproduce: ------------------- 1. Install Project and Sales apps 2. Log in as admin user (e.g. Mitchell Admin), and create a billable project for a customer A 3. Invite user B (e.g. Marc Demo) to the project 4. Only give project (user) access rights to the user B, remove all other access rights 5. Create an SO with customer A as partner, add a service product (e.g. Junior Architect), confirm the SO and create a timesheet 6. Log in as user B, create a task in the billable project from the task form, make sure customer A is set as partner 7. Save the task, an access error is raised Fix: ------------------- When creating a new task from the form, _inverse_partner_id() is called, which calls task._get_last_sol_of_customer(). As the user has no Sales access, the search of the SOL in _get_last_sol_of_customer() will raise an Access Error in such case. We add a sudo() before calling _get_last_sol_of_customer() to give the user access to the SOL we are looking for. # Second fix Steps to reproduce: ------------------- 1. Configure a user with the project > user and sales > user: own documents access rights 2. Log in with this user 3. Create a task in a billable project (e.g. for Deco Addict) 4. The compute automatically sets an SOL but the current user doesn't have access to the SOL (make sure that the user does not have access to the SOL that is set) 5. Error when trying to update the value of the SOL Fix: ------------------- We add a sudo() in _get_partner_display() to give the user access to the SO. As the user may not have access to the SO of the SOL that is currently set in the task. task-4207245 version-17.2 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#188307 Forward-Port-Of: odoo/odoo#182184
Versions -------- - 17.0+ Steps ----- 1. Have 50% discount program; 2. have a deliverable $300 product; 3. have a $10 shipping method that's free for orders over $250; 4. in eCommerce, add the $300 product to your cart; 5. go to checkout; 6. remove the automatically applied discount; 7. proceed to payment; 8. select the $10 shipping method; 9. click the "Claim" button for the 50% discount. Issue ----- Shipping is still free despite the order being below $250. Cause -----
Original PR description
Versions -------- - 17.0+ Steps ----- 1. Have 50% discount program; 2. have a deliverable $300 product; 3. have a $10 shipping method that's free for orders over $250; 4. in eCommerce, add the $300 product to your cart; 5. go to checkout; 6. remove the automatically applied discount; 7. proceed to payment; 8. select the $10 shipping method; 9. click the "Claim" button for the 50% discount. Issue ----- Shipping is still free despite the order being below $250. Cause ----- Delivery rate isn't recomputed after applying rewards. Solution -------- After applying a reward in eCommerce, update programs & rewards. If the reward isn't a payment program (gift card or eWallet), and the selected carrier has a `free_over` rule, recompute shipping costs. opw-4319533 Forward-Port-Of: odoo/odoo#188281 Forward-Port-Of: odoo/odoo#187296
After discussion with Pagero support, the BIC of the Payee must be set, therefore we add a constraint to enforce it when invoicing to Chorus Pro. opw-4139689 Forward-Port-Of: odoo/odoo#188277 Forward-Port-Of: odoo/odoo#187535
Original PR description
After discussion with Pagero support, the BIC of the Payee must be set, therefore we add a constraint to enforce it when invoicing to Chorus Pro. opw-4139689 Forward-Port-Of: odoo/odoo#188277 Forward-Port-Of: odoo/odoo#187535
Before this commit: Some logger.error(...) were ambigious and would just catch the exception to log it's error name without much details. Therefore it was wasting time trying to figure the cause of the error as we lack the traceback details After this commit: Most of them were switch to logger.exception which does add the Exception information to the logging messages automatically. Which include the error message alongside the full traceback. Log messages were also rewrote to be more
Original PR description
Before this commit: Some logger.error(...) were ambigious and would just catch the exception to log it's error name without much details. Therefore it was wasting time trying to figure the cause of the error as we lack the traceback details After this commit: Most of them were switch to logger.exception which does add the Exception information to the logging messages automatically. Which include the error message alongside the full traceback. Log messages were also rewrote to be more comprehensive than the: "An error encountered" Example of logs that would be improved: ``` 2024-11-19 07:19:50,611 1138 ERROR ? odoo.addons.hw_drivers.tools.helpers: Unable to load file: PrinterInterface_L.py 2024-11-19 07:19:50,612 1138 ERROR ? odoo.addons.hw_drivers.tools.helpers: An error encountered : (1280, 'Success') ``` Forward-Port-Of: odoo/odoo#187959 Forward-Port-Of: odoo/odoo#186162
Based on the received OXP feedback we are: * Activating cash basis by default. * All taxes are based on payment. task-4226448 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#188106
Original PR description
Based on the received OXP feedback we are: * Activating cash basis by default. * All taxes are based on payment. task-4226448 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#188106
Before this commit: duplicate words appeared in the GST state validation warning. After this commit: the duplicate words have been removed from the GST state validation warning. Forward-Port-Of: odoo/odoo#188243 Forward-Port-Of: odoo/odoo#187986
Original PR description
Before this commit: duplicate words appeared in the GST state validation warning. After this commit: the duplicate words have been removed from the GST state validation warning. Forward-Port-Of: odoo/odoo#188243 Forward-Port-Of: odoo/odoo#187986
The previously named 'Taxable Salary' for the salary rule 'GROSS' and the category 'GROSS' should be renamed in the US to 'Gross Pay'. Task: 4329661 Forward-Port-Of: odoo/enterprise#73760
Original PR description
The previously named 'Taxable Salary' for the salary rule 'GROSS' and the category 'GROSS' should be renamed in the US to 'Gross Pay'. Task: 4329661 Forward-Port-Of: odoo/enterprise#73760
The FormatAddressMixin implements a feature that will replace some parts of a view with some other when having no_address_format in the context. commit 28d8ee5ea27106bf21e5a25c3fce48d39ffed4fd partially solved the problem, but not for all the spots where we need to do a `get_view` without being parasited with the foreign tree parts. opw-4335439 Forward-Port-Of: odoo/enterprise#74529 Forward-Port-Of: odoo/enterprise#74257
Original PR description
The FormatAddressMixin implements a feature that will replace some parts of a view with some other when having no_address_format in the context. commit 28d8ee5ea27106bf21e5a25c3fce48d39ffed4fd partially solved the problem, but not for all the spots where we need to do a `get_view` without being parasited with the foreign tree parts. opw-4335439 Forward-Port-Of: odoo/enterprise#74529 Forward-Port-Of: odoo/enterprise#74257
Before this change the message was showing an out-of-date minimun amount to report info of the receptor. Also, the message is more clearly to the user: what are the cases and how to solve them Old Message  New Message  LATAM 1291 / Adhoc ticket 82478 Forward-Port-Of: odoo/enterprise#74485 F
Original PR description
Before this change the message was showing an out-of-date minimun amount to report info of the receptor. Also, the message is more clearly to the user: what are the cases and how to solve them Old Message  New Message  LATAM 1291 / Adhoc ticket 82478 Forward-Port-Of: odoo/enterprise#74485 Forward-Port-Of: odoo/enterprise#73203
Some strings weren't translatable/were missing from the pot files to be translated. Since these strings weren't translatable (i.e. no lost work), they have been updated to be more grammatically correct + understandable where useful. opw-4321317 Forward-Port-Of: odoo/enterprise#74132 Forward-Port-Of: odoo/enterprise#73854
Original PR description
Some strings weren't translatable/were missing from the pot files to be translated. Since these strings weren't translatable (i.e. no lost work), they have been updated to be more grammatically correct + understandable where useful. opw-4321317 Forward-Port-Of: odoo/enterprise#74132 Forward-Port-Of: odoo/enterprise#73854
The Indian government has revised the threshold limit for reporting inter-state invoices of unregistered customers in GSTR-1 from ₹250,000 to ₹100,000. With this PR, the threshold limits for unregistered customers (B2CL, B2CS, and CDNUR) are updated based on the invoice date: -For invoices dated before November 2024, the limit remains ₹250,000. -For invoices dated November 2024 or later, the limit is reduced to ₹100,000. task-4170878 Forward-Port-Of: odoo/enterprise#74557 Forward-Port-O
Original PR description
The Indian government has revised the threshold limit for reporting inter-state invoices of unregistered customers in GSTR-1 from ₹250,000 to ₹100,000. With this PR, the threshold limits for unregistered customers (B2CL, B2CS, and CDNUR) are updated based on the invoice date: -For invoices dated before November 2024, the limit remains ₹250,000. -For invoices dated November 2024 or later, the limit is reduced to ₹100,000. task-4170878 Forward-Port-Of: odoo/enterprise#74557 Forward-Port-Of: odoo/enterprise#72446
### Steps to reproduce: - Install Data Cleaning and Helpdesk modules - Create 2 Helpdesk tickets with conditions: - at least 1 helpdesk ticket has an SLA policy and is in a stage excluded by the SLA policy - at least 1 helpdesk ticket doesn't have an SLA deadline and has an SLA policy and is also in a stage excluded by the SLA policy - Merge those 2 tickets - Notice a traceback pops-up ### Current behavior before PR: In this commit https://github.com/odoo/enterprise/pull/69352/
Original PR description
### Steps to reproduce: - Install Data Cleaning and Helpdesk modules - Create 2 Helpdesk tickets with conditions: - at least 1 helpdesk ticket has an SLA policy and is in a stage excluded by the SLA…
### Steps to reproduce: - Install Data Cleaning and Helpdesk modules - Create 2 Helpdesk tickets with conditions: - at least 1 helpdesk ticket has an SLA policy and is in a stage excluded by the SLA policy - at least 1 helpdesk ticket doesn't have an SLA deadline and has an SLA policy and is also in a stage excluded by the SLA policy - Merge those 2 tickets - Notice a traceback pops-up ### Current behavior before PR: In this commit https://github.com/odoo/enterprise/pull/69352/commits/97e83104dad816a7a65345dea74a66e5dbea94cb a new merge method was introduced but in the new file we created we are importing datetime from datetime and then using datetime.datetime and since we are already importing the sepcific class we don't need to call it like module.class.method ### Desired behavior after PR is merged: We are calling the method directly from the class without using the module before the call so it is only datetime.max opw-4330793 Forward-Port-Of: odoo/enterprise#74383
This draft change touches the Belgian reporting area, but the provided details only indicate a generic message update. Based on the available information, it appears to be a minor internal change with limited business impact.
## [IMP] hr_payroll_expense: Add Error when no expense rule is found This commit improves "expenses to be reimbursed in a payslip "config Before this commit: There was no way for a user to know if a payslip set to be reimbursed in a payslip would never be due to a bad configuration. After this commit: The user now gets an error when choosing to reimburse an expense through a payslip, asking to first setup a proper rule. task-id: 4273421 ## [IMP] hr_payroll_expense: Add a test
Original PR description
## [IMP] hr_payroll_expense: Add Error when no expense rule is found This commit improves "expenses to be reimbursed in a payslip "config Before this commit: There was no way for a user to know if a payslip set to be reimbursed in a payslip would never be due to a bad configuration. After this commit: The user now gets an error when choosing to reimburse an expense through a payslip, asking to first setup a proper rule. task-id: 4273421 ## [IMP] hr_payroll_expense: Add a test ensuring no sheet if no rule In https://github.com/odoo/enterprise/commit/6e4a94f530643a9ad7b461d49e149a339bc6a341, the issue of expense sheets being linked to payslips whose structure missed an expense ruled was resolved, but no test was added. This adds a test covering this case, to make sure it never happens again Forward-Port-Of: odoo/enterprise#72912
A CP200 employee may be eligible for exoneration based on the number of dependent children they have. This change: * Takes the value of exoneration into account in the computation of termination fees withholding taxes. * Refactors the computation of withholding taxes for `double holiday pay`, `13th month` and `termination fees` into one function. task-3909012 Forward-Port-Of: odoo/enterprise#73931 Forward-Port-Of: odoo/enterprise#73557
Original PR description
A CP200 employee may be eligible for exoneration based on the number of dependent children they have. This change: * Takes the value of exoneration into account in the computation of termination fees withholding taxes. * Refactors the computation of withholding taxes for `double holiday pay`, `13th month` and `termination fees` into one function. task-3909012 Forward-Port-Of: odoo/enterprise#73931 Forward-Port-Of: odoo/enterprise#73557
### Steps to reproduce: - Install "l10n_cl_edi_pos" - Create a new company with the Chilian localization - Do not add a VAT number - Go to POS, create an order and validate - The date is not displayed on the ticket ### Cause: The localization is moving the date from the bottom of the receipt to the header but the conditions are not the same: - If the country of the company is Chile then date is removed from the bottom - If the company has a Chilian VAT the date is shown in the header
Original PR description
### Steps to reproduce: - Install "l10n_cl_edi_pos" - Create a new company with the Chilian localization - Do not add a VAT number - Go to POS, create an order and validate - The date is not displayed on the ticket ### Cause: The localization is moving the date from the bottom of the receipt to the header but the conditions are not the same: - If the country of the company is Chile then date is removed from the bottom - If the company has a Chilian VAT the date is shown in the header So there is a case where none of the conditions are True and the date does not show. ### Solution: Add a condition on the VAT to delete the date from the bottom. opw-4330252 Forward-Port-Of: odoo/enterprise#74245
In studio, click on Edit Menu in the main navbar. Add a menu or edit the name of a menu. Click Confirm Before this commit, the hierarchical list of the menu editor was not updated. This was due to the fact that studio's dialog service is altered to allow it to have the specific studio sub environment It is that way since 2ae63d9a43ba973d905232105201d88e423a8245 As a consequence, the "menu changed" event triggerd by the menu service on the main environment's bus was not forwarded to to studi
Original PR description
In studio, click on Edit Menu in the main navbar. Add a menu or edit the name of a menu. Click Confirm Before this commit, the hierarchical list of the menu editor was not updated. This was due to the fact that studio's dialog service is altered to allow it to have the specific studio sub environment It is that way since 2ae63d9a43ba973d905232105201d88e423a8245 As a consequence, the "menu changed" event triggerd by the menu service on the main environment's bus was not forwarded to to studio's env's bus. After this commit, the hierarchical list is updated correctly task-4001101 Forward-Port-Of: odoo/enterprise#74354
Steps to reproduce: - Install both hr_contract_salary and l10n_hk_Hr_payroll - Try to review a contract in recruitment Current behaviour: - Exception raised Expected behaviour: - No exception raised Explanation: - Internet allowance is based on employee actual work days. However, for candidate who hasn't join the company, they won't have any work days. Therefore the salary internet rules prorata_rate will be divided by zero, and raised exceptions. X-original-commit: f9e7
Original PR description
Steps to reproduce: - Install both hr_contract_salary and l10n_hk_Hr_payroll - Try to review a contract in recruitment Current behaviour: - Exception raised Expected behaviour: - No exception raised Explanation: - Internet allowance is based on employee actual work days. However, for candidate who hasn't join the company, they won't have any work days. Therefore the salary internet rules prorata_rate will be divided by zero, and raised exceptions. X-original-commit: f9e7d39 Forward-Port-Of: odoo/enterprise#73630
### Steps to reproduce the issue: 1. Create an Invoice with "ODOO_BUG" as payment reference 2. Create a Bank Transaction with the same amount and customer as the Invoice and "ODOO_BUG" as Label 3. The Transaction and the Invoice are automatically matched 4. Create an Invoice with "ODOO BUG" as payment reference 5. Create a Bank Transaction with the same amount and customer as the Invoice and "ODOO BUG" as label 6. The Transaction and the Invoice are not automatically matched ### Expla
Original PR description
### Steps to reproduce the issue: 1. Create an Invoice with "ODOO_BUG" as payment reference 2. Create a Bank Transaction with the same amount and customer as the Invoice and "ODOO_BUG" as Label 3.…
### Steps to reproduce the issue: 1. Create an Invoice with "ODOO_BUG" as payment reference 2. Create a Bank Transaction with the same amount and customer as the Invoice and "ODOO_BUG" as Label 3. The Transaction and the Invoice are automatically matched 4. Create an Invoice with "ODOO BUG" as payment reference 5. Create a Bank Transaction with the same amount and customer as the Invoice and "ODOO BUG" as label 6. The Transaction and the Invoice are not automatically matched ### Explanation: When evaluating `st_line_text_values` in `_get_invoice_matching_st_line_tokens`, the values are split at every whitespace. When trying to find `account.move.line` that match the tokens resulting from the operations, every `name`, `move_id.name` or `move_id.ref` with a whitespace in it will not be recognized due to the whitespaces being removed from the `account.bank.statement.line` side. ### Fix reasoning: From a business perspective, no Invoice/Payment/Bill reference should have a space in it bar some already covered exceptions. To avoid performance heavy queries, the text value will simply be added to `exact_tokens` and treated as such, allowing for an automatical reconciliation between an `account.move.line` and an `account.bank.statement.line` if their refs match perfectly. opw-4114296 Forward-Port-Of: odoo/enterprise#71431
### Steps to reproduce the issue: 1. Activate Mexican Localization 2. With a Mexican Company, create an Invoice and add a Product with a valid UNSPSC code 3. On the Invoice Line, set Price to 1030.17 and add a 3% Discount 4. Confirm then Send & Print (with CFDI checked) 5. In the generated XML, the following values are off: - In node "Comprobante, SubTotal="1030.16" Descuento="30.90" - In node "Concepto", ValorUnitario="1030.16" Importe="1030.16" Descuento="30.90" - Expecte
Original PR description
### Steps to reproduce the issue: 1. Activate Mexican Localization 2. With a Mexican Company, create an Invoice and add a Product with a valid UNSPSC code 3. On the Invoice Line, set Price to 1030.17…
### Steps to reproduce the issue:
1. Activate Mexican Localization
2. With a Mexican Company, create an Invoice and add a Product with a valid UNSPSC code
3. On the Invoice Line, set Price to 1030.17 and add a 3% Discount
4. Confirm then Send & Print (with CFDI checked)
5. In the generated XML, the following values are off:
- In node "Comprobante, SubTotal="1030.16" Descuento="30.90"
- In node "Concepto", ValorUnitario="1030.16" Importe="1030.16" Descuento="30.90"
- Expected are 1030.17 and 30.91
### Explanation:
During the calculation of the values for the CFDI, `gross_price_subtotal_before_discount` is calculated using `price_subtotal` in every case where `discount` is not 100%. This is due to other values affecting `price_subtotal` (e.g.: taxes with `price_include=True`), in which case calculating a value related to `price_subtotal` with `price_unit` would give the wrong result.
This calculation method causes rounding issues such as above because `price_subtotal` is rounded before calculating `gross_price_subtotal_before_discount`.
### Fix reasoning:
We need to account for any value that could affect `price_subtotal` and make it different from `price_unit * quantity` except for `discount`, which will be included when comparing both values.
The case `discount == 100.0` is covered by this new condition as well, since `discount_factor` would equal to 0 and `price_subtotal` too.
opw-4183556
Forward-Port-Of: odoo/enterprise#72593Issue ----- With helpdesk_fsm installed, uninstall helpdesk_fsm or any module that will trigger its uninstallation (e.g. helpdesk): Error: ``` in fields.py: fields = records.pool.field_computed[self] KeyError: 'helpdesk.team.fsm_project_id' ``` Cause ----- Issue since 1da1467115726263e5cdc50354b4413f8bb7ca7d and the addition of `use_fsm` as a dependency of `_compute_fsm_project_id` When we uninstall any helpdesk module, we set to False the associated fields of all helpdesk team
Original PR description
Issue ----- With helpdesk_fsm installed, uninstall helpdesk_fsm or any module that will trigger its uninstallation (e.g. helpdesk): Error: ``` in fields.py: fields = records.pool.field_computed[self]…
Issue ----- With helpdesk_fsm installed, uninstall helpdesk_fsm or any module that will trigger its uninstallation (e.g. helpdesk): Error: ``` in fields.py: fields = records.pool.field_computed[self] KeyError: 'helpdesk.team.fsm_project_id' ``` Cause ----- Issue since 1da1467115726263e5cdc50354b4413f8bb7ca7d and the addition of `use_fsm` as a dependency of `_compute_fsm_project_id` When we uninstall any helpdesk module, we set to False the associated fields of all helpdesk teams (mapped in `_get_field_modules`) for all uninstalled modules. https://github.com/odoo/enterprise/blob/9fba5f841c3c0710eb0cce00263bf914dac03dc6/helpdesk/models/ir_module.py#L13-L16 The change of `use_fsm` means `fsm_project_id` is marked as a field to be recomputed. This happens at some point during a `flush_all`, but after the field has been deleted in DB and a new registry has been loaded without that field. Change ----- Force a recomputation by flushing the records. opw-4338172 opw-4339801 Forward-Port-Of: odoo/enterprise#74255
Steps to reproduce ================== - Install crm,web_studio - Enable leads - Go to CRM > Configuration > Sales Team - Open the first record - Uncheck Pipeline and Leads - Go to CRM > Sales > Teams - Open studio => Undefined graph model for Sales Team: Pre-Sales Cause of the issue ================== The window action uses the following domain `[["use_opportunities", "=", true]]` It is not used from within studio. opw-4285413 Forward-Port-Of: odoo/enterprise#74397 Forwar
Original PR description
Steps to reproduce ================== - Install crm,web_studio - Enable leads - Go to CRM > Configuration > Sales Team - Open the first record - Uncheck Pipeline and Leads - Go to CRM > Sales > Teams - Open studio => Undefined graph model for Sales Team: Pre-Sales Cause of the issue ================== The window action uses the following domain `[["use_opportunities", "=", true]]` It is not used from within studio. opw-4285413 Forward-Port-Of: odoo/enterprise#74397 Forward-Port-Of: odoo/enterprise#74091