Saturday, May 17, 2025
34 changes · saas-18.3
Enhancements to existing features
The signature request activity in Odoo Sign has been renamed from "Request signature" to "Signature" to make activity lists clearer and more consistent. A related internal test note was also cleaned up after expected activity behavior changes, with no major workflow disruption for users.
Original PR description
task-4592571 changed up the way activities function, but not everything was completed before the end of the freeze; in addition, it included a number of bugs/crashes/usage inconveniences. This commit adds: - Sign "Request signature" activity type renamed to "Signature" This commit also fixes: - Postfreeze checkout comment on test_mail_enterprise query count change deleted; as action_feedback behavior changes, it can be expected that query count would change. task-4747156
Users can now clear the assigned partner from a bank statement line directly in the kanban reconciliation view. This makes it easier to correct mismatched or unnecessary partner assignments during bank reconciliation without leaving the workflow.
Original PR description
This commit adds the possibility to delete a partner_id on a statement line in kanban view. task-4782348
The VoIP calling panel now removes extra blank space between an entered phone number and the suggested contacts list. This makes the suggestions easier to see and creates a more compact, polished calling experience.
Original PR description
This commit removes the useless big space between the entered phone number and the list of suggestions in the calee suggestions tab. ## Before  ## After 
Resolved issues and error corrections
Bank reconciliation rules now search across the statement label, transaction details, and narration together. This makes automatic matching more consistent and reduces the need for users to choose where a rule should look for matching text.
Original PR description
We don't want the user to differentiate the places where to apply the regex search (reco model) on statement lines. We thus apply it on the label, the transaction details and the narration altogether, returning on the first match. task-4749338
Code cleanup and technical improvements
This change removes an older workaround for tracking delegated model relationships because newer rules now require those relationships to be declared directly. It keeps Odoo's internal model information simpler and more consistent, with no expected direct impact on day-to-day users.
Original PR description
Since 56a666c10a74e18efa824a5797241626ac8e28fc, the declaration of `_inherits` is now required. We can thus revert 6577920cb657a8c7f099dd05dfdd19e209de9a19, as it is not needed anymore.
Miscellaneous changes
PR #189568 removes the focus from the project sharing composer by setting the `inFrontendPortalChatter` to true, which goes against the whole idea of having this parameter. The correct fix is to remove the `autofocus` (prop) from the composer, because it was only there to keep the focus on the project sharing composer. This commit undoes the change in the mentioned PR and removes the `autofocus` from the portal chatter composer. Consequently, the composer placeholder in project sharing becomes
Original PR description
PR #189568 removes the focus from the project sharing composer by setting the `inFrontendPortalChatter` to true, which goes against the whole idea of having this parameter. The correct fix is to remove the `autofocus` (prop) from the composer, because it was only there to keep the focus on the project sharing composer. This commit undoes the change in the mentioned PR and removes the `autofocus` from the portal chatter composer. Consequently, the composer placeholder in project sharing becomes the one related to `note`, so this commit adds `type="'message'"` to the composer to ensure consistency with the backend when sending a message. Forward-Port-Of: odoo/odoo#207455
This fix ensures activities in Odoo Mail show the correct creator name and activity type name. It helps users better understand who created an activity and what kind of follow-up is needed, reducing confusion in daily collaboration.
Original PR description
Follow up of https://github.com/odoo/odoo/pull/189598 Follow up of https://github.com/odoo/odoo/pull/210060 task-4794562
This fix ensures the person who started a call is shown by name instead of appearing as undefined for portal users. It improves clarity in mail and live chat notifications by using the available author name consistently.
Original PR description
**purpose of this PR :** The name was appearing as undefined because message.author.name was not set for portal users. to handle this, we used `message.authorName` directly. also it was changed to `message.authorName` to be consistent with the rest of the code. task-[4782291](https://www.odoo.com/odoo/project/1519/tasks/4782291) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix prevents the link editor from staying open after users discard a new link, avoiding confusing empty link popovers. It also focuses the web address field when turning an image into a link, so keyboard shortcuts like Escape work as expected.
Original PR description
### Steps to reproduce: **Issue 1:** - Create a new link (e.g., type /link). - The link editing popover appears. - Click the Discard button. - Link popover remains open at the bottom. **Issue 2:** -…
### Steps to reproduce: **Issue 1:** - Create a new link (e.g., type /link). - The link editing popover appears. - Click the Discard button. - Link popover remains open at the bottom. **Issue 2:** - Insert an image (e.g., type /media) - Convert image into link. - URL input is not automatically focused when the image link popover opens. - Popover remains open on Escape because it does not receive focus. ### Description of the issue/feature this PR addresses: - Clicking `Discard` button kept the popover open. This happened because the original linkElement was disconnected and openLinkTools created a new empty anchor tag, causing a new popover to appear. - When converting an image into a link, the image link popover did not have a label input. As a result, the URL input did not receive focus by default. - Pressing Escape key did not close the popover because it never gained focus. ### Desired behavior after PR is merged: - If there is no valid link in selection, clicking `Discard` button closes the popover, and no new anchor tag is created. - The URL input in the image link popover is now focused by default, and pressing the Escape key closes the popover. task-4752206 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Bank reconciliation rules now search across the statement label, transaction details, and narration together. This helps users get the expected automatic matches without needing to know where specific bank information was stored.
Original PR description
We don't want the user to differentiate the places where to apply the regex search (reco model) on statement lines. We thus apply it on the label, the transaction details and the narration altogether, returning on the first match. task-4749338
Bank reconciliation now opens the correct invoice when payments in a foreign currency create exchange rate differences. This prevents users from being sent to the bank statement instead, reducing confusion during reconciliation review.
Original PR description
When reconciling an invoice and payment in foreign currency on different dates, an exchange rate difference line is added. This results in more than one value in `reconciled_lines_ids`, and `moveData()` no longer resolves a link to the move, so the bank statement is shown instead. This commit introduces a non-stored computed field to filter out exchange difference lines from `reconciled_lines_ids`. The kanban now uses this filtered field as a fallback when the reconciled lines are ambiguous. Steps to reproduce: 1. Enable a foreign currency and create two rates on different dates. 2. Create an invoice on one of the dates and a transaction to pay it on the other. 3. Reconcile them. task-4749264
Belgium Intrastat reports now use the official 20-day submission deadline instead of a general company reminder setting. This helps businesses receive accurate deadline handling for Belgian Intrastat compliance and avoid late filing risks.
Original PR description
The deadline for the Intrastat for Belgium was missing, we were using company.account_return_reminder_day instead. Here we change it to be 20 days which is the deadline for Belgium to submit their Intrastat report. task-4627315
Forward-Port-Of: odoo/odoo#210330
Original PR description
Forward-Port-Of: odoo/odoo#210330
1.Fix issue encountered in debug mode Repro steps: 1. Install l10n_jo_edi module 2. Enter debug mode 3. Inside an invoice form view, attempt to view the raw record data then you will get an error 2.Change l10n_jo_edi_state The EDI state is not read-only (to give users flexibility in timeout scenarios), so we need to do the following: Not hide it if it's false (because the user can set it to false) and only hide it in non-Jordanian companies Make the field trackable (so it's more clear
Original PR description
1.Fix issue encountered in debug mode Repro steps: 1. Install l10n_jo_edi module 2. Enter debug mode 3. Inside an invoice form view, attempt to view the raw record data then you will get an error 2.Change l10n_jo_edi_state The EDI state is not read-only (to give users flexibility in timeout scenarios), so we need to do the following: Not hide it if it's false (because the user can set it to false) and only hide it in non-Jordanian companies Make the field trackable (so it's more clear to the users when it changes) Make it readonly in case the invoice has a QR code --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#207080
moving it to the module mrp_subcontracting_purchase is the correct module, as it depends on the override of _get_resupply_availability happening in mrp_subcontracting_purchase module accorinding to this PR (https://github.com/odoo/odoo/pull/144702/files#diff-54bc40f604ca24cec75d6f7473d21d1d2d0300576456026fe63164daf7cd5149) and fails as a single app test in mrp_subcontracting build_error-163126 Forward-Port-Of: odoo/odoo#206513 Forward-Port-Of: odoo/odoo#206078
Original PR description
moving it to the module mrp_subcontracting_purchase is the correct module, as it depends on the override of _get_resupply_availability happening in mrp_subcontracting_purchase module accorinding to this PR (https://github.com/odoo/odoo/pull/144702/files#diff-54bc40f604ca24cec75d6f7473d21d1d2d0300576456026fe63164daf7cd5149) and fails as a single app test in mrp_subcontracting build_error-163126 Forward-Port-Of: odoo/odoo#206513 Forward-Port-Of: odoo/odoo#206078
AttachedDocuments are a wrapper filetype in the UBL 2.0/2.1 specification that allows for multiple documents to be bundled together. Colombia uses it as a way to return back values from the EDI but it is in the standard and can therefore be used by any UBL 2.0/2.1 compliant system. To be able to parse the documents inside correctly, we must obtain the original record which is stored in the outermost Attachment node either under the EmbeddedDocumentBinaryObject element or the ExternalReference
Original PR description
AttachedDocuments are a wrapper filetype in the UBL 2.0/2.1 specification that allows for multiple documents to be bundled together. Colombia uses it as a way to return back values from the EDI but it is in the standard and can therefore be used by any UBL 2.0/2.1 compliant system. To be able to parse the documents inside correctly, we must obtain the original record which is stored in the outermost Attachment node either under the EmbeddedDocumentBinaryObject element or the ExternalReference/Description node. Once we find it we send it to the normal decoder process. Specification: https://docs.oasis-open.org/ubl/os-UBL-2.1/mod/summary/reports/UBL-AttachedDocument-2.1.html task-4299222 Forward-Port-Of: odoo/odoo#208953
* When checking model coherency for sms, if choose transient model -> raise ValidationError message but the message seem not follow with the code so much 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#206389 Forward-Port-Of: odoo/odoo#188760
Original PR description
* When checking model coherency for sms, if choose transient model -> raise ValidationError message but the message seem not follow with the code so much 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#206389 Forward-Port-Of: odoo/odoo#188760
Versions -------- - 16.0+ Steps ----- 1. Enable abandoned cart reminder emails; 2. have an event with a limited number of seats; 3. open a cart for a ticket to the event; 4. abandon the cart; 5. have available seats fill up. Issue ----- You still get an email reminding you to buy the ticket, even though it's no longer available. As a consequence, you can still pay the sales order, but it won't get confirmed. Cause ----- There is no custom logic in place for `website_event_sa
Original PR description
Versions -------- - 16.0+ Steps ----- 1. Enable abandoned cart reminder emails; 2. have an event with a limited number of seats; 3. open a cart for a ticket to the event; 4. abandon the cart; 5. have…
Versions -------- - 16.0+ Steps ----- 1. Enable abandoned cart reminder emails; 2. have an event with a limited number of seats; 3. open a cart for a ticket to the event; 4. abandon the cart; 5. have available seats fill up. Issue ----- You still get an email reminding you to buy the ticket, even though it's no longer available. As a consequence, you can still pay the sales order, but it won't get confirmed. Cause ----- There is no custom logic in place for `website_event_sale` to filter out abandoned carts with tickets that are no longer eligible. Additionally, the `is_sold_out` field of tickets can be `False` while the event's `event_registrations_sold_out` field is `True`. Solution -------- - Add the event's `event_registrations_sold_out` field as a dependency to `event.event.ticket`'s `_comute_is_sold_out` method. - Add an override for `_filter_can_send_abandoned_cart_mail` which filters out carts with tickets that are sold out, or events with no free places remaining. opw-4453539 Forward-Port-Of: odoo/odoo#209928 Forward-Port-Of: odoo/odoo#199877
Description of the issue/feature this PR addresses: Task ID: 4636082 Current Behavior before PR: - When printing an invoice with a currency that is different than the company's currency. The amount value of each line is only printed in the invoice's currency and not the company's currency. - As per the FTA article 59, the line amount should also be expressed in AED. - The tax excluded amount was also always printed regardless of the company's setting. (something that was fixed in https:
Original PR description
Description of the issue/feature this PR addresses: Task ID: 4636082 Current Behavior before PR: - When printing an invoice with a currency that is different than the company's currency. The amount value of each line is only printed in the invoice's currency and not the company's currency. - As per the FTA article 59, the line amount should also be expressed in AED. - The tax excluded amount was also always printed regardless of the company's setting. (something that was fixed in https://www.odoo.com/odoo/project.task/4625855?debug=1 but there seems to be no intention to backport this to 18.0). Desired behavior after PR is merged: - Add a new column to print the line amount in the company's currency if the invoice has a different currency than the company. - Print tax excluded/include amount based on company's setting. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#207633
Commit d69541efbe3 added `cumulatedStart` property on charts but the property was not exported. Steps to reproduce: - open CRM - switch to the graph view - Check the "cumulative" checkbox - Group by create date: month - Filter on March and April (the last 2 months in the filter) - insert in spreadsheet - reload => the chart data changed. It now includes historical data Task-4792009 Description of the issue/feature this PR addresses: Current behavior before PR: Desired be
Original PR description
Commit d69541efbe3 added `cumulatedStart` property on charts but the property was not exported. Steps to reproduce: - open CRM - switch to the graph view - Check the "cumulative" checkbox - Group by create date: month - Filter on March and April (the last 2 months in the filter) - insert in spreadsheet - reload => the chart data changed. It now includes historical data Task-4792009 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#210203 Forward-Port-Of: odoo/odoo#209637
On slow networks, users or runbot may click checkboxes before the JavaScript is fully loaded by the lazy loader, causing event handlers to not be attached. Fix: Split the test into two separate tours. One while logged in for donation configuration, and another while logged out to test it, since the issue does not occur when the iframe is not present. **Tested with a custom multi-build and the test do not fail anymore** runbot-77224 Forward-Port-Of: odoo/odoo#209959 Forward-Port-Of:
Original PR description
On slow networks, users or runbot may click checkboxes before the JavaScript is fully loaded by the lazy loader, causing event handlers to not be attached. Fix: Split the test into two separate tours. One while logged in for donation configuration, and another while logged out to test it, since the issue does not occur when the iframe is not present. **Tested with a custom multi-build and the test do not fail anymore** runbot-77224 Forward-Port-Of: odoo/odoo#209959 Forward-Port-Of: odoo/odoo#179885
Before this commit, message actions are placed based on the type of message and its content: - when message has bubble layout, they are placed next to the 1st line of bubble - when message contains only attachments, they are placed next to the start of 1st attachment row - otherwise, they are placed next to message header The last case is a last resort which happens in non-discuss channels such as logged notes or tracking values and so on. All of them do not have "squashed" messages and
Original PR description
Before this commit, message actions are placed based on the type of message and its content: - when message has bubble layout, they are placed next to the 1st line of bubble - when message contains…
Before this commit, message actions are placed based on the type of message and its content: - when message has bubble layout, they are placed next to the 1st line of bubble - when message contains only attachments, they are placed next to the start of 1st attachment row - otherwise, they are placed next to message header The last case is a last resort which happens in non-discuss channels such as logged notes or tracking values and so on. All of them do not have "squashed" messages and the best natural placement is there in header. Message header is intended to be thin in content, so that it doesn't overpower with message content. However, message actions need to be big enough to be reached with a thumb. These considerations led to a compromise of thin header with message actions with negative margins. This works well when message header is on a single line, but when it wraps to new line this doesn't look good because the negative margin puts it partially inside the header content. This commit fixes the issue by changing the placement of message actions in mobile when displayed as a card, like on Inbox and History: the "..." is moved to the top-right corner of card. This works because the card layout makes the top-right corner a natural position. This make it work like kanban views. Note that this placement is best only in mobile: the card are short in width to make reaching message actions easy. In desktop, the message card can take almost the width of screen, so it makes it less practical than currently, close to message content. Before  After  Forward-Port-Of: odoo/odoo#209689
Currently a traceback occurs if no QST instutions were defined, making it hard for users to understand where the error is coming from, in this PR we specify the missing institution. Forward-Port-Of: odoo/enterprise#85148 Forward-Port-Of: odoo/enterprise#85104
Original PR description
Currently a traceback occurs if no QST instutions were defined, making it hard for users to understand where the error is coming from, in this PR we specify the missing institution. Forward-Port-Of: odoo/enterprise#85148 Forward-Port-Of: odoo/enterprise#85104
The _compute_l10n_mx_edi_cfdi_cancel_id method is calling the following search https://github.com/odoo/enterprise/blob/fd01cf3d57109424725727d7eb40afbe34ef67a9/l10n_mx_edi/models/account_move.py#L685-L691 ```python move.l10n_mx_edi_cfdi_cancel_id = move.search([ ('l10n_mx_edi_cfdi_origin', '=like', f'04|{move.l10n_mx_edi_cfdi_uuid}%'), ('company_id', '=', move.company_id.id)], limit=1, ) ``` It is generating the following sql query ```sql SE
Original PR description
The _compute_l10n_mx_edi_cfdi_cancel_id method is calling the following search…
The _compute_l10n_mx_edi_cfdi_cancel_id method is calling the following search
https://github.com/odoo/enterprise/blob/fd01cf3d57109424725727d7eb40afbe34ef67a9/l10n_mx_edi/models/account_move.py#L685-L691
```python
move.l10n_mx_edi_cfdi_cancel_id = move.search([
('l10n_mx_edi_cfdi_origin', '=like', f'04|{move.l10n_mx_edi_cfdi_uuid}%'),
('company_id', '=', move.company_id.id)],
limit=1,
)
```
It is generating the following sql query
```sql
SELECT id
FROM account_move
WHERE l10n_mx_edi_cfdi_origin :: text LIKE '04|55555-5555-5555-5555-555%'
AND company_id = 1
ORDER BY date DESC,
name DESC,
invoice_date DESC,
id DESC
LIMIT 1
```
Running a analyze for a database with ~7M of `account_move` records the result is
```txt
Limit (cost=73029.67..137055.68 rows=1 width=26) (actual time=1610.419..1637.035 rows=0 loops=1)
-> Incremental Sort (cost=73029.67..649263.71 rows=9 width=26) (actual time=1600.475..1627.091 rows=0 loops=1)
Sort Key: date DESC, name DESC, invoice_date DESC, id DESC
Presorted Key: date
Full-sort Groups: 1 Sort Method: quicksort Average Memory: 25kB Peak Memory: 25kB
-> Gather Merge (cost=1000.46..649263.30 rows=9 width=26) (actual time=1600.466..1627.082 rows=0 loops=1)
Workers Planned: 2
Workers Launched: 2
-> Parallel Index Scan Backward using account_move__date_index on account_move (cost=0.43..648262.24 rows=4 width=26) (actual time=1586.469..1586.469 rows=0 loops=3)
Filter: (((l10n_mx_edi_cfdi_origin)::text ~~ '04|55555-5555-5555-5555-555%'::text) AND (company_id = 1))
Rows Removed by Filter: 2274213
Planning Time: 0.197 ms
JIT:
Functions: 13
Options: Inlining false, Optimization false, Expressions true, Deforming true
Timing: Generation 3.044 ms, Inlining 0.000 ms, Optimization 2.327 ms, Emission 34.202 ms, Total 39.574 ms
Execution Time: 1637.815 ms
```
PostgreSQL query stats from production returns the following top 1 slow query
```txt
Total Time Average Time Calls
4,981 min 1,351 ms 221,238
SELECT "account_move"."id"
FROM "account_move"
WHERE (("account_move"."l10n_mx_edi_cfdi_origin"::text LIKE $1)
AND ("account_move"."company_id" = $2))
AND (("account_move"."company_id" IN ($3)) OR "account_move"."company_id" IS NULL)
ORDER BY "account_move"."date" DESC , "account_move"."name" DESC , "account_move"."invoice_date" DESC , "account_move"."id" DESC
LIMIT $4
```
Creating the following index
```sql
CREATE INDEX account_move_l10n_mx_edi_cfdi_origin_index
ON account_move (l10n_mx_edi_cfdi_origin)
WHERE l10n_mx_edi_cfdi_origin IS NOT NULL
```
Similar to define the field `account_move.l10n_mx_edi_cfdi_origin(index='btree_not_null')`
The same query analyze result is
```txt
Limit (cost=4.49..4.49 rows=1 width=26) (actual time=0.018..0.018 rows=0 loops=1)
-> Sort (cost=4.49..4.51 rows=9 width=26) (actual time=0.017..0.017 rows=0 loops=1)
Sort Key: date DESC, name DESC, invoice_date DESC, id DESC
Sort Method: quicksort Memory: 25kB
-> Index Scan using account_move_l10n_mx_edi_cfdi_origin_index on account_move (cost=0.42..4.44 rows=9 width=26) (actual time=0.011..0.012 rows=0 loops=1)
Index Cond: (((l10n_mx_edi_cfdi_origin)::text >= '04|55555-5555-5555-5555-555'::text) AND ((l10n_mx_edi_cfdi_origin)::text < '04|55555-5555-5555-5555-556'::text))
Filter: (((l10n_mx_edi_cfdi_origin)::text ~~ '04|55555-5555-5555-5555-555%'::text) AND (company_id = 1))
Planning Time: 0.147 ms
Execution Time: 0.036 ms
```
It is ~9k times faster
Forward-Port-Of: odoo/enterprise#85427See test in this commit. opw-4744627 Forward-Port-Of: odoo/enterprise#85697
Original PR description
See test in this commit. opw-4744627 Forward-Port-Of: odoo/enterprise#85697
AttachedDocument is a specific XML format used in Colombia, generated by the DIAN regulatory body. These Documents are commonly received from vendors as they contain complete billing information. While Odoo 18.0+ can generate AttachedDocument records for outgoing invoices, it lacks import functionality. This document format contains nested XML documents that represent related records such as DIAN responses, Commercial Events data, and the orignal vendor invoice. The DIAN specifications state
Original PR description
AttachedDocument is a specific XML format used in Colombia, generated by the DIAN regulatory body. These Documents are commonly received from vendors as they contain complete billing information. While Odoo 18.0+ can generate AttachedDocument records for outgoing invoices, it lacks import functionality. This document format contains nested XML documents that represent related records such as DIAN responses, Commercial Events data, and the orignal vendor invoice. The DIAN specifications state that for an AttachedDocument with specified DocumentType must contain the original invoice within the top-most <cac:Attachment> node. (All other documents attached with this file are wrapped in <cac:ParentDocumentLineReference> tags which differentiates it) Specifications: https://www.dian.gov.co/impuestos/factura-electronica/Documents/Anexo-Techico-Factura-Electronica-de-Venta-vr-1-9.pdf task-4299222 Forward-Port-Of: odoo/enterprise#84374
## Version: 17.0+ ## Issue: Test (introduced by task 4457038) fails on Single App because of missing dependency. Relies on SHIF_AMOUNT https://github.com/odoo/enterprise/blob/ffb0aa8d7aad913328bb0b585197172da4e838b3/l10n_ke_hr_payroll_shif/data/hr_salary_rule_data.xml#L46C1-L47C1 runbot-159825 Forward-Port-Of: odoo/enterprise#85021
Original PR description
## Version: 17.0+ ## Issue: Test (introduced by task 4457038) fails on Single App because of missing dependency. Relies on SHIF_AMOUNT https://github.com/odoo/enterprise/blob/ffb0aa8d7aad913328bb0b585197172da4e838b3/l10n_ke_hr_payroll_shif/data/hr_salary_rule_data.xml#L46C1-L47C1 runbot-159825 Forward-Port-Of: odoo/enterprise#85021
**Steps to reproduce** Reproduced on Linux/Firefox. Not reproducible on all browsers. - Open Timesheets app. - Try to add a custom grouping via the "Add Custom Group" select. Bug: the dropdown closes immediately **Cause** Commit 72af4ca4d9859e7236a21cb71401d9f690c42eb6 added an event listener https://github.com/odoo/enterprise/blob/72af4ca4d9859e7236a21cb71401d9f690c42eb6/timesheet_grid/static/src/components/timesheet_timer_header/timesheet_timer_header.js#L41-L48 Depending on the browser
Original PR description
**Steps to reproduce** Reproduced on Linux/Firefox. Not reproducible on all browsers. - Open Timesheets app. - Try to add a custom grouping via the "Add Custom Group" select. Bug: the dropdown closes immediately **Cause** Commit 72af4ca4d9859e7236a21cb71401d9f690c42eb6 added an event listener https://github.com/odoo/enterprise/blob/72af4ca4d9859e7236a21cb71401d9f690c42eb6/timesheet_grid/static/src/components/timesheet_timer_header/timesheet_timer_header.js#L41-L48 Depending on the browser, the first click on a `select` may not propagate to its anchestors all the way to the document `body`. However, if it does, the timer button is focused and the dropdown closes. **Solution** Exlude clicks on popover elments from focusing the timer Start/Stop button. opw-4768571 Forward-Port-Of: odoo/enterprise#85550 Forward-Port-Of: odoo/enterprise#85308
This is a fix-of-fix. #### Explanation of the first fix Before the fix abb3194e190abae023ac2d794e631f38945d5f0d the invoice date was controlling the date that appears in the `Fecha` field of the CFDI, except if the invoice date was set to today or was in the future: in that case, the current time would be used. However, there would be cases where the CFDI would be successfully sent to the PAC but not registered as successfully sent in Odoo because of a timeout or disconnection. In those
Original PR description
This is a fix-of-fix. #### Explanation of the first fix Before the fix abb3194e190abae023ac2d794e631f38945d5f0d the invoice date was controlling the date that appears in the `Fecha` field of the…
This is a fix-of-fix. #### Explanation of the first fix Before the fix abb3194e190abae023ac2d794e631f38945d5f0d the invoice date was controlling the date that appears in the `Fecha` field of the CFDI, except if the invoice date was set to today or was in the future: in that case, the current time would be used. However, there would be cases where the CFDI would be successfully sent to the PAC but not registered as successfully sent in Odoo because of a timeout or disconnection. In those cases, using the current time is a problem because we will try to retry sending the CFDI to the PAC, with a new time, which would be recognised as a new invoice. To solve that issue, that fix set the Fecha to always be the `l10n_mx_edi_post_time` which is the time of posting of the invoice. However, that isn't okay for many Mexican users who expect that the CFDI date must be the same as the invoice date on the PDF (of course, except if the invoice date is in the future). #### The fix-of-fix (this PR) To solve both those issues, here is what we do: - now, the `l10n_mx_edi_post_time` is set when we first try to *send* the CFDI (rather than when we post it), and then stays the same unless the invoice is reset to draft (which ensures that if we must retry several times to resend the CFDI, the sending time won't change). - if the invoice date is older than the `l10n_mx_edi_post_time`, it will be used as the CFDI's Fecha. This ensures that users can control the Fecha using the invoice date. If the user modifies the invoice date, they will need to reset the invoice to draft, so the `l10n_mx_edi_post_time` will be reset too. task-none Forward-Port-Of: odoo/enterprise#85136
'website_id' and 'company_id' should be not visible to portal users Forward-Port-Of: odoo/enterprise#85538 Forward-Port-Of: odoo/enterprise#82547
Original PR description
'website_id' and 'company_id' should be not visible to portal users Forward-Port-Of: odoo/enterprise#85538 Forward-Port-Of: odoo/enterprise#82547
The aim of this commit is to: - avoid reporting negative amount in a 281.50 form which are rejected by the administration. - avoid reporting form with 0 value everywhere which are rejected by the administration. - avoid reporting a form with an amount < 250 EUR Context: The administration stated that we don't need to make any report that would be above 250 EUR. (art. 57, al. 3 CIR 92 et art. 30 AR/CIR 92) https://www.wolterskluwer.com/fr-be/expert-insights/tax-form-281-50
Original PR description
The aim of this commit is to: - avoid reporting negative amount in a 281.50 form which are rejected by the administration. - avoid reporting form with 0 value everywhere which are rejected by the…
The aim of this commit is to:
- avoid reporting negative amount in a 281.50 form which are rejected by the administration.
- avoid reporting form with 0 value everywhere which are rejected by the administration.
- avoid reporting a form with an amount < 250 EUR
Context:
The administration stated that we don't need to make any report that would be above 250 EUR.
(art. 57, al. 3 CIR 92 et art. 30 AR/CIR 92)
https://www.wolterskluwer.com/fr-be/expert-insights/tax-form-281-50 https://travaillerensociete.indicator.be/main/newsadvice/52784/news/52785/news_story/533/ https://www.monastucesetconseils.be/2025-04/fiches-fiscales-281-50-pour-le-29-juin-2025-WAACPCAR_EU33150802
Before this commit:
Odoo could create a form with a negative amount as commission/fee/... This could result in the administration software converting the xml into a BOW file to generated an error and a file that will be rejected by Belcotax.
Same for form with 0 everywhere.
Also, accountants always end up deleting the 281.50 form below 250 EUR as those don't need to be reported.
After this commit:
Odoo don't report negative or null total amount as commission/fee/... and doesn't create any form if the total amounts are below 250 EUR saving accountants the burden to remove them.
task-id: None
This was discussed and done with TSB and DELC and is also the result of our past experiences reporting 281.50 forms which also involved CAHE, MAKR and CAL.
Forward-Port-Of: odoo/enterprise#85508This commit fixes the issue brought by the forward-port PR https://github.com/odoo/enterprise/pull/83866 The field `uom_po_id` used has been removed in version 18.1 and replaced by `uom_id`. task-4751991 Forward-Port-Of: odoo/enterprise#84102
Original PR description
This commit fixes the issue brought by the forward-port PR https://github.com/odoo/enterprise/pull/83866 The field `uom_po_id` used has been removed in version 18.1 and replaced by `uom_id`. task-4751991 Forward-Port-Of: odoo/enterprise#84102
Before this commit: Some of the names in the stock_type list were wrong, causing an invalid type error when validating delivery. After the commit: Added a lookup table to update the incorrect names to match names in FedEx documentation. Fedex docs: https://developer.fedex.com/api/en-is/catalog/ship/docs.html opw-4725488 Forward-Port-Of: odoo/enterprise#84762
Original PR description
Before this commit: Some of the names in the stock_type list were wrong, causing an invalid type error when validating delivery. After the commit: Added a lookup table to update the incorrect names to match names in FedEx documentation. Fedex docs: https://developer.fedex.com/api/en-is/catalog/ship/docs.html opw-4725488 Forward-Port-Of: odoo/enterprise#84762
When dealing with statements with communication type 113 (ATM/POS debit), the partner is actually "hidden" in the communication field. We use this to retrieve a potential `partner_name` (name + city of vendor) that we can match to a real partner in the database. [format_description_CODA.pdf](https://github.com/user-attachments/files/20080995/format_description_CODA.pdf) opw-4653293 Forward-Port-Of: odoo/enterprise#84907 Forward-Port-Of: odoo/enterprise#84311
Original PR description
When dealing with statements with communication type 113 (ATM/POS debit), the partner is actually "hidden" in the communication field. We use this to retrieve a potential `partner_name` (name + city of vendor) that we can match to a real partner in the database. [format_description_CODA.pdf](https://github.com/user-attachments/files/20080995/format_description_CODA.pdf) opw-4653293 Forward-Port-Of: odoo/enterprise#84907 Forward-Port-Of: odoo/enterprise#84311