Skip to content

Conversation

@livaios
Copy link

@livaios livaios commented Jan 15, 2026

No description provided.

rame-odoo and others added 30 commits January 13, 2026 10:31
Issue:
- An error was shown when opening the Employee list view.
- A custom list view behavior was removed earlier, but its reference was still
  present in the Employee list view, causing the Employee list to fail to load.

Fix:
- Removed the outdated reference from the Employee list view and restored the
  default list behavior so the view loads correctly.

task-5484692

closes odoo#243269

Signed-off-by: Bertrand Dossogne (bedo) <bedo@odoo.com>
Before this commit, some elements were not aligned and the image was too
big, now it looks more balanced.

task-5223875

closes odoo#234693

Signed-off-by: Claire Nguyen (clan) <clan@odoo.com>
Steps to reproduce:
====================
- Go to the website in chrome
- Create a Image Wall (gallery)
- Add a lot of images. See attachments for a .zip file in task
to test it.
- Try to change the display mode or number of column

-> An error will appear when the cursor get on the dropdown options.

Cause:
======
In Google Chrome, calling img.decode() on a large set of images
simultaneously (e.g., in an image wall) can result in `EncodingError:
The source image cannot be decoded for some images`. This is a known
Chromium issue (See [1]) where the browser's image decoder gets overwhelmed or hits a concurrency limit, causing it to reject valid images.

The current implementation uses Promise.all(imgLoaded), which utilizes a
"fail-fast" mechanism. Consequently, if a single image fails to decode
due to this browser limitation, the entire promise rejects immediately.
This unhandled rejection interrupts the execution flow, preventing the
display mode or column options from functioning correctly when the user
interacts with them.

Solution:
========
Replace Promise.all(imgLoaded) with Promise.allSettled(imgLoaded).

Unlike Promise.all, Promise.allSettled waits for all promises to finish
regardless of whether they succeeded or failed.

[1]: https://issues.chromium.org/issues/40261318

opw-5249130

closes odoo#243133

X-original-commit: 4758cf8
Signed-off-by: Francois Georis (fge) <fge@odoo.com>
Signed-off-by: Saif Allah Ben Khalil (sben) <sben@odoo.com>
Before this commit, changing the animation speed would reset the colors
applied to the image shape. This was due to the code always considering
the shape as new because the current shape id wasn't retrieved.
Therefore, the colors would be reset to the default ones.

Steps to reproduce the issue:
- Drop a snippet with an image
- Click on the image
- Add an image shape. It should be animated.
- Change the image shape color
- Change the image shape animation speed
=> The image shape color was reset.

task-5375497

X-original-commit: 8fc84e4
Part-of: odoo#243091
Signed-off-by: Romaric Moyeuvre (romo) <romo@odoo.com>
Signed-off-by: Francois Georis (fge) <fge@odoo.com>
X-original-commit: f440027
Part-of: odoo#243091
Signed-off-by: Romaric Moyeuvre (romo) <romo@odoo.com>
Signed-off-by: Francois Georis (fge) <fge@odoo.com>
closes odoo#243091

X-original-commit: 3f81e56
Signed-off-by: Romaric Moyeuvre (romo) <romo@odoo.com>
Signed-off-by: Francois Georis (fge) <fge@odoo.com>
Steps to reproduce:
Open Discuss > Configuration > Settings.

Before this commit:
Non-admin users encounter an access error when clicking 'Settings'.

After this commit:
The 'Settings' menu item is now hidden for users who are not part of the
'Role / Administrator' group.

closes odoo#243352

X-original-commit: 2fa6759
Signed-off-by: Sébastien Theys (seb) <seb@odoo.com>
The `simulateArrowKeyPress` method used in hoot tests performs both an
actual `press` and modifies the selection. However, in some cases, the
`press` already updates the selection because of our own listeners,
which leads to a selection similar to performing the action twice.

This commit avoids this by making sure the default `press` did not get
prevented by our own custom listeners before modifying the selection.

task-5438683

