Skip to content

Syncing from upstream odoo/odoo (staging.saas-18.3) #34244

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 32 commits into from
Jul 12, 2025

Conversation

bt-admin
Copy link
Collaborator

bt_gitbot

malb-odoo and others added 30 commits July 11, 2025 05:53
This commit will add the amount residual in text in the note of the xml we sent
to nilvera. The text need to be in uppercase.
If the invoice is in another currency than Turkish Lira, we have to add two
notes one for the amount in turkish lira and one in the other currency
Also when the integer part or fractional part is zero it should be zero in
turkish.

task-4518269

closes #218514

X-original-commit: 0f733e1
Signed-off-by: Maximilien La Barre (malb) <[email protected]>
Signed-off-by: Florian Gilbert (flg) <[email protected]>
- removed work email constraint as the partner is now created
  without the need of work email

closes #218459

X-original-commit: c265537
Signed-off-by: Olivier Colson (oco) <[email protected]>
Signed-off-by: Meet Bariya (meba) <[email protected]>
Chatbot rating tours can sometimes fail. They all share the same steps: start a
chat, close the chat, then rate the agent. Before closing the chat, the tours
check that the message is present in the DOM, assuming it has been posted, then
close the chat window.

However, this is not enough to guarantee the thread was properly created. Initially,
a temporary thread is shown. When the user sends the first message, a temporary message
is posted on that thread while the real thread is created asynchronously.

As a result, closing the chat after checking the message in the DOM doesn’t guarantee
the window belongs to the persisted thread. If it doesn’t (due to slow network or high
CPU load), the rating panel never shows because the real thread was never closed.

This commit fixes the issue by waiting for the persisted thread to be created before
closing the chat.

fixes runbot-159683

closes #218443

X-original-commit: cc79ad8
Signed-off-by: Sébastien Theys (seb) <[email protected]>
Signed-off-by: Matthieu Stockbauer (tsm) <[email protected]>
Before this commit:

- Pressing backspace while a columns are selected could remove the base
  container inside that column.

After this commit:

- Multiple columns can no longer be selected using mouse or Shift+Arrow.
- Selecting columns using “Select All” (e.g., Ctrl+A) and pressing backspace
  will remove the columns.

task:4783325

X-original-commit: 7315de4
Part-of: #218013
Signed-off-by: David Monjoie (dmo) <[email protected]>
Before this commit:

- When a table row or column was not fully selected, pressing Backspace would
  replace the contents of the selected td elements with a br tag.

After this commit:

- Pressing Backspace in a partially selected row or column now replaces the
  content of the selected td elements with a base container instead of a br tag.

task:4783325

closes #218013

X-original-commit: 78309bb
Signed-off-by: David Monjoie (dmo) <[email protected]>
Currently these problems can appear when an invoice is cash rounded.
1. In case we use the "Modify tax amount" (`biggest_tax`) cash rounding strategy:
   The rounding amount is added to the taxes in Odoo but not in the UBL XML
   - This affects everything that uses `_prepare_invoice_aggregated_taxes`
     (and not just UBL XML)
2. The generated UBL XML is invalid (for any rounding strategy).
   See below for details.
3. The import of the exported UBL XML does not yield back the same invoice
   (even after fixing the export / the previous 2 problems).

Also there are some problems with the correction of tax values
of imported UBL XML (`correct_invoice_tax_amount`).
(They probably do not cause issues in practice but would after this
fix. We adapt the correction as part of the fix for (3).)

#### Runbot: How to generate problematic XML
1. Select BE Company CoA
2. Enable Cash Rounding in the settings
3. Create a cash rounding method
   (in the settings where cash rounding can be enabled):
   - precision `1.00`
   - strategy: any
   - profit / loss account: any
4. Create an invoice
   - Set a Belgian partner (e.g. "BE Company CoA" is okay)
   - Set the the cash rounding method from step 2
   - Single Line with price=70.00€ and a 21% tax
5. The total should be 85.00 € (84.70 € w/o the rounding)
   In the journal items there should be the following
   non payment term items:
   - 70.00€ base
   - 14.70€ tax
   -  0.30€ rounding (depending on the cash rounding strategy the tax is set or not)
