Skip to content

Conversation

@benwillig
Copy link

No description provided.

DjamelTouati and others added 30 commits August 20, 2025 07:47
Steps to reproduce the bug:
- Install l10n_ke_edi_oscu_stock
-Try to run the test: test_package_with_moves_to_different_location_dest

Problem:
 A user error is raised:
“There is nothing eligible to put in a pack. Either there are no
quantities to put in a pack or all products are already in a pack.”
This happens because when only sale_stock is installed, the product
type is Consumable, so the move gets assigned directly. However, with
l10n_ke, the product becomes Storable, and when assigning the move,
the system checks whether there is enough quantity available in stock.

Solution:
Force the product to remain Storable in all cases and update its stock
quantity accordingly.

runbot-108414

closes odoo#223002

X-original-commit: b8f7998
Signed-off-by: Quentin Wolfs (quwo) <quwo@odoo.com>
Signed-off-by: Djamel Touati (otd) <otd@odoo.com>
closes odoo#223011

Task: 4962837
Related: odoo/enterprise#92393
Signed-off-by: Rémi Rahir (rar) <rar@odoo.com>
Before this commit, selling an event in PoS would trigger the loading
of all event registrations linked to the event. This was unnecessary
and caused issues, as it also attempted to load the related PoS order
lines, leading to potential errors.

opw-4956313

closes odoo#222081

Signed-off-by: Stéphane Vanmeerhaeghe (stva) <stva@odoo.com>
Steps to reproduce:
- Create a storable product:
  - Vendor: Azure Interior
  - Routes: MTO + Buy
- Click on the replenishment button
  → a purchase order is created
- Open the PO and set a project
- Replenish the product again

Problem:
The first purchase order is reused even though it has a project,
while it should not.

Solution:
When searching for a candidate purchase order, ensure that the
`project_id` matches the procurement values:
- A PO with a project can only be reused for procurements with the same
 project.
- A PO without a project can only be reused for procurements without a
 project.

opw-4976606

closes odoo#223422

Signed-off-by: William Henrotin (whe) <whe@odoo.com>
To reproduce:
=============
- Activate the "Attendances" app.
- Go to Attendances > Overview.
- Switch to list view.
- Group by Employee.

Issue:
======
The current domain fetches all employees matching the filter,
regardless of whether they have attendance entries in the grouped model.
https://github.com/odoo/odoo/blob/5b5f0bf795ca538e91f063f2b3185c12b1d0a992/addons/hr_attendance/models/hr_attendance.py#L677

Fix:
====
Restrict the employee list to only those linked to a resource that
appears in the grouped data
https://github.com/odoo/odoo/blob/5b5f0bf795ca538e91f063f2b3185c12b1d0a992/odoo/models.py#L2360-L2361
The problem is the behavior of gantt view will change it's behavior
So we have to applied only to the list.
there's something unique when we call it from the gantt which is
`gantt_start_date` property that we will use it so we can differentiate
between list and gantt view

opw-5008868

closes odoo#223181

Signed-off-by: Bertrand Dossogne (bedo) <bedo@odoo.com>
Before this commit:
====================
The POS UI did not display a favicon in the browser tab.

After this commit:
==================
The standard Odoo Point of Sale favicon is now displayed in the
browser tab for the POS UI, consistent with the backend interface.

Task-4978320

closes odoo#223528

Signed-off-by: David Monnom (moda) <moda@odoo.com>
Description:

When using serial numbers, pickings with many move lines can
cause performance issues during validation. This is due to
`_update_reserved_quantity` updating quantities and creating
move lines individually. By moving the creation outside
`_update_reserved_quantity`, we can batch create move lines
per move, significantly improving performances.

Benchmark:

| N° of mls |  Before | After |
|-----------|---------|-------|
|       500 |    1:37 |  1:34 |
|     15000 | Timeout |  3:30 |
|     30000 | Timeout |  4:29 |

Reference:

opw-4889581

closes odoo#223420

X-original-commit: de50d04
Signed-off-by: Quentin Wolfs (quwo) <quwo@odoo.com>
Signed-off-by: Aurélien Marie (auma) <auma@odoo.com>
Description of the issue this commit addresses:

The export tax for services is missing in the italian localization.
It's required because it has a different legal note than the usual 0% EU tax.

Desired behavior after this commit is merged:

The italian localization has a 0% EU S for exported services in EU with the
right legal note.

task-4715771

closes odoo#223524

X-original-commit: 0b24538
Signed-off-by: John Laterre (jol) <jol@odoo.com>
Signed-off-by: Thomas Becquevort (thbe) <thbe@odoo.com>
In this bug, the payment method is not shown in the child
branch.

To reproduce:
1- Create a db with account and contact app installed
2- Create a company and a branch
3- Create a payment method in parent company and add it to
contact form of a partner
4- Go to child branch. You can see the payment method is not
shown in the contact form.

opw-4920219

closes odoo#219448

Signed-off-by: Julien Alardot (jual) <jual@odoo.com>
Problem:
In Website, the `order_by` hidden input stores the selected sort
order for search. This input can currently be deleted via
`oDeleteBackward`, which may break the form behavior.

Solution:
Make `order_by` input unremovable to ensure form integrity.

Steps to reproduce:
- Add a "Title" text block
- Insert a search element before the text
- Delete all the text
- Use backspace to delete the header block
- Save
- > A traceback occurs because the `order_by` input was deleted

opw-4863089

closes odoo#223197

X-original-commit: 157e0e4
Signed-off-by: Walid Sahli (wasa) <wasa@odoo.com>
### Problem:
Following this pr odoo#217348,
field prefetching is unnecessary when fetching orders, as all required
fields are already fetched explicitly. Keeping prefetching enabled
causes excessive memory usage.

### Benchmark

| Orders | Before  | After  |
|--------|---------|--------|
| 1k     | 6MB     | 5.8MB  |
| 10k    | 42MB    | 27MB   |
| 100k   | 534MB   | 320MB  |
| 200K   | 1.1GB   | 646MB  |

opw-4901994

closes odoo#223379

X-original-commit: bfaa10f
Signed-off-by: Adrien Guilliams (adgu) <adgu@odoo.com>
Signed-off-by: Majed Alhanash (malh) <malh@odoo.com>
Before this commit, URL test/suite IDs were warned in the console if
they didn't match any test/suite registered by the test runner.

This is an issue for Runbot which runs sub-builds with the same URL
parameters regardless of the installed addons, which repeatedly fails
such builds (with the IDs being exluded, with a "-" sign).

To fix this, this commit only logs such warnings when the job that was
not found is *included*, while if it is *exluded*, the ID will be
removed/ignored silently.

runbot 230082

closes odoo#223242

Signed-off-by: Michaël Mattiello (mcm) <mcm@odoo.com>
…dify ZIP usage

Behaviour before this commit:
- Previously, the picking partner was used for sending both the Delivery Customer
and delivery address in the XML.
- Secondly, ZIP was used in Delivery Customer regardless of the country of the
partner (Turkish or Non-Turkish)

Desired behaviour after this commit:
- After this commit, the commercial partner of the picking partner will be used
for sending the Delivery Customer data and picking partner itself will be used
for sending the Delivery Address in the XML.
- Additionally, if the commercial partner is non turkish, customs ZIP will be
used in the Delivery Customer in the XML.
- If the delivery is validated without giving Delivery Address, then the
'Generate e-Dispatch (XML)' button will be hidden.

TaskID:4918748

closes odoo#223563

X-original-commit: b11eec8
Signed-off-by: Florian Gilbert (flg) <flg@odoo.com>
_*= project_timesheet_holidays

Steps to Reproduce:
1. Create a global working schedule (company should be False).
2. Assign this working schedule to any employee.
3. Create a public time off (for all the working schedule).
4. You will notice that the timesheet entry is not generated for the public
   holiday for that employee.

Issue:
- Employees who use the WS without a company are excluded from timesheet
  creation.

Cause :
- When grouping employees by calendar global WS (with no company)
  were being excluded.
- And the timesheets were not generated due to the check
  `calendars_dict[calendar_id].company_id != company` when the WS had no company

Fix:
- We will add the domain to include the global WS and and we will check if the
  the WS has company id then only check the condition.

