Daily updates from Odoo
Friday, August 8, 2025
29 changes · master
Enhancements to existing features
This update adds detailed logging for AI agent activity, helping teams understand how AI requests use tokens, tools, and time. It improves visibility for troubleshooting and cost/performance monitoring without changing the normal user experience.
Original PR description
This commit introduces comprehensive logging for AI agent API interactions, providing visibility into token usage, API calls, and tool execution patterns. The logging system tracks: - API calls with…
This commit introduces comprehensive logging for AI agent API interactions,
providing visibility into token usage, API calls, and tool execution patterns.
The logging system tracks:
- API calls with estimated token counts (input/output)
- Tool execution (sequential vs batch)
- Timing information for API calls and tool execution
- Summary statistics including total estimated tokens, API calls, tools, and batches
Append `--log-handler odoo.addons.ai:DEBUG` when starting the server to see the
detailed logs.
Example output:
```
DEBUG [AI Prompt] <context>
<session-info>
<user id="2" name="Mitchell Admin" model="res.users"/>
<partner id="3" name="Mitchell Admin" model="res.partner"/>
<company id="1" name="My US Company" model="res.company"/>
</session-info>
</context>
<query>
pos orders from restaurant configs containing products from the food categ
</query>
DEBUG [AI Response] Starting generation for model 'gemini-2.5-flash'
DEBUG [AI API Call #1] Sending request with 44360 tokens
DEBUG [AI API Call #1 - →] Received single tool call (3.99s, 16 tokens)
DEBUG [AI Tool →] 'AI: Get Menu Details' with args (menu_ids=[613])
DEBUG [AI Tool - 0.02s] Completed 'AI: Get Menu Details'
DEBUG [AI API Call #2] Sending request with 45432 tokens
DEBUG [AI API Call #2 - ⚡] Received Batch #1, 4 tool calls (2.90s, 77 tokens)
DEBUG [AI Tool - Batch #1 ⚡] 'AI: Get Fields' with args (model_name='pos.order')
DEBUG [AI Tool - Batch #1 - 0.02s] Completed 'AI: Get Fields'
DEBUG [AI Tool - Batch #1 ⚡] 'AI: Get Fields' with args (model_name='pos.order.line')
DEBUG [AI Tool - Batch #1 - 0.01s] Completed 'AI: Get Fields'
DEBUG [AI Tool - Batch #1 ⚡] 'AI: Get Fields' with args (model_name='product.product')
DEBUG [AI Tool - Batch #1 - 0.06s] Completed 'AI: Get Fields'
DEBUG [AI Tool - Batch #1 ⚡] 'AI: Get Fields' with args (model_name='pos.category')
DEBUG [AI Tool - Batch #1 - 0.01s] Completed 'AI: Get Fields'
DEBUG [AI Tool Summary] Batch #1 completed, 4 tool calls
DEBUG [AI API Call #3] Sending request with 50602 tokens
DEBUG [AI API Call #3 - →] Received single tool call (2.98s, 86 tokens)
DEBUG [AI Tool →] 'AI: Open Menu List' with args (menu_id=613, model_name='pos.order', selected_filters=[], selected_groupbys=[], search=['config_id=restaurant'], custom_domain='[["lines.product_id.po
DEBUG [AI Tool - 0.02s] Completed 'AI: Open Menu List'
DEBUG [AI Summary] Total: 10.01s | API calls: 3 (9.87s) | Tools: 6 (0.13s) | Tokens: 140573 (in: 140394, out: 179) | Batches: 1
```Website editors can now configure dynamic appointment snippets to show a single selected record as well as filtered record lists. This makes it easier to build focused website sections, while a loading effect improves the editing experience when snippet content is refreshed.
Original PR description
Currently, dynamic snippets only support filters to display records. This commit improves the current implementation, and allows users to select a single record directly in the snippet (which should automatically switch to the "single record" mode, when the number of records to fetch is set to "one"). - Generic snippets can switch between models, while specific ones will limit selection to their related model. - A loading effect was added while fetching snippet content. Remark: The current diff uses default placeholder templates, which designers will update (see TODO comments). This enhances snippet flexibility, enabling "mono-record" snippets similar to existing dynamic ones. Community PR: https://github.com/odoo/odoo/pull/190514 task-4280375 Co-authored-by: Antoine (anso) <anso@odoo.com>
Duplicating a project now also duplicates the files in its document folder, including projects created from sales order templates. Demo data was added so users can see the project top bar preferences carried over when a templated project is created.
Users can now use "Sign Now" when eMSigner is only required for the final signer, while unsupported multi-document actions are hidden to avoid confusion. The update also prevents an error when SMS authentication is used, making the signing process smoother and more reliable.
Original PR description
Before: - If any signer used the eMSigner authentication method, the "Sign Now" option was disabled. - eMSigner does not support signing multiple documents in a bundle, so a warning was shown when…
Before: - If any signer used the eMSigner authentication method, the "Sign Now" option was disabled. - eMSigner does not support signing multiple documents in a bundle, so a warning was shown when users tried to add more documents. - After merging `sign_emsigner`, a traceback occurred when signing with the 'sms' method because `_validate_auth_method` was called with an unexpected `frame` parameter. After: - The "Sign Now" option is now allowed when eMSigner is used only by the last signer. - It remains blocked if eMSigner is used by any signer other than the last one. - Instead of showing a warning, the "Add Document" button is now hidden when eMSigner is selected. - Add `*(kwargs` while calling `_validate_auth_method` auth method when auth method is 'sms' which prevent the issue of parameter. Impact: - Users can complete signing even when the last signer uses eMSigner, improving workflow efficiency. - The interface is cleaner and prevents confusion by hiding options that are not supported. - The fix for the 'sms' method prevents errors and ensures smoother signing for all supported authentication methods. - Overall, this change improves usability, reduces errors, and provides a better user experience. task-4815486
First-time bank account synchronization now creates a proper opening bank statement instead of a dummy transaction. This prevents misleading entries and helps ensure accounting balances start accurately from the bank's real transaction and balance data.
Original PR description
Before: - When syncing a bank account for the first time, the system created a dummy bank statement line to fill missing statement data. - This was not linked to a real transaction and could confuse users or lead to inaccurate reporting. After: - Replaced the dummy statement line logic with the creation of a proper opening bank statement. - The system now accurately sets the starting balance and the current balance based on the imported transactions. - This logic only applies when no previous bank statement lines exist for the journal and the current balance differs from the sum of imported transactions. Impact: - Prevents creation of fake bank transactions and journal entries during initial sync, ensuring accurate accounting from the start. - Improves performance and reliability by calculating the correct opening balance using real transaction data and provided bank balance. TaskID-4815622 Forward-Port-Of: odoo/enterprise#90070
Sales achievement report lines now show the related customer directly, so users can identify who each line is for without opening the source document. This makes the report easier to review and saves time when checking commissions from invoices, sales orders, or subscriptions.
Original PR description
Before: * The Sales Achievement Report didn’t show which customer each line referred to. * To find out, users had to open the linked invoice, sale order, or subscription. After: * The report now displays the customer name (`partner_id`) directly on each achievement line. * The customer information is pulled from: * Invoices (`account.move`) * Sale orders (`sale.order`) * Subscriptions (via `sale_order_log` linked to `sale.order`) Impact: * Makes the report easier to read and understand at a glance. * Saves time by letting users identify the customer without needing to click into each document. task-4501131
VAT return attachments such as PDFs and XML files are now visible again from the related closing entry, making it easier for users to find supporting documents. Draft entry reviews now show the accounting date for better context, and the Accounting Periods setup wizard no longer marks the Opening Date as invalid before the user submits it.
Original PR description
There are 3 improvements here: - Attaching PDF and other documents in closing entry moves (like previously) - Showing the Accounting date by default on draft entries check - Preventing the Opening…
There are 3 improvements here: - Attaching PDF and other documents in closing entry moves (like previously) - Showing the Accounting date by default on draft entries check - Preventing the Opening Date field to be red when creating a Accounting Periods wizard In version 18.2, when a closing entry move was generated, the PDF (and other files such as XML) would be send in the chatter. In version 18.3, the Tax returns were changed to have the attachment generated when marking the Tax return as submitted and would be available on the Tax return line. You would still be able to see the closing entry move by using the thre dots next to the Tax return line and selection "View entry" but the attachment wouldn't be included in the chatter anymore. Now, the same attachments from the Tax report line are included in the closing entry move and we made sure to not generate invoices lines from those attachments as they have been generated from the lines we had. The second improvements was to display the Accounting Date on the Draft entries that needs to be reviewed in a Tax return line to give the user more context on why they need to review those specific Draft entries. Lastly, when accessing Tax Returns it would ask for us to set the Accouting Periods through a wizard which prefilled informations such as the VAT Periodicity but the Opening Date needs to be filled by this user but this field would show as red when opening the wizard as it is required and no information was prevent. To allow the field to be red only if we try to submit the informations we are passing the informations to the wizard as default value which wouldn't trigger the wizard to try to save values when being created. task-4784283
The mobile Discuss experience is being improved with easier search and a new button to start or access meetings. This should help users find conversations faster and move into meetings more smoothly while working from mobile devices.
Original PR description
Part of task-4967066
Staff can now increase or decrease the preparation time while accepting UrbanPiper online orders. The updated time is shared with UrbanPiper and shown on the kitchen display, helping keep customers, delivery channels, and kitchen teams aligned.
Original PR description
Following this commit: - The user can now increase or decrease the preparation time while accepting online orders. - The same updated time will be sent to Urbanpiper, also maintaining consistency. - Updated preparation time will also be reflected in the kitchen display task-4904077 <img width="449" height="921" alt="image" src="https://github.com/user-attachments/assets/4d7f1023-0fdd-4c4f-956b-3042d58ddb7d" />
Spreadsheet dashboards now support a carousel-style chart figure, letting users view several charts in one compact area and switch between them with tabs. The CRM pipeline dashboard is updated to use the latest spreadsheet capabilities, improving dashboard readability and presentation.
Original PR description
Adapt enterprise codebase to o-spreadsheet update (https://github.com/odoo/odoo/pull/222308)
Contract template screens now restore and reorganize important payroll, salary, work entry, and localization fields that were lost after HR and contract features were merged. This makes contract templates easier to review and configure across multiple country payroll setups, reducing missing information and improving day-to-day HR setup accuracy.
Original PR description
* = hr_contract_salary, hr_payroll{,_account}, hr_work_entry_{attendance,planning}, l10n_{ae,au,be,ch,eg,hk,id,in,jo,ke,lt,lu,mx,nl,ro,sa,sk,us}_hr_payroll, l10n_au_hr_payroll_account,
Since the merge of hr and contract, we only have a form view for contracts for templates. Thus, during the merge, a lot of info has been lost on contract template form view.
This commit, reintroduce fields that were present in saas-18.3 and re-organize them.
task-4904024
Forward-Port-Of: odoo/enterprise#89832Accounts that were already reviewed or supervised in an audit are now automatically moved back to To Review when a relevant accounting entry is posted or reverted within the audit period. This helps ensure auditors re-check accounts affected by new or changed financial activity, reducing the risk of relying on outdated audit conclusions.
Original PR description
When a move is posted that affects an account marked as reviewed or supervised in an audit, and the move falls within the audit period, the account's status is reset to To Review. task-4991558
Audit report templates are now clearer, easier to navigate, and better organized for users preparing audit documentation. The update improves report structure, removes rarely used content, cleans up generated output, and places audit reports in a more logical menu location.
Original PR description
This PR introduces several enhancements aimed at improving the default template of the audit reports: - Headings have been added to articles to establish a clearer content hierarchy and to…
This PR introduces several enhancements aimed at improving the default template of the audit reports: - Headings have been added to articles to establish a clearer content hierarchy and to automatically populate the table of contents. - The "General Ledger" article has been removed, as it is rarely used in practice and typically not relevant to most audit reports. - Some sections are now folded by default to avoid displaying contradictory content (for the attestations). - Labels for foldable sections are no longer shown in the generated resulting in a cleaner and more professional appearance. - The configuration of the "Balance Sheet" and "Profit and Loss" reports has been updated to provide more meaningful and contextual insights. - The index of the root article now lists all articles in the report hierarchy. Additionally, the root article of the audit report will now be named after the audit report itself. This change makes it easier for users to locate the article within the workspace. Lastly, the "Audit Reports" menu item has been moved under the "Working Files" section of the "Audit" menu to better reflect its purpose and improve navigation. Task-4999770
Resolved issues and error corrections
Customers will no longer receive automatic emails asking them to pay when their payment is already being processed through the payment register. This avoids confusion and reduces unnecessary follow-up for invoices paid with a saved payment method.
Original PR description
**Before this commit:** When creating an invoice payment with the "automatic invoice" option enabled in Sales settings and using a saved payment token, an email is sent to the customer before the…
**Before this commit:** When creating an invoice payment with the "automatic invoice" option enabled in Sales settings and using a saved payment token, an email is sent to the customer before the transaction move is posted and the invoice payment status is updated to "In Payment." This results in the email incorrectly asking the customer to remit payment, even though the payment is already being processed. **Steps to Reproduce:** 1. Enable "Automatic Invoicing" from Sales settings. 2. Enable and publish any payment provider (e.g., Demo) in test mode. 3. Create an invoice and generate a payment link. Open the link in a new incognito tab and pay using any dummy card number (ensure the "Save my payment details" checkbox is checked). This saves the payment token for the partner. 4. Create a new invoice with the same partner, then register payment. Select the payment method and the previously saved token, then confirm. 5. Observe that the payment status is "In Payment," but the email sent to the customer incorrectly asks them to remit payment. **Fix:** This change prevents payment notification emails from being sent automatically when the payment is manually created from the payment register wizard. opw-4850293 Forward-Port-Of: odoo/enterprise#91761 Forward-Port-Of: odoo/enterprise#91570
The journal report now keeps draft invoice lines grouped in a stable order when multiple draft entries share the same date. This prevents errors when users include draft entries and use the Load More option, improving reliability for reviewing accounting reports.
Original PR description
**Issue description:** When fetching AMLs for the journal report with _query_aml(), it sorts the AMLs based on (am.date, am.name), which are not unique in case we have multiple (draft) moves with the same date. The lines will end up mixed and ordered with respect to the account, which causes errors with the "Load More" functionality, as it assumes that the lines are ordered based on their move. For posted entries, it's not an issue as the am.name is unique. **Steps to reproduce:** -Create 3 or more invoices (with 3+ AMLs each) in draft and on the same invoicing date. -Open journal report settings and set the Load More Limit to 5. -Open the journal report and set the date to this day and check the "Include Draft Entries" option. -Press "Load More", you will get an error. opw-4929907 Forward-Port-Of: odoo/enterprise#91746 Forward-Port-Of: odoo/enterprise#90360
The payment form’s Transaction button now chooses the correct default journal in multi-company setups. This prevents users from being blocked by access errors when opening reconciled payment transactions while working in a single selected company.
Original PR description
This fixes the access error when using the 'Transaction' smart button from a reconciled payment present since Steps to reproduce: - Multi-company environment with account_accountant installed - Only select one company - Create a payment with a journal entry (by adding an account on the payment method) - Create a corresponding bank statement and reconcile them both together - Go to the payment form view - Click on the Transaction button `button_open_statement_lines` - Access error is raised due to a "random" assignation of journal which is likely to be one from the other company This make sure we select the default statement line journal by default, ensuring we don't search for a journal in every company Forward-Port-Of: odoo/enterprise#91904
EC Sales List reports with country-specific extra columns now populate those columns correctly instead of leaving them blank. This helps businesses in countries such as Slovenia get complete and reliable VAT reporting information.
Original PR description
Before this commit, when an ec sales list report had more than the 3 bases columns (goods, service, triangular) the value was not filled. For example in slovinia, the ec sales list has 5 columns, the two extras columns where always empty. task-4963633 Forward-Port-Of: odoo/enterprise#90669
Users with the right permissions in the Sign app can now cancel sign requests even if they do not have access to salary package offer records. This prevents an access error from blocking normal document cancellation workflows for HR and signing users.
Original PR description
After this commit https://github.com/odoo/enterprise/commit/40d3314d1b06c8110b476690d2264e86b3492b3e we are not able to cancel a sign request, if user do not have read/write access on…
After this commit https://github.com/odoo/enterprise/commit/40d3314d1b06c8110b476690d2264e86b3492b3e we are not able to cancel a sign request, if user do not have read/write access on `hr.contract.salary.offer` model **step to reproduce:** - install `hr_contract_salary` - create a new user with following right: `Sign -> Administrator` `Contracts -> Employee Manager` `Recruitment -> Interviewer` - login with test user - open sign -> All Documents (with demo data 2, there should be 2 documents) - try to cancel one of them <img width="1572" height="689" alt="config for user" src="https://github.com/user-attachments/assets/72e89ac7-fed3-4a38-918f-5dbb198bd1e3" /> **Observation:** - even with Admin rights of Sign, we are not able to cancel a sign request and we receive a Access Error `You are not allowed to access 'Salary Package Offer' (hr.contract.salary.offer) records` **Fix:** we use `sudo()` to allow everyone to cancel their sign request opw-4859774 Forward-Port-Of: odoo/enterprise#91688 Forward-Port-Of: odoo/enterprise#89865
This fixes Luxembourg VAT XML exports so special scheme fields are included only when legally required for periods touching 2025 or later. It also ensures mandatory annual report fields are filled when related fields are present, reducing rejection risk for Luxembourg tax filings.
Original PR description
As per legal requirements, the 491, 492 and 493 fields of the xml export of the tax return only need to be included if at least one day of the period includes dates in 2025 or later. As per legal requirements too, the 192 and 193 fields are mandatory in the annual report if some other fields are present. Among those are 361 and 362 which are mandatory even if null so if 192 and 193 are not there yet, we set them to 362 and 363 values (0.0 in most cases). --- from feedback on task-4587067 opw-4757770 Forward-Port-Of: odoo/enterprise#91859 Forward-Port-Of: odoo/enterprise#89437
This fix stops sick leave or other time off that overlaps with a public holiday from being incorrectly carried over to the next payslip. It helps ensure payroll calculations reflect public holidays accurately and prevents employees from receiving an unnecessary deferred leave adjustment.
Original PR description
The aim of this commit is to prevent a sick day or any other type of time off taken on a public holiday to be deferred. To reproduce: - Create a public Holiday for previous month - Regenerate the…
The aim of this commit is to prevent a sick day or any other type of time off taken on a public holiday to be deferred. To reproduce: - Create a public Holiday for previous month - Regenerate the work entries for that month - Compute a batch of payslip for last month, validate and mark it as paid --> The public holiday should be on the payslip - OPTIONAL: run the cron `Payroll: Generate pdfs` to make create the payslip in document and make it available to the concerned employee. - With the concerned employee, put a time off on the whole week of the last month. It should overlap with the public holiday. - Validate the time off and defer it for next payslip - Compute a batch of payslip for following month, validate and mark it as paid Before this commit: The overlapping sick day gets deferred completely ignoring the fact it was a public holiday. After this commit: The overlapping sick day doesn't get deferred. opw-4903546 Forward-Port-Of: odoo/enterprise#91872 Forward-Port-Of: odoo/enterprise#89264
This fix prevents Romanian SAF-T exports from failing when optional product group information is missing. It also corrects VAT validation so valid partners are not incorrectly blocked, helping businesses complete compliance exports more reliably.
Original PR description
- Added fallback for missing to prevent crash during export. - Replaced incorrect usage of with to align with actual partner VAT validation logic and avoid false errors. These changes ensure smoother SAF-T export by handling optional fields and validation more robustly. Forward-Port-Of: odoo/enterprise#91770 Forward-Port-Of: odoo/enterprise#91737
Audit reports can now be exported successfully when their article includes an embedded PDF file. This prevents an internal error during export and helps users include supporting PDF documents in audit reports without disruption.
Original PR description
Currently, the method responsible for loading PDF files embedded in an article crashes because it receives an `ir.attachment` object instead of a bytes-like object (-> TypeError: a bytes-like object is required, not 'ir.attachment'). Because of this error, it is currently not possible to export an audit report containing an embedded PDF file. Steps to reproduce: 1. Create an audit report 2. Open the article associated with the audit report 3. Insert a PDF file in it using the `/file` command 4. Export the article to PDF => The page loading the PDF shows an internal error. To revolve this issue, we will provide the raw attachment to the method responsible for loading the PDF file. With this fix, people should be able to export an audit report containing PDF files without errors. Task-4989809
Negative-value assets now keep depreciation journal entries on the correct debit and credit sides after edits. This prevents accounting inconsistencies when users adjust depreciation schedules for assets with negative original values.
Original PR description
Before this commit, creating an asset with a negative value then editing the depreciation caused a inversion between credit and debit in the Journal entries The account_depreciation_id and account_depreciation_expense_id were not inverse for negative depreciation, in the function `_inverse_depreciation_value()` We add that missing account inversion for negative assets Steps to reproduce: - Create an asset with negative Original Value - You can choose any Depreciation Account and Expense Account - Click on Compute Depreciation - Check the Posted Entries and note the values position (credit/debit) - Go back to the Asset > Depreciation Board - Add 10 to the first line Depreciation - Remove 10 to the second line Depreciation - Save the Asset - Check the Posted Entries again - The changes ones should have credit/debit inversion before the fix opw-4759988 Forward-Port-Of: odoo/enterprise#91468 Forward-Port-Of: odoo/enterprise#88907
Odoo now avoids trying to fully load very large WhatsApp file responses into memory when checking for errors. This prevents message processing failures when customers send large attachments, improving reliability for WhatsApp communications.
Original PR description
Currently a below occurs or content is not receiving to odoo WhatsApp when the user uploads a large file (tried with > 35 MB). Stack Trace: ``` MemoryError: null File "odoo/http.py", line 2383, in…
Currently a below occurs or content is not receiving to odoo WhatsApp when the user uploads a large file (tried with > 35 MB).
Stack Trace:
```
MemoryError: null
File "odoo/http.py", line 2383, in __call__
response = request._serve_db()
File "odoo/http.py", line 1913, in _serve_db
return self._transactioning(
File "odoo/http.py", line 1976, in _transactioning
return service_model.retrying(func, env=self.env)
File "odoo/service/model.py", line 134, in retrying
result = func()
File "odoo/http.py", line 1943, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "odoo/http.py", line 2187, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
File "odoo/addons/base/models/ir_http.py", line 227, in _dispatch
result = endpoint(**request.params)
File "odoo/http.py", line 757, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "home/odoo/src/enterprise/saas-17.4/whatsapp/controller/main.py", line 42, in webhookpost
wa_account_id._process_messages(value)
File "home/odoo/src/enterprise/saas-17.4/whatsapp/models/whatsapp_account.py", line 206, in _process_messages
datas = wa_api._get_whatsapp_document(messages[message_type]['id'])
File "home/odoo/src/enterprise/saas-17.4/whatsapp/tools/whatsapp_api.py", line 236, in _get_whatsapp_document
file_response = self.__api_requests("GET", file_url, auth_type="bearer", endpoint_include=True)
File "home/odoo/src/enterprise/saas-17.4/whatsapp/tools/whatsapp_api.py", line 46, in __api_requests
if 'error' in res.json():
File "requests/models.py", line 971, in json
return complexjson.loads(self.text, **kwargs)
File "requests/models.py", line 928, in text
encoding = self.apparent_encoding
File "requests/models.py", line 793, in apparent_encoding
return chardet.detect(self.content)["encoding"]
File "__init__.py", line 49, in detect
detector.feed(byte_str)
File "chardet/universaldetector.py", line 274, in feed
if prober.feed(byte_str) == ProbingState.FOUND_IT:
File "chardet/charsetgroupprober.py", line 70, in feed
state = prober.feed(byte_str)
File "chardet/hebrewprober.py", line 240, in feed
byte_str = self.filter_high_byte_only(byte_str)
File "chardet/charsetprober.py", line 73, in filter_high_byte_only
buf = re.sub(b"([\x00-\x7F])+", b" ", buf)
File "__init__.py", line 186, in sub
return _compile(pattern, flags).sub(repl, string, count)
```
At line [1], the code `'error' in res.json()` is used, which reads all the json content of `res`, but at times users upload large files, it will cause the above error because the `json()` tries to read all bytes from res, which is a very large amount to handle in memory.
This commit will fix the above issue by returning a response if the response
contains content_length more than 10 MB.
[1] - https://github.com/odoo/enterprise/blob/aca7ae2a7cf4aad5427a60d5cad60d08774357d0/whatsapp/tools/whatsapp_api.py#L46
sentry-5810101850
Forward-Port-Of: odoo/enterprise#70001Quality checks that send items to a failure location now correctly keep stock movements consistent, avoiding mismatches between item movements and their locations. This reduces the risk of downstream inventory issues such as incorrect automated routes or valuation problems, while preventing unsupported quantity checks in manufacturing flows.
Original PR description
In case of 'quantity' control per quality point. If a complete stock move line is sent to a failure location. The stock move was not split. We could have a stock move line going to a location that is not child of the location of the corresponding move. This can lead issues in case of push_rules or stock valuation. Task: 4575193 Forward-Port-Of: odoo/enterprise#89313 Forward-Port-Of: odoo/enterprise#81275
The GSTR-1 document summary now counts only invoices that were posted before being cancelled, excluding cancelled drafts that should not affect reporting. This improves the accuracy of Indian GST reporting and keeps the document summary visible for easier access.
Original PR description
Before: The document summary included all cancelled invoices, even those that were never posted. After: Only invoices that were posted and subsequently cancelled are now considered in the summary. Additional Changes: - Updated check_serials to validate serial continuity within current company. - Made the document summary view always visible in the GSTR-1 section. opw-4940053 Forward-Port-Of: odoo/enterprise#91971 Forward-Port-Of: odoo/enterprise#90160
When users edit a folder from the Documents details panel, the folder list now refreshes at the right time and shows the latest names. This prevents outdated folder information from appearing after changes are saved, making document organization more reliable.
Original PR description
Something changed in 18.4 (fw or documents) such that we * sometimes we didn't trigger a reload of the search panel after modifying a folder * sometimes the reload of the searchpanel was triggered *before* the initiation (and return) of the write call, so the search panel was updated with the old values Note that this asynchronous misbehavior was not easily visible in hoot tests, but the call count enables to highlight the problem (and drive a suitable solution). The fix is actually an opportunity to keep reloading the search panel on update inside `update` (i.e., saving) flows. Also last style cleanups in documents_details_panel.js. Task-4992298 Forward-Port-Of: odoo/enterprise#91476
Point of Sale orders are now checked and synchronized before being sent for preparation, preventing the same order from being printed by multiple devices. This helps restaurants and stores avoid duplicate preparation work and confusion when several POS devices are active.
Original PR description
*: pos_urban_piper_enhancements Before this change, when a device sent an order in preparation via the ticket printer, this could result in the same order being printed by multiple devices, as the order was not synchronized after it was sent. The error is a bit tricky, because if the user had installed a preparation screen, the order was sent to the preparation screen via syncAllOrders. In this case, the order was correctly synchronized and the other devices were informed of the changes. This commit adds two things. - We check the server before sending the order to preparation to make sure it has not already been sent. - Even when the user does not have a preparation display, the order will be synchronized after being sent to a printer. Forward-Port-Of: odoo/enterprise#91094 Forward-Port-Of: odoo/enterprise#91006
Users can now open sent signature documents in My Documents even when the recipient is not a logged-in Odoo user. This prevents an error that blocked access to documents involving an Emsigner signer and supports sending documents to external partners reliably.
Original PR description
**Version:** - Master **Steps to reproduce :** - Upload a PDF - Add two signers (one is Emsigner) - Send the document to a random partner (not a logged-in user) - Try opening the document from "My Documents" **Issue:** - A traceback error occurs when opening the sent document. **Before:** - tried to check for a logged-in user (e.g., Mitchell Admin), but the document was sent to someone who wasn't logged in, causing the error because it will filter out the curren logged user. **After:** - The error is fixed, and the document can now be opened without any traceback. **Impact:** - Now, we can send documents to anyone, and they will show correctly in "My Documents" without errors.