6. Confirm & Send (with BIS Billing 3.0)
7. Look at the UBL BIS 3 XML in the `Invoice` element
   - `TaxTotal/TaxAmount`: 14.70€
   - `TaxTotal/TaxSubtotal/TaxableAmount`: 70.00€
   - `TaxTotal/TaxSubtotal/TaxAmount`: 14.70€
   - `LegalMonetaryTotal/TaxExclusiveAmount`: 70.00€
   - `LegalMonetaryTotal/TaxInclusiveAmount`: 85.00€
   - `LegalMonetaryTotal/PayableAmount`: 85.00€
8. This fails validation `BR-CO-15`:
   ```
     Invoice total amount with VAT (BT-112)
   = Invoice total amount without VAT (BT-109) + Invoice total VAT amount (BT-110).
   ```
   (`LegalMonetaryTotal/TaxInclusiveAmount` = `LegalMonetaryTotal/TaxExclusiveAmount` + `TaxTotal/TaxAmount`)

   Since the cash rounding is included in `LegalMonetaryTotal/TaxInclusiveAmount` but not in
   `TaxTotal/TaxAmount` (or `LegalMonetaryTotal/TaxExclusiveAmount`)

#### Tax value correction details (with examples)

Currently we try to fix the tax amounts after importing an invoice.
The function we use for that (`_correct_invoice_tax_amount`) has the following issues:
- We look for `TaxTotal/TaxSubtotal` elements anywhere.
  But i.e. such elements can also exist inside `InvoiceLine` elements.
  Example:
  - module `l10n_dk_oioubl` file `test_xml_oioubl_dk.py`
  - function `test_oioubl_import_exemple_file_4` / XML file 'external/BASPRO_01_01_00_Invoice_v2p1.xml'
- The tax total parsed from the document may need to be inverted.
  E.g. credit notes can be given as an invoice with negative amounts.
  See function `_get_import_document_amount_sign`.
  Example:
  - module `l10n_account_edi_ubl_cii` file `test_xml_ubl_be.py`
  - function `test_import_invoice_xml_open_peppol_examples` / XML file 'bis3_invoice_negative_amounts.xml'
- We compare the tax total from the document only with a single line of that tax.
  But there can be multiple lines for a single tax. We have to use the sum of all those lines for the comparison.
  Example:
  - module `l10n_account_edi_ubl_cii` file `test_xml_ubl_au.py`
  - function `test_export_import_invoice` / XML file 'from_odoo/a_nz_out_invoice.xml'

#### The fix

This commit does the following to fix that
1. We include cash rounding lines belonging to a tax in the tax computation for the UBL XML export
   (or rather everything any tax computation done with `_prepare_invoice_aggregated_taxes`).
2. After fixing (1) we only have to fix the "Add a rounding line" (`add_invoice_line`) strategy.
   This is as follows
   - Subtract the cash rounding from the `LegalMonetaryTotal/TaxInclusiveAmount`
   - Add node `LegalMonetaryTotal/PayableRoundingAmount` with the value of the cash rounding
3. Cases
   - `add_invoice_line`: We create a dedicated invoice line with the amount found in node
     `LegalMonetaryTotal/PayableRoundingAmount` (if it is present).
   - `biggest_tax`: We update the amount on the tax line to match the value found in the XML.
     (Currently we only do this if the difference is not greater than '0.05')

The fixes for the tax value correction on import are also needed for 3./`biggest_tax`.

#### Runbot: example XML after the fix

The export in the example then looks like this for the different cash rounding strategies
- `add_invoice_line`
  - `TaxTotal/TaxAmount`: 14.70€
  - `TaxTotal/TaxSubtotal/TaxableAmount`: 70.00€
  - `TaxTotal/TaxSubtotal/TaxAmount`: 14.70€
  - `LegalMonetaryTotal/TaxExclusiveAmount`: 70.00€
  - `LegalMonetaryTotal/TaxInclusiveAmount`: 84.70€
  - `LegalMonetaryTotal/PayableRoundingAmount`: 0.30€
  - `LegalMonetaryTotal/PayableAmount`: 85.00€

  The validation for the `LegalMonetaryTotal/PayableAmount` is still
  okay since (in the example) it is just `LegalMonetaryTotal/TaxInclusiveAmount` + `LegalMonetaryTotal/PayableRoundingAmount`.
