Daily updates from Odoo
Monday, September 15, 2025
37 changes · 19.0
Resolved issues and error corrections
Test code was updated to use the shared web test helpers instead of reaching into internal framework folders. This is an internal cleanup that makes tests easier to maintain and reduces the risk of future test breakage, with no expected impact on end users.
Original PR description
This commit reduces imports to the 'tests/_framework/' subfolder, which is meant to be accessed through the 'web_test_helpers' module as to reduce the amount of imports, as well as centralizing all web helpers to have a quick overview of the available helpers. Community: https://github.com/odoo/odoo/pull/225865 Forward-Port-Of: odoo/enterprise#94131 Forward-Port-Of: odoo/enterprise#94074
This update improves Odoo's internal unit testing tools so automated checks run faster, display failures more clearly, and clean up test data more reliably. The changes are limited to the testing ecosystem, reducing risk to normal business workflows while helping developers catch issues sooner.
Original PR description
## Pull Request HOOT (PRHOOT) 36 This pull requests brings various improvements and fixes to Hoot and the Odoo unit test ecosystem. See the different commit messages for more details. Note: these changes are made in stable to avoid having to support multiple versions of the HOOT API. As such, these changes are intended to be strictly limited to unit tests as to not put the rest of the code base at risk. Enterprise: https://github.com/odoo/enterprise/pull/93167 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226406 Forward-Port-Of: odoo/odoo#221367
This update makes the website snippet selection modal clearer and more consistent. It removes misleading parallax preview behavior, refreshes an outdated product preview image, and labels product-related dynamic snippets so users can better distinguish them from static content blocks.
Original PR description
This pr address minor UX issues for the snippets modal. - Disable the parallax effect for both `s_banner_product` and `s_floating_blocks` snippets: despite these make technically use of the parallax…
This pr address minor UX issues for the snippets modal. - Disable the parallax effect for both `s_banner_product` and `s_floating_blocks` snippets: despite these make technically use of the parallax feature, the effect is really subtle and not as strong as the one used by the preview. - Update one old `s_dynamic_snippet_products` preview image - Add the "Dynamic Content" label for both the `s_dynamic_snippet_products` and `s_dynamic_snippet_category_list` snippets. The goal is to differentiate the two from the static ones in the same category. A similar solution should be used for other dynamic snippets, like blog and events... but since everything in those categories is dynamic, the use of the same label would have been noisy and unnecessary. task-5088157 | 19.0 | this pr | |--------|--------| | <img width="445" height="243" alt="image" src="https://github.com/user-attachments/assets/98cadb04-f8cb-4b44-ad3f-6a8ff18ea05b" /> | <img width="444" height="243" alt="image" src="https://github.com/user-attachments/assets/7f7f471a-a11d-4131-9bd6-f8d7954eb1ca" /> | | <img width="441" height="260" alt="image" src="https://github.com/user-attachments/assets/c31a36d7-3c57-434a-b999-1bdb00430b63" /> | <img width="438" height="259" alt="image" src="https://github.com/user-attachments/assets/a124d022-0763-47c4-a72c-a9a992b83a8c" /> | | <img width="444" height="208" alt="image" src="https://github.com/user-attachments/assets/076c3b8e-ee89-470e-a780-93c657979273" /> | <img width="458" height="215" alt="image" src="https://github.com/user-attachments/assets/eca7e514-c947-4ce7-bb37-feae0377b229" />| | <img width="445" height="241" alt="image" src="https://github.com/user-attachments/assets/967c7093-7c20-4912-ab80-072059fa2124" /> | <img width="445" height="246" alt="image" src="https://github.com/user-attachments/assets/d6522f0d-c36e-4627-9d2e-145e1ecb61ff" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix updates the translation configuration to match a recently renamed disallowed expenses module. It helps ensure translations continue to be tracked and maintained correctly after the rename, with no expected impact on everyday users.
Original PR description
The modules have been renamed in https://github.com/odoo/enterprise/commit/31b5e33b0035c37d53f011f362bab739440e0271 but the weblate hasn't been changed.
This update keeps Odoo's email server checks aligned with a newer message returned by the underlying email testing tool. It helps prevent false test failures during maintenance without changing day-to-day user behavior.
Original PR description
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#226489
Manufacturing orders now prefill the first serial number from the product's custom lot/serial setting when generating serial numbers. Duplicated manufacturing orders also continue from the correct next serial number instead of restarting at 1, reducing manual corrections and duplicate tracking risks.
Original PR description
Back port of https://github.com/odoo/odoo/pull/226046 intended to target 19.0 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix prevents Indonesian e-Faktur downloads from crashing when an invoice line has more than one regular tax applied. Users can complete compliant tax document downloads more reliably instead of encountering an error during invoice processing.
Original PR description
The system crashes with an error when a user tries to `download the e-Faktur` document. **Steps to produce:-** - Install `Accounting` and switch to `ID Company`(with demo data). - Create a `new…
The system crashes with an error when a user tries to `download the e-Faktur` document.
**Steps to produce:-**
- Install `Accounting` and switch to `ID Company`(with demo data).
- Create a `new invoice` and select customer as `ID Company`.
- Add the product and in `taxes add 11% and 0% (2 non-luxury taxes)` and confirm the invoice.
- Click on gear icon and click on `Download e-Faktur` button.
**Error:-**
`ValueError: ValueError('Expected singleton: account.tax(5, 15)') while
evaluating 'action = records.download_efaktur()'`
**Root cause:-**
- When more than one non-luxury tax is applied and the e-Faktur document is downloading, the code at [1] expects a single tax record, but multiple non-luxury taxes are found.
**Solution:-**
- Since luxury tax is already excluded from the regular tax computation at [2], I think we can directly sum all non-luxury taxes.
[1]: https://github.com/odoo/odoo/blob/52aa6231130ea165fdb44e6370ec3e396b7603cc/addons/l10n_id_efaktur_coretax/models/account_move_line.py#L52
[2]: https://github.com/odoo/odoo/blob/52aa6231130ea165fdb44e6370ec3e396b7603cc/addons/l10n_id_efaktur_coretax/models/account_move_line.py#L24-L25
**sentry-6837559933**
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#224419This fixes an issue where the Point of Sale could show an error if no user was available for the cashier lookup. The system now safely returns no cashier instead of failing, helping avoid interruptions during POS use.
Original PR description
When there is no user, you get a traceback when it tries to access user.id. As the code that call getCashierUserId handles the fact that a falsy value is returned, we return undefiened when there is no user. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226821
Manufacturing orders now prefill the first serial number from the product’s custom lot or serial value when generating serial numbers. Duplicated manufacturing orders also continue from the correct next serial number instead of restarting, reducing manual corrections and duplicate serial risks.
Original PR description
Steps to reproduce Bug #1: - Add Custom Lot/Serial to a product - Create a manufactoring order with a quantity > 1 - Confirm and Generate Serial Problem: First SN is not prefilled by the Custom Lot/Serial added. Steps to reproduce Bug #2: - Create a duplicate from the previous MO - Generate Serial Numbers Problem: First SN is not updated and generates serial numbers starting with "1" again rather than incrementing the previous serial number. Note: On adding new serial numbers different than the custom (changing the prefilled First SN), it will only be applied on that specfic MO only. To apply it to any new MO, it must be added to the Custom Lot/Serial field in the product form. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Appointment quick creation now correctly calculates the end time even when the duration field is not shown. This prevents incomplete or incorrect appointment times when users create calendar events from the streamlined appointment view.
Original PR description
In [1] we remove the field "duration" from the calendar quick create view in appointment. `default_get` relies on "duration" being in the default values to compute the "stop" based on it. Since the field is not in the view this does not work anymore. Now always ask for that field in `default_get` and just remove it if it was not requested. [1]: c8eb4fe4ba9938b1c7e07034e6ca7c08a0d6f215 task-5081903
Payroll salary input default values are now applied when users select salary rules on employee records or payslips. This helps payroll teams avoid missing or incorrect input amounts and reduces manual corrections during payroll processing.
Original PR description
## Steps to reproduce 1. Make a new salary rule with condition based on 'salary input'. 2. Enable 'Input on' employee and payslip both and set a default value. 3. Go to employees 'Payroll tab' and 'add inputs', then select the rule. 4. Similary in 'Payslip' on 'Salary inputs' tab, 'add inputs' and select the rule. ## Issue - The default values on the employee and payslips were not being reflected on selection of the rule. ## Fix - Modified '_update_payroll_properties'. It now fetches active_id and updates properties based on the default values of input rules. - Updated '_compute_payslip_properties'. Ensures that payslips without common payroll properties fall back to the default values of the related input rules. task-5072646
This fix ensures Uruguayan electronic documents correctly read document numbers that start with more than one letter. This helps avoid incorrect processing or validation issues for affected invoices, credit notes, and debit notes.
Original PR description
If UY EDI document has latam document number with more than one letter at the beggining, it is needed to take in consideration all the letters and not only the first one. Task Latam side: 1352 Task Adhoc side: 53173 Forward-Port-Of: odoo/enterprise#90696
A Turkish payroll employee field is now only visible to HR users. This prevents non-HR staff from encountering an access error when employee records are read, improving reliability for internal users.
Original PR description
The test `test_employee_fields_groups` crashed with: `AccessError: The fields “l10n_tr_is_net_to_gross”, which you are trying to read, are not available for employee public profiles.` This field exist without HR group restriction as a result, a non-HR internal user calling .read([]) triggered the AccessError. This commit adds `groups="hr.group_hr_user"` to this field so it is only accessible to HR users, resolving the error. [RB-231736](https://runbot.odoo.com/odoo/error/231736)
Fixes Swiss ISO20022 payment exports so bank clearing numbers are placed in the expected XML sub-field. This helps generated payment files better match banking standards and reduces the risk of rejection during payment processing.
Original PR description
### Steps to reproduce: - Install 'account_iso20022', 'l10n_ch' and switch to a Swiss company - Have a bank with a BIC number and an account for that bank with a clearing number - Create a vendor…
### Steps to reproduce: - Install 'account_iso20022', 'l10n_ch' and switch to a Swiss company - Have a bank with a BIC number and an account for that bank with a clearing number - Create a vendor bill for a Swiss partner - Pay with "Swiss ISO20022" - Create a batch payment with that payment and validate - In the XML the field `ClrSysMmbId` contains the clearing number, but it should be in a nested field ([src](https://www.mx-message.com/m/pacs-010-001-05/FIDrctDbt/CdtInstr/Cdtr/FinInstnId/ClrSysMmbId)) ### Cause: The code directly inputs the value of `clearing_number` in `ClrSysMmbId`. ### Solution: Add `MmbId` to contain the clearing number. ### Note: The field `MmbId` when alone is supposed to contain the country's payment system prefix and the clearing number. This commit only input the value of the field `clearing_number` in `MmbId`, so it may be invalid, but at least the architecture is valid. See [this link](https://knowledge.xmldation.com/support/iso20022/general_rules/clearing_codes) for the documentation of `ClrSysMmbId`. This [commit](https://github.com/odoo/enterprise/commit/c277ffa81644b79d95e67a70f7170f5f39c30898#diff-568a46f66108a66d58d845c0e1e00b22db21507ac52576f75b83398112ad10f5) implemented the correct way to set up `ClrSysMmbId` for the Swedish localization. To be always valid, we would need to implement this on all localizations. opw-4872507 Forward-Port-Of: odoo/enterprise#94460
On small screens, selecting an item from the user menu now closes the main menu before opening the chosen action. This prevents dialogs such as Preferences from appearing hidden behind the menu, making mobile navigation clearer and less confusing.
Original PR description
This commit ensures the BurgerMenu is closed when clicking on one of its items, and specifically on one of the BurgerUserMenu items. Steps to reproduce (on small screen): - on a "base" database (no app installed) - click on the BurgerMenu (top right) - click on "Preferences" => the user's preference dialog opens behind the BurgerMenu Forward-Port-Of: odoo/odoo#226739 Forward-Port-Of: odoo/odoo#225696
Planning calendar files now keep the correct start and end times when a planning slot has no assigned employee. This prevents calendar invitations from showing shifted hours in setups without demo data or employee-specific time zones.
Original PR description
The test `test_planning_ics_file_without_assigned_employee` failed when running without demo data because the slot timezone was `Europe/Brussels` while the employee timezone was `UTC`.
The previous code in the method `ics_datetime()` converted to the slot timezone and then relabeled it as the employee timezone with `.replace(tzinfo=...)`, which shifted the actual instant.
This change ensures that ICS datetimes are always converted using astimezone to a single target tz:
- employee tz if the slot is assigned,
- otherwise the current user tz or `UTC` as fallback.
The test was also updated to assert the correct fallback `UTC` values:
`DTSTART:20230602T080000Z`
`DTEND:20230602T170000Z`
[runbot-231213](https://runbot.odoo.com/odoo/error/231213)
Forward-Port-Of: odoo/enterprise#93692Event searches now include descriptions consistently, so events shown as suggestions also appear after pressing Enter. This prevents users from losing relevant event results when the search term appears only in the event description.
Original PR description
Purpose ======= Making sure that, when typing a search term, all the results displayed in the search bar dropdown are visible on the page when clicking Enter. Specification ============= Previously, the search bar dropdown was displaying all the events where the name or description matched the search term. However, when clicking Enter, only the events where the name matched were displayed on the page (the ones where only the description matched were ignored). Fixing the issue by considering the description in the event search options. Task-5039221 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#224414
The bank reconciliation screen no longer shows an extra line above its action buttons. This makes the button area clearer and easier to read for accounting users.
Original PR description
During this commit: https://github.com/odoo/enterprise/commit/f9725d7b01cbd1235f022821a6861adb2955e49e we added a line above the buttons, but we lost some clarity, so this commit will remove it task-5082695
The color picker now shows the selected color more clearly when using dark mode. This makes the interface easier to read and avoids confusion when choosing colors across light and dark themes.
Original PR description
This PR fixes an issue related to Commit[^1], which used `#fff` to style the active color within the color picker. While this works fine in light mode as we do not tweak the `$o-colors` map that much, it does not provide good results in dark mode as the colors are drastically adjusted. | 19.0 and above | This PR | |--------|--------| | <img width="192" height="89" alt="image" src="https://github.com/user-attachments/assets/c4eadd42-fbe4-4b34-85ad-2010103850a7" /> | <img width="153" height="102" alt="image" src="https://github.com/user-attachments/assets/0dcba0fa-69bc-48de-9c96-bcdf69ea7f1f" /> | With this PR, we use a dynamic value instead of a static one, ensuring it will provide good results in both light and dark mode. task-5089121 related to task-5049476 [^1]: 1aa9b957afdd1413f6241ce2e408b96f9e934242 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue where tapping Send in Odoo's iOS progressive web app could sometimes fail while writing messages in Discuss or chatter. The message composer no longer shifts at the moment of tapping, making message sending more dependable for mobile users.
Original PR description
Before this commit, when using IOS PWA, pressing 'Send' button of in composer in discuss or chatter would sometimes not register the send. This happens because in IOS PWA, the composer has a bottom margin as this is close to iOS persistent swipe bar. However, the margin should not be present when there's the soft-keyboard. Because of this dynamic margin based on input focus, when composing textual message and pressing "Send" button, the textarea looses focus and a fraction of second the margin-bottom is increased and moves the "Send" button. This leads to mis-clicking the "Send" button. This commit removes the margin-bottom rule on non-focusin of textarea with iOS PWA. The composer is close to swipe bar so that's not as elegant as before, but at least this doesn't add the problem of non- working "Send" button. opw-5028809 Forward-Port-Of: odoo/odoo#226881 Forward-Port-Of: odoo/odoo#226546
The time off request dialog now shows the Submit Request button when no warning message is available. This lets employees continue creating absence requests in affected payroll setups while keeping the normal validation after submission.
Original PR description
**Steps to reproduce** 1. Install l10n_ch_hr_payroll_elm_transmission 2. Go to an employee's profile 3. Click on "Absences" smart button 4. Create a new Time Off request Issue: the form view dialog is missing a button to confirm the request. Cause: the dashboard warning message is not part of the l10n_ch_hr_payroll_elm_transmission view. Solution: display the "Submit Request" button if we don't have any dashboard warning message. There will still be a validation after the request is submitted. opw-4972467 Forward-Port-Of: odoo/odoo#221427
The spreadsheet interface is now kept in light mode because it does not yet support dark mode consistently. This prevents mixed light and dark styling, giving users a clearer and more consistent spreadsheet experience.
Original PR description
Spreadsheet doesn't support dark theme. This fixes some style where dark and light themes are mixed. Task: 5082593 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226798
The Swiss payroll process has been corrected so payrun actions work as expected. This prevents interruptions when payroll teams manage pay runs for Switzerland.
Original PR description
Parameter was not added to the overriden method in switzerland
The bank reconciliation process now better matches imported bank transactions with payments created in Odoo, even when payment provider memos differ slightly. This helps reduce missed matches and keeps reconciliation smoother for accounting teams.
Original PR description
Commit 4c23de148eb3689842a48df81a5ced772c214861 introduced another query to look for outstanding payments to match in the bank reco widget, aiming to reduce the number of wrong matches found by the algorithm. Doing so, limiting the match between account.payment initiated in odoo and their matching bank transaction imported (through stripe for example), on an exact match of the memo seemed like a good idea. But for obscure reasons, the memo we're sending is not guaranteed to be found back, depending on the payment provider and the import flow. Also, for backward compatibility, it now appears important to allow the match to be on a part of the memo, like we used to do. So we're back on a solution that splits the memo using ' - '. Forward-Port-Of: odoo/enterprise#93237
This fix ensures the point of sale receives cancellation updates from Worldline payment terminals even after the browser page is refreshed. This prevents orders from getting stuck during cancelled card payments and adds clearer terminal error messages for staff.
Original PR description
This PR fixes a bug where the point of sale didn't receive notifications from the Worldline payment terminal for the cancellations if the browser webpage was refreshed How to reproduce: 1. Open a POS session with Worldline terminal 2. Send a transaction to the terminal 3. Refresh the browser webpage before paying 4. Click on "Cancel" on the POS screen --> your order will be stuck and never receive the confirmation This PR removes the check for the iot longpolling action identifier which changes on refresh of the webpage + adds more error messages for Worldline terminals Related PR in v17 -> saas-18.2: https://github.com/odoo/enterprise/pull/94635 task-5075860 Forward-Port-Of: odoo/enterprise#94629
Primary buttons now show a clearer visual difference when users hover over them versus actively press them. This reduces confusion and makes button interactions feel more consistent across Odoo.
Original PR description
This PR introduces a clear visual distinction between the `:hover` and `:active` state of our primary buttons. | 19.0 and below | This PR | |--------|--------| | <img width="129" height="45" alt="image" src="https://github.com/user-attachments/assets/204b0c4e-622c-467e-8394-750cc79ee6e4" /> | <img width="135" height="52" alt="image" src="https://github.com/user-attachments/assets/096a5c34-56b2-41d8-9d9e-d6b9195b17d5" /> | Prior to this PR, the active state was using a `darken()`, which was similar to the approach in use for the `:hover` effect, which could result in a confusing behaviour for users. With this PR, we now align the behaviour of our buttons `:active` state across all the bundles. task-5087169 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Malaysia localization tests now specify the expected tax when creating invoices for XML file generation and submissions. This helps prevent unreliable test results and improves confidence that Malaysian electronic invoicing outputs remain correct.
Original PR description
Improve reliability of both malaysian modules which work with xml files and invoices by ensuring that we precise the tax we expect to see in the file when creating the invoice. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update repairs an automated website shop checkout test after recent checkout page changes. It helps ensure the online purchasing flow continues to be tested reliably, reducing the chance of future checkout regressions reaching users.
Event emails now use embedded images instead of website icon classes for location icons. This ensures recipients see the intended event location information in emails and avoids issues when editing the email template.
Original PR description
Font awesome classes must no be inserted into email as external servers do not use them so icons are not displayed and also because some issues occur with the email editor. This commit replaces i tags with font awesome classes in mail by images. Task-5082165 Forward-Port-Of: odoo/odoo#226332
German DATEV exports now correctly identify the required main account when a point-of-sale session contains both sales and refunds with different tax rates. This prevents missing accounting information in affected journal entries and helps keep German reporting exports complete.
Original PR description
In _get_datev_account, the l10n_de_datev_main_account_id is determined by identifying a singular debit or credit account used in the journal entry. If there’s no unique account, it falls back to…
In _get_datev_account, the l10n_de_datev_main_account_id is determined by identifying a singular debit or credit account used in the journal entry. If there’s no unique account, it falls back to searching for a unique non-tax line among debit or credit lines. In POS, however, there is the possibility of generating journal entries that break this flow: - In a single POS session, add product A with tax 19% and product B with tax 7%. - In the same session, refund product A. - Close the session to generate the entries. In the resulting entry, since both sale and refund are present, it is not possible to discriminate using debit and credit amounts alone, and as a result, the field l10n_de_datev_main_account_id is not populated. Since account 1411 is always the one to be used for l10n_de_datev_main_account_id in this specific case, this commit adds a final fallback filter to select the correct line and ensure the field is populated. Ticket [link](https://www.odoo.com/odoo/project/967/tasks/4915272) opw-4915272 Forward-Port-Of: odoo/enterprise#92664
The Discuss app no longer shows the compact chat hub when there are no separate chat conversations to display. This removes a redundant interface element and keeps the messaging screen cleaner for users.
Original PR description
Before this commit, chat hub compact was visible in disucss app. This happens because while chat windows and bubbles are conditioned to not be shown in discuss app (with exceptions), the compact mode…
Before this commit, chat hub compact was visible in disucss app. This happens because while chat windows and bubbles are conditioned to not be shown in discuss app (with exceptions), the compact mode of chat hub was solely relying on compact mode on/off, ignoring the overall condition for whether some conversations are shown in chat hub (note: conversations in compact are still considered as "shown"). This commit adds extra condition on showing compact button to take into account chat hub showing some conversations. If no conversations are shown, then the compact mode should not be shown at all. Discuss app prevents showing of conversations in chat hub (with exceptions), as this is redundant with discuss app itself. Task-5058838 Before <img width="470" height="195" alt="Screenshot 2025-09-15 at 12 13 40" src="https://github.com/user-attachments/assets/f6e8ea32-7def-4654-858f-5d39fbcc97c1" /> After <img width="490" height="232" alt="Screenshot 2025-09-15 at 12 13 20" src="https://github.com/user-attachments/assets/bc9feb62-6d84-4d73-8e10-674ab4260032" />
The Mail app now shows or hides the model field more appropriately when configuring activity types, especially from app settings. It also removes an unnecessary warning, making setup clearer for administrators without affecting existing activities.
Original PR description
Simplify model usage in form view: do not display it if a default value is given in context (aka in apps settings). Generic view, available for admins, correctly display the model field without having to use the technical group. Remove the warning about model change since * plans are protected through a constraint * you cannot change generic types model (Meeting, ...) * changing the model of other types does not break already-created activities (just that it is not available for new activities in the old model); Task-5088991
This fixes imported sales orders so lines for products that cannot be matched no longer have their price reset to zero. It helps preserve the original RFQ/order values when exchanging documents between databases with different product catalogs.
Original PR description
Steps: - Install Purchase in first db and sale in second db. - Ensure RFQ contain product which does not exist in second db. - Export RFQ and import it in sale order view. Issue: - Price is always 0 on sol if it didn't find related product. Cause: - In [this] PR we always recompute price on all sol instead sol with product Fix: - Recompute price and discount only on sol with product. [this]: https://github.com/odoo/odoo/pull/190310 Forward-Port-Of: odoo/odoo#226859
Quicksign now behaves consistently with regular signing by showing the completed signature in document previews and recording the signing activity in the related discussion history. This helps users trust that signed documents are complete and keeps document records easier to audit.
Original PR description
### Issues: - PDF preview mismatch: - Regular sign updates the preview in Documents with the actual signature. - Quicksign only shows placeholders in the preview. - Missing chatter logs: - Regular sign from chatter creates a 'Signature Request' log and stores the signed certificate in Documents. - Quicksign skips chatter logs and only displays in Sign app. ### Cause: - Request is fully signed but the sign request item state is not set as completed that's why the value was not shown. - The function to sign and create log is not called when reference doc is set. ### Fix: - Sign request item state is set to completed. - Called the function to throw log note when the reference doc is set. ### Impact: - Quicksign now provides consistent PDF previews. - Chatter history and document logging are aligned between regular signing and quicksign. --- task-5082925
This fixes calendar quick editing so that when a meeting start time is changed, the end time is recalculated using the intended duration. It prevents appointment lengths from being unexpectedly recomputed or changed during quick creation and editing.
Original PR description
`CalendarEvent._compute_stop` relies on "duration" being somehow available when "start" is changed. In quick-create, where the duration is not stored we need to "store" it in the front-end between onchange calls. For this reason "duration" needs to be force_save and invisible on the view so that it is not recomputed each time. Which otherwise defeats the purpose of the feature. In appointment duration is also used in default_get hence fetching a default value for it by having it in view actually changes the behavior of the default values. Though this can be mitigated in other, more reliable ways, this fix is sufficient for that case too. The field was removed during view refactoring in odoo/enterprise@c8eb4fe4ba9938b1c7e07034e6ca7c08a0d6f215 and 81e51985f2e01ee3ff115477ab324e2ad75a1b77 task-5081903
Opening a spreadsheet step on the shop floor now works without displaying an unexpected error. This prevents confusion for manufacturing operators while keeping the spreadsheet step behavior unchanged.
Original PR description
To reproduce: - Make a new BOM for new product P, with 1 operation on assembly line 1 - Add a spreadsheet step to the operation - Make a MO for 1x P - Open shop floor, assembly line 1, click on the spreadsheet step Current behaviour: - The spreadsheet step opens correctly, but we get a traceback Expected behaviour: - The spreadsheet step opens correctly, no traceback task-4965313 Forward-Port-Of: odoo/enterprise#91505
Opening and saving the Optimize SEO dialog no longer accidentally removes image descriptions that were added in the editor. This protects accessibility text and avoids users having to re-enter image descriptions after routine SEO checks.
Original PR description
Steps to reproduce: 1. Open Optimize SEO. 2. Mark an image as decorative. 3. Save it. 3. Give a description(ALT) to that image from editor. 4. Open Optimize SEO again and save without doing anything. Issue: The description(ALT) on the image being set is lost. Cause: When reopening the **Optimize SEO** dialog, `seoContext.updatedAlts` still contained entries from previous edits. As a result, saving without making any change triggered an call to `update_alt_images` which reset the `alt` attribute to empty, eventually discarding the description. This PR ensures `seoContext.updatedAlts` is reset when opening the dialog. Forward-Port-Of: odoo/odoo#226913