closes odoo#243327

X-original-commit: df01277
Signed-off-by: David Monjoie (dmo) <dmo@odoo.com>
Signed-off-by: Benoit Socias (bso) <bso@odoo.com>
Steps to reproduce
------------------
1. In PoS settings, set the "Tax Display" to "Tax-Excluded Price"
2. Enable customer display
3. Open a PoS session, and open the customer display simultaneously
4. Add products, notice that the total in PoS is price included as
   expected. However, the total in cusromer display is tax excluded, so
   customer thinks he will be pay less.

Why it happens
--------------
In the refactors done in 9538698, we mistakenly set the
order.amount (i.e. total amount) to follow the config "Tax Display".
However, that price should always be tax incl.

In this PR, we now use the `currencyDisplayPriceIncl` getter, instead of
the config dependent `currencyDisplayPrice`.

Additional enhancements
-----------------------
In case of "Tax-Excluded" price config, we now display the order
subtotal (total price excluded) and the taxes amount as well, for more
detailed breakdown of the prices. It follows the cart view in the main
PoS products display.

opw-5401560

closes odoo#243369

X-original-commit: 41e7026
Signed-off-by: David Monnom (moda) <moda@odoo.com>
Signed-off-by: Hadi El Yakhni (hael) <hael@odoo.com>
Purpose:

- Drag and drop handlers don’t function on mobile devices. Therefore, they have
  been removed for mobile devices.

task-5155786

Part-of: odoo#235426
Signed-off-by: David Monjoie (dmo) <dmo@odoo.com>
Purpose:

- On mobile devices, tab buttons used for color tabs and gradient types can
  exceed the available viewport width, causing layout overflow.
- Replace these tab buttons with a dropdown on mobile to prevent overflow and
  improve usability.

task-5155786

closes odoo#235426

Signed-off-by: David Monjoie (dmo) <dmo@odoo.com>
closes odoo#242003

Signed-off-by: Didier Debondt (did) <did@odoo.com>
In some search views the list of filters can be huge which impairs the
readability.

This commit adds support for inner filters in `<search/>` allowing them
to be collapsed into a parent filter, reducing the number of visible
entries in the search view.

The logic for date filters was partially merged with the one for inner
filters since the syntax is the same.

It can be used inside a search arch as such:
```xml
<search>
    <filter string="Priority">
        <filter string="Urgent" domain="[('priority', '=', 3)]"
name="urgent_priority"/>
        <filter string="High" domain="[('priority', '=', 2)]"
name="high_priority"/>
        <filter string="Medium " domain="[('priority', '=', 1)]"
name="medium_priority"/>
        <filter string="Low" domain="[('priority', '=', 0)]"
name="low_priority"/>
    </filter>
</search>
```

task-5232012

closes odoo#241459

Related: odoo/enterprise#102947
Signed-off-by: Aaron Bohy (aab) <aab@odoo.com>
- renamed 'discussions' to 'messages' to align with the 'send message' button.
- updated 'note' to 'notes' for consistency with other plural labels.
- reordered 'notes' and 'activities' to match the button order in the chatter.

upgrade: odoo/upgrade#7759
task-3081163

closes odoo#204940

Signed-off-by: Sébastien Theys (seb) <seb@odoo.com>
When dropping or moving any snippet, we scroll to this snippet. There
was an offset of 50px above it to show the previous snippet, to avoid
having the dropzone above it over the header or outside the screen.

To show that a snippet takes 100% of the screen height, it was decided
to remove this offset on drop only.

task-5387623

closes odoo#238684

Signed-off-by: Benjamin Vray (bvr) <bvr@odoo.com>
Move import in the file where it's actually used.

closes odoo#243510

Signed-off-by: Sébastien Theys (seb) <seb@odoo.com>
This commit expands the useBackButton hook to manage mobile
"back" gesture and "back" navigation button.
This allows modal-like components to be closed via "back" gesture,
replacing the unwanted behavior of navigating back.

fixes task-5041807
fixes task-4563827