- `biggest_tax`
  - `TaxTotal/TaxAmount`: 15.00€
  - `TaxTotal/TaxSubtotal/TaxableAmount`: 70.00€
  - `TaxTotal/TaxSubtotal/TaxAmount`: 15.00€
  - `LegalMonetaryTotal/TaxExclusiveAmount`: 70.00€
  - `LegalMonetaryTotal/TaxInclusiveAmount`: 85.00€
  - `LegalMonetaryTotal/PayableRoundingAmount`: (not exported)
  - `LegalMonetaryTotal/PayableAmount`: 85.00€

#### References

Also see
- https://docs.peppol.eu/poacc/billing/3.0/bis/#_rounding
- https://docs.peppol.eu/poacc/billing/3.0/bis/#_calculation_of_totals

task-4854592

X-original-commit: b033a87
Part-of: #218502
Related: odoo/enterprise#90014
Signed-off-by: Antoine Dupuis (andu) <[email protected]>
Signed-off-by: Sven Führ (svfu) <[email protected]>
Currently rounding lines (with taxes) are not included in the tax lines
in multiple places.

This is fixed in this commit.

See the previous commit for motivation.

part of
task-4854592

closes #218502

X-original-commit: 6fd5b89
Related: odoo/enterprise#90014
Signed-off-by: Antoine Dupuis (andu) <[email protected]>
Signed-off-by: Sven Führ (svfu) <[email protected]>
The `test_add_new_line_in_detailled_op` fails in 18.0+ since clicking
on the head of the modal content will trigger a web_read before the
records has been updated in db. So that the last applied change
disappear.

This commit attempt to clean the tour to be more reliable.

runbot-113534

closes #218436

X-original-commit: 5a49e92
Signed-off-by: William Henrotin (whe) <[email protected]>
Signed-off-by: Lancelot Semal (lase) <[email protected]>
…sons

Steps to reproduce:
- In the settings enable by-products
- Create a product FP with a bill of material:
	- 1 operation: op 1
	- 1 By-product line: cost share 3.3%, produced in op 1
- Create aand confirm an MO for 1 unit of FP
- On the by product line produce 10 instead of 1
- Produce All
> 19 units of by products were produced: The initial by-product move
> was validated for 10 units and an extra move with a quantity of 9
> was automatically created and validated aswell.

Cause of the issue:

Since the quantity of the by-product move exceed its initial demand, its
validation will create an extra move that is expected to be merge into
the main move during its confirmation:
https://github.com/odoo/odoo/blob/474ac02d03c17af0274422ecb1e97ca14a3e80e7/addons/stock/models/stock_move.py#L1922
https://github.com/odoo/odoo/blob/474ac02d03c17af0274422ecb1e97ca14a3e80e7/addons/stock/models/stock_move.py#L1844-L1865
However, while `cost_share` value of the original move floats is
correctly encoded as 3.3, the copied value of the extra is
3.3000000000000003. This discrepency is a well known issue of the way
the orm handles float and convert them to cache as it calls the
`float_round` method, which can effectively change its value:
https://github.com/odoo/odoo/blob/8c22e358840f02c5b1596e1fbe0d6cf7315754f7/odoo/fields.py#L1553-L1557
In particular, the `cost_share` of both moves differs in terms of strict
equality and the move will not be merged with its extra move.

Note:

The issue should not be reproducible in saas17.4+ because the
float_round issues have been erased by
commit 784f151

opw-4846289

closes #218271

X-original-commit: 132efe9
Signed-off-by: Quentin Wolfs (quwo) <[email protected]>
Signed-off-by: Lancelot Semal (lase) <[email protected]>
PR#135607 breaks support of image types other than
`png` for menu icons.
This puts back the support for previously
supported image types.

closes #218394

X-original-commit: 9facf18
Signed-off-by: Martin Trigaux (mat) <[email protected]>
Before this commit:

- Visually empty <div> elements could be inserted during paste.
- These empty blocks created invisible spacing in the editor.
- External styles inside pasted <div> elements were not removed.
- The placeholder (`Type '/' for commands`) could not render correctly
  in those areas.

This regression was introduced in commit `#196481`, which stopped replacing
blacklisted tags like <div> with <p>. As a result, cleanForPaste no longer
stripped inline styles from <div> elements.

After this commit:

- Non-empty <div> elements are now replaced with a valid baseContainer element.
- Empty <div> elements are automatically removed from pasted content.
- This restores the expected cleaning behavior and removes unwanted styles.

