Wednesday, October 30, 2024
31 changes · saas-17.4
Resolved issues and error corrections
Fixes when discounted prices are shown in the online store so the crossed-out comparison price is only displayed when it is actually higher than the price customers see. This prevents confusing cases where the original price appeared lower than the current tax-included price.
Original PR description
Previously, we compared the `compare_list_price` to the tax-excluded price to know whether to show a strikethrough price. However, if eCommerce was set up to show the tax-included price, we would sometimes show a strikethrough price that was smaller than the actual price (if `tax_excluded_price < compare_list_price and tax_included_price > compare_list_price`). This change compares the `compare_list_price` to the price actually shown on eCommerce. Partial backport of c5c2916a14bdc13b492f16e515c9231295607121
Fixes an issue where sliding an image gallery or similar carousel in the website editor could create unnecessary undo history entries. This keeps the editing history cleaner and makes undo behavior more predictable for website editors.
Original PR description
Since commit [1], sliding the `s_image_gallery` snippet, as well as any carousel not having the "Carousel" and "Carousel Item" options, should not add steps in the history. This was done by filtering…
Since commit [1], sliding the `s_image_gallery` snippet, as well as any carousel not having the "Carousel" and "Carousel Item" options, should not add steps in the history. This was done by filtering the mutations records: all the class and attribute changes related to the sliding of these specific carousels are now ignored. However, since commit [2], which fixed the auto-slide behavior of the carousels, an `o_carousel_sliding` class is now added on the `.carousel` element during the slide. The issue is that this class was not added in the list of classes to ignore when filtering the mutations, which therefore made this class addition/removal add a step in the history. This commit fixes that by considering this class. Note that this fix was already made in upper versions, when forward-porting commit [1]. [1]: https://github.com/odoo/odoo/commit/509e78dcf786581a345913e76f6da72af6baec0b [2]: https://github.com/odoo/odoo/commit/9eff9ae1904e0583f5dc60c6d925c52b48b208ec task-3744613
Product images on the online shop could show stray ribbon shadows even when no ribbon was meant to appear, visually cropping the image corner. This fix hides those empty shadows so product tiles display cleanly and consistently.
Original PR description
In 17.4, the `o_ribbon_right` class was applied to all product ribbons on the shop page, causing empty ribbon shadows to overlap and crop the top-right corner of product images. This CSS rule (`display: none`) hides shadows on empty ribbons, preventing overlap. This approach matches the fix in later versions to avoid layout issues. This is done already in the v18 with this commit https://github.com/odoo/odoo/commit/b5b8a133eb67f01cabec01a1dc874e8a27a3bb46#diff-f338780f594d6b1f46eda5d3fb9fed86f3c3c8f65522fb93e639534e9d92cdb2R1832 opw-4190631
This change adds clearer debug logging for the bus service's browser connection worker, making it easier for support and developers to understand connection behavior across tabs and browsers. It does not change end-user functionality, but should reduce investigation time when real-time updates or WebSocket connections need troubleshooting.
Original PR description
The bus service uses a shared worker to reduce the number of connections to the server. However, debugging the worker state can be challenging. If the shared worker is opened later, the WebSocket does not appear in the network tab. Additionally, the worker manages multiple tab and network states, which are not easy to visualize. This commit adds debug logs to the WebSocket worker to track communication between the client and worker, as well as between the worker and server. The log is done by each tab because Safari does not provide devtools for the shared worker. As a result, logs would be unreachable. It's easier to access the logs from the tab devtools.
The checkout placeholder for entering a customized product option is now included in the website sales translation files. This ensures shoppers using optional products see the prompt in their selected language, improving consistency for multilingual storefronts.
Original PR description
When you choose to add a free text value to a variant of the optional products at checkout, you will encounter a placeholder that is not translated: "Enter a customized value". This is because it's defined only in `sale` module, which is not a frontend module. This commit adds the untranslated text to the frontend module: website_sale. Task-4229289
Appointment users can now select up-front payment products that create project tasks, which were previously hidden by mistake. The change keeps unsuitable event-related products excluded while restoring valid service products, reducing setup friction for appointment payments.
Original PR description
In the Appointment app, when trying to select an "Up-front payment product," products configured to create a task in a project are not available in the dropdown list. Cause of the issue: In the `appointment_type` model definition within the `appointment_account_payment` module, a domain was applied on the `product_id` field, restricting the selectable products. The domain filtered out products with the `service_tracking` field set to values other than `"no"`. As a result, products that create tasks in projects (which have `service_tracking` set to `"task_global_project"`) were excluded. The commit https://github.com/odoo/enterprise/commit/ff54ff6cbdf79b1c24c468b5238d8eeb91e85cb9 aim was to prevent `event` and `event_booth` product to be selectable. This commit allows other product whose `service_tracking != 'no'` to be selectable while not allowing `event` and `event_booth`. opw-4146731
Miscellaneous changes
Use normalized emails for comparison to avoid issues linked to formatting. Task-4281171: [mail] {email/smtp}_from normalized comparison Forward-Port-Of: odoo/odoo#185766 Forward-Port-Of: odoo/odoo#185749
Original PR description
Use normalized emails for comparison to avoid issues linked to formatting.
Task-4281171: [mail] {email/smtp}_from normalized comparison
Forward-Port-Of: odoo/odoo#185766
Forward-Port-Of: odoo/odoo#185749[IMP] l10n_es: Add new tax grid for es *Create a new tax grid mod390[110] *Add this tax grid to all taxes in l10n_es on Distribution lines that already have mod303[120] *Make the modelo 390 use that tax grid on the line 110 task-4058894 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#175354
Original PR description
[IMP] l10n_es: Add new tax grid for es *Create a new tax grid mod390[110] *Add this tax grid to all taxes in l10n_es on Distribution lines that already have mod303[120] *Make the modelo 390 use that tax grid on the line 110 task-4058894 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#175354
Steps to reproduce (on runbot): 1. enable "extra hours" and add extra hours to an employee 2. as an admin go to management > time off 3. make a new time off and choose "extra hours" as the time off type 4. The duration of extra hours is duplicated The issue happens because the form view inherits two identical views. This commit removes the unnecessary view. task-4102491 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/o
Original PR description
Steps to reproduce (on runbot): 1. enable "extra hours" and add extra hours to an employee 2. as an admin go to management > time off 3. make a new time off and choose "extra hours" as the time off type 4. The duration of extra hours is duplicated The issue happens because the form view inherits two identical views. This commit removes the unnecessary view. task-4102491 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#180568 Forward-Port-Of: odoo/odoo#176929
On a stock move, when using a lot from a sub-location, the created SML will still start from SM's source location instead of lot's location To reproduce the issue: 1. In Settings, enable "Storage Locations" 2. Create a tracked-by-sn product P 3. Update its qty: - SN01 at WH/Stock - SN02 at WH/Stock/Shelf 1 4. Confirm a delivery with 1 x P 5. Enable the column "Serial Number" - SN01 should be present 6. Remove SN01, set SN02 7. Validate the transfer 8. Open the detailed op
Original PR description
On a stock move, when using a lot from a sub-location, the created SML will still start from SM's source location instead of lot's location To reproduce the issue: 1. In Settings, enable "Storage…
On a stock move, when using a lot from a sub-location, the created SML will still start from SM's source location instead of lot's location To reproduce the issue: 1. In Settings, enable "Storage Locations" 2. Create a tracked-by-sn product P 3. Update its qty: - SN01 at WH/Stock - SN02 at WH/Stock/Shelf 1 4. Confirm a delivery with 1 x P 5. Enable the column "Serial Number" - SN01 should be present 6. Remove SN01, set SN02 7. Validate the transfer 8. Open the detailed operations Result: SN02 has been taken from WH/Stock, but the user probably wanted to use the existing one, in WH/Stock/Shelf 1. An onchange already exists to make sure that the user is not using a lot that already exists somewhere else. Before Odoo 17.2, we were considering the sub locations as not expected: https://github.com/odoo/odoo/blob/d5a7a3d02e3e2b4e47977abc8b9fc0d5d6135937/addons/stock/models/stock_move.py#L1167 But since Odoo 17.2 (via [1]), we now also accept the sub locations: https://github.com/odoo/odoo/blob/60b0bafc8abd1893c9cdd9913617c234692369cf/addons/stock/models/stock_move.py#L1242 This is a bit confusing because we don't display any warning anymore, but we don't select the correct source location neither. The commit should help the user and avoid that confusion [1] https://github.com/odoo/odoo/commit/99b39b72c7e65e85af6f06dcb6b02867623f3f69 OPW-4231749 Forward-Port-Of: odoo/odoo#185796
Currently, when the stock scheduler is run, a new cursor is created and the result is rolled back even if all tasks succeeded. Even though tasks themselves are not rolled back because they are run using new other cursors, rolling it back is not correct and it makes harder to test the scheduler feature. The rollback was introduced in da6bd90e by mistake. This commit makes the transaction to be rolled back only when the current transaction actually failed. --- I confirm I have signe
Original PR description
Currently, when the stock scheduler is run, a new cursor is created and the result is rolled back even if all tasks succeeded. Even though tasks themselves are not rolled back because they are run using new other cursors, rolling it back is not correct and it makes harder to test the scheduler feature. The rollback was introduced in da6bd90e by mistake. This commit makes the transaction to be rolled back only when the current transaction actually failed. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#175621
In 865baf9ef154e2a36817e40a50e09d5e98cf95f9, makeAsyncHandler has been incorrectly modified so that the promise rejection is consumed by the catch, instead of letting it bubble up through a finally. Indeed, contrarily to makeButtonHandler, makeAsyncHandler doesn't create a new Promise object. This means that the finally is applied on the result itself. In makeButtonHandler, the then handler returns a new Promise that is different from result, but that will be rejected if result is rejected.
Original PR description
In 865baf9ef154e2a36817e40a50e09d5e98cf95f9, makeAsyncHandler has been incorrectly modified so that the promise rejection is consumed by the catch, instead of letting it bubble up through a finally. Indeed, contrarily to makeButtonHandler, makeAsyncHandler doesn't create a new Promise object. This means that the finally is applied on the result itself. In makeButtonHandler, the then handler returns a new Promise that is different from result, but that will be rejected if result is rejected. This is why in this case we need to hide that extra rejection by swallowing it in the onRejected argument, instead of using a finally. Task-Id: None Forward-Port-Of: odoo/odoo#185034 Forward-Port-Of: odoo/odoo#183894
**Behaviour before PR:** In chatGPT prompt dialog, scroll position is not set to the latest message automatically after hitting 3-4 prompts. User has to scroll to bottom manually. **After this PR:** This commit aims to make sure that the scroll postion is set to the latest message after submitting prompt. task-4256085 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#185602 Forward-Port-Of: odoo/odoo#183862
Original PR description
**Behaviour before PR:** In chatGPT prompt dialog, scroll position is not set to the latest message automatically after hitting 3-4 prompts. User has to scroll to bottom manually. **After this PR:** This commit aims to make sure that the scroll postion is set to the latest message after submitting prompt. task-4256085 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#185602 Forward-Port-Of: odoo/odoo#183862
Steps to reproduce: - New Project > New Task > Timesheet 10h on task - New subtask on task > Timesheet 5h on subtask - Reporting > Tasks Analysis Remaining hours are computed incorrectly, when no allocated hours are set on a task, we have null values in database that prevent the computation of allocated_hours and remaining_hours which also messes up the project totals. The computation of remaining hours is also only supposed to occur when we have a non zero amount of allocated hours,
Original PR description
Steps to reproduce: - New Project > New Task > Timesheet 10h on task - New subtask on task > Timesheet 5h on subtask - Reporting > Tasks Analysis Remaining hours are computed incorrectly, when no…
Steps to reproduce: - New Project > New Task > Timesheet 10h on task - New subtask on task > Timesheet 5h on subtask - Reporting > Tasks Analysis Remaining hours are computed incorrectly, when no allocated hours are set on a task, we have null values in database that prevent the computation of allocated_hours and remaining_hours which also messes up the project totals. The computation of remaining hours is also only supposed to occur when we have a non zero amount of allocated hours, otherwise the remaining hours are always 0. Additionally, the 'Total Hours' column is confusing for customers as it is meant to compute the total hours spent on a task (subtasks included) but is enabled by default when looking at the projects as a whole which does not make sense. For instance, with 'Task' parent of 'Subtask': | Name | Allocated | Hours spent | Remaining | Total Hours | | -------- | --------- | ----------- | ---------- | ----------- | | Project | 0 | 15 | -15 (-> 0) | 20 | | Task | 0 | 10 | -10 (-> 0) | 15 | | Subtask | 0 | 5 | -5 (-> 0) | 5 | The sum of total hours on project is meaningless and confusing so it is preferable not to have it enabled by default (Subtask is counted twice, once in Task and once itself). opw-4236984 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#185490 Forward-Port-Of: odoo/odoo#184291
Currently, a traceback occurs when the user deletes a module which is having a gamification goal record. To reproduce this issue: 1) Install `sale` and `gamification` 2) Create a new `gamification challenge` record 3) Create a new `goal` in the gamification challenge 4) Make sure the goal has the definition as `Automatic: sum on a field` 5) Select the model as `account` 6) Uninstall the invoicing module and start the `challenge` of that gamification. Error:- ``` KeyError: Fals
Original PR description
Currently, a traceback occurs when the user deletes a module which is having a gamification goal record. To reproduce this issue: 1) Install `sale` and `gamification` 2) Create a new `gamification…
Currently, a traceback occurs when the user deletes a module which is having a gamification goal record. To reproduce this issue: 1) Install `sale` and `gamification` 2) Create a new `gamification challenge` record 3) Create a new `goal` in the gamification challenge 4) Make sure the goal has the definition as `Automatic: sum on a field` 5) Select the model as `account` 6) Uninstall the invoicing module and start the `challenge` of that gamification. Error:- ``` KeyError: False ``` The value of the model_id became `False` when the user deletes a module used in goal. This leads to a traceback as model_id is used for the reference of obj https://github.com/odoo/odoo/blob/d9603e93d2ab5e0b9fd1948dfd3e3bee20ede599/addons/gamification/models/gamification_goal.py#L164-L165 We can resolve this issue by adding `ondelete='cascade'` in the field definition. Where the record will be deleted if the corresponding model is uninstalled. sentry-4089991441 Forward-Port-Of: odoo/odoo#180307
Update branding logo and icon in windows installer. Old forgotten task Task-2862802 Forward-Port-Of: odoo/odoo#185650
Original PR description
Update branding logo and icon in windows installer. Old forgotten task Task-2862802 Forward-Port-Of: odoo/odoo#185650
Steps to reproduce: - Install `website_event_sale` - Go to an event and for one ticket set maximum as 1 - Open event page and purchase a ticket, but don't complete the payment - Do the same in private navigation - Click on pay on the two page Issues: If you check with stripe payment is processed meaning that the two people are charged however one of them can't get a ticket as there isn't enough tickets available. Fix is to check before sending payment to provider and return error if the
Original PR description
Steps to reproduce: - Install `website_event_sale` - Go to an event and for one ticket set maximum as 1 - Open event page and purchase a ticket, but don't complete the payment - Do the same in private navigation - Click on pay on the two page Issues: If you check with stripe payment is processed meaning that the two people are charged however one of them can't get a ticket as there isn't enough tickets available. Fix is to check before sending payment to provider and return error if there's not enough seats. Concurrency issue is not fully solved but would require much more precise timing, and a proper solution wouldn't be stable. opw-3772093 Forward-Port-Of: odoo/odoo#185455 Forward-Port-Of: odoo/odoo#173809
Before this commit, when a payable account was used on a customer invoice, or a receivable account on a vendor bill, an error message was raised saying "Any journal item on a receivable/payable account must have a due date and vice versa.". This was unclear, and caused for example confusion when importing the accounting history. Therefore, we now handle this case with a new error message. opw-4196597 Forward-Port-Of: odoo/odoo#185696 Forward-Port-Of: odoo/odoo#182979
Original PR description
Before this commit, when a payable account was used on a customer invoice, or a receivable account on a vendor bill, an error message was raised saying "Any journal item on a receivable/payable account must have a due date and vice versa.". This was unclear, and caused for example confusion when importing the accounting history. Therefore, we now handle this case with a new error message. opw-4196597 Forward-Port-Of: odoo/odoo#185696 Forward-Port-Of: odoo/odoo#182979
Steps to reproduce: 1. Go to a website page (in edit mode) > Switch the header template to `"Menu with Search Bar"`. 2. Set a highlight effect on the text element in the top section of the header. 3. The highlight keeps adapting itself infinitely. Technical details: After [1], two header navbars were added in the DOM (for the desktop view and mobile). Which means that the targeted text field is also duplicated and every change on it in Desktop will be reflected in the "invisib
Original PR description
Steps to reproduce: 1. Go to a website page (in edit mode) > Switch the header template to `"Menu with Search Bar"`. 2. Set a highlight effect on the text element in the top section of the header. 3.…
Steps to reproduce:
1. Go to a website page (in edit mode) > Switch the header template to
`"Menu with Search Bar"`.
2. Set a highlight effect on the text element in the top section of the header.
3. The highlight keeps adapting itself infinitely.
Technical details:
After [1], two header navbars were added in the DOM (for the desktop
view and mobile). Which means that the targeted text field is also
duplicated and every change on it in Desktop will be reflected in the
"invisible" mobile version.
When the text is highlighted, the highlight observers are also adapting
the content on both navbars... To understand the conflict, here is an
example of the behaviour causing the infinite loop:
**a.** DESKTOP TEMPLATE > Set a highlight on the text field:
```xml
<span class="o_text_highlight">
<span class="o_text_highlight_item">
Text content.
<svg.../> // SVG adapted to text dimensions.
</span>
```
**b.** MOBILE TEMPLATE > The "field observer" will set the same content on
the "invisible" mobile version:
```xml
<span class="o_text_highlight">
<span class="o_text_highlight_item">
Text content.
<svg.../> // SVG adapted to the desktop text dimensions.
</span>
```
**c.** MOBILE TEMPLATE > The "highlights adaptation system" detects the
changes on the hidden mobile field and adapts the highlight:
```xml
<span class="o_text_highlight">
<span class="o_text_highlight_item">
Text content.
<svg.../> // SVG adapted to the mobile text dimensions (0×0).
</span>
```
**d.** DESKTOP TEMPLATE > The "field observer" will set the same content on
the desktop version, which automatically triggers the highlight size adaptations...
**e.** Same as [**b**].
Infinitely...
In this very specific case, the text content is the same, only the
highlight path is different (because one of the field duplicates is
visible, and the other is hidden).
The goal of this commit is to fix this behaviour by preventing the
highlight's mutation observer from adapting invisible content.
This way, the field synchronization mechanism will always set the same
highlight SVG on the hidden duplicate too (*).
[1]: https://github.com/odoo/odoo/pull/119650
(*): Remarks:
- This won't have an impact on the saved content: We remove all size
related DOM (SVG paths, line breaks,...) before the "save" and we
only keep minimal information needed to rebuild the highlights.
- Also, having a non-adapted effect on the hidden copy of the field is
not an issue here since the "highlight resize observer" will immediately
fix it once displayed (e.g. when switching to mobile preview).
opw-4183587
task-4270159
Forward-Port-Of: odoo/odoo#183414The purpose of this PR is to be able to process a lot of serial numbers at once. In receipt and deliveries In the current situation, the number of serial already in stock has an impact on the perf (due to `update_available_quantity` that do a `_gather` on current stock). All the metrics below are made with 50 000 SN already in stock Before (in seconds): || Receipt | Delivery | |--------|--------|--------| |100| 1.63 | 34.21 | |5000| 87.04 | 242.56 | |30 000| 563.75 | T.O. | After:
Original PR description
The purpose of this PR is to be able to process a lot of serial numbers at once. In receipt and deliveries In the current situation, the number of serial already in stock has an impact on the perf…
The purpose of this PR is to be able to process a lot of serial numbers at once. In receipt and deliveries In the current situation, the number of serial already in stock has an impact on the perf (due to `update_available_quantity` that do a `_gather` on current stock). All the metrics below are made with 50 000 SN already in stock Before (in seconds): || Receipt | Delivery | |--------|--------|--------| |100| 1.63 | 34.21 | |5000| 87.04 | 242.56 | |30 000| 563.75 | T.O. | After: || Receipt | Delivery | |--------|--------|--------| |100| 0.91 | 5.62 | |5000| 47.21 | 56.28 | |30 000| 195.27 | 307.80 | By operations/ receipts (for 5000): | | action_assign | button_validate | total | |--------|--------|--------|--------| | Before patch | 5.38 | 82.02 | 87.04 | | After patch | 3.82 | 43.39 | 47.21 | By operations/ deliveries (for 5000): | | action_assign | button_validate | total | |--------|--------|--------|--------| | Before patch | 180.06 | 62.50 | 242.56 | | After patch | 20.51 |35.77 | 56.28 | The main issues: - The constraint check on quant/stock.move.line are done one by one since there is nothing done in batch, same for computed field (Not fixed here)  - The put away takes an important amount of times without any putaways rules  - The optimisation made in #116803 was a good idea but it was only use in action_assign. `_action_assign` use strict=False in `_gather` (mts case). It means a child_of operator is in the domain, and it will perform an extra query anyway - The lot_name matching to lot_id is made `stock.move.line` by `stock.move.line` on 30 000, half of the time is spent to find them.  After some testing. The quant_cache could contain too many items than needed by the current operation. Example receive 1 serial number (that will not have an existing quant) will use a quant_cache with all the serial number of the products. As a result, the group by will be super slow. Allow to add an extra domain, to limit the cache size. /!\ could be dangerous if it filter out too much  Forward-Port-Of: odoo/odoo#170342 Forward-Port-Of: odoo/odoo#146494
Payments initiated by the customer from the payment form could sometimes lead to multiple charges if a webhook notification would arrive at the same time as the payment request's response. This is due to the webhook acquiring a lock in the database when updating the transaction's state, followed by the processing of the payment request's response trying to do the same and thus encountering a concurrent access error. The payment request is thus retried and a new charge is created on Adyen side.
Original PR description
Payments initiated by the customer from the payment form could sometimes lead to multiple charges if a webhook notification would arrive at the same time as the payment request's response. This is due to the webhook acquiring a lock in the database when updating the transaction's state, followed by the processing of the payment request's response trying to do the same and thus encountering a concurrent access error. The payment request is thus retried and a new charge is created on Adyen side. This commit fixes the issue by passing an idempotency key with the payment request. If a payment request is inadvertently retried, Adyen silently ignores it and returns the same response as for the initial request. The response is processed again in Odoo and the customer is smoothly redirected to the payment landing page. Forward-Port-Of: odoo/odoo#185720 Forward-Port-Of: odoo/odoo#184919
**Current behavior before PR:** Public channels were not being fetched when users clicked channel mentions, causing chat window title to display "New message" instead of their actual names. Additionally, bus channels were not added every time when threads were opened, preventing real-time messaging in some cases. **Desired behavior after PR is merged:** Implemented channel fetching on mention clicks and added bus channel subscription when opening threads, enabling proper channel nam
Original PR description
**Current behavior before PR:** Public channels were not being fetched when users clicked channel mentions, causing chat window title to display "New message" instead of their actual names. Additionally, bus channels were not added every time when threads were opened, preventing real-time messaging in some cases. **Desired behavior after PR is merged:** Implemented channel fetching on mention clicks and added bus channel subscription when opening threads, enabling proper channel name display and real-time messaging functionality. Task:[3899453](https://www.odoo.com/odoo/project/1519/tasks/3899453) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#185603 Forward-Port-Of: odoo/odoo#174473
Currently, the invisible fields are considered in the export default fields. It doesn't make sense from a user perspective as those are generally technical fields used for computation. This wasn't the case prior to v17. The fix is to filter the invisible fields. task-4277023 Forward-Port-Of: odoo/odoo#184719
Original PR description
Currently, the invisible fields are considered in the export default fields. It doesn't make sense from a user perspective as those are generally technical fields used for computation. This wasn't the case prior to v17. The fix is to filter the invisible fields. task-4277023 Forward-Port-Of: odoo/odoo#184719
Currently, when sending a Bis 3 xml to Pagero, which in turn sends it to Chorus Pro, the invoice is rejected by Chorus. This is because the `PartyIdentification` tag for the `AccountingSupplierParty` should be filled with the siret of the supplier if it is located in France, or with the VAT if it is located in the EU. Surprisingly, the xml received by Chorus contains a `PartyIdentification` that has most probably be added by Pagero, but it is filled with a VAT, and causes a rejection from
Original PR description
Currently, when sending a Bis 3 xml to Pagero, which in turn sends it to Chorus Pro, the invoice is rejected by Chorus. This is because the `PartyIdentification` tag for the `AccountingSupplierParty` should be filled with the siret of the supplier if it is located in France, or with the VAT if it is located in the EU. Surprisingly, the xml received by Chorus contains a `PartyIdentification` that has most probably be added by Pagero, but it is filled with a VAT, and causes a rejection from Chorus since the supplier is french. opw-4139689 Forward-Port-Of: odoo/odoo#184871
As VISA added more mandatory fields to perform payments, the holder's name is required now for the customer to fill when paying with adyen. opw-4085163 Forward-Port-Of: odoo/odoo#185489 Forward-Port-Of: odoo/odoo#185253
Original PR description
As VISA added more mandatory fields to perform payments, the holder's name is required now for the customer to fill when paying with adyen. opw-4085163 Forward-Port-Of: odoo/odoo#185489 Forward-Port-Of: odoo/odoo#185253
Add support for connecting to the MyInvois API, in order to send and receive E-Invoices. see https://github.com/odoo/iap-apps/pull/849 Task id # 3953659 Forward-Port-Of: odoo/odoo#174813
Original PR description
Add support for connecting to the MyInvois API, in order to send and receive E-Invoices. see https://github.com/odoo/iap-apps/pull/849 Task id # 3953659 Forward-Port-Of: odoo/odoo#174813
Issue found at commit: https://github.com/odoo/odoo/commit/0e8f3d5c42b4f219e4e7db6915dd1dd7ec45e4b4 After the above mentioned commit when using eWaybill with e-Invoicing the log note of ewaybill i.e. ``` E-wayBill Sent Number -> 0 Validity -> None ```  where as in the response attachment of eWaybill, the ewaybill number does exist In this commit, we resolve the above issue and the correct ewaybil
Original PR description
Issue found at commit: https://github.com/odoo/odoo/commit/0e8f3d5c42b4f219e4e7db6915dd1dd7ec45e4b4 After the above mentioned commit when using eWaybill with e-Invoicing the log note of ewaybill i.e. ``` E-wayBill Sent Number -> 0 Validity -> None ```  where as in the response attachment of eWaybill, the ewaybill number does exist In this commit, we resolve the above issue and the correct ewaybill number gets logged opw-4280093 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#185680
Collection of small shop floor fixes for v17. Please refer to the individual feature commits for details. Forward-Port-Of: odoo/enterprise#72849 Forward-Port-Of: odoo/enterprise#70704
Original PR description
Collection of small shop floor fixes for v17. Please refer to the individual feature commits for details. Forward-Port-Of: odoo/enterprise#72849 Forward-Port-Of: odoo/enterprise#70704
Steps ----- - Install timesheet_grid - Set monday as the first day of the week in the language settings - Set the timezone of the user's working schedule to a more advanced timezone, e.g. UTC+10 - Go to Timesheets and add some hours on monday -> The under/over time is calculated relative to a lower number of hours than the real number of working hours for that day. Cause ----- `get_daily_working_hours` uses UTC's start/end of day for the start and end of the period, causing some workin
Original PR description
Steps ----- - Install timesheet_grid - Set monday as the first day of the week in the language settings - Set the timezone of the user's working schedule to a more advanced timezone, e.g. UTC+10 - Go to Timesheets and add some hours on monday -> The under/over time is calculated relative to a lower number of hours than the real number of working hours for that day. Cause ----- `get_daily_working_hours` uses UTC's start/end of day for the start and end of the period, causing some working hours near the start/end of the period to be missed. opw-4163183 Forward-Port-Of: odoo/enterprise#72924 Forward-Port-Of: odoo/enterprise#72526
**Current behavior:** Return labels are being generated with the `shipper` field set to the partner defined on the delivery picking (i.e., customer). **Expected behavior:** `shipper` should match the `ship_to` field (the original sender) as this field informs who gets billed for the return shipment. **Steps to reproduce:** Generate a return label with `delivery_ups_rest`. **Cause of the issue:** The return label is generated with `shipper=picking.partner_id`. **Fix:** Set it to
Original PR description
**Current behavior:** Return labels are being generated with the `shipper` field set to the partner defined on the delivery picking (i.e., customer). **Expected behavior:** `shipper` should match the `ship_to` field (the original sender) as this field informs who gets billed for the return shipment. **Steps to reproduce:** Generate a return label with `delivery_ups_rest`. **Cause of the issue:** The return label is generated with `shipper=picking.partner_id`. **Fix:** Set it to `shipper=picking.picking_type_id.warehouse_id.partner_id` (which matches the `ship_to` argument). opw-4147118 Forward-Port-Of: odoo/enterprise#72482
Some reports have been edited to have qweb default content that was meant to only be used from within studio. ```xml <t t-field="some_field">studio placeholder</t> ``` This content is displayed if the evaluated value is either False or None. This can also happen outside studio, if the field is not required. An attribute `data-oe-demo` was introduced for t-fields. ```xml <t t-field="some_field" data-oe-demo="studio placeholder"/> ``` This attribute was introduced for t-field no
Original PR description
Some reports have been edited to have qweb default content that was meant to only be used from within studio. ```xml <t t-field="some_field">studio placeholder</t> ``` This content is displayed if the evaluated value is either False or None. This can also happen outside studio, if the field is not required. An attribute `data-oe-demo` was introduced for t-fields. ```xml <t t-field="some_field" data-oe-demo="studio placeholder"/> ``` This attribute was introduced for t-field nodes in order to only display placeholder content inside the report editor. We didn't introduce it for `t-out` as it was possible to change the expression `<t t-out="obj.prop"/>` -> `<t t-out="obj.prop or ''"/>` While this definitely works, the attribute better signals the intent of the change. We thus add support for the attribute on t-out. Forward-Port-Of: odoo/enterprise#72967