closes odoo#229643

Related: odoo/enterprise#102809
Signed-off-by: Adrien Dieudonné (adr) <adr@odoo.com>
…gory

* = im_livechat

Before this commit, the discuss sidebar only showed the visitor’s name, making
it difficult to know the context of a conversation without opening it.

This commit displays the livechat conversation description in the sidebar
so agents can quickly understand the context of a conversation.

Task-5404924

X-original-commit: 7cdaa94
Part-of: odoo#243351
Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
Rename discuss_sidebar_channel_actions_patch to discuss_sidebar_channel_patch,
as the previous name was misleading.

task-5404924

closes odoo#243351

X-original-commit: 732ec0a
Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
1. Improve the creation form of discuss categories.
2. Add channel in search view for discuss categories.
3. Update discuss category settings view and the text description.

task-5486664

closes odoo#243423

X-original-commit: 741c367
Signed-off-by: Sébastien Theys (seb) <seb@odoo.com>
Signed-off-by: Zelong Lin (zel) <zel@odoo.com>
…bo popup

Before this commit:
=================
Product cards with long names caused a slight vertical misalignment in the
combo configurator popup, resulting in inconsistent card sizes
within the grid.

After this commit:
==================
Ensure all product cards remain uniformly aligned and maintain consistent
dimensions in the combo configurator popup, even when product names are long.

Task:5447320

closes odoo#243322

X-original-commit: 2d38730
Signed-off-by: David Monnom (moda) <moda@odoo.com>
Signed-off-by: Jitendra Kumar Prajapat (jipr) <jipr@odoo.com>
When verifying whether nodes are similar, their padding and margin are
tested. Only the nodes with no padding nor margin are considered as
similar. Because of this, nodes such a `code.o_inline_code` are
considered as not similar to each other, and do not get merged together
when they are adjacent.

This commit solves this by also verifying whether the padding and the
margin of both nodes are identical when nodes are `code.o_inline_code`.

Steps to reproduce:
- Insert a `<code>` inline block with some text inside
- Put the cursor in the middle
- Press Enter to split it onto two paragraphs
- Press Backspace to put them back together

=> The line contained two adjacent code blocks

task-5375140

X-original-commit: 98f0e8f
Part-of: odoo#243424
Signed-off-by: David Monjoie (dmo) <dmo@odoo.com>
Signed-off-by: Benoit Socias (bso) <bso@odoo.com>
When removing the last character inside a `code.o_inline_code` block, an
empty code block remains in the DOM.

This commit removes empty inline code blocks on normalize.

Steps to reproduce:
- Create a list
- Type some inline code
- Put the cursor in the middle
- Press Enter
- Type some text after the inline code on the second line
- Try to remove the inline code from the second line using backspace

=> The line is removed before the code style disappears

task-5375140

closes odoo#243424

X-original-commit: 352a29f
Part-of: odoo#240805
Signed-off-by: David Monjoie (dmo) <dmo@odoo.com>
Signed-off-by: Benoit Socias (bso) <bso@odoo.com>
…ployee

Currently, an error occurs when a user creates an attendance for an employee.

Steps to Reproduce:
 - Install the hr_attendance module.
 - Go to Overtime Rulesets and create a new overtime ruleset by adding an
   overtime rule.
   Set Based on to Timing.
   Set the Start time greater than the Stop time (ex, Start = 10 and Stop = 5).
 - Go to Employees, open any employee record, and assign this Overtime
   Ruleset to the employee.
 - Now go to Attendances and create an attendance for that employee.

TypeError: '>' not supported between instances of 'datetime.datetime' and 'int'

This error occurs when a user sets the overtime rule on an employee and
then creates an attendance. At that point, the system tries to calculate
the overtime intervals based on the timing rule. Because the rule’s start
time is greater than the stop time, it attempts to calculate the interval for
the remaining working period of the day. However, the start date and
end date are calculated in datetime format [1], while integer and float
values are passed as arguments [2] for day in interval calulation. Since
the interval expects values of the same data type, than it raise the error [3].