task-4805536

closes #218006

X-original-commit: 0c66222
Signed-off-by: David Monjoie (dmo) <[email protected]>
Before this commit:

- Duplicate IRNs were not deeply verified if the response already
contained a `SignedInvoice`.
- Mismatches between government-returned IRNs and the system’s invoice data
were not clearly logged or validated.

After this commit:

- If the `jwt` library is available and the response includes a `SignedInvoice`,
the decoded content is compared against the invoice’s `Gstin` and `TotInvVal`.
- A mismatch triggers a user-friendly error message about the duplicate IRN
with non-matching data.
- Decode errors are logged as warnings to aid in debugging.
- A fallback message is shown when the `jwt` library is not installed, indicating
that verification could not be performed.

This ensures more robust validation of duplicate IRNs and improves user
feedback in case of discrepancies or missing dependencies.

closes #218489

X-original-commit: 1e4d993
Signed-off-by: Josse Colpaert (jco) <[email protected]>
Signed-off-by: Zeel Patel (zepa) <[email protected]>
Versions
--------
- saas-18.2+

Steps
-----
1. Set up a company & website with Peruvian l10n;
2. add an identification type of "DNI" to your partner data;
3. set the identification number to "09123456";
5. go to /shop;
6. add product to cart and go to checkout;
7. try to add a new billing address.

Issue
-----
Cannot save the address, as it thinks you selected the RUC
identification type, which is not allowed.

Cause
-----
When a partner already has an identification type & number, they're not
allowed to add new ones to alternate addresses. Issue is that the
read-only field added via 5a93da8 is not an actual form field, and
doesn't provide its value on submit.

Solution
--------
Add a hidden `input` element with `l10n_latam_identification_type_id`,
after the read-only `t-else` element with a seperate `t-if` to prevent
breaking xpaths in stable.

opw-4817712

closes #218488

X-original-commit: c10e77a
Signed-off-by: Josse Colpaert (jco) <[email protected]>
Signed-off-by: Levi Siuzdak <[email protected]>
Before the commit, when a 'pick up in store' was published, the
out-of-stock message was hidden to avoid confusion.
However, customers want to benefit from it, and now we reintroduce it.

opw-4791969

closes #218472

X-original-commit: 1d06520
Signed-off-by: Valeriya Chuprina (vchu) <[email protected]>
Fix issue where minimum rights employee were able to put negative orderline qty in the cart with the `+/-` button

closes #218221

Task-id: 4922318
X-original-commit: 037d103
Related: odoo/enterprise#89906
Signed-off-by: Stéphane Vanmeerhaeghe (stva) <[email protected]>
Signed-off-by: Manu Vaillant (manv) <[email protected]>
Before this commit:

`pre` was not considered paragraph related element. Also it allowed flow content.

After this commit:

`pre` is considered paragraph related element and now it only allows phrasing
content also anything pasted within `pre` is now pasted as plain text and list
numbering and markers are preserved.

task-4766648

closes #218211

closes #218460

X-original-commit: 216e9eb
Signed-off-by: David Monjoie (dmo) <[email protected]>
We have recently introduced several new versions of the delivery
connectors, based on the newer REST APIs introduced by the shipping
companies (USPS, FedEx, UPS, DHL).

However, in the settings we still link with installation checkboxes to
the old modules.

To avoid confusion for the user, we remove these checkboxes and refer
the user to the Apps menu instead for manual installation of the
preferred shipping connector. In the apps menu, we clarify that these
new modules are only compatible with the new REST APIs, and we also hide
the legacy modules by default by making them application: False.

X-original-commit: 0832d9ee3cb821254b4ce30eedc05e32adc96332
[FIX] delivery_*_rest: update settings for delivery connectors

We have recently introduced several new versions of the delivery
connectors, based on the newer REST APIs introduced by the shipping
companies (USPS, FedEx, UPS, DHL).

However, in the settings we still link with installation checkboxes to
the old modules.

To avoid confusion for the user, we remove these checkboxes and refer
the user to the Apps menu instead for manual installation of the
preferred shipping connector. In the apps menu, we clarify that these
new modules are only compatible with the new REST APIs, and we also hide
the legacy modules by default by making them application: False.

closes #218487

