Friday, April 4, 2025
13 changes · 17.0
Enhancements to existing features
The Planning app now removes an unnecessary “Edit” label when users update recurring shifts. This makes the screen clearer and reduces visual clutter without changing how scheduling works.
Original PR description
This commit removes the 'Edit' label from the editting of recurrency shift in planning view. This aims to remove unnecessary information and better clarity. task-id: 4485233
Resolved issues and error corrections
Alternative products with a zero price are now shown on eCommerce product pages even when the website blocks sales of zero-priced items. This helps businesses keep related products visible to shoppers while still preventing checkout for items that cannot be sold.
Original PR description
Versions -------- - 17.0+ Steps ----- 1. Configure website to prevent sale of zero-priced products; 2. add a zero-priced product as an alternative product to a product; 3. open the product in eCommerce. Issue ----- The alternative products block with the zero-priced product isn't shown. Cause ----- The `_get_products_alternative_products` method filters out zero-priced products out of its end result. It is the only snippet filter to do this. Solution -------- Don't filter out zero-priced products, as users may still want those products to be visible, even if not available for sale. opw-4443410
Miscellaneous changes
Reproduce: 1. Make a scored live session survey 2. Add a single choice question with a <0.5 point answer (or < 1 with speed reward) 3. Create a live session 4. Join with one participant 5. Play the survey, have the participant answer correctly (after half the time for speed reward if that case is tested) 6. Proceed to leaderboard and expect a crash. This happens because when `max_score` or `max_score_question` are <= 0.5, divisions by round(<=.5) are divisions by 0. Using 3 digits fo
Original PR description
Reproduce: 1. Make a scored live session survey 2. Add a single choice question with a <0.5 point answer (or < 1 with speed reward) 3. Create a live session 4. Join with one participant 5. Play the survey, have the participant answer correctly (after half the time for speed reward if that case is tested) 6. Proceed to leaderboard and expect a crash. This happens because when `max_score` or `max_score_question` are <= 0.5, divisions by round(<=.5) are divisions by 0. Using 3 digits for rounding has two advantages: * It is very unlikely that an answer will have a value below 0.0006 (not 0 - that case is supported- but rounds to 0). * It makes the template resilient to differences in precisions used for the various numbers (relevant in 17.4 where `answer_score` and `scoring_total` can be different by <0.01). Task-4655784 Forward-Port-Of: odoo/odoo#203988
Delivery slips no longer show the same product name twice when a product has custom attributes or customer-specific values. This makes delivery documents clearer and more professional for customers and warehouse teams.
Original PR description
Versions -------- - 17.0+ Steps ----- 1. Have a product with a custom attribute; 2. create a sales order with the product; 3. enter a value for the customer product; 4. confirm order & go to delivery; 5. print delivery slip. Issue ----- The product's name is displayed twice. Cause ----- The product's name is used as default description. There is currently logic in place to prevent duplicate printing if there's an exact match. If the product has certain attributes, they will get added to the description, making the strings no longer equal. Solution -------- Instead of checking for exact matches, use `startswith` and `removeprefix` to remove the duplicate product name from the description. opw-4637449
This fixes the website Tabs snippet so that when an active tab is removed, another available tab is selected automatically instead of leaving an empty content area. It also corrects vertical tab spacing and prevents removing tab items in a way that bypasses the intended add/remove controls.
Original PR description
Steps to reproduce: - Enter website edit mode. - Drag and drop the Tabs snippet onto the page. - Click on the third tab to activate it. - Click the minus (-) button to remove the tab. - No other tab is activated after removal, leaving the tab content area empty. This commit ensures that if a tab is removed, the next available tab is activated automatically. This commit fixes another minor issue: When the direction option is set to "vertical", the expected vertical padding was not applied due to an incorrect selector.
**Problem**: Commit [f523cb8](https://github.com/odoo/odoo/commit/f523cb85174687856d2c93fbc3c2f52a307f6761) did not properly handle background images, leading to issues when retrieving the correct attachment source. **Solution**: Use `el.dataset.bgSrc` to get the correct attachment source for background images. **Steps to reproduce**: 1. Add a "Banner" block. 2. Update the image. 3. Save. - **Issue**: image lost. **opw-4686236** --- I confirm I have signed the CLA and read
Original PR description
**Problem**: Commit [f523cb8](https://github.com/odoo/odoo/commit/f523cb85174687856d2c93fbc3c2f52a307f6761) did not properly handle background images, leading to issues when retrieving the correct attachment source. **Solution**: Use `el.dataset.bgSrc` to get the correct attachment source for background images. **Steps to reproduce**: 1. Add a "Banner" block. 2. Update the image. 3. Save. - **Issue**: image lost. **opw-4686236** --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204662
Versions -------- - 16.0+ Steps ----- 1. Have a payment token saved via Flutterwave; 2. use token to pay for an order. Issue ----- Error: Provide a valid redirect url Cause ----- Flutterwave now mandates authorization for tokenized flows. They provide an authorization url for this, and expect to receive a redirect url value to return to afterwards. Solution -------- Solution partially based on the Ogone redirect flow added in 0ed92bcc9791 The authorization url is provid
Original PR description
Versions -------- - 16.0+ Steps ----- 1. Have a payment token saved via Flutterwave; 2. use token to pay for an order. Issue ----- Error: Provide a valid redirect url Cause ----- Flutterwave now mandates authorization for tokenized flows. They provide an authorization url for this, and expect to receive a redirect url value to return to afterwards. Solution -------- Solution partially based on the Ogone redirect flow added in 0ed92bcc9791 The authorization url is provided in the notification data. Store this in the `provider_reference` field if the transaction is pending. When processing the pending transaction, initiate a redirect flow, which redirects the user to the authorization url. opw-4669110 Forward-Port-Of: odoo/odoo#204322
Improve references computation, notably when message history consists mainly in note-like messages (tracking with subtypes, ...). After odoo/odoo#197127 threads are split in email readers are references are missing. Task-4677717 Forward-Port-Of: odoo/odoo#203739
Original PR description
Improve references computation, notably when message history consists mainly in note-like messages (tracking with subtypes, ...). After odoo/odoo#197127 threads are split in email readers are references are missing. Task-4677717 Forward-Port-Of: odoo/odoo#203739
Purpose ======= The Indian government updated its UOM code https://einvoice1.gst.gov.in/Others/MasterCodes (select UQC Codes) So In this commit, I have updated `l10n_in_code` in UOM Mili Meter and Square Foot. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204598
Original PR description
Purpose ======= The Indian government updated its UOM code https://einvoice1.gst.gov.in/Others/MasterCodes (select UQC Codes) So In this commit, I have updated `l10n_in_code` in UOM Mili Meter and Square Foot. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204598
Currently, a traceback occurs when the user tries to send multiple invoices to sign in the list view, which includes draft invoices. Error:- ``` TypeError: the JSON object must be str, bytes or bytearray, not bool ``` Cause:- When the user resets an Egyptian invoice to draft status, the value of `l10n_eg_eta_json_doc_id` is set to False as seen in the following line https://github.com/odoo/odoo/blob/26d8a505ab540dfff3ee20e9c83f43b61dc743a8/addons/l10n_eg_edi_eta/models/accoun
Original PR description
Currently, a traceback occurs when the user tries to send multiple invoices to sign in the list view, which includes draft invoices. Error:- ``` TypeError: the JSON object must be str, bytes or…
Currently, a traceback occurs when the user tries to send multiple invoices to sign in the list view, which includes draft invoices. Error:- ``` TypeError: the JSON object must be str, bytes or bytearray, not bool ``` Cause:- When the user resets an Egyptian invoice to draft status, the value of `l10n_eg_eta_json_doc_id` is set to False as seen in the following line https://github.com/odoo/odoo/blob/26d8a505ab540dfff3ee20e9c83f43b61dc743a8/addons/l10n_eg_edi_eta/models/account_move.py#L66-L67 After that when the user attempts to sign the document through the list view, it leads to the traceback. This happens because we are passing self instead of the invoices to the method `action_sign_invoices`. https://github.com/odoo/odoo/blob/26d8a505ab540dfff3ee20e9c83f43b61dc743a8/addons/l10n_eg_edi_eta/models/account_move.py#L73 https://github.com/odoo/odoo/blob/26d8a505ab540dfff3ee20e9c83f43b61dc743a8/addons/l10n_eg_edi_eta/models/account_move.py#L106 As a result, self contains all draft invoices (if selected by the user), leading to the traceback since the value of l10n_eg_eta_json_doc_id is False for the reset draft invoice. https://github.com/odoo/odoo/blob/26d8a505ab540dfff3ee20e9c83f43b61dc743a8/addons/l10n_eg_edi_eta/models/eta_thumb_drive.py#L34-L35 sentry-6448238266 Forward-Port-Of: odoo/odoo#203064
The domain was syntactically wrong. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204532
Original PR description
The domain was syntactically wrong. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#204532
We need to inform if the INV will be paid in foreign currency when the INV is issued in foreign currency. For this, we cameup with a proposal to cover all possible scenarios: * Global setting for all YES (payments in foreign currency) * Global setting for all NO (payments in local currency) * Depending on the AR account (depending on the configured AR account, the payment will be in foreign or local currency, and this AR account can be configured per partner if desired) This gives the
Original PR description
We need to inform if the INV will be paid in foreign currency when the INV is issued in foreign currency. For this, we cameup with a proposal to cover all possible scenarios:
* Global setting for all YES (payments in foreign currency)
* Global setting for all NO (payments in local currency)
* Depending on the AR account (depending on the configured AR account, the payment will be in foreign or local currency, and this AR account can be configured per partner if desired) This gives the user the flexibility to choose and take into account the different possible scenarios we discussed with AdHoc (AR Partner).
Latam Task 1300 / Adhoc task 47476
Forward-Port-Of: odoo/enterprise#79297According to the DATEV Format documentation, the VAT needs to be split into two columns instead of one. The first column being the country code (ISO 3166), and the second one being the remaining numbers. task-4600047 runbot : https://runbot.odoo.com/runbot/bundle/16-0-datev-export-roto-352476 Forward-Port-Of: odoo/enterprise#80843
Original PR description
According to the DATEV Format documentation, the VAT needs to be split into two columns instead of one. The first column being the country code (ISO 3166), and the second one being the remaining numbers. task-4600047 runbot : https://runbot.odoo.com/runbot/bundle/16-0-datev-export-roto-352476 Forward-Port-Of: odoo/enterprise#80843