task-4900941

closes odoo#219916

Signed-off-by: Xavier Bol (xbo) <xbo@odoo.com>
This commit adds the missing neutralization necessary for the l10n_gr_edi
module introduced in [1]

The purpose of the standard neutralization framework is to allow us to
create database copies that will not interact with external systems in
ways that could impact the production database (or if it is not possible
to prevent the interactions, make sure that they are benign or won't
result in actual changes), or impact the customers of the operator of
the production database.

This is mainly useful to allow safe support investigation on database
duplicates.

[1] odoo#203428

closes odoo#223536

Signed-off-by: Claire Bretton (clbr) <clbr@odoo.com>
Description:

Improves the performance of `button_finish` when confirming many
work orders. Previously, the method would update each work order
individually, leading to slow performance. This PR changes the way
the write is executed to do it by batch, which is much faster,
especially when work orders share the same manufacturing order.

Benchmark (in 18.0):

| N° of work orders | Before | After |
|-------------------|--------|-------|
|              250  |    14s | 610ms |
|              500  |    53s |    1s |

Reference:

opw-4957774

closes odoo#223588

Signed-off-by: Steve Van Essche <svs@odoo.com>
The wrong package name leads to a warning at install time making
unnecessary noise in nighlty builds.

closes odoo#223520

Signed-off-by: Christophe Monniez (moc) <moc@odoo.com>
Steps to reproduce:
- Enable a foreign currency with rate
- Create an invoice in foreign currency
- Switch to company currency, then back to foreign currency before
  saving
- Check journal items values

Issue: Amount currency and balance have been affected by the currency
rate even if the original currency was restored before saving

opw-4864994

closes odoo#222870

Signed-off-by: de Wouters de Bouchout Jean-Benoît (jbw) <jbw@odoo.com>
…agraph

Problem:
When at the end of a paragraph, pressing SHIFT+ENTER followed by
ENTER creates a new paragraph, but the previous one loses its last
line break.

Cause:
When splitting an element, the `<br>` at the selection point is
moved to the newly created split element. However, to render an
empty line visibly, two `<br>` elements are needed. Moving the
existing `<br>` makes the last line break in the original paragraph
invisible.

Solution:
In this special case, instead of moving the `<br>` at the selection
point, insert a new `<br>` in the new element, preserving the visual
line break in the original paragraph.

Steps to reproduce:
- Add a paragraph
- Type some text, then press SHIFT+ENTER
- Press ENTER to create a new paragraph
> The last line break in the first paragraph is lost

opw-4987922

closes odoo#221955

X-original-commit: a73211a
Signed-off-by: David Monjoie (dmo) <dmo@odoo.com>
Signed-off-by: Walid Sahli (wasa) <wasa@odoo.com>
Those tests are failing when python-magic is installed. Since 26f9c82
Odoo > saas-18.4 has this lib as a requirement and comes with
appropriate fixes.

This commit adapts some test from 17.0 up to saas-18.4 to also
work when the python-magic lib is installed.

closes odoo#223642

X-original-commit: 98dc18c
Signed-off-by: Christophe Monniez (moc) <moc@odoo.com>
Before this commit, searching for an order by `tracking_number` matched
against the `pos_reference` field. However, the `tracking_number` is
constructed using the `session_id`, not the `pos_reference`. This
mismatch could cause orders from other sessions to be not found, as the
session id related part of the `tracking_number` may not align with the
`pos_reference`.

This commit fixes the issue by adjusting the search logic to match
against the `session_id` instead, ensuring accurate results when
looking up orders by `tracking_number`.

opw-4934482

closes odoo#221918

Signed-off-by: Stéphane Vanmeerhaeghe (stva) <stva@odoo.com>
Since 7744886, reading binary field
with bin_size=True unncessarily reads the ir.attachment `datas` field,
which is slow with some storage backends.

In the products kanban view this can easily add 1 sec to web_search_read,
if there is a 10ms latency when reading images.

closes odoo#221270

Signed-off-by: Raphael Collet <rco@odoo.com>
closes odoo#223315

Signed-off-by: Victor Feyens (vfe) <vfe@odoo.com>
A buggy behavior when there are more than 5 managers was fixed.
The org chart now updates before the employee record is saved.