X-original-commit: 15370f1
Related: odoo/enterprise#90010
Signed-off-by: Arnold Moyaux (arm) <[email protected]>
Signed-off-by: Claeys Pieter (clpi) <[email protected]>
Versions
--------
- 16.0+

Steps
-----
1. Have a fiscal position with a country-based tax mapping;
2. go to `/shop` as a public user,
3. create a new account;
4. add a product to your cart;
5. go to user settings & add an address that matches the fiscal position;
6. go to checkout & pay for the cart.

Issue
-----
The fiscal position's taxes aren't applied to the order.

Cause
-----
The `_compute_fiscal_position_id` method is triggered when changing the
`partner_id` or `partner_shipping_id` of an order. It does not trigger
when modifying the address of the order's current partner.

There is logic in place to recompute fiscal position & taxes when an
address gets entered via checkout, but not via any other route.

Solution
--------
Adding address fields to the `api.depends` of the compute method could
introduce the unintended behavior of changing taxes & fiscal position of
confirmed sale orders. Instead, we can check for fields relevant to
fiscal position in `write`, then search for unconfirmed website orders,
and recompute their fiscal position & taxes if need be.

opw-4844132

closes #218516

X-original-commit: 0d9fe9c
Signed-off-by: Levi Siuzdak <[email protected]>
…uidelines

Steps to reproduce:
1. Install the `Contacts` module.
2. Go to Contacts > Create a new contact.
3. Select country "India", then open the State dropdown.
4. Observe that "Orissa" appears instead of the updated name "Odisha".

Issue:
As per Government of India guidelines, the state name was officially changed
from "Orissa" to "Odisha" in 2011.
However, Odoo still uses the outdated name in the state selection.

Solution:
Update the name of the state from "Orissa" to "Odisha" in state records.

opw-4935633

closes #218530

X-original-commit: 4767737
Related: odoo/enterprise#90029
Signed-off-by: Nicolas Lempereur (nle) <[email protected]>
Signed-off-by: Khushi Srivastava (khsr) <[email protected]>
Before this commit, if multiple documents were sent to print at exactly
the same time, some of them could end up erroring because the Windows
printing API requires us to send one document at a time.

After this commit, we use a lock similar to the Linux driver, to ensure
that only one document is sent to the printer at once.

opw-4829908

closes #218541

X-original-commit: 78c1c47
Signed-off-by: Max Whale (mawh) <[email protected]>
We now ensure that the certificate data returned by odoo.com is not
empty, to avoid nginx not restarting.

closes #218467

Task: 4926102
X-original-commit: cfd47c4
Signed-off-by: Max Whale (mawh) <[email protected]>
Signed-off-by: Louis Travaux (lotr) <[email protected]>
Commit 769a7ec5ed4c introduced a restriction to ensure the
Peppol Endpoint only contains valid characters. This causes some issues
with upgraded database having existing partner with an invalid value.

This commit ensures we properly sanitize both Peppol Endpoint existing
and new value (before testing its validity).

opw-4925940

closes #217904

Signed-off-by: Claire Bretton (clbr) <[email protected]>
Versions
--------
- 18.0+

Steps
-----
1. Enable debugging mode;
2. go to Settings / Technical / Database Structure / Attachments;
3. search for a PDF attachement;
4. open developer tools;
5. click on Record / Data.

Issue
-----
> Connection lost. Trying to reconnect...

Traceback in logger:
> `UnicodeDecodeError: 'utf-8' codec can't decode byte ...`

Cause
-----
Commit 5ef4c07 moved the `json_default` function from `date_utils`
to `json`, with the purpose of letting it serialize objects besides
`date` & `datetime`.

When used for raw data of binary files like PDF, it encounters values
that cannot be represented in UTF-8, and because `decode` defaults to
strict error handling, an exception is thrown.

Solution
--------
When sending the `read` request to the ORM, only request fields of that
aren't of type `binary` to ensure they're serializable.

opw-4717657

closes #218562

X-original-commit: 21e517c
Signed-off-by: Aaron Bohy (aab) <[email protected]>
Steps to reproduce:
1. Enable the cookie bar.
2. Edit the cookie bar to have a link/button at the center.
3. Go to /shop.
4. Click the "compare" button on one product.
5. Scroll down and click "compare" on another product.

Issue 1:
Product animation goes to the top-left corner.

