Thursday, October 16, 2025
32 changes · saas-18.3
Resolved issues and error corrections
Portal users working on shared projects will no longer see a chat expand option that could not work in that environment. This prevents an error when opening tasks through project sharing and keeps the experience focused on supported chat actions.
Original PR description
Steps to reproduce: === - Create a project. - Share the project with access to edit rights to the portal user. - Log in as the portal user. - Open the shared project and then open a task. - Click on the expand button in the chat. Issue: === A traceback occurs when trying to expand the chatter in a project sharing task. Cause: === `inFrontendPortalChatter` not being set in `useSubEnv` is the reason for button appearance, and we don't have the necessary composer for it to render in the project sharing bundle. Fix: === Define missing `inFrontendPortalChatter` to hide the expand chatter composer action as it was not meant to be available in the portal/front-end. task-5049129 Forward-Port-Of: odoo/odoo#231360
Accounting bounce emails for journal aliases now use the company linked to the alias instead of defaulting to the main company. This prevents customers or senders from receiving failed-email notices with the wrong company name or email address in multi-company setups.
Original PR description
A bounce email was introduced in https://github.com/odoo/odoo/pull/168506 , i.e. if an email without an attachment is sent to an incoming email alias for a journal, it will be bounced with an…
A bounce email was introduced in https://github.com/odoo/odoo/pull/168506 , i.e. if an email without an attachment is sent to an incoming email alias for a journal, it will be bounced with an corresponding email template. But as is, the usage of `'company_email': self.env.company.email` and `'company_name': self.env.company.name` will default to the "main" company (id 1 usually), as during the message routing, that will be the default company in `env`. This means, that if you have an journal email alias in company B, the email will still render the information of the main company A. ## Proposed fix: When a journal email alias is created in a standard way, it should have a key:value pair for 'company_id' in the `alias_defaults` field. We change the routing check logic so that it will try to fetch that value, while defaulting to the main company if there is no explicit company `company_id` key. This should ensure that the mail gateway failed email renders preferentially renders the company information of the company the mail alias (and accounting journal) belongs to. OPW-5132806 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#231436
This fixes an issue that prevented certain related list-style fields from being created when no matching inverse link exists on the current model. It helps administrators and implementers configure data relationships more reliably without hitting an unnecessary technical restriction.
Original PR description
…n_field Before this commit, it was not possible to create a related one2many without a relation_field (inverse) However, the relation_field of a relation cannot be the one of the original field (because it doesn't exist on the current model) After this commit, this flow works. opw-5155440 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#231434 Forward-Port-Of: odoo/odoo#231187
This fix prevents Odoo Studio from saving an invalid link when users create a related field based on partner child contacts from a sales order. It avoids crashes during later field updates, making Studio customizations more reliable.
Original PR description
On sale order, create a related field to res_partner.child_ids Before this commit, the related field is not stored but has a relation_field to parent_id (res.partner) During an onchange (outside of studio), this will crash. After this commit, we unset relation_field in this case as it doesn't make sense (the relation_field should reference a res.partner field, not a field presetn in the current model) opw-5155440 Forward-Port-Of: odoo/enterprise#97107 Forward-Port-Of: odoo/enterprise#96950
This update makes the system check and update old session activity records in smaller batches instead of all at once. This helps avoid long database operations on large installations and keeps session-related maintenance more reliable.
Original PR description
The commit: https://github.com/odoo/odoo/commit/6fb676a4e3566c781ddd57480a200cddc88d99ae adds the model `res.device.log` which will hold a lot of data. In order to use this data efficiently, we decide to process data with the boolean field `revoked` equal to `True` (via the indexes). This boolean field indicates whether the session that generated the log is still present on the disk. The commit: https://github.com/odoo/odoo/commit/e4c9d1794f2d4873755a8692f4861ba043fac943 adds an automatic verification mechanism to change this value if necessary. Between the time the model was created and the time the verification mechanism was implemented, the table may have become too large. This will result in a very long write within a transaction. The purpose of this commit is to introduce a method for performing the batch writing. Forward-Port-Of: odoo/odoo#225736
Odoo now prevents users from saving a Next Check Number that is too large for the system to store. Instead of a technical RPC/database error, users receive a clear validation message, improving usability in bank journal configuration.
Original PR description
**Issue** When trying to set a very large value as *Next Check Number* in a Bank Journal, Odoo raises a low-level `RPC_ERROR` caused by a PostgreSQL `integer out of range` error. This results in a technical traceback instead of a clear message to the user. **Steps to Reproduce** 1. Go to *Accounting > Configuration > Journals* 2. Open the Bank Journal 3. Go to the *Outgoing Payments* tab 4. Enable *Manual Numbering* 5. Set *Next Check Number* to `2147483648` **Root Cause** The field `ir.sequence.number_next` is stored as an integer in the ORM. Any value greater than `2,147,483,647` (max signed 32-bit integer) causes PostgreSQL to raise an overflow error when saving. Since the error occurs deep in the ORM write call, the user only sees a generic RPC error without explanation. Opw-5042096 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225103
The product configurator now uses space better on mobile screens when optional products have custom attribute fields. This keeps input fields and the cart button visible and easier to use, improving the shopping experience on smaller devices.
Original PR description
Versions -------- - 18.0+ Steps ----- 1. Create a product attribute with a single custom value; 2. add the attribute to a product A; 3. set product A as an optional product of product B; 4. go to product B's product page in mobile view; 5. click on the cart button. Issue ----- The custom text field takes up way too much real estate. Cause ----- The template isn't fully adapted for mobile view. Solution -------- Change `d-flex` to `d-lg-flex` on the `ptal` element, making the attribute name & input online display in-line on large screens. Additionally, change some bootstrap classes to also have the cart button button displayed within the screen. opw-5114495 Forward-Port-Of: odoo/odoo#231744 Forward-Port-Of: odoo/odoo#230743
This fix ensures Mexican electronic invoicing XML attachments are created with the correct XML file type even when the user has limited access rights. This prevents related Documents from being missed when accounting centralization is enabled, improving reliability for affected accounting workflows.
Original PR description
When creating an XML attachment as a user without Write access on the ir.ui.view model, the Mimetype will be set to plain/text. In particular, this causes issues when Accounting centralization is enabled in Documents, as the corresponding Document will only be generated if the Mimetype is application/xml. Creating the XML as Superuser avoids this issue. Similar to https://github.com/odoo/odoo/pull/124507 opw-5057038 Forward-Port-Of: odoo/enterprise#97258 Forward-Port-Of: odoo/enterprise#95197
This update adds validation for Dutch structured payment references and prevents unstructured payment notes from being incorrectly placed into SEPA QR code structured reference fields. This helps reduce payment processing mistakes for businesses using QR codes, especially in the Netherlands.
Original PR description
[SEE THIS PR](https://github.com/odoo/odoo/pull/200922) [IMP] account: Check NL structured reference The aim of this commit is implementing a new function to check the structured reference for the Netherlands. Even if dutch people can use the ISO format, they can still use the NL format. no task id [FIX] account_qr_code_sepa: Don't fill structured communication with unstructured communication This commit ensures that unstructured communication is not mistakenly used as structured communication in the QR code values. To achieve this, we use is_valid_structured_reference, a simple validation approach that checks all available is_valid_structured_reference functions. While this method may lead to occasional false positives, we consider this trade-off acceptable. opw-4575004 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#231373
Users can now add image comments to Twitter posts from the Social app without upload errors. Comment text is also preserved when adding files or emojis, preventing accidental loss of drafted or edited comments.
Original PR description
Issue 1 ======= Steps to reproduce ----------------------- 1. Go to the Social app. 2. Create or Select any twitter post. 3. Add a comment to that post with an image. 4. Press Enter. ---> An error…
Issue 1
=======
Steps to reproduce
-----------------------
1. Go to the Social app.
2. Create or Select any twitter post.
3. Add a comment to that post with an image.
4. Press Enter.
---> An error notification will be shown.
When adding an image in a post comment to Twitter, the image was not uploaded properly because the MIME type was not set, and it defaulted to `application/octet-stream`.
This caused the following error:
```
{"errors": [{"parameters": {"$.media_type": ["'application/octet-stream'"]},
"message": "$.media_type: does not have a value in the enumeration
[video/mp4, video/webm, video/mp2t, video/quicktime, text/srt, text/vtt,
model/gltf-binary, model/vnd.usdz+zip, image/jpeg, image/gif, image/bmp,
image/png, image/webp, image/pjpeg, image/tiff]"}], "title": "Invalid Request",
"detail": "One or more parameters to your request was invalid.",
"type": "https://api.twitter.com/2/problems/invalid-request"}
```
From the above error, it's clear that Twitter only accepts specific MIME types.
This fix ensures the image has the correct MIME type so it can be uploaded without issues.
-------------------------------------------------------------------------------------------------------------------------------
Issue 2
=======
Steps to Reproduce
------------------------------
1. Select any post from social feed.
2. Add text comment or edit existing comment.
3. Upload file or add emoji.
=> The comment text is cleared/reset to its initial value.
Technical
------------------------------
With commit [1] we added `t-att-value` which sets the value of the textarea
on every re-render of the component.
After this commit
------------------------------
The initial value is only set once when component is mounted.
Removed `remove image` button for attachment while posting comments.
[1] https://github.com/odoo/enterprise/commit/ced5e88f433b7b9a8e1429259cd8bb6594b34852
Task-4845385
Forward-Port-Of: odoo/enterprise#91995Fixes an issue where the import screen could crash when a model offered more than one sample import template. Users can now reliably choose from multiple import templates, with cleaner button spacing for a better experience.
Original PR description
Import templates are defined on models to allow developpers to provide
sample import files to users. These templates are fetched by the client
as an array of objects of the form {label: string, template: string},
where label is the label to display and template the URL of the file.
The iteration on `importTemplates` goes through this list, and if more
than one element is present in it, the t-key for both elements will be
the same (`[[object Object]]`), leading to a crash of the client
action's template.
This commit uses the 'template' url as the key, as it should be unique
(the label is less trustworthy, as it is translatable).
It also slightly changes the styling, as having an mb32 between multiple
buttons looked rather bad.
Forward-Port-Of: odoo/odoo#231521
Forward-Port-Of: odoo/odoo#231407Spanish electronic invoices now preserve the correct product price precision and use the invoice’s existing tax totals when global tax rounding is enabled. This reduces rounding mismatches in generated Facturae XML files and helps invoices match official accounting amounts more reliably.
Original PR description
This PR is the opportunity to fix two mistakes in the XML generation of the e-Factura : 1. It is possible for a product to have more decimals than the currency, but the facturae always rounded…
This PR is the opportunity to fix two mistakes in the XML generation of the e-Factura : 1. It is possible for a product to have more decimals than the currency, but the facturae always rounded according to the currency. This would sometimes lead to both rounding errors and incomplete or incorrect values on the generated XML. This commit rounds product prices according to the unit price decimal while leaving the other computed field untouched as to not disturb the correct computation elsewhere. 2. When the tax rounding was set to round_globally, the TotalTaxOutput in the XML might differ from the actual tax_amount from the invoice because of rounding errors occurring during uncessary re-computation while building the XML. While stable is not the place to change all functions related, we can isolate computed tax output and tax withheld values and transmit them without any intermediary. As this file was changed in 18.0 another PR was needed from 17.0: https://github.com/odoo/odoo/pull/209623 (unit price decimals) and https://github.com/odoo/odoo/pull/229017 (tax rounding issue, detected after 209623 was closed) task-4650439 Forward-Port-Of: odoo/odoo#231424 Forward-Port-Of: odoo/odoo#229236
A problem in account reporting calculations was corrected to ensure the right records are used during processing. This helps prevent incorrect or inconsistent report behavior for finance users.
Original PR description
Forward-Port-Of: odoo/enterprise#97144
This update brings the spreadsheet component up to its latest version with fixes for copying values, data validation, dynamic tables, charts, and Excel imports. Users should see fewer spreadsheet errors, clearer chart displays, and faster recalculation in some cases.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/f13dd1c3e [REL] 18.3.24 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/f13dd1c3e [REL] 18.3.24 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/1d848dc70 [FIX] clipboard: paste as value with empty format string [Task: 5156459](https://www.odoo.com/odoo/2328/tasks/5156459) https://github.com/odoo/o-spreadsheet/commit/ebb2d5487 [FIX] table: create dynamic table on #SPILL! errors [Task: 5102771](https://www.odoo.com/odoo/2328/tasks/5102771) https://github.com/odoo/o-spreadsheet/commit/fb62e0400 [FIX] data_validation: selecting range from another sheet [Task: 4948201](https://www.odoo.com/odoo/2328/tasks/4948201) https://github.com/odoo/o-spreadsheet/commit/7e8bd49f1 [FIX] find & replace: fix arrow buttons sizing [Task: 5154004](https://www.odoo.com/odoo/2328/tasks/5154004) https://github.com/odoo/o-spreadsheet/commit/018e7a8ce [PERF] evaluation: stop the dependencies search early [Task: 4954710](https://www.odoo.com/odoo/2328/tasks/4954710) https://github.com/odoo/o-spreadsheet/commit/67031f419 [FIX] functions: fix LINEST error massage [Task: 5059375](https://www.odoo.com/odoo/2328/tasks/5059375) https://github.com/odoo/o-spreadsheet/commit/0de6c3310 [FIX] chart: clip show value text to chart area [Task: 5125970](https://www.odoo.com/odoo/2328/tasks/5125970) https://github.com/odoo/o-spreadsheet/commit/436323d38 [FIX] chart: tooltip has wrong format for date chart [Task: 5126261](https://www.odoo.com/odoo/2328/tasks/5126261) https://github.com/odoo/o-spreadsheet/commit/4b197537a [FIX] xlsx: import data validation rules with formula [Task: 5062253](https://www.odoo.com/odoo/2328/tasks/5062253) https://github.com/odoo/o-spreadsheet/commit/13cf6886a [FIX] chart: wrong label format for date chart [Task: 4908471](https://www.odoo.com/odoo/2328/tasks/4908471) 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>
This fix prevents an internal placeholder record from being used when opening Studio from the preparation activity display. It helps avoid a runbot error and improves reliability for users customizing or accessing this point of-sale preparation screen.
Original PR description
This commit prevents a NewId to be used in a domain when opening studio from the activity display. runbot error #233396
This update fixes a timing issue in Discuss calls that could cause an error when handling a peer-to-peer call offer. It improves call reliability by ensuring delayed offer handling does not use outdated connection information.
Original PR description
Before this commit, since https://github.com/odoo/odoo/pull/205198, the handling of an offer can be arbitrarily delayed by the `acceptOffer` callback. This could lead to a traceback when the reference to `peer` is stale by the time the event is handled. Forward-Port-Of: odoo/odoo#231620
This fixes an error that could prevent employees from creating their first timesheet when they did not have access to the company’s internal project. The system now avoids selecting a restricted project by default, allowing timesheet entry to proceed normally.
Original PR description
To reproduce: ============= - make the internal project of the company for invited internal users only - with internal user that doesn't have access to the internal project, and no previous timesheet created, try to create a timesheet - you get a traceback Problem: ======== when not having a previous timesheet, in the default value we set project_id based on the internal project of the company. But if the user doesn't have access to this project, it raises an access error. Solution: ========= check if the user has access to the internal project of the company, if not, use `False` as default value. opw-5119839 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#229818
The website setup flow now shows a fullscreen loading screen when users click to view more themes. This prevents users from accidentally selecting an existing theme while additional theme options are still loading, making setup more reliable.
Original PR description
Steps to reproduce: 1. Create a new website and proceed to the theme configuration step. 2. Click on View More Themes. -> You’ll notice a loading effect on the button, but the existing themes remain selectable. Before this commit: Users could still select existing themes while additional themes were being loaded. After this commit: A fullscreen loader is displayed while loading more themes via the View More Themes button, preventing any unintended interactions. task-4661292 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#230557
Electronic payments registered from an invoice will now keep the payment transaction connected to that invoice. This makes payment tracking and reconciliation clearer for accounting users and prevents missing invoice links in electronic payment records.
Original PR description
Steps to reproduce: - Create an invoice through Accounting app - Post the invoice - Register the payment using the "Register Payment" wizard with an electronic payment method. Description of the…
Steps to reproduce: - Create an invoice through Accounting app - Post the invoice - Register the payment using the "Register Payment" wizard with an electronic payment method. Description of the issue/feature this PR addresses: **The payment transaction was not being linked to the invoice for electronic payments.** To resolve this, I passed the current invoice IDs as context through action_register_payment in the account.move.line model. Then, I retrieved this context value in _prepare_payment_transaction_vals of the account.payment model to set the invoice_ids Many2many field. Current behavior before PR: The payment transaction is not linked to the invoice for electronic payments. Desired behavior after PR is merged: The payment transaction will be correctly linked to the invoice for electronic payments. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#208520 Forward-Port-Of: odoo/odoo#197091
Romanian eTransport exports now use the EU VAT-standard country code for Greece, changing it from GR to EL where required. This helps avoid validation errors when sending transport documents and keeps partner and transporter country data consistent.
Original PR description
Added a mapping for EU VAT country codes to ensure that the VAT prefix aligns with EU standards (e.g., 'GR' -> 'EL') in EDI exports. ## Description of the issue/feature this PR addresses: This PR…
Added a mapping for EU VAT country codes to ensure that the VAT prefix aligns with EU standards (e.g., 'GR' -> 'EL') in EDI exports. ## Description of the issue/feature this PR addresses: This PR adds country code mapping functionality to ensure compatibility with the format required by the Romanian eTransport system. Specifically, it adds the conversion of the country code "GR" (Greece) to "EL" according to European VAT standards and applies this mapping to relevant fields in transport documents. ## Current behavior before PR: Before this PR, the country code for Greece was sent as "GR" to the eTransport system, which could cause validation errors because in European VAT systems, Greece is identified by the code "EL". Also, there was no consistent mapping for country codes in different parts of the system. ## Desired behavior after PR is merged: After implementing this PR, country codes will be correctly mapped to comply with European VAT standards, especially the conversion of "GR" to "EL" for Greece. This ensures that documents sent through eTransport contain the correct country codes and will pass system validations. The mapping is applied to country codes for both commercial partners and transporters. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#216122 Forward-Port-Of: odoo/odoo#214621
Argentina VAT report exports now correctly generate both required AFIP text files for type C vendor bills and invoices without taxes. This helps businesses submit complete tax return files and avoid missing documentation in AFIP reporting.
Original PR description
…afip code '0' **Description of the issue/feature this PR addresses:** This PR addresses an issue identified in the generation of .txt files for invoices that utilize AFIP tax code '0' **Current behavior before PR:** The system is only generating one of the two .txt files required by AFIP for specific invoice types. Affected Cases: - Invoices of type 'C'. - Invoices that have no taxes. **Desired behavior after PR is merged:** Two .txt files should be generated for all invoice types, as per AFIP requirements. [HERE](https://app.screencastify.com/watch/2mtioGVxEOwW0rAHJS2v) is a video replicating the issue: 1. In localization Argentina, create a vendor bill type 'C' 2. In 'Tax Return' report, filter by date and 'Tax Type: Purchase' 3. Download .ZIP file and see only one .txt Forward-Port-Of: odoo/enterprise#96052
Website form fields now keep their spacing offset when display settings such as label position or descriptions are previewed or changed. This prevents users from having to reapply layout spacing after simple customization actions in the website editor.
Original PR description
Before this commit, changing display parameters of a field (label position, description, etc.) would remove the offset already added. It would require to add them again if a change was made on the display, even if the mouse just hovered the buttons. This commit solves the issue. Steps to reproduce the bug: - Add a form snippet - Add an offset to a field - In the snippet customization, hover over the label position (The offset was removed for good) task-3675509 Forward-Port-Of: odoo/odoo#231297 Forward-Port-Of: odoo/odoo#181344
The website SEO Auto-Fill action no longer crashes on system pages such as login, signup, password reset, and donation payment pages. This lets website managers use SEO optimization tools reliably across these pages without encountering an error.
Original PR description
Steps to Reproduce: 1.Go to the website and open a system page such as: /web/login /web/signup /web/reset_password /donation/pay 2.In the top menu, go to Site → Optimize SEO. 3.Click the Auto-Fill button. 4.Observe that a traceback appears. Before this commit: Clicking the Auto-Fill button caused a traceback error because pageTextContentEl was null due to wrong selector. As a result, getElementsByTagName could not be accessed. In this commit: We provide the correct querySelector value so that pageTextContentEl properly references the intended DOM element. This fix prevents the error and ensures that the SEO Auto-Fill button works correctly, populating all required fields without issue. task-4974618
Fixed an issue where using the keyboard arrows in the Helpdesk knowledge base search suggestions could trigger an error. This keeps customer self-service browsing smoother and prevents users from being interrupted while searching for help articles.
Original PR description
Steps to Reproduce: 1. Navigate to '/helpdesk/customer-care-1/knowledgebase'. 2. Enter any text in the search bar to trigger suggestions. 3. Press the down arrow key twice. 4. A traceback error occurs, indicating an Odoo Client Error. Before this commit, we had a crash when a user types something in a searchbar in the website helpdesk and do keydowns: "Cannot read properties of undefined (reading 'nextElementSibling')" To fix this, we need to add the 'data-bs-toggle' attribute to let BS find it to set '_element' (which must be the previous sibling of the dropdown-menu). This data attribute was probably not set before because in this case the BS dropdown is not used on a button or a link as documented; we use it as an autocomplete functionnality. task-4752497 Forward-Port-Of: odoo/enterprise#97149 Forward-Port-Of: odoo/enterprise#90228
Contacts that are linked to Point of Sale orders can no longer be deleted, preventing past orders from losing their customer information. This preserves sales history accuracy and avoids gaps in reporting or customer service records.
Original PR description
Before this commit, it was possible to delete a contact record even if it was linked to PoS orders, which would cause it to be unlinked from those orders. opw-5164368 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#231612 Forward-Port-Of: odoo/odoo#231442
Tooltips in live chat, messaging, point of sale, and emoji picker screens are now included in the normal translation process. This ensures users see helpful hover text in their selected language, improving consistency across localized deployments.
Original PR description
Unless you tell Owl to do so, custom attributes like data-tooltip aren't translated. This commit adds the data-tooltip attribute to the list of translated attributes when missing. *: im_livechat, mail, point_of_sale Forward-Port-Of: odoo/odoo#231541 Forward-Port-Of: odoo/odoo#231006
This fixes employee contract calendars so weekends and public holidays from past, expired contracts are shown again before a current contract starts. It helps HR and payroll users see accurate historical working-time information while still excluding draft contracts that should not be used.
Original PR description
Since changes made in https://github.com/odoo/odoo/pull/212959, we don't see anymore the week-end and banck holidays before the start date of your current contract. As the goal of the initial commit was to prevent to use the contracts in state 'new', we add the contracts 'exppired' that are contracts of the past that really give information of the working hours. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#231400
This update ensures accounting localization tests always install the needed demo data before running. It keeps test behavior consistent across versions and reduces the risk of false test failures, with no direct impact on end users.
Original PR description
In later versions, we improve the testing suite to avoid having to install demo data in order to reduce the testing time. In order to keep the testing configuration simple across versions, we force the installation of demo data instead of only asserting that demo is installed before launching the script. Forward-Port-Of: odoo/odoo#231810 Forward-Port-Of: odoo/odoo#231660
This fixes an issue in the HTML editor where typing near the edge of a link inside formatted text could lose the surrounding formatting. Users editing rich text content can now add links within styled text without accidentally creating mismatched or unformatted characters.
Original PR description
Problem: If we add a link on a slice of formatted text we end up being able to type unformatted content at the link edges. Cause: After https://github.com/odoo/odoo/commit/3bcbd6f34facb9c88290dbd6496cc5103665a0a2 the `span` can be split and `feff`s are placed around the link, precisely between the link and the `span`. This allows writing unformatted content at the caret when placed between them. Solution: Ensure that the link is created inside the `span`. Also prevent the formatting applied by `.btn` when the link is inside a `span`. Steps to reproduce: 1. Add "abc". 2. Format all the text: set font size 48 (or whatever). 3. Select "b". 4. Create a link on "b" only. 5. Put caret before "a". 6. Press Arrow left. 7. Type any character. → The character is not formatted as the link content. task-5092298 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#231464 Forward-Port-Of: odoo/odoo#228353
Companies based outside the EU can now save valid European VAT numbers without being incorrectly blocked by country-specific validation rules. This helps businesses record accurate tax information for international customers and partners.
Original PR description
****Behavior:**** **Current:** When a company is assigned a VAT number, the integrity of the VAT is checked according to the rules of the company's country except when a EU country is assigned an other EU country's VAT, then the integrity of the VAT is checked according to the other EU country's rules. **Expected:** We want to allow Foreign companies to have valid European VAT numbers. **Steps to reproduce:** - Create a new contact, select company and add any name - Select a country that is not in the EU and has implemented the VAT system (Ex: China, Australia | Some countries, like the US or some smaller countries, don't have an implementation in Odoo, or just dont use VATs, in that case they are allowed to put whatever in the VAT field) - Input a valid EU VAT number in the Tax ID field (ex: FR17698800935) - when saving, the system should raise a Validation Error. opw-5080231
This change restores the previous currency translation behavior for cumulative translation adjustment calculations. It avoids incorrect year-over-year balance sheet revaluations by using the appropriate closing rate instead of a current rate that produced unexpected results.
Original PR description
This reverts commit c440bb52d19b8dcec8b708509973c4095a577b34 as it doesn't work as expected in year-over-year re-evaluation in balance sheets. task-5085888 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#231823 Forward-Port-Of: odoo/odoo#231718
This change restores the use of the closing exchange rate for currency translation adjustments in accounting reports. It helps ensure financial reports reflect the expected end-of-period values, improving consistency for payable, receivable, ledger, trial balance, and currency-related reporting.
Original PR description
This reverts commit 0719c63a646c360a4b090745cd8105128332ef38. task-5085888 Forward-Port-Of: odoo/enterprise#97320 Forward-Port-Of: odoo/enterprise#97271