This commit ensures that the day start and day end values are passed in
datetime format.

[1]: https://github.com/odoo/odoo/blob/67191cf0915081df352331a698be47b7e3ecd505/addons/hr_attendance/models/hr_attendance_overtime_rule.py#L524

[2]: https://github.com/odoo/odoo/blob/67191cf0915081df352331a698be47b7e3ecd505/addons/hr_attendance/models/hr_attendance_overtime_rule.py#L530

[3]: https://github.com/odoo/odoo/blob/67191cf0915081df352331a698be47b7e3ecd505/odoo/tools/intervals.py#L138-L154

sentry-7166788786

closes odoo#243266

X-original-commit: a7c39a6
Signed-off-by: Mélanie Peyrat (mepe) <mepe@odoo.com>
Signed-off-by: Ashutosh Sharma (assh) <assh@odoo.com>
Previously, the invoice label was always displayed as “Tax Invoice” or “Invoice”
However, as per Section 31 of the CGST Act, the document label must
depend on the nature of supplies and the customer type:
 - If the document contains only taxable supplies => “Tax Invoice”
 - If the document contains only exempt supplies => “Bill of Supply”
 - If the customer is unregistered and the document contains both taxable and
   exempt supplies => “Invoice-cum-Bill of Supply”
 - If the customer is registered and the document contains both taxable and
   exempt supplies, separate documents must be issued as per the law.

With this commit, the invoice label is generated strictly in accordance with
Section 31 of the CGST Act.
In the case of a registered customer where both taxable and exempt supplies
exist in a single document, the label will be printed as “Invoice”.

task-5468323

closes odoo#243436

X-original-commit: 52b2434
Signed-off-by: Josse Colpaert (jco) <jco@odoo.com>
Signed-off-by: Jay Savaliya (jasa) <jasa@odoo.com>
**Steps to reproduce:**
* Install the **stock** and **sale_management** modules.
* Go to *Inventory > Configuration > Attributes* and create a new
  attribute.
  * Set *Variant Creation Mode* to *Never*.
  * Add a single attribute value and enable *Free text* on it.
* Create a product using this attribute and select the value for which
  *free text* is enabled.
* Create a Sale Order for this product.
  * Open the sale order line pop-up and enter custom text in the *Text* field.
* Confirm the sale order.
* Open the generated Delivery Order.

*Observed behavior:*
The product name appears twice in the stock move description.
The same duplication appears in the Delivery Slip PDF report.

*Cause:*
  In `_compute_description_picking`, the description is built as
  description + variant description.
  Since Odoo already uses the product name as the base description and avoids
  rendering it twice only when the name equals the description, concatenating
  the variant description breaks this logic and results in the product name
  being repeated.

opw-5382353

closes odoo#243414

X-original-commit: 105fec2
Signed-off-by: Lancelot Semal (lase) <lase@odoo.com>
Signed-off-by: Pawan Kumar Gupta (pkgu) <pkgu@odoo.com>
When the call control overlay is floating, it overlaps the fullscreen button,
making it difficult to enter fullscreen mode.

This commit ensures the fullscreen action remains accessible by adjusting
the layout layering so controls no longer overlap each other.

Task-5240896

closes odoo#243446

X-original-commit: 241e747
Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
Signed-off-by: Nitant Makwana (nmak) <nmak@odoo.com>
Before this commit:
- All website product categories were always displayed under the main /shop page.
- There was no way to exclude a category from the shop hierarchy.
- This prevented creating standalone product category pages or curated product
  selections that should not appear in the main shop view.

After this commit:
- Added a boolean field to hide specific categories from the /shop structure.
- Hidden categories remain fully functional and can be accessed directly through
  their URLs and 'Go to website' stat button in their form view.
- Redesigned the eCommerce Category form view.

task-5129498

closes odoo#231049

Signed-off-by: Shrey Mehta (shrm) <shrm@odoo.com>
* = sa, eg, pk, ae