task-4609465

closes odoo#223655

X-original-commit: 280f189
Signed-off-by: Bertrand Dossogne (bedo) <bedo@odoo.com>
Signed-off-by: Ahmed Taha Abdelaziz (ahta) <ahta@odoo.com>
Before this commit:

- When color was applied to a block-level element, attempting to remove it
  caused the removeFormat method to enter an infinite loop.

After this commit:

- Now, the color is correctly removed from the selected text, even when it is
  applied to a block-level element.

closes odoo#198319

Task: 4575459
Signed-off-by: David Monjoie (dmo) <dmo@odoo.com>
Versions
--------
- 18.0+

Steps
-----
1. Have an unpaid invoice;
2. generate a partial payment link;
3. open partial payment link;
4. click the Pay button.

Issue
-----
The invoice's full amount gets requested.

Cause
-----
Commit 5697493 added `amount` as a named keyword parameter in an
`_invoice_get_page_view_values` override, but failed to pass it along to
the call to `super`. As the base method no longer receives an `amount`
parameter, it defaults to the invoice total.

Solution
--------
Pass `amount` to the `super` call.

opw-5013044

closes odoo#223554

Signed-off-by: Thomas Becquevort (thbe) <thbe@odoo.com>
### Contains the following commits:

odoo/o-spreadsheet@bc6051c9e [REL] 18.0.41 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)
odoo/o-spreadsheet@e95196363 [FIX] xlsx: correctly export aggregated charts [Task: 4954426](https://www.odoo.com/odoo/2328/tasks/4954426)
odoo/o-spreadsheet@f55d9f356 [FIX] selection: prevent partial move of table rows with headers [Task: 4862731](https://www.odoo.com/odoo/2328/tasks/4862731)
odoo/o-spreadsheet@94acb2343 [FIX] pivot: reload when delete is undone [Task: 5001153](https://www.odoo.com/odoo/2328/tasks/5001153)

closes odoo#223672

Signed-off-by: Pierre Rousseau (pro) <pro@odoo.com>
Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com>
Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com>
Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com>
Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com>
Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com>
Co-authored-by: Ronak Mukeshbhai Bharadiya <rmbh@odoo.com>
Co-authored-by: Florian Damhaut (flda) <flda@odoo.com>
Co-authored-by: Rémi Rahir (rar) <rar@odoo.com>
Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com>
Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com>
Purpose of this commit:
Fix the position of message actions on log notes authored by the current user.

Messages authored by self appear on the right side of the thread.
This commit mirrors the action placement logic so that,
like messages from others (which show actions to the right of the date),
self-authored messages show actions to the left of the date.

task-4689357

closes odoo#216520

Signed-off-by: Matthieu Stockbauer (tsm) <tsm@odoo.com>
Steps to reproduce:
- Install Accounting
- Go to "Accounting / Accounting / Journals / Journal Entries"
- Create the following MISC entries in this order:
  1)
   |      Account       |  Partner  | Debit | Credit |
   | ------------------ | --------- | ----- | ------ |
   | Receivable Account | Partner A |  1000 |    0   |
   |     Account X      | Partner A |    0  |  1000  |

  2)
   |      Account       |  Partner  | Debit | Credit |
   | ------------------ | --------- | ----- | ------ |
   | Receivable Account | Partner B |  1001 |    0   |
   |     Account X      | Partner B |    0  |  1001  |

  3)
   |      Account       |  Partner  | Debit | Credit |
   | ------------------ | --------- | ----- | ------ |
   | Receivable Account | Partner C |  1002 |    0   |
   |     Account X      | Partner C |    0  |  1002  |

  4)
   |      Account       |  Partner  | Debit | Credit |
   | ------------------ | --------- | ----- | ------ |
   | Receivable Account | Partner C |    0  |  1002  |
   |     Account X      | Partner C |  1002 |    0   |

  5)
   |      Account       |  Partner  | Debit | Credit |
   | ------------------ | --------- | ----- | ------ |
   | Receivable Account | Partner B |    0  |  1001  |
   |     Account X      | Partner B |  1001 |    0   |

  6)
   |      Account       |  Partner  | Debit | Credit |
   | ------------------ | --------- | ----- | ------ |
   | Receivable Account | Partner A |    0  |  1000  |
   |     Account X      | Partner A |  1000 |    0   |

