Daily updates from Odoo
Tuesday, September 2, 2025
31 changes · saas-18.3
New functionality added to Odoo
Adds support for Taiwan electronic invoicing through ECPay, enabling businesses to send, refund, and print compliant invoices directly from Odoo. This helps Taiwanese companies streamline invoicing operations and meet local e-invoicing requirements.
Original PR description
This commit adds the module for implementing the ECPay integration for Taiwan's electronic invoicing system task-2663805 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#223132
Enhancements to existing features
Developers can now run selected tests directly from the Odoo shell after changing test code, without restarting the full server. This should speed up debugging and improve development workflow, while business logic changes still require a shell restart.
Original PR description
This commit introduces a new function `run_tests` to the Odoo shell. This function allows users to run specific tests directly from the shell, even after the test code is modified. This significantly…
This commit introduces a new function `run_tests` to the Odoo shell. This function allows users to run specific tests directly from the shell, even after the test code is modified. This significantly speeds up the debugging process by avoiding the need for a full server restart. In the odoo shell ``` >>> from odoo.tests.shell import * >>> run_tests(env, 'test_tags', modules=[module_name], reload_tests=True) ``` Note: `run_tests` automatically reloads test modules but does not reload Odoo model code. A shell restart is still required after any change to business logic. used by https://github.com/HydrionBurst/odoo-test-vscode for hot test vscode extension: [odoo-test-0.0.1.vsix.zip](https://github.com/user-attachments/files/22089685/odoo-test-0.0.1.vsix.zip) tutorial: https://github.com/HydrionBurst/odoo-test-vscode?tab=readme-ov-file#-hot-test 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#225024 Forward-Port-Of: odoo/odoo#224048
Module upgrade processing now uses less memory when handling large website view data. This helps prevent database access failures during upgrades, improving reliability for affected customers.
Original PR description
### Issue A user cannot access their database (Bad Gateway) after trying to upgrade a module. ### Analysis The root cause is the out of memory error, stemming from the SQL query fetching all `arch_db` and then fetching them with `fetchall`. ### Solution This commit optimizes the loading of module terms in the `ir_module_module` model by iterating over the rows per chunks. This change reduces the memory footprint, which is crucial when dealing with heavy `arch_db` in the `ir_ui_view` table. We also filter out `if not generic_arch_db` directly in the SQL query instead of on the Python side. After applying this patch, there is no more `MemoryError` and the user can access their database. ### References opw-5014922 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#224709 Forward-Port-Of: odoo/odoo#223439
Creating records with HTML content now avoids repeating an expensive cleanup step, which makes large email and marketing batches run much faster. This reduces processing time and memory use, especially for mass mailing campaigns with many recipients.
Original PR description
Description ----------- When creating records with `vals` for HTML fields, there are two 'sanitization' operations happening: 1) Once in `convert_to_column`, when converting the `vals` for *database*…
Description ----------- When creating records with `vals` for HTML fields, there are two 'sanitization' operations happening: 1) Once in `convert_to_column`, when converting the `vals` for *database* insertion 2) Once post-insert in `convert_to_cache`, when converting the `vals` for insertion in the *cache* for the newly created records. This redundancy has a negative performance impact when creating many records where new HTML fields are set, e.g., mass-mailing, as potentially large HTML documents are parsed and validated, often with external libraries. To address this issue, this commit removes the insertion into *cache* of the HTML values for the newly created records. This removes the overhead of the second sanitization, speeding up the creation, and also helps with overall memory pressure, as we're not inserting large HTML fields into cache. The latter is particularly noticeable for long-running batch creation processes that do *not* commit intermediate results. The downside of this patch is the potential *cache-miss* (and therefore the subsequent *query*) if the HTML field of the newly created records is read. This is unlikely in business code because intrinsically, an HTML field is often just a data 'blob' that has no logical usage. In the rare case where it needs to be read after creation, since the value in the database is already sanitized, re-sanitization is not necessary for insertion in the cache. Given these considerations, the trade-off seems reasonable to make. Benchmark --------- In a scenario for a marketing campaign with 1000 recipients, using a *mid-sized* email template and emulating a typical campaign, the results were: | Method | Before | After | Speed up | |-------------------------------|----------|-----------|----------| | `_process_mass_mailing_queue` | 2.84 min | 1.55 min | 1.8x | | `create` | 2.11 min | 50.23 sec | 2.5x | This represents roughly a *2x* performance improvement in processing an email campaign. * more detailed benchmarks are available in the task's description Reference --------- task-4962646 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#224534 Forward-Port-Of: odoo/odoo#223875
The Italian XML export now shows a 'Close' button instead of 'Submit' for monthly LIPE tax periods that are not quarter-end months. This reduces confusion for users by matching the action label to the expected month-end workflow.
Original PR description
- Dynamically set the `submittedLabel` to 'Close' instead of 'Submit' when the tax period do not correspond to the last month of a quarter (March, June, September, December). task-4825570
This change updates internal performance test expectations for the Knowledge app after a technical change in how HTML content is cached when records are created. It helps keep automated performance checks accurate without changing user-facing features.
Original PR description
Adapting query count, due to not putting html fields in cache upon creation. task-4962646 Forward-Port-Of: odoo/enterprise#93344 Forward-Port-Of: odoo/enterprise#93171
Resolved issues and error corrections
Users can now find taxes even when they type only part of the tax name or an approximate shortcut. This makes tax selection faster and reduces failed searches when the exact tax label is not known.
Original PR description
Issue: - Searching for a tax by its name is not flexible. - Users have to type the exact name of a tax to find it. Fix: - Override the 'search' function in the 'Many2XTaxTagsAutocomplete' component Impact: - Improves user experience by allowing tax searches using partial or approximate name inputs. - For example, typing '21s' will return all relevant results like '21% S' and similar matches. Task: 5046098
Refunds for standard-cost purchased products now reverse the related cost accounting entries correctly. This prevents credit notes from duplicating the original bill balances and helps keep inventory and accounting reports accurate.
Original PR description
When users refund a real-time/standard cost product purchase, cogs lines are not reversed **Steps to reproduce** 1. Create a product category [CATEG]: - Costing Method: Standard - Inventory…
When users refund a real-time/standard cost product purchase, cogs lines are not reversed
**Steps to reproduce**
1. Create a product category [CATEG]:
- Costing Method: Standard
- Inventory Valuation: Automated
- Price Difference Account: 101403 Outstanding Payments (any account will do)
2. Create a product [PROD]
- Type: Storable
- Category: [CATEG]
3. Create and confirm a PO with [PROD]
4. Process the receipt
5. Create the bill
6. Issue the return and process it
7. Create the refund
**Issue**
The credit note cogs lines (price difference account and stock interim) have the same balance of the bill
However the credit note should mirror the original BILL with the opposite accounting entries.
This seems to occur because, when generating cogs lines, we take into account that the current move is a refund but then we use the move direction sign to alter the balance sign
opw-4845342
Forward-Port-Of: odoo/odoo#224873
Forward-Port-Of: odoo/odoo#221198This fixes an issue where online payment order dates could be sent using the local timezone instead of UTC. Keeping these timestamps in the expected timezone helps prevent incorrect order timing in point-of-sale payment records.
Original PR description
In 2a5f1ab, we formatted the `order_date` with `toFormat(...)`, however, that transforms the date into local, while the backend expects it to be in UTC. In this commit, we set the date tz back to UTC before formatting it. opw-4942697 Forward-Port-Of: odoo/odoo#225041 Forward-Port-Of: odoo/odoo#224085
This fix restores the ability to swipe left on mobile to unpin conversations from the messaging menu. It corrects how unread message information is read, preventing the swipe action from failing and improving mobile usability.
Original PR description
Before this commit, swiping left to unpin threads in the messaging menu was not working. This issue was introduced by [1] (which is a backport of [2]), and it stems from trying to acccess the message_unread_counter on the thread instead of the self channel member. This commit fixes the issue by accessing the property correctly from the self channel member. [1] https://github.com/odoo/odoo/pull/212793 [2] https://github.com/odoo/odoo/pull/212793 task-5058496
Users can now find Indonesian Coretax product codes more easily when editing product templates. Searches work by code, description, or the displayed label, reducing confusion and helping users select the correct tax-related product code faster.
Original PR description
Description of the issue/feature this PR addresses: Because `l10n_id_efaktur_coretax.product.code` model does not have a `name` field and does not use` _rec_name`, search record in m2o field or…
Description of the issue/feature this PR addresses: Because `l10n_id_efaktur_coretax.product.code` model does not have a `name` field and does not use` _rec_name`, search record in m2o field or searchview is difficult and not normal. so this uses `_rec_name = "code"` for fixing in searchview, and overrides `_name_search()` to be able to search using field `code` or `description` or like `name_get()` string Current behavior before PR: <img width="821" height="353" alt="Before fixing coretax product code search 1" src="https://github.com/user-attachments/assets/12ca3248-0bea-4ef3-bb04-116d63520517" /> <img width="832" height="432" alt="Before fixing coretax product code search 2" src="https://github.com/user-attachments/assets/ced291b7-c4c6-42e7-a453-7a1f18945637" /> <img width="988" height="568" alt="Before fixing coretax product code search 3" src="https://github.com/user-attachments/assets/bbac4ae1-a31d-49bd-b520-a68a1a945e78" /> Desired behavior after PR is merged: <img width="438" height="314" alt="After fixing coretax product code search 1" src="https://github.com/user-attachments/assets/4469bb5b-0830-49af-af1c-f05b81dcb10c" /> <img width="467" height="331" alt="After fixing coretax product code search 2" src="https://github.com/user-attachments/assets/5528db34-e279-4d2d-98f0-644f7a618ead" /> <img width="991" height="619" alt="After fixing coretax product code search 3" src="https://github.com/user-attachments/assets/fec53a0c-ab29-46c5-b366-46653b51d7e4" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#222588 Forward-Port-Of: odoo/odoo#221858
This fixes inventory valuation when manufactured products are unbuilt after costs have changed. Instead of forcing the unbuild to reuse the original manufacturing cost, Odoo now records a corrective accounting entry so product costs and stock valuation stay aligned.
Original PR description
**Current behavior:** Since https://github.com/odoo/odoo/commit/84dda968146d2f3743ab7fc516300e50780725e3, we valuate an unbuild operation by attempting to match the ensuing OUT layer with the IN…
**Current behavior:** Since https://github.com/odoo/odoo/commit/84dda968146d2f3743ab7fc516300e50780725e3, we valuate an unbuild operation by attempting to match the ensuing OUT layer with the IN layer from the original MO. The point being to eliminate a potential valuation imbalance for the manufactured product (might affect cost, etc.). **New behavior** Don't attempt to match an unbuild valuation layer with the original MO valuation layer. If there is some cost difference between build time and unbuild time, make a corrective journal entry for it. **Issue with current behavior** The following sequence: 1. Create Product A with average costing, real-time valuation 2. Create 2 components, avg costing, real-time val 3. Create a BoM for Product A with the components 4. Manufacture 3 units of Product A with different component quantities (can set flexible consumption on BoM) 5. Unbuild the first manufactured unit Results in Product A's cost not matching the expected average cost according to the valuation layers. **Cause of the issue:** Unbuilding the first MO created an out move at the original "build time" cost, but since we've built 2 additional qty, that original cost is not the current average cost- thus the "theoretically current" standard price of the product (sum of layers value divided by remaining qty) is no longer the value we see on the product form. **Fix:** Don't try and match the valuation layers. Aside from issues such as the one described above, it might not actually make functional sense to do so (e.g., FIFO isn't actually adhering to first-in-first-out if we're preferring the original IN layer for an unbuild valuation). Instead we make a journal entry with any excess cost of production (it was actually a solution proposed in the discussion on https://github.com/odoo/odoo/commit/84dda968146d2f3743ab7fc516300e50780725e3 in the first place). Additionally, now that we aren't doing this mapping, we can revert the non-test difference of https://github.com/odoo/odoo/commit/3a69456a291da593748475c86e7efc6234019e47, as this commit was fixing an issue introduced by the change which added the mapping. opw-[4877597](https://www.odoo.com/web#id=4877597&view_type=form&model=project.task) Forward-Port-Of: odoo/odoo#222014 Forward-Port-Of: odoo/odoo#221718
The mailing form now correctly marks the sender email as required before saving. This prevents confusing server errors and gives users a simple, familiar prompt to complete the missing field.
Original PR description
**Steps to reproduce:** - Install `mail_mailing`. - Create a new record and leave the `email_from` field empty. **Observed behavior:** - A validation error is raised due to a bad query. **Expected…
**Steps to reproduce:** - Install `mail_mailing`. - Create a new record and leave the `email_from` field empty. **Observed behavior:** - A validation error is raised due to a bad query. **Expected behavior:** - Since the field is required, the UI should display a simple “Invalid fields” pop-up instead of a server-side validation error. **Cause:** The commit odoo@92c5b0699dffab98f55ed1a54a0236dbc4b5626a removed the `required` attribute from the `email_from` field and replaced it with a constraint. As a result, UI-level validation was lost and only the backend validation error is shown. **Fix:** Re-add the `required` attribute for the `email_from` field in the view so that the standard UI validation is triggered. **Before Fix:** <img width="1366" height="578" alt="email_from_empty" src="https://github.com/user-attachments/assets/23680aad-e9c8-4554-b990-de0784cb4442" /> **After Fix:** <img width="1366" height="620" alt="after_fix_email_from" src="https://github.com/user-attachments/assets/ef34c680-8b17-4773-995d-d953a874e6a0" /> I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Current Stock button on a stock location now opens a list filtered to that specific location instead of showing all products across all locations. This helps warehouse users see the relevant inventory faster and avoids confusion from unrelated stock records.
Original PR description
From this [commit](https://github.com/odoo/odoo/commit/81acb532a45cf7ab2837634e4d347b216c95f07a), clicking the "Current Stock" button on a location form opened the stock quant list without filtering by the selected location, showing all products. After this commit, the context `search_default_location_id` is added so that the stock quant list is properly filtered by the active location. **Before fix** <img width="1919" height="951" alt="2025-09-01_12-15" src="https://github.com/user-attachments/assets/93a6034b-0d07-4668-b67d-a84df2285a48" /> **After fix** <img width="1913" height="862" alt="2025-09-01_12-20" src="https://github.com/user-attachments/assets/03eb5b48-0799-4a73-a826-b3c9971b4a85" /> opw-5033643 upg-3117055 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
The point of sale tax control button now appears only when the relevant tax or takeout/delivery settings are enabled, including in restaurant mode. The tax selection popup also has a clearer title, reducing cashier confusion and preventing unnecessary options from showing.
Original PR description
Before this commit: =================== - When only point_of_sale is installed, the tax control button is visible only if `Flexible Tax` is enabled. But with pos_restaurant installed, the button is always visible, even if Flexible Tax is disabled. - Also, the tax selection dialog had an incorrect title: `Please register the voucher number`. After this commit: ================== - In point of sale, the tax control button will be visible if `Flexible Tax` is enabled, and in restaurant mode, the button will be visible if the `Flexible Tax` or `Takeout/Delivery` is enabled. - The tax selection dialog title has been updated to: `Choose the tax you want to apply`. Task: 4937977 Forward-Port-Of: odoo/odoo#224847 Forward-Port-Of: odoo/odoo#218815
Updates the Spanish descriptions for several Argentine IIBB sales perception taxes so they show the full jurisdiction names. This helps accounting users identify the correct taxes more clearly and consistently in Odoo.
Original PR description
**Description of the issue/feature this PR addresses**: It is needed to ensure that the descriptions for the IIBB perceptions are consistent and correctly reflect the complete name of the…
**Description of the issue/feature this PR addresses**: It is needed to ensure that the descriptions for the IIBB perceptions are consistent and correctly reflect the complete name of the jurisdictions they apply to. **Steps to reproduce**: 1) Go to runbot odoo 18 instance, install l10n_ar module, take position on Argentinean company and activate "Spanish (Latin America)" language. 2) Go to "Accounting / Configuration / Accounting / Taxes", filter by "Sales" Tax Type (type_tax_use) and see that Perc IIBB San Juan, Perc IIBB San Luis and Perc IIBB Santa Fe don`t have the complete description. It is needed to show the complete description. <img width="1825" height="307" alt="image" src="https://github.com/user-attachments/assets/f664e5ec-a4b5-4a8f-bbab-9ba3d824bd2b" /> **Current behavior before PR**: Perc IIBB San Juan, Perc IIBB San Luis and Perc IIBB Santa Fe taxes don`t have the complete description. **Desired behavior after PR is merged**: Perc IIBB San Juan, Perc IIBB San Luis and Perc IIBB Santa Fe taxes have the complete description. <img width="1828" height="425" alt="image" src="https://github.com/user-attachments/assets/dc8ee6dd-23c3-40c1-a973-943971e3cb78" /> **Task Adhoc side**: 53028 **Task latam side**: 1356 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#221742
The Spanish Point of Sale test now uses the current year when checking order names instead of relying on a fixed 2025 value. This prevents date-related test failures and helps keep release validation stable across build environments.
Original PR description
The settle account due tour in l10n_es_pos was failing because the order name was hardcoded to "TSJ/2025/00001". This value includes a date-dependent year and sequence number, which vary based on `context_today`. this will ensure that the tour dynamically generates the order name based on the current year, making it correct for faketime builds build_error-230724 <img width="1366" height="768" alt="image" src="https://github.com/user-attachments/assets/2b7d0e04-9cd9-45d9-b5f0-32f39f87dd90" />
This fixes an issue where users editing menus in Studio could not create or edit a client action because the system failed to generate a default form. The redundant custom handling was removed so the standard view generation now works as expected.
Original PR description
Steps to reproduce ================== - Install studio,contacts - Go to contacts - Open studio - Click on "Edit menu" - Click on the pencil next to a menu item - Set the action type to ir.actions.client - Type a random string next to it, for example "test123" - Click on "Create and Edit" => No default view could be found Cause of the issue ================== The following commit removes the binary fields from the default view as it caused a traceback https://github.com/odoo/odoo/commit/70d51d2103118287b1ebafdae396c7b86e6b9257 A more general fix has been made in https://github.com/odoo/odoo/commit/e1edcb06ef2619835d07717f00cbf6f04f026366 Since the binary fields are already removed in the super call, the override doesn't find them. Solution ======== There is no need for the override anymore opw-5023188 Forward-Port-Of: odoo/odoo#224752 Forward-Port-Of: odoo/odoo#224634
This update corrects the Spanish Canary Islands tax configuration to use the current field name in Odoo 18. It helps ensure tax data loads properly and avoids setup errors for companies using this localization.
Original PR description
Description of the issue/feature this PR addresses: In version 18 of Canary Islands taxes, the “price_include” field no longer exists. It is now called “price_include_override.” 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#223996
The Send & Print wizard now reliably hides the Download option for users in all languages. This prevents a previously hidden choice from reappearing when Odoo is used outside English, keeping the workflow consistent.
Original PR description
Since 7ad7a1d976391e81eaa03be7076cc61f4a6cfcbe we don't show Download option in the Send & Print wizard. However, we were checking the tuple `(value, label)` which works only if language is set to English. With this commit, we only check the technical value opw-4965650 Forward-Port-Of: odoo/odoo#221763
This fix prevents an error when a Spanish company has no tax ID set and the VeriFactu batch check runs. The system now handles the missing value safely, improving reliability for affected Spanish electronic invoicing workflows.
Original PR description
Replaced `['NIF']` with `.get('NIF')` to avoid a `KeyError` when the company does not have a NIF.
When the VAT value is not set on the company and the `_send_as_batch_check` method is executed, the system raises an error from [1].
This PR updates the code to use `.get('NIF')` instead of direct access, making it more robust.
[1]: https://github.com/odoo/odoo/blob/dff2423ac320fdb97d6bf1f106dc84be1d71cac2/addons/l10n_es_edi_verifactu/models/verifactu_document.py#L1165
**sentry-6829500308**
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#224982Fixes an issue where reloading fiscal localization settings could fail after a related localization module was uninstalled in another session. This helps accounting administrators continue setup or maintenance without encountering an unexpected error.
Original PR description
Currently, an error occurs when a user attempts to reload the fiscal localization after uninstalling the `l10n_syscohada` module. **Steps to Reproduce:** - Install l10n_cf module(with demo). - Switch…
Currently, an error occurs when a user attempts to reload the fiscal localization after uninstalling the `l10n_syscohada` module. **Steps to Reproduce:** - Install l10n_cf module(with demo). - Switch the company to `CF Company`. - Navigate to Invoicing settings - Login in different device with admin rights - In other device, uninstall l10n_syscohada module. - Now switch back to main device and do not reload the tab. - Click on Reload button under Fiscal Localization. **Error:** `TypeError: super(type, obj): obj must be an instance or subtype of type` **Root Cause:** since https://github.com/odoo/odoo/pull/186635/commits/58fb2db14ce3b7ddd70ffd617d2152c836151455, the line `self = self.env()['account.chart.template']` was removed from [1] when clicking the reload button, system tries create **data** at [2] but fails because the registry has been reset. [1]- https://github.com/odoo/odoo/blob/1dfa4cc9d259b4918424a07394938e24da8c643d/addons/account/models/chart_template.py#L183-L184 [2]- https://github.com/odoo/odoo/blob/c363014fe77d2ea706dabf8af232745d4e723267/addons/account/models/chart_template.py#L222 **Solution:** This commit prevents the error by providing new `env` with new `registry` to handle loading during the reload process. Sentry-**6272559266, 6750055374** Forward-Port-Of: odoo/odoo#216315
The self-ordering flow now displays combo products with variants set to always be created in the same way as the main Point of Sale. This prevents customers from missing available combo choices and helps keep ordering behavior consistent across POS channels.
Original PR description
Issue: The products that had a variant creation set to "always" was not displayed like in the pos. (see task) This commit fixes issue by applying the same display logic as used in the POS, introduced in PR: https://github.com/odoo/odoo/pull/222252 Task-5005158 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
The email composer now correctly limits template suggestions to templates available to the current user or shared with everyone. This prevents employees from seeing templates assigned to another user, reducing confusion when sending sales emails.
Original PR description
**Steps to reproduce:** 1. Install Sales. 2. Create an email template for the 'sale.order' model and assign it to the admin user under the settings page in the 'User' field. 3. Log in as the demo…
**Steps to reproduce:** 1. Install Sales. 2. Create an email template for the 'sale.order' model and assign it to the admin user under the settings page in the 'User' field. 3. Log in as the demo user. 4. Create a quotation and click the 'Send by Email' button. 5. In the wizard, click the three dots between the attachment and AI logo in the footer. 6. Observe the templates list. **Issue:** - The template created for the admin user appears for the demo user as well. **Cause:** https://github.com/odoo/odoo/blob/07626050bd0104fecd8799b56d30245d00da3f27/addons/mail/static/src/core/web/mail_composer_template_selector.js#L31-L44 - The domain used to fetch templates was incorrectly filtering for templates assigned to any user (instead of filtering for templates assigned to the current user or not assigned at all). **Solution:** - Corrected the domain to include only templates assigned to the current user and not assigned to anyone. opw-4901492 Forward-Port-Of: odoo/odoo#222073 Forward-Port-Of: odoo/odoo#217641
This fix prevents certain errors from the IoT-connected Belgian blackbox from causing a system traceback after POS data is pushed. It improves reliability for Belgian point-of-sale operations by handling these error responses more safely while a broader error-handling approach is planned.
Original PR description
Before this commit, it could happen that an error returned by the iot when contacting the blackbox was not correctly handled and led to a traceback. This commit solves the issue temporaly before finding a solution to harmonize the error handling in the blackbox. Forward-Port-Of: odoo/enterprise#93468
Users can now scrap completed manufacturing orders from the Barcode app without encountering an error. The fix safely handles cases where a production order has no by-products, preventing an interruption in warehouse operations.
Original PR description
Issue ----- Trying to scrap a production through the barcode app gives the user a traceback. Steps to reproduce ----- - Have a done MO - Go to barcode and try to scrap it --> Traceback Cause ----- When preparing the context for the scrap window, we try to map the MO's byProducts. When there is no byProduct, we end up trying to apply a mapping on "nothing". ----- Ticket: opw-4792599 Forward-Port-Of: odoo/enterprise#92925 Forward-Port-Of: odoo/enterprise#90623
Odoo Sign now blocks unsupported encrypted PDF files before users try to complete signing. This prevents a confusing system error and helps users understand earlier when a document cannot be processed.
Original PR description
Currently an error occurs when signing an encrypted file with empty password. **Steps to replicate** * Install `Sign` * Sign> Upload a pdf > Add following…
Currently an error occurs when signing an encrypted file with empty password. **Steps to replicate** * Install `Sign` * Sign> Upload a pdf > Add following [pdf](https://drive.google.com/file/d/1M0_VzWLzv-lSZ-IlI9Zmx-M7jFGvtJJj/view?usp=sharing)> Sign the document using `Sign now` * Validate and send completed document `AttributeError: 'NoneType' object has no attribute 'seek'` **Cause:** This occurs because [1] returns `None` to the variable `output` at [2] which in turn passes the `None` value to [3] causing the error. Error occurs in python 3.12+, because it does not throw an exception in `_check_pdf_data_validity`. **Solution:** * Add a validation to prevent upload of unsupported files. [1]: https://github.com/odoo/enterprise/blob/e7861f1ddef2fb9628eebca93942e64c73cc95fc/sign/models/sign_document.py#L242-L243 [2]: https://github.com/odoo/enterprise/blob/e7861f1ddef2fb9628eebca93942e64c73cc95fc/sign/models/sign_completed_document.py#L33-L34 [3]: https://github.com/odoo/odoo/blob/033c7a63bdf3d10d9d2c5084959fd34f52011bea/odoo/tools/pdf/signature.py#L51 **Sentry-6784800544,6802557168**
This fixes an issue that could cause the generic tax report to fail after changing its root report setting. Accounting users can now open the tax report without encountering a server error in this scenario.
Original PR description
**[FIX] account_reports: ensure join on account_move for tax report base amount calculation** Fixes a server error in the generic tax report where `account_move_line__move_id` was referenced without an explicit join. The fix adds a conditional join on `account_move` to make fields like `always_tax_exigible` available, preventing `UndefinedTable` during SQL execution. Steps to reproduce: 1 - in a fresh db or runbot go to `Accounting > Config > Accounting Reports`. 2 - Open the Tax Report and change the `Root Report` to Balance Sheet. 3 - Save and try to open the tax report. opw-4990771 Forward-Port-Of: odoo/enterprise#91941
Fixed an issue where uploading a file for an existing document or request created a separate temporary card or row to show progress. The progress indicator now appears on the relevant existing document, making uploads clearer and avoiding duplicate-looking entries.
Original PR description
Step to reproduce: 1. Upload a file to a request: - Create a Request. - Upload a file for that request. - Another Kanban card / List row is created showing the upload progression. 2. Upload a file into the manage version dialog. - Manage version for an existing document. - Upload a new document. - Another Kanban card / List row is created showing the upload progression. The upload progression should be shown on the existing document. Task-4863051 Forward-Port-Of: odoo/enterprise#87428
Blackbox devices now keep their existing configuration when they are unplugged and reconnected with a different port assigned by the Raspberry Pi. This prevents duplicate device records and avoids disrupting configured IoT setups after reconnects.
Original PR description
Before this commit, if a blackbox was unplugged and re-plugged, and it was assigned a different serial port by the Raspberry Pi, it would show up as a new device in the database meaning the existing…
Before this commit, if a blackbox was unplugged and re-plugged, and it was assigned a different serial port by the Raspberry Pi, it would show up as a new device in the database meaning the existing configuration wouldn't work. After this commit, we handle the blackbox as a special case, and if the name of the device matches exactly with our existing blackbox, we update its identifier instead of creating a new device. This does require a new device specific check in the controller which is quite ugly. Another approach would have been to make the identifier of the blackbox equal its FDM ID instead of the serial port, but this was not done for the following reasons: - Changing the identifier format in stable would cause all existing clients' blackboxes to become unconfigured once their IoT box restarts. - Making the identifier different to the serial port would require a hack in the blackbox driver to change its own identifier and update the devices dictionary, since the serial interface assumes all devices use the port as their identifier. task-5055027 Forward-Port-Of: odoo/enterprise#93593
Finding duplicate bank transactions no longer fails when the Starting Date field is left empty. The system now uses today's date automatically, allowing accounting users to complete the action without interruption.
Original PR description
Currently, an error occurs when attempting to find duplicate transactions in the bank. Steps to Reproduce: - Install the `Accountant` module. - In the `Accounting` Dashboard, click on `Bank`. - In…
Currently, an error occurs when attempting to find duplicate transactions in the bank.
Steps to Reproduce:
- Install the `Accountant` module.
- In the `Accounting` Dashboard, click on `Bank`.
- In Actions, click `Find Duplicate Transactions`.
- Clear the `Starting Date` and click save.
Traceback:
```py
psycopg2.errors.UndefinedFunction: operator does not exist: date >= boolean
LINE 6: AND move.date >= false
^
HINT: No operator matches the given name and argument types. You might need to add explicit type casts.
```
This error occurs when the system attempts to detect duplicate transactions without a `Starting Date`. During the check, it evaluates the condition `move.date >= date_from`. Since `date_from` is False, the comparison triggers an error.
This commit ensures that if the `Starting Date` is empty when finding duplicate transactions, it uses today’s date as the `Starting Date`.
Reference commit: https://github.com/odoo/enterprise/pull/87000/commits/806ab2d56952e9d0f597cf1ab36ea2f180a84323
Forward-Port-Of: odoo/enterprise#92497