This commit adds the remaining descriptions and their translations to the
expense accounts in the Chart of Accounts for Saudi Arabia, Pakistan,
Egypt, and the United Arab Emirates.

task - 5039719

closes odoo#238616

Signed-off-by: Florian Gilbert (flg) <flg@odoo.com>
dhha-odoo and others added 25 commits January 14, 2026 18:10
Added a boolean field `Purchase Alternative` in Purchase settings,
allowing users to easily discover and install the feature without
relying on purchase agreements.

taskId :- 4737059

Part-of: odoo#218612
Related: odoo/upgrade#8052
Signed-off-by: Arnold Moyaux (arm) <arm@odoo.com>
…ty files

*: purchase_requisition

With This Commit:
=================================

We have separated the code that depends on the alternative logic
(data, __init__.py, manifest, and security files) from the purchase_requisition
module and moved it into the purchase_alternative module.

This improves the file structure and provides a cleaner, modular organisation.
ensuring better independence and separation of concerns between the
purchase_alternative and purchase_requisition features.

task - 4737059

Part-of: odoo#218612
Related: odoo/upgrade#8052
Signed-off-by: Arnold Moyaux (arm) <arm@odoo.com>
*: purchase_requisition

With This Commit:
=================================

We have separated the code that depends on the alternative logic
of a wizard from the purchase_requisition module and moved it
into the purchase_alternative module.

task - 4737059

Part-of: odoo#218612
Related: odoo/upgrade#8052
Signed-off-by: Arnold Moyaux (arm) <arm@odoo.com>
*: purchase_requisition

With This Commit:
=================================

We have separated the code that depends on the alternative logic
of a views files from the purchase_requisition module and moved it
into the purchase_alternative module.

task - 4737059

Part-of: odoo#218612
Related: odoo/upgrade#8052
Signed-off-by: Arnold Moyaux (arm) <arm@odoo.com>
*: purchase_requisition

With This Commit:
=================================

We have separated the code that depends on the alternative logic
of a tests files from the purchase_requisition module and moved it
into the purchase_alternative module.

taskId :- 4737059

Part-of: odoo#218612
Related: odoo/upgrade#8052
Signed-off-by: Arnold Moyaux (arm) <arm@odoo.com>
*: purchase_requisition

With This Commit:
=================================

We have separated the code that depends on the alternative logic
of static files from the purchase_requisition module and moved them
into the purchase_alternative module.

taskId :- 4737059

Part-of: odoo#218612
Related: odoo/upgrade#8052
Signed-off-by: Arnold Moyaux (arm) <arm@odoo.com>
*: purchase_requisition

With This Commit:
=================================

We have separated the code that depends on the alternative logic
of models files from the purchase_requisition module and moved them
into the purchase alternative module.

taskId :- 4737059

Part-of: odoo#218612
Related: odoo/upgrade#8052
Signed-off-by: Arnold Moyaux (arm) <arm@odoo.com>
With This Commit:
=================================

We have added a new module, `purchase_alternative_sale` and removed
the `purchase_requisition_sale` module, as all related functionality now
depends on the `purchase_alternative` module instead of `purchase_requisition`.

taskId :- 4737059

Part-of: odoo#218612
Related: odoo/upgrade#8052
Signed-off-by: Arnold Moyaux (arm) <arm@odoo.com>
*purchase_requisition_stock

With This Commit:
=================================

We have separated the purchase alternative–related functionality from the
purchase_requisition_stock module and reorganised it under a newly created module, purchase_alternative_stock.
This new module depends on both purchase_alternative and purchase_stock,
ensuring proper modular structure and clearer separation of responsibilities.

taskId :- 4737059

Part-of: odoo#218612
Related: odoo/upgrade#8052
Signed-off-by: Arnold Moyaux (arm) <arm@odoo.com>
…sition

*: purchase_requisition

closes odoo#218612

Related: odoo/upgrade#8052
Signed-off-by: Arnold Moyaux (arm) <arm@odoo.com>
no-task

closes odoo#243821

X-original-commit: a861eb0
Signed-off-by: Laurent Smet (las) <las@odoo.com>
*: website_event, website_sale

Steps to reproduce (19.0+):

1. Add a "Blog" mono-record snippet to a website page.

2. Select the snippet → the "Model" and "Template" options are visible.

The code from [1], which introduced mono-record dynamic snippets,
restricted the visibility of these options as follows:

- The "Model" option should only be visible for generic mono-record
snippets (in `Debug` mode).

- The "Template" option should be available for generic snippets,
except for "Products" snippet (which is using another "Cards Design"
option to customize the layout).

Starting from [2], these conditions are no longer applied, as the
change simply removed the `props.modelNameFilter` used in the XML to
enforce them.

[1]: odoo@e3b062e
[2]: odoo@36f7417

related-task-4280375

closes odoo#241940

X-original-commit: 74f6b93
Related: odoo/enterprise#104010
Signed-off-by: Colin Louis (loco) <loco@odoo.com>
Signed-off-by: Outagant Mehdi (mou) <mou@odoo.com>
*: survey, point_of_sale, pos_restaurant

Before this commit, some onboarding suggestions were not fully aligned
with Odoo’s UI standards.

This commit readjusts the layout, colors, icons to ensure better visual
consistency with others onboarding suggestions samples.

task-5089102

closes odoo#233666

Related: odoo/enterprise#98400
Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
The uninstallation process tries to delete all the records created by
the modules being uninstalled.  It uses a best-effort strategy, i.e., it
skips the records that cannot be deleted, whatever the reason.  But some
records are very likely to cause problems, namely 'ir.model' and
'ir.model.fields' records, because skipping them implies not cleaning up
their corresponding table's schema.

For instance, if a column is not dropped, reinstalling the corresponding
module will possibly cause inconsistencies, because
 - the column contains old values for existing records, which won't be
   recomputed (if the field is computed);
 - the column contains NULLs for records created between the
   uninstallation and the reinstallation of the module.

We therefore add a warning in those cases, in order to detect and fix
those potential issues as soon as possible.

Part-of: odoo#243275
Related: odoo/enterprise#103967
Signed-off-by: Krzysztof Magusiak (krma) <krma@odoo.com>
A method decorated with @api.ondelete(at_uninstall=False) should be
called except when the method's module is being uninstalled.  Currently
the method is skipped when *any* module is uninstalled.

The fix consists in adding the set of modules being uninstalled in the
attribute registry.uninstalling_modules, which may be used to detect
uninstallation and determine which modules are being uninstalled.

Part-of: odoo#243275
Related: odoo/enterprise#103967
Signed-off-by: Krzysztof Magusiak (krma) <krma@odoo.com>
The constant MODULE_UNINSTALL_FLAG is currently abused in many places as
a "bypass" flag, and is not necessarily tied to module uninstallation.
Moreover, it is a simple string and isn't safe, anyway.  And we now have
a reliable flag on registry to deal with module uninstallation.

We therefore turn that flag into an explicit conventional flag, and
rename it for the sake of simplicity.  The caller simply uses

    records.with_context(force_delete=True).unlink()

to bypass some deletion hooks, which typically prevent deletion by
raising some exception, in order to avoid data inconsistencies.  On the
callee's side, there's nothing automatic: one has to explicitly detect
the flag and skip the checks, like in:

    @api.ondelete(at_uninstall=False)
    def _prevent_deleting_confirmed(self):
        if self.env.context.get('force_delete'):
            return
        if any(record.state == 'confirm' for record in self):
            raise UserError(_("You cannot delete confirmed records!"))

Note that the uninstallation uses the convention by automatically adding
force_delete=True in the context for deleting records.

Part-of: odoo#243275
Related: odoo/enterprise#103967
Signed-off-by: Krzysztof Magusiak (krma) <krma@odoo.com>
Two overrides of unlink() on models 'ir.model' and 'ir.model.fields'
fail when uninstalling module 'mail', because their code relies on some
columns and those columns have been dropped already.  This causes some
table and column to remain after uninstallation.  When reinstalling
module mail, errors like follows are logged:

    column "mail_message_id" of relation "mail_tracking_value" contains null values

The fix consists in turning the overrides in proper ondelete methods,
which are skipped when module 'mail' is uninstalled.

closes odoo#243275

Related: odoo/enterprise#103967
Signed-off-by: Krzysztof Magusiak (krma) <krma@odoo.com>
Problem:
When an alternate ir.action.report handler is used (such as for IoT), the logic
to close the wizard after the report is downloaded (printed) is skipped, so the
wizard stays open.

Steps to Reproduce:
- Go to "Acoustic Bloc Screens" product and click "Print Labels"
- Select "ZPL labels" and confirm
- The report downloads and the wizard closes as expected
- Go to Settings > Technical > Reports and select "Product Label (ZPL)"
- Set an IoT device on the report
- "Print Labels" again, selecting a printer and the IoT toasts in the top right
appear after the wizard closes
- Refresh the page, and try printing again
- The wizard stays open (wrong) and the IoT toasts appear

Solution:
When returning from the custom handler, check if close_on_report_download and
close the wizard.

opw-5153139

closes odoo#243848

X-original-commit: 1a3405e
Signed-off-by: Aaron Bohy (aab) <aab@odoo.com>
Signed-off-by: Dirk Douglas (dido) <dido@odoo.com>
This commit fixes an oversight introduces in Commit[1]. With Commit 1, we
improved the navigation by showing the back button everywhere on the forum
but this created an issue due to a rule in `website_slides_forum` rendering
the whole breadcrumb if the forum is a course one.

To prevent this double navigation issue, we scope

[1]: odoo@bb5b7cf

task-5490243

closes odoo#243882

X-original-commit: 76a2b6e
Signed-off-by: Florian Charlier (flch) <flch@odoo.com>
Signed-off-by: Chrysanthe Gomrée (chgo) <chgo@odoo.com>
**Steps to reproduce:**
* Install the **l10n_sa_edi** and **accounting** modules.
* Create a **15% tax** (tax-included).
* Create a customer invoice with two lines with amounts 18 and 14 and apply
  the tax on an invoice line.
* Post the invoice and **send it to ZATCA**.
* Review the generated XML or submit it for ZATCA validation.

**Observed behavior:**
* The XML nodes **LineExtensionAmount**, **TaxAmount**, and
  **RoundingAmount** contain inconsistent values.
* ZATCA validation raises warnings due to rounding mismatches.
* Example:
  * in xml data look like this
  * `15.66(LineExtensionAmount) + 2.34(TaxAmount) != 17.99(RoundingAmount)`(v19)
* The required relation
  **LineExtensionAmount + TaxAmount ≠ RoundingAmount**
  is violated.

**Cause:**

* In v19.0, `_round_base_lines_tax_details()` distributes rounding deltas so
  that the **sum of rounded line taxes** matches the **rounded global tax**.
* When taxes are **included in price** and there are **multiple invoice lines**,
  this distribution adjusts the per-line tax and base amounts.

  Example pattern:
  * Raw line taxes sum to something like **4.1739…**
  * Rounded global tax = **4.17**
  * Sum of individually-rounded line taxes = **4.18**
  * A **-0.01 delta** is distributed across the lines
  * Result:
    * Line 1 base becomes **15.66**, tax **2.34**
    * Line 2 base becomes **12.17**, tax **1.83**

  So the XML correctly reports:
  * **LineExtensionAmount = 15.66**
  * **TaxAmount = 2.34**

* However, **RoundingAmount** is computed differently:
```
total_tax_amount = sum(values['tax_amount_currency'] ...)
total_amount = base_line['tax_details']['total_excluded_currency'] + total_tax_amount
```

Here, `base_line['tax_details']['total_excluded_currency']`
**does not include the distributed delta**.
It still reflects the *pre-distribution* base (e.g. **17.99 total excluded**),
while **LineExtensionAmount** uses `vals['total_excluded_currency']`,
which *does* include the delta.

* Result: the required identity
```
LineExtensionAmount + TaxAmount = RoundingAmount
```
is broken — producing inconsistencies such as:
```
15.66 + 2.34 ≠ 17.99
```

**Fix:**
* Use the same **vals[total_excluded_currency]** as it has a tax
  excluded price with the delta included.

opw-5402750

closes odoo#243925

X-original-commit: a0e5147
Signed-off-by: de Wouters de Bouchout Jean-Benoît (jbw) <jbw@odoo.com>
Signed-off-by: Raj Bhuva (bhra) <bhra@odoo.com>
before this commit:
- By default, clicking on a customer only searched local records.
- Since the local cache is limited to 100 customers, with demo data it was
  possible that the required customer was not found.

after this commit:
- Added 'pressEnter' boolean parameter to search more to also fetch customers
  from the server.
- The boolean parameter was introduced because some test cases require offline
  mode where fetching from the server would cause issues.

runbot-232714, 232715

closes odoo#241861

X-original-commit: 1a7ac76
Signed-off-by: Stéphane Vanmeerhaeghe (stva) <stva@odoo.com>
Signed-off-by: Dhruv Jitendrakumar Patel (djip) <djip@odoo.com>
Before this commit:

-  Pressing `Backspace` inside an empty banner or code block did nothing.

After this commit:

- Pressing `Backspace` in an empty banner or code block will transform
them into a base container.

task- 5384545

closes odoo#243536

X-original-commit: 5621ec4
Signed-off-by: David Monjoie (dmo) <dmo@odoo.com>
Signed-off-by: Adnan Chaudhary (adch) <adch@odoo.com>
This commit fixes an undeterministic issue with the theme selector iframe's
loading. It could take a bit longer for it to be properly displayed.

When [1] was merged it introduced some non-determinism as we now needed to load
an iframe that could contain shadow roots. This iframe needs to load some more
assets, which leads to loading wait times. This change wasn't taken into account
for the fixed test in this commit. Now we properly await for the iframe to be
loaded before querying elements inside it.

[1]: odoo@0f7ee17

runbot-234965

closes odoo#243917

X-original-commit: 7b2a664
Signed-off-by: Damien Abeloos (abd) <abd@odoo.com>
Nilvera synchronization stores the last fetched date in a system
parameter to allow incremental fetching on subsequent scheduler runs.
Previously, this parameter was keyed only by the invoice channel,
causing sale and purchase synchronizations to overwrite each other.

As a result, syncing sales could prevent purchase documents from being
fetched (and vice versa), since both flows shared the same last fetched
date.

This commit includes the journal type (sale or purchase) in the config
parameter key, ensuring independent sync state tracking per flow.

taskid-5494295

closes odoo#243927

X-original-commit: e1faba5
Signed-off-by: Ali Alfie (alal) <alal@odoo.com>
Signed-off-by: Adnan Sabbir (adns) <adns@odoo.com>
This commit updates the Guatemala localization to include missing accounts and
configures the Asset Models for fixed assets management.

Changes:
-Updated `account.account` to include new accounts for fixed assets and
 expenses.
-Added `account.asset` data to handle automated depreciation for various asset
 types.

task-5149265

closes odoo#243580

X-original-commit: 36b5059
Signed-off-by: Antoine Dupuis (andu) <andu@odoo.com>
Signed-off-by: Deep Matholiya (matd) <matd@odoo.com>
@robodoo
Copy link

robodoo commented Jan 15, 2026

This PR targets the un-managed branch odoo-dev/odoo:master-ruff-anv, it needs to be retargeted before it can be merged.

@livaios livaios force-pushed the master-ruff-website_sale-liew branch 2 times, most recently from 5032f03 to 9aa626e Compare January 16, 2026 10:17
@livaios livaios force-pushed the master-ruff-website_sale-liew branch from 9aa626e to e719b19 Compare January 16, 2026 12:52
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.