- Go to "Accounting / Accounting / Journals / Journal Items"
- Select the 6 created lines linked to the Receivable Account
- Reconcile them

Issue:
The 6 lines are fully reconciled, but when checking the amounts of
the partial reconcile records (not visible in the UI), the debit
and credit amounts are matched by their actual order.
So, the first debit line of 1000 is matched with the first credit
line of 1002, which results in a residual credit of 2 that is then
matched with the second debit line of 1001, which leads to a
residual debit of 999 and so on.
This generates weird amounts in the partial reconcile records.

Solution:
In the case there are several lines with different partners, the
lines can be sorted by partner to try to match the lines with the
same partner together.

opw-449356

closes odoo#223512

Related: odoo/enterprise#92371
Signed-off-by: Julien Alardot (jual) <jual@odoo.com>
jugj-odoo and others added 29 commits August 22, 2025 16:48
In this PR, we allow fully flexible employees to take time off in hours, to allow other apps such as timesheet to encode their paid holidays

closes odoo#217938

Signed-off-by: Bertrand Dossogne (bedo) <bedo@odoo.com>
Currently, an error occurs when a user tries to save an invoice with a currency
rate of 0.

Steps to reproduce:
- Install `Invoicing` and enable at least 2 currencies.
- Go to Invoices and change currency to something other than USD.
- Now change the currency rate displayed to 0 and save.

Error:
`ZeroDivisionError: float division by zero`

Cause:
- Error occurs due to a recent feature that allows changing currency rate.
- Error occurred because the user set the currency rate to `0`, and line [1]
  attempted a division by zero, resulting in the error.

Solution:
- Added a constraint that restricts the currency rate and raise validation.
- Added a default value for the currency rate.

[1]:
https://github.com/odoo/odoo/blob/698e71b3a5b35fec5c7a27f2487df0e368c541b3/addons/account/models/account_move_line.py#L1505

sentry-6762861372

closes odoo#220833

Signed-off-by: de Wouters de Bouchout Jean-Benoît (jbw) <jbw@odoo.com>
Issue:
- In `test_14_pos_payment_sync`, the tour could end before the order was
  synced to the server, causing errors in later steps.

Fix:
- Added steps to wait until the sync is done before finishing the tour.

Runbot Error: 113594, 181563

closes odoo#222581

Task: 4974068
Signed-off-by: David Monnom (moda) <moda@odoo.com>
…main selection

Steps to reproduce
==================

- Enable debug
- Go to Settings / User & Companies / Groups
- Open a record
- Switch to the Views notebook tab
- Add a line
- Group by Model
- Click on the o_list_record_selector checkbox

=> The Select button is disabled

Cause of the issue
==================

The list_controller onSelectionChanged props is only called when we
select records manually, but not when using the domain selection

Solution
========

Backport part of
odoo@1d761ac

This calls the onSelectionChanged when this.model.root.isDomainSelected
changes

opw-4856528

closes odoo#223772

Signed-off-by: Adrien Dieudonné (adr) <adr@odoo.com>
Odoo 17.0 supports Python ≥3.11, which installs docutils==0.20.1.
This version deprecates `Node.traverse()` in favor of `Node.findall()`.

To avoid deprecation warnings and ensure compatibility with both
docutils 0.17 and 0.20.1, this patch uses `findall()` if available
and falls back to `traverse()` otherwise.

This change is backward-compatible and safe to cherry-pick to 18.0.

closes odoo#222170

X-original-commit: a51c3d9
Signed-off-by: Chong Wang (cwg) <cwg@odoo.com>
Steps to reproduce the issue:
1. Install a second language (eg, ar_001) and `product`
2. Start odoo shell
3. Run the following:

`(env := env(context=dict(env.context,lang='ar_001')))['product.template'].new({'name':'test'}).with_context(lang='en_US').name`

Current behavior before PR:
The `get` method of the cache will not find a value for the `en_US`
language and set the value stored in the env language
to a default (`None` in this case) after raising `CacheMiss`

Desired behavior after PR is merged:
We can read and write translatable fields in different
languages on transient records without data loss.

opw-4943458

closes odoo#223958

X-original-commit: c32277a
Signed-off-by: Raphael Collet <rco@odoo.com>
Co-authored-by: Raphael Collet <rco@odoo.com>
Co-authored-by: Chong Wang <cwg@odoo.com>
Retrieve dynamic fields efficiently if they exist.

task-5016313
…is deleted

Currently, installing the Belgium Accounting localization fails with an error,
if the user has deleted referenced demo account tags.

Steps to reproduce:
- Install the Accounting app.
- Delete the "Demo Capital Account" account tag.
- Install the Belgium Accounting localization (`l10n_be`).

Error:
ValueError - External ID not found in the system: account.demo_capital_account

At [1], if the `account.demo_capital_account` is not found, it raises
an error if the external ID is missing.

This commit prevents the error by explicitly passing raise_if_not_found=False
and skipping the tag if not found.

[1] -  https://github.com/odoo/odoo/blob/71d1c9a4bef1c29485e3b0390713a9301ad6db4f/addons/l10n_be/demo/account_demo.py#L13-L19

sentry-6776341713

closes odoo#223880

X-original-commit: 6b67731
Signed-off-by: de Wouters de Bouchout Jean-Benoît (jbw) <jbw@odoo.com>
Signed-off-by: Aditi Patel (adip) <adip@odoo.com>
Nilvera rejects E-Archive invoices if extra nodes are present under
PartyTaxScheme when the tax office is not set. This fix removes
unnecessary fields (`registration_address_vals`,`registration_name`
, `company_id`) to prevent blocking validation errors. In addition,
fix invoice_edi_format TR selection name value.

task-5017223

closes odoo#223770

Signed-off-by: Maximilien La Barre (malb) <malb@odoo.com>
## Short functional explanation of the error
When duplicating a warehouse, if it has an PoS operation type,
this operation type will not be duplicated. On the other hand,
all other operation types will be duplicated.

## Reproduction Steps
1. Make sure PoS and inventory are well installed.
2. Go to inventory.
3. Click on configuration, then warehouse.
4. Select a warehouse, click on action, then duplicate.
5. Click on configuration, then on Operation Types.

### Expected behavior
We should be able to see 2 instances of PoS operation type:
one for the original company, and one for the copy.

### Unexpected behavior
There's only one instance of PoS operation type, which is
related to the original company.

## Origin of the issue
PoS operation type is a model inherited from stock.warehouse,
and no copy method was defined. Therefore, upon duplication,
the copy method of the original stock.warehouse was called,
leading to issues with the field created in the inherited
version.

__
opw-4991271

closes odoo#223024

X-original-commit: f451b71
Signed-off-by: David Monnom (moda) <moda@odoo.com>
Signed-off-by: Maeva de Keyser (mdek) <mdek@odoo.com>
*: test_website

Steps to reproduce:
- Install website_event, with demo data
- Change Marc Demo's website access to "Restricted Editor"
- Log into Marc Demo and visit an event's website page e.g."Live Music Festival"
- The user is able to edit the footer contents, make a change
- Try to save
=> An error pop-up for access rights appears

The fix at [1] allowed website to be editable for restricted user if,
user can modify other models, which are editable from website, like
events. And, if website is editable, we brand the ir.ui.views nodes, but
restricted user do not have access to ir.ui.view model.

Fix:
Brand ir.ui.view nodes only if user has full access to website editor

[1]: odoo@11e94cb

opw-4659114

closes odoo#223831

X-original-commit: 8c41c14
Signed-off-by: Quentin Smetz (qsm) <qsm@odoo.com>
Signed-off-by: Ajit Kumar  Krishnanand Singh (aksi) <aksi@odoo.com>
after this commit when a candidate or applicant is created,
the corresponding contact should display the candidate’s name correctly,
rather than defaulting to the email address.

task-4687196

Part-of: odoo#205286
Signed-off-by: Yannick Tivisse (yti) <yti@odoo.com>
this commit fixes the tours in pos_loyalty to search for customers
when customer is not updated in list, by clicking the "Search More"
button. one tour was fixed by changing the customer name to
"A Test Partner" so that it starts with "A" and is always
available in the list.

task-4687196

closes odoo#205286

Signed-off-by: Yannick Tivisse (yti) <yti@odoo.com>
Steps to Reproduce:
1. Install project and create two projects and tasks.
2. Share both projects with edit access.
3. Edit a task from the portal view (Back to edit mode) then click the
   (back to tasks) button.
4. Instead of the correct project the page redirects to the another project
   kanban view.

Issue:
- When redirecting to a task from project sharing (edit mode – task form view)
  it redirects to a different project’s kanban view instead of the actual
  project.

Cause:
- In the portal view the URL is hardcoded with `id=1` instead of dynamically
  using the correct project ID.

Fix:
- pass the correct `project_id` in the URL instead of using a hardcoded value.

task-5031632

closes odoo#224005

Signed-off-by: Xavier Bol (xbo) <xbo@odoo.com>
While implementing the modulo tag of the tax report xml export, it came to
light that the vp7 line of that report which previously used a 25,82€
threshold has been changed for one at 100,00€.

This commit adapts the amount across the module.

Enterprise PR: odoo/enterprise#86642
task-4826511

closes odoo#223955

X-original-commit: 371e2e3
Related: odoo/enterprise#92998
Signed-off-by: John Laterre (jol) <jol@odoo.com>
Signed-off-by: Thomas Becquevort (thbe) <thbe@odoo.com>
…ully flexible employee

When we validate/write/create a work entry for an employee with a fully
flexible working schedule, we can encounter a traceback when trying to
call `_attendance_intervals_batch` on a non-existing calendar.

To rectify this issue, we continue in the loop when no calendar is set.

opw-4979974
opw-4968312

closes odoo#222752

Signed-off-by: Bertrand Dossogne (bedo) <bedo@odoo.com>
Currently an error occurs when we try to remove bank accounts from a partner.

Steps to reproduce:
- Install accountant with demo data.
- Go to customers and create a new one with random name.
- Under accounting tab add a new bank account with an acc number, bank and save.
- Now remove the bank account record.

Error:
`AttributeError: 'NoneType' object has no attribute 'origin'`

Cause:
- The error occurs because of the SQL query [1] returning None values in the
 `id2duplicates` dict, somewhat like `{1: [None]}`, this caused the browse [2]
  to assign `None` to the `duplicate_bank_partner_ids`.
- While recording snapshots for diff checking in onchange system the none value
  will be stored like`None: {display_name:{}}` and when the line [3] tries to
  access `id_.origin` where `id_` is None and causes the error.

Solution:
- Added a condition which makes sure null values are not accounted.
 (The Join is added to makes sure that the correct `partner_id` is fetched.)

[1]: https://github.com/odoo/odoo/blob/04ba4e4a51843701dd42a3f0243add50b3ac0c79/addons/account/models/res_partner_bank.py#L71-L85

[2]: https://github.com/odoo/odoo/blob/04ba4e4a51843701dd42a3f0243add50b3ac0c79/addons/account/models/res_partner_bank.py#L88

[3]: https://github.com/odoo/odoo/blob/04ba4e4a51843701dd42a3f0243add50b3ac0c79/addons/web/models/models.py#L1173

sentry-6748249363

closes odoo#219455

Signed-off-by: Antoine Dupuis (andu) <andu@odoo.com>
Following the implementation of [Black list request by GST](odoo/iap-apps#1039)
the users are blocked for 24 hours on generating too many request.
When processing through EDI there is no log when clicked on the
retry button, Which is more essentially needed now to know by
which user the EDI was retried and we logged the same on the
move

closes odoo#223957

X-original-commit: 47ffc53
Signed-off-by: Josse Colpaert (jco) <jco@odoo.com>
Signed-off-by: Harsh Modi (hamo) <hamo@odoo.com>
…ners

Steps to Reproduce:
1. Install `account_peppol` and `contacts`.
2. Open the Contacts app (list view).
3. Select any two contacts and click on "Merge" from the "Actions" menu.
4. Open any of the merged contacts in form view.
5. Close the form view and click on "Add a line".
6. Select multiple records.

Error:
ValueError - Expected singleton: res.partner(11, 9)

Cause:
The method _compute_available_peppol_eas accessing self.available_peppol_eas
directly. When multiple `res.partner` records were involved, it will raised
a singleton error.

Fix:
Loop over each partner to compute available_peppol_eas for each. This prevents
the singleton error when multiple records are processed.

sentry-6807787390

closes odoo#223547

Signed-off-by: Claire Bretton (clbr) <clbr@odoo.com>
Previously, if error was found during token creation (i.e. invalid input) , it's not immediately reported but instead invalid data will be used for further process.
Now, any errors caught early will be reported immediately back.

closes odoo#224036

Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
…any is unset

In the Job Position form, the 'Recruiter' and 'Interviewers' fields were empty when no company was selected. This was due to the static domain using 'company_id' directly without taking into consideration that company_id can be False.
This fix introduces computed domain fields (, ) that dynamically adapt based on the selected company. If a company is set, users belonging to that company are shown. If not, only internal users are listed regardless their companies.
Related task: 4926154.

closes odoo#223247

Signed-off-by: Yannick Tivisse (yti) <yti@odoo.com>
Steps to reproduce:
    1- Go on employee app
    2- Click on resume section
    3- Click on Add on resume tab
    4- Put on description a big table with at least 20 columns
    5- Save
The resume table and the buttons "add", "delete" with be hidden by the skill table.

Reason:
    The skill table element is too wide

Solution:
    The skill table's width is fixed and is contained in resume section element

task-4881917

closes odoo#217926

Signed-off-by: Yannick Tivisse (yti) <yti@odoo.com>
When refusing or cancelling a time off request of type Extra Hours, the linked hr.attendance.overtime record was hard deleted. As a result, if the leave was later reset, the extra hours were not deducted again.
This fix ensures that a new hr.attendance.overtime record is recreated when resetting the leave, restoring the correct impact on the employee's extra hours balance.
Related task: 4966880.

closes odoo#220619

Signed-off-by: Yannick Tivisse (yti) <yti@odoo.com>
Versions
--------
- 18.0+

Steps
-----
1. Create an individual partner;
2. assign them a pricelist A;
3. create a new company partner for them;
4. create a new pricelist A & sort it on top;
5. open a new quotation;
6. set new company as customer;
7. change customer to the individual partner.

Issue
-----
The quotation's pricelist changed from B to A. The pricelist used for
the individual should be identical to the one used for their company.

Cause
-----
Commit de302c2 added the `specific_property_product_pricelist`
field to `res.partner`, as the way company-dependent fields was changed
on the database-level.

Commit 67cf577 added the `_company_dependent_commercial_fields`
method to enable syncing company-dependent commercial fields. The base
method fetches all fields retrieved via `_commercial_fields`, and
selects those whose `company_dependent` attribute is `True`.

In previous versions, the `_company_dependent_commercial_fields`
override in `product` adds `property_product_pricelist`, as this field
does not have the `company_dependent` attribute set, but it behaves as a
company-dependent field. Starting from 18.0, the override adds
`specific_property_product_pricelist` instead, which does have the
`company_dependent` property set.

As a consequence, when `_company_dependent_commercial_sync` gets called,
it does not sync the `specific_property_product_pricelist` as it's not
included in the `_commercial_fields` override, nor does it sync when
retrieving it from `_company_dependent_commercial_fields`, as it skips
the current company, assuming the fields was already handled by
`_commercial_sync_from_company`.

Solution
--------
- Move `specific_property_product_pricelist` to `_commercial_fields`
    - This enables it to sync in `_commercial_sync_from_company`
- Remove the `_company_dependent_commercial_fields` override
    - `property_product_pricelist` shouldn't get synced by itself
    - `specific_property_product_pricelist` is already included by the
      base method

opw-4988736

closes odoo#222223

Signed-off-by: Levi Siuzdak <sile@odoo.com>
@benwillig benwillig changed the title [CHG] point_of_sale: use regex to search on product and allow using % to match all strings [18.0][CHG] point_of_sale: use regex to search on product and allow using % to match all strings Aug 26, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.