Issue 2:
After accepting the cookie bar, the compare button appears but overlaps
with the popover.

Reason:
To cover bottom fixed elements when any modal is open, we added the
`o_bottom_fixed_element_hidden` class with the `d-none` property to hide
those elements, making them visible once the modal closes. As a result,
the compare button hides when scrolled, leading it to redirect to the
top-left corner. Additionally, adding a product triggers the applyStyles
function of popper.js to handle popover styles. When the cookie bar is
accepted and the modal closes, this method doesn't trigger until scroll.

This commit aims to resolve animation of product comparison when modal
is open by remove the `o_bottom_fixed_element_hidden` class when added
to compare products. Additionally, we add debounce leading and trailing
params to the `_hideBottomFixedElements` to call function accordingly.

task-3877807

X-original-commit: 9167c0a
Part-of: #218560
Signed-off-by: Benjamin Vray (bvr) <[email protected]>
Before version `saas-18.1`, we were using `publicWidget`, where
`bottomFixedElement` was bound to the scrollable target returned by the
`getScrollingTarget` function. This function (implemented with `jQuery`)
was used to detect the appropriate scrollable container. The same
`getScrollingTarget` function was also used in the `sharePopup widget`,
specifically in the `onModalHidden` method, which triggers a scroll
event when the modal becomes hidden.

However, starting from version `saas-18.2`, we migrated to using
`interaction` instead. In this new setup, we use `scrolling.js` from
`web`, which does not include a `getScrollingTarget` function. As a
result, the `bottomFixedElement` interaction is now bound directly to
the `document scroll`. Additionally, when closing the `sharePopup`, we
now trigger the scroll method on the current scrollingElement using
`getScrollingElement` instead of `getScrollingTarget`.

The key difference is:
- `getScrollingElement` returns `document.scrollingElement`
- `getScrollingTarget` used to return `window` if the default scrolling
element was used

Going forward, both `getScrollingTarget` and `getScrollingElement` will be
deprecated. New implementations should rely directly on `window` or
`documentElement` as appropriate.

From this commit, we now pass the `defaultView` of the
`scrollingElement` directly and bind the scroll method to it.

task-3877807

closes #218560

X-original-commit: 21eb6ac
Signed-off-by: Benjamin Vray (bvr) <[email protected]>
**Issue**
The auto check out cron was using the check in time in UTC to
determine the excepted working hours and the previous attendances.

For example:
- have an employee with a working schedule using a UTC+8 timezone.
- check-in on a monday before 8am (0:00 UTC) in the employee's tz.
- the auto check-out cron closes the attendance immediately because
there are no working hours for the attendance's check in day in UTC
(Sunday).

**Change**
Use the date of the check-in localized in the tz of the calendar used
by the attendance's employee to determine the previous worked hours
for that day and the expected worked hours.

opw-4654847

closes #218499

X-original-commit: f140c73
Signed-off-by: Bertrand Dossogne (bedo) <[email protected]>
Signed-off-by: Tanguy Quéguineur (taqu) <[email protected]>
### Contains the following commits:

odoo/o-spreadsheet@d14dc9646 [REL] 18.3.12 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)
odoo/o-spreadsheet@8527178e8 [PERF] pivot: don't invalidate cache needlessly [Task: 4933971](https://www.odoo.com/odoo/2328/tasks/4933971)
odoo/o-spreadsheet@929b7dece [FIX] pivot: don't aggregate calculated missing value [Task: 4933818](https://www.odoo.com/odoo/2328/tasks/4933818)
odoo/o-spreadsheet@20c9cf9d2 [FIX] Cells: newline is not a valid date separator [Task: 4910327](https://www.odoo.com/odoo/2328/tasks/4910327)
odoo/o-spreadsheet@e7a5b5713 [FIX] error_tooltip: Do not show cause position in dashboard [Task: 4926129](https://www.odoo.com/odoo/2328/tasks/4926129)
odoo/o-spreadsheet@540c957b1 [PERF] import xlsx: avoid reading all cells multiple times during table_conversion [Task: 4699860](https://www.odoo.com/odoo/2328/tasks/4699860)
odoo/o-spreadsheet@8819a85e7 [FIX] Config: remove eslint [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)
odoo/o-spreadsheet@6f909ad4b [IMP] config: ignore .DS_Store file from mac os [](https://www.odoo.com/odoo/2328/tasks/)
odoo/o-spreadsheet@370834ea7 [FIX] header_size: resize row based on link label instead of full link [Task: 4886598](https://www.odoo.com/odoo/2328/tasks/4886598)
odoo/o-spreadsheet@27da73f39 [FIX] pivot: allow to group by error [Task: 4886041](https://www.odoo.com/odoo/2328/tasks/4886041)
odoo/o-spreadsheet@99455ac47 [FIX] demo: fix `clear` action again [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)
odoo/o-spreadsheet@dc88dc725 [FIX] demo: Fix new `clear` action [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)

closes #218595

Signed-off-by: Vincent Schippefilt (vsc) <[email protected]>
Co-authored-by: Anthony Hendrickx (anhe) <[email protected]>
Co-authored-by: Alexis Lacroix (laa) <[email protected]>
Co-authored-by: Lucas Lefèvre (lul) <[email protected]>
Co-authored-by: Dhrutik Patel (dhrp) <[email protected]>
Co-authored-by: Adrien Minne (adrm) <[email protected]>
Co-authored-by: Mehdi Rachico (mera) <[email protected]>
Co-authored-by: Florian Damhaut (flda) <[email protected]>
Co-authored-by: Rémi Rahir (rar) <[email protected]>
Co-authored-by: Pierre Rousseau (pro) <[email protected]>
Co-authored-by: Vincent Schippefilt (vsc) <[email protected]>
Step to reproduce
1. Createdb with account and contact module install
   in 18.0 version.
2. create 2 company A and B
3. create partner with both company A and B seperate
4. create a user that have only rights of company B and rights
   of Accounting/setting groups
5. create a Bank account(Contact->Configuration->Bank Account)
   with partner A in company A
6. Now login with user B and create a bank account number with same
  account number. Access error will come.

For resolve the access error fetching the correct result according to
company so it won't fetch other company result the changes merged
last week
ad6c900#diff-22e97cf61c6826e67cd9a3276bdb292e997cb1117ca44c1749c69d5d01931787R69

```
Access Error

Uh-oh! Looks like you have stumbled upon some top-secret records.

Sorry, Test B (id=7) doesn't have 'read' access to:
- Contact, A (res.partner: 8)

Blame the following rules:
- res.partner company

If you really, really need access, perhaps you can win over your friendly administrator with a batch of freshly baked cookies.

This seems to be a multi-company issue, but you do not have access to the proper company to access the record anyhow.
```

upg-2986193
opw-4876839
tbg-2093

closes #218523

X-original-commit: 992f03a
Signed-off-by: Ruben Gomes (rugo) <[email protected]>
Signed-off-by: Sanchit Gupta (sagu) <[email protected]>
In order to ease development/debugging lonpolling=>websocket fallback
we added the possibility to disable longpolling calls in order to
force the communication via websocket.

closes #218598

Task: 4929877
X-original-commit: b89b9f7
Signed-off-by: Louis Travaux (lotr) <[email protected]>
The script failed to find the corresponding rows in the data files,
leading to some translations being lost when migrating them to the new
syntax.

opw-4659964

closes #218461

X-original-commit: 7a1bfe6
Related: odoo/enterprise#90004
Signed-off-by: William André (wan) <[email protected]>
stva-odoo and others added 2 commits July 11, 2025 20:28
Previously, the “closing session” notification was not correctly handled in the frontend.

Steps to reproduce:
- Open a POS session on two devices
- On Device 1:  Close the Register.
- On Device 2:  Nothing happens. A dialog titled “Closing session” should appear, but it does not.

After this commit, the notification includes the correct parameters, allowing the frontend to handle the “closing session” event properly.

closes #218391

Signed-off-by: Adrien Guilliams (adgu) <[email protected]>
`is_storable` is defined in `stock`. This test is located in `purchase`, that do not depend on `stock`. We use type='consu' instead. This change ensures that the product is created with the correct type.
build_error-229762

closes #218683

Forward-port-of: #218403
Signed-off-by: William Henrotin (whe) <[email protected]>
Signed-off-by: Omar Sherif Ali Hassan (osah) <[email protected]>
@bt-admin bt-admin merged commit b49f4a0 into brain-tec:staging.saas-18.3 Jul 12, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.