Skip to content

Syncing from upstream odoo/odoo (tmp.master) #34190

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 55 commits into from
Jul 9, 2025

Conversation

bt-admin
Copy link
Collaborator

@bt-admin bt-admin commented Jul 9, 2025

bt_gitbot

Dj0ulo and others added 30 commits July 8, 2025 03:10
__Current behavior before commit:__
Some divs in snippets are used to show design elements such as
background shapes, filters or parallax. Those are targets for
css and they should not be editable.

The user can navigate with the keyboard arrows and write text inside
them resulting in weird visual looks.

__Description of the fix:__
This commit fixes the issue with a new plugin that explicitly makes some
elements editable or not, using some selectors. They are available as a
resource in order to make it easy to add some in the future.

In addition to the design elements, it is also necessary to set the
section div as non-editable because when design elements are siblings of
the container it is possible to move the cursor outside the container
element.

Elements inserted through an `Interaction`, such as a background video
container, are not impacted by the normalize method of the
`ContentEditable` plugin because they don't produce history steps.
So we manually set them as non-editable when they are inserted.

closes #214376

Signed-off-by: Quentin Smetz (qsm) <[email protected]>
Scenario:
- insert the last blog posts widget in a page using Card Layout
- open editor and edit (eg. Background) the cover of a post
- save

Result: the change is lost

Cause: the content of the widget is dynamic, and we delete the content
in cleanForSave (that call the destroy of the widget) before saving, so
the change are not saved.

Fix: make the dynamically added cover widget unselectable, the cover of
the blog post can still be changed in other locations (blog post list,
blog post page).

Note: the issue doesn't happen in 17.0 in big picture template, because
the figcaption is not a children of the cover snippet. It happens in
18.0 because the content of the cover is a children of the cover.

opw-4633287

closes #214916

X-original-commit: e5ba9ac
Signed-off-by: Quentin Smetz (qsm) <[email protected]>
Signed-off-by: Nicolas Lempereur (nle) <[email protected]>
Use popout as a fallback to the pip feature
when pip is not available on the browser.

closes #217636

X-original-commit: 2a23f9f
Signed-off-by: Alexandre Kühn (aku) <[email protected]>
Steps:

- Open the terminal configured kiosk.
- Try to process the order with terminal payment.

Issue:

- The request was submitted, but showing an error.

Cause:

- The payment response wasn't received in the kiosk.

Fix:

- Added payment response in the payment request controller return value.

task-4791562

closes #217534

Signed-off-by: Stéphane Vanmeerhaeghe (stva) <[email protected]>
This commit fixes the grammar of the final step tour message
and splits it into two messages.

closes #213942

Task: 4795381
Signed-off-by: Alexandre Kühn (aku) <[email protected]>
The `BorderConfigurator` used in `FontAwesomeOption` did include the
field to specify "Round Corners". This was unintended.

This commit removes the "Round Corners" field from the "Icon"'s options.

task-4367641

closes #217596

X-original-commit: 4c11ef5
Signed-off-by: Francois Georis (fge) <[email protected]>
Whenever there is a need to update the state of a builder option
asynchronously, we need all the options to await for the state of all
other options to be updated.

This commit makes allow any options that need to update the
state of the builder options asynchronously to do so by
using the `useDomState` hook.

Related to task-4367641

closes #217622

X-original-commit: 4e25350
Related: odoo/enterprise#89582
Signed-off-by: Francois Georis (fge) <[email protected]>
*hr_holidays,hr_homeworking_calendar

Before this commit, when clicking on a calendar event to edit it,
a `get_formview_id` rpc was done to retrieve the id of the form
view to use to edit the event. However, the documentation [1]
states that the attribute `form_view_id` can be set in the arch,
for the same purpose. The given id was then overruled by the id
returned by `get_formview_id`. This commit removes the rpc, so
the id is always the one given in the arch, as written in the
documentation.

[1] https://www.odoo.com/documentation/18.0/developer/reference/user_interface/view_architectures.html#calendar

Task-4910395

closes #217700

X-original-commit: 9a2c54b
Related: odoo/enterprise#89629
Signed-off-by: Romeo Fragomeli (rfr) <[email protected]>
Signed-off-by: Aaron Bohy (aab) <[email protected]>
During the second half of `test_all_l10n`, we keep deleting
`account.account` records (hundreds to low thousand every
iteration). This deletion turns out to account (heh) for about 15% of
the test's run time running locally (5mn out of 30). And per the
explain, this is largely from executing `ON DELETE` constraints: since
accounts are rarely deleted, the forward-only M2Os (used to go from a
record to an account) are not generally indexes, which causes a full
scan of the non-account table on deletion of accounts, which... can be
quite slow if the non-account table is large, e.g. sample `EXPLAIN
ANALYZE` for one of the `DELETE FROM account_account`:

    Trigger for constraint account_fiscal_position_account_account_src_id_fkey on account_account: time=30.040 calls=1000
    Trigger for constraint account_fiscal_position_account_account_dest_id_fkey on account_account: time=20.977 calls=1000
    Trigger for constraint account_account_tax_default_rel_account_id_fkey on account_account: time=16.423 calls=1000
    Trigger for constraint account_account_res_company_rel_account_account_id_fkey on account_account: time=18.848 calls=1000
    Trigger for constraint account_account_account_tag_account_account_id_fkey on account_account: time=12.396 calls=1000
    Trigger for constraint account_journal_default_account_id_fkey on account_account: time=207.759 calls=1000
    Trigger for constraint account_journal_suspense_account_id_fkey on account_account: time=131.019 calls=1000
    Trigger for constraint account_journal_non_deductible_account_id_fkey on account_account: time=126.656 calls=1000
    Trigger for constraint account_journal_profit_account_id_fkey on account_account: time=128.753 calls=1000
    Trigger for constraint account_journal_loss_account_id_fkey on account_account: time=125.281 calls=1000
    Trigger for constraint res_company_transfer_account_id_fkey on account_account: time=85.604 calls=1000
    Trigger for constraint res_company_default_cash_difference_income_account_id_fkey on account_account: time=75.154 calls=1000
    Trigger for constraint res_company_default_cash_difference_expense_account_id_fkey on account_account: time=73.173 calls=1000
    Trigger for constraint res_company_account_journal_suspense_account_id_fkey on account_account: time=73.336 calls=1000
    Trigger for constraint res_company_account_journal_early_pay_discount_gain_accoun_fkey on account_account: time=73.741 calls=1000
    Trigger for constraint res_company_account_journal_early_pay_discount_loss_accoun_fkey on account_account: time=73.402 calls=1000
    Trigger for constraint res_company_income_currency_exchange_account_id_fkey on account_account: time=74.586 calls=1000
    Trigger for constraint res_company_expense_currency_exchange_account_id_fkey on account_account: time=74.678 calls=1000
    Trigger for constraint res_company_account_default_pos_receivable_account_id_fkey on account_account: time=77.105 calls=1000
    Trigger for constraint res_company_expense_accrual_account_id_fkey on account_account: time=77.000 calls=1000
    Trigger for constraint res_company_revenue_accrual_account_id_fkey on account_account: time=76.399 calls=1000
    Trigger for constraint res_company_account_cash_basis_base_account_id_fkey on account_account: time=77.996 calls=1000
    Trigger for constraint res_company_account_discount_income_allocation_id_fkey on account_account: time=77.799 calls=1000
    Trigger for constraint res_company_account_discount_expense_allocation_id_fkey on account_account: time=78.145 calls=1000
    Trigger for constraint res_company_income_account_id_fkey on account_account: time=79.625 calls=1000
    Trigger for constraint res_company_expense_account_id_fkey on account_account: time=79.421 calls=1000
    Trigger for constraint account_tax_group_tax_payable_account_id_fkey on account_account: time=103.659 calls=1000
    Trigger for constraint account_tax_group_tax_receivable_account_id_fkey on account_account: time=75.211 calls=1000
    Trigger for constraint account_tax_group_advance_tax_payment_account_id_fkey on account_account: time=72.384 calls=1000
    Trigger for constraint account_tax_cash_basis_transition_account_id_fkey on account_account: time=954.139 calls=1000
    Trigger for constraint account_tax_repartition_line_account_id_fkey on account_account: time=1445.578 calls=1000
    Trigger for constraint account_reconcile_model_line_account_id_fkey on account_account: time=71.619 calls=1000
    Trigger for constraint account_move_line_account_id_fkey on account_account: time=140.720 calls=1000
    Trigger for constraint account_payment_outstanding_account_id_fkey on account_account: time=17.682 calls=1000
    Trigger for constraint account_payment_destination_account_id_fkey on account_account: time=6.791 calls=1000
    Trigger for constraint account_payment_method_line_payment_account_id_fkey on account_account: time=75.530 calls=1000
    Trigger for constraint account_analytic_line_general_account_id_fkey on account_account: time=81.989 calls=1000
    Trigger for constraint account_automatic_entry_wizard_destination_account_id_fkey on account_account: time=8.967 calls=1000
    Trigger for constraint account_payment_register_writeoff_account_id_fkey on account_account: time=9.166 calls=1000
    Trigger for constraint account_accrued_orders_wizard_account_id_fkey on account_account: time=7.863 calls=1000
    Trigger for constraint account_account_account_merge_wizard_re_account_account_id_fkey on account_account: time=7.338 calls=1000
    Trigger for constraint account_merge_wizard_line_account_id_fkey on account_account: time=7.706 calls=1000
    Trigger for constraint res_company_deferred_expense_account_id_fkey on account_account: time=126.271 calls=1000
    Trigger for constraint res_company_deferred_revenue_account_id_fkey on account_account: time=98.607 calls=1000
    Trigger for constraint account_account_account_auto_reconcile__account_account_id_fkey on account_account: time=8.921 calls=1000
    Trigger for constraint account_reconcile_wizard_account_id_fkey on account_account: time=8.330 calls=1000
    Trigger for constraint account_model_rel_account_account_id_fkey on account_account: time=27.264 calls=1000
    Trigger for constraint account_transfer_model_line_account_id_fkey on account_account: time=39.033 calls=1000
    Trigger for constraint account_fiscal_position_avatax_invoice_account_id_fkey on account_account: time=83.360 calls=1000
    Trigger for constraint account_fiscal_position_avatax_refund_account_id_fkey on account_account: time=60.023 calls=1000
    Trigger for constraint account_account_account_import_summary__account_account_id_fkey on account_account: time=8.251 calls=1000
    Trigger for constraint res_company_account_revaluation_expense_provision_account__fkey on account_account: time=107.339 calls=1000
    Trigger for constraint res_company_account_revaluation_income_provision_account_i_fkey on account_account: time=100.037 calls=1000
    Trigger for constraint account_account_exclude_res_currency_pr_account_account_id_fkey on account_account: time=9.025 calls=1000
    Trigger for constraint account_report_budget_item_account_id_fkey on account_account: time=7.600 calls=1000
    Trigger for constraint account_payment_withholding_line_account_id_fkey on account_account: time=7.814 calls=1000
    Trigger for constraint res_company_withholding_tax_base_account_id_fkey on account_account: time=116.893 calls=1000
    Trigger for constraint account_payment_register_withholding_outstanding_account_i_fkey on account_account: time=8.580 calls=1000
    Trigger for constraint account_payment_register_withholding_line_account_id_fkey on account_account: time=8.799 calls=1000
    Trigger for constraint res_company_l10n_ee_rounding_difference_loss_account_id_fkey on account_account: time=115.461 calls=1000
    Trigger for constraint res_company_l10n_ee_rounding_difference_profit_account_id_fkey on account_account: time=114.827 calls=1000
    Trigger for constraint account_journal_l10n_tr_default_sales_return_account_id_fkey on account_account: time=305.506 calls=1000
    Trigger for constraint res_company_account_production_wip_account_id_fkey on account_account: time=125.388 calls=1000
    Trigger for constraint res_company_account_production_wip_overhead_account_id_fkey on account_account: time=117.769 calls=1000
    Trigger for constraint stock_location_valuation_in_account_id_fkey on account_account: time=104.378 calls=1000
    Trigger for constraint stock_location_valuation_out_account_id_fkey on account_account: time=67.309 calls=1000
    Trigger for constraint stock_valuation_layer_revaluation_account_id_fkey on account_account: time=8.817 calls=1000
    Trigger for constraint res_company_l10n_fr_rounding_difference_loss_account_id_fkey on account_account: time=127.732 calls=1000
    Trigger for constraint res_company_l10n_fr_rounding_difference_profit_account_id_fkey on account_account: time=124.773 calls=1000
    Trigger for constraint res_company_l10n_in_withholding_account_id_fkey on account_account: time=124.847 calls=1000
    Trigger for constraint res_company_l10n_nl_rounding_difference_loss_account_id_fkey on account_account: time=131.094 calls=1000
    Trigger for constraint res_company_l10n_nl_rounding_difference_profit_account_id_fkey on account_account: time=132.013 calls=1000
    Trigger for constraint mrp_workcenter_expense_account_id_fkey on account_account: time=14.578 calls=1000
    Trigger for constraint mrp_account_wip_accounting_line_account_id_fkey on account_account: time=8.530 calls=1000
    Trigger for constraint account_payment_force_outstanding_account_id_fkey on account_account: time=11.336 calls=1000
    Trigger for constraint pos_payment_method_outstanding_account_id_fkey on account_account: time=11.554 calls=1000
    Trigger for constraint pos_payment_method_receivable_account_id_fkey on account_account: time=6.654 calls=1000
    Trigger for constraint pos_close_session_wizard_account_id_fkey on account_account: time=7.825 calls=1000
    Trigger for constraint res_company_downpayment_account_id_fkey on account_account: time=137.312 calls=1000
    Trigger for constraint res_company_l10n_bd_corporate_tax_liability_fkey on account_account: time=143.026 calls=1000
    Trigger for constraint res_company_l10n_bd_corporate_tax_expense_fkey on account_account: time=141.801 calls=1000
    Trigger for constraint account_move_l10n_de_datev_main_account_id_fkey on account_account: time=3874.682 calls=1000
    Trigger for constraint stock_landed_cost_lines_account_id_fkey on account_account: time=14.898 calls=1000
    Trigger for constraint account_account_account_asset_rel_account_account_id_fkey on account_account: time=9.640 calls=1000
    Trigger for constraint account_asset_account_asset_id_fkey on account_account: time=11.687 calls=1000
    Trigger for constraint account_asset_account_depreciation_id_fkey on account_account: time=6.551 calls=1000
    Trigger for constraint account_asset_account_depreciation_expense_id_fkey on account_account: time=6.300 calls=1000
    Trigger for constraint res_company_gain_account_id_fkey on account_account: time=210.699 calls=1000
    Trigger for constraint res_company_loss_account_id_fkey on account_account: time=180.965 calls=1000
    Trigger for constraint asset_modify_account_asset_id_fkey on account_account: time=10.665 calls=1000
    Trigger for constraint asset_modify_account_asset_counterpart_id_fkey on account_account: time=5.466 calls=1000
    Trigger for constraint asset_modify_account_depreciation_id_fkey on account_account: time=5.353 calls=1000
    Trigger for constraint asset_modify_account_depreciation_expense_id_fkey on account_account: time=5.438 calls=1000
    Trigger for constraint res_company_l10n_ae_tax_report_liabilities_account_fkey on account_account: time=176.808 calls=1000
    Trigger for constraint res_company_l10n_ae_tax_report_expenses_account_fkey on account_account: time=172.302 calls=1000
    Trigger for constraint res_company_l10n_ae_tax_report_asset_account_fkey on account_account: time=170.480 calls=1000
    Trigger for constraint res_company_l10n_ar_tax_base_account_id_fkey on account_account: time=171.774 calls=1000
    Trigger for constraint soda_account_mapping_account_id_fkey on account_account: time=9.239 calls=1000
    Trigger for constraint res_company_l10n_ec_tax_base_sale_account_id_fkey on account_account: time=176.779 calls=1000
    Trigger for constraint res_company_l10n_ec_tax_base_purchase_account_id_fkey on account_account: time=175.159 calls=1000
    Trigger for constraint account_loan_long_term_account_id_fkey on account_account: time=13.823 calls=1000
    Trigger for constraint account_loan_short_term_account_id_fkey on account_account: time=7.044 calls=1000
    Trigger for constraint account_loan_expense_account_id_fkey on account_account: time=5.934 calls=1000
    Trigger for constraint res_company_l10n_cl_factoring_counterpart_account_id_fkey on account_account: time=193.722 calls=1000
    Trigger for constraint res_company_exemption_doctor_master_account_id_fkey on account_account: time=201.309 calls=1000
    Trigger for constraint res_company_exemption_bachelor_account_id_fkey on account_account: time=200.476 calls=1000
    Trigger for constraint res_company_exemption_bachelor_capping_account_id_fkey on account_account: time=200.465 calls=1000
    Trigger for constraint res_company_partner_id_fkey on res_company: time=0.208 calls=10
    Trigger for constraint res_company_currency_id_fkey on res_company: time=0.018 calls=10
    Trigger for constraint res_company_paperformat_id_fkey on res_company: time=0.014 calls=10
    Trigger for constraint res_company_create_uid_fkey on res_company: time=0.015 calls=10
    Trigger for constraint res_company_write_uid_fkey on res_company: time=0.009 calls=10
    Trigger for constraint res_company_resource_calendar_id_fkey on res_company: time=0.023 calls=10
    Trigger for constraint res_company_transfer_account_id_fkey on res_company: time=0.002 calls=9
    Trigger for constraint res_company_default_cash_difference_income_account_id_fkey on res_company: time=0.055 calls=10
    Trigger for constraint res_company_default_cash_difference_expense_account_id_fkey on res_company: time=0.030 calls=10
    Trigger for constraint res_company_account_journal_suspense_account_id_fkey on res_company: time=0.002 calls=8
    Trigger for constraint res_company_account_journal_early_pay_discount_gain_accoun_fkey on res_company: time=0.002 calls=7
    Trigger for constraint res_company_account_journal_early_pay_discount_loss_accoun_fkey on res_company: time=0.001 calls=4
    Trigger for constraint res_company_income_currency_exchange_account_id_fkey on res_company: time=0.029 calls=10
    Trigger for constraint res_company_expense_currency_exchange_account_id_fkey on res_company: time=0.001 calls=5
    Trigger for constraint res_company_batch_payment_sequence_id_fkey on res_company: time=0.016 calls=10
    Trigger for constraint res_company_account_default_pos_receivable_account_id_fkey on res_company: time=0.001 calls=2
    Trigger for constraint res_company_account_fiscal_country_id_fkey on res_company: time=0.015 calls=10
    Trigger for constraint res_company_income_account_id_fkey on res_company: time=0.002 calls=6
    Trigger for constraint res_company_expense_account_id_fkey on res_company: time=0.001 calls=3
    Trigger for constraint res_company_deferred_expense_account_id_fkey on res_company: time=0.000 calls=1
    Trigger for constraint res_company_nomenclature_id_fkey on res_company: time=0.012 calls=10
    Trigger for constraint res_company_internal_transit_location_id_fkey on res_company: time=0.014 calls=10
    Trigger for constraint res_company_stock_mail_confirmation_template_id_fkey on res_company: time=0.013 calls=10
    Trigger for constraint res_company_documents_fleet_folder_fkey on res_company: time=0.016 calls=10
    Trigger for constraint res_company_documents_hr_folder_fkey on res_company: time=0.010 calls=10
    Trigger for constraint res_company_documents_employee_folder_id_fkey on res_company: time=0.011 calls=10
    Trigger for constraint res_company_documents_project_folder_id_fkey on res_company: time=0.009 calls=10
    Trigger for constraint res_company_stock_sms_confirmation_template_id_fkey on res_company: time=0.012 calls=10
    Trigger for constraint res_company_recruitment_folder_id_fkey on res_company: time=0.010 calls=10
    Trigger for constraint res_company_project_time_mode_id_fkey on res_company: time=0.019 calls=10
    Trigger for constraint res_company_timesheet_encode_uom_id_fkey on res_company: time=0.011 calls=10
    Trigger for constraint res_company_internal_project_id_fkey on res_company: time=0.015 calls=10
    Trigger for constraint res_company_leave_timesheet_task_id_fkey on res_company: time=0.015 calls=10
    Trigger for constraint res_company_rental_loc_id_fkey on res_company: time=0.011 calls=10
    Trigger for constraint res_company_l10n_ch_delegate_country_id_fkey on res_company: time=0.013 calls=10
    Trigger for constraint res_company_l10n_eg_annual_leave_type_id_fkey on res_company: time=0.014 calls=10

Accumulated across the entire test:

    account_account_account_asset_rel_account_account_id_fkey: 367.89
    account_account_account_auto_reconcile__account_account_id_fkey: 369.314
    account_account_account_import_summary__account_account_id_fkey: 308.894
    account_account_account_merge_wizard_re_account_account_id_fkey: 258.345
    account_account_account_tag_account_account_id_fkey: 437.58
    account_account_exclude_res_currency_pr_account_account_id_fkey: 364.079
    account_account_res_company_rel_account_account_id_fkey: 676.195
    account_account_tax_default_rel_account_id_fkey: 616.155
    account_accrued_orders_wizard_account_id_fkey: 281.117
    account_analytic_line_general_account_id_fkey: 2920.52
    account_asset_account_asset_id_fkey: 435.021
    account_asset_account_depreciation_expense_id_fkey: 225.966
    account_asset_account_depreciation_id_fkey: 243.045
    account_automatic_entry_wizard_destination_account_id_fkey: 333.281
    account_fiscal_position_account_account_dest_id_fkey: 764.004
    account_fiscal_position_account_account_src_id_fkey: 1127.7
    account_fiscal_position_avatax_invoice_account_id_fkey: 2903.72
    account_fiscal_position_avatax_refund_account_id_fkey: 2243.92
    account_journal_default_account_id_fkey: 8123.53
    account_journal_l10n_tr_default_sales_return_account_id_fkey: 13035
    account_journal_loss_account_id_fkey: 4810.37
    account_journal_non_deductible_account_id_fkey: 5057.85
    account_journal_profit_account_id_fkey: 5063.26
    account_journal_suspense_account_id_fkey: 5492.64
    account_loan_expense_account_id_fkey: 222.776
    account_loan_long_term_account_id_fkey: 553.955
    account_loan_short_term_account_id_fkey: 259.905
    account_merge_wizard_line_account_id_fkey: 265.135
    account_model_rel_account_account_id_fkey: 927.993
    account_move_l10n_de_datev_main_account_id_fkey: 122923
    account_move_line_account_id_fkey: 4000.68
    account_payment_destination_account_id_fkey: 265.653
    account_payment_force_outstanding_account_id_fkey: 459.209
    account_payment_method_line_payment_account_id_fkey: 2660.46
    account_payment_outstanding_account_id_fkey: 575.21
    account_payment_register_withholding_line_account_id_fkey: 319.363
    account_payment_register_withholding_outstanding_account_i_fkey: 383.508
    account_payment_register_writeoff_account_id_fkey: 341.615
    account_payment_withholding_line_account_id_fkey: 286.658
    account_reconcile_model_line_account_id_fkey: 2608.16
    account_reconcile_wizard_account_id_fkey: 309.389
    account_report_budget_item_account_id_fkey: 300.099
    account_tax_cash_basis_transition_account_id_fkey: 31329.6
    account_tax_group_advance_tax_payment_account_id_fkey: 2629.35
    account_tax_group_tax_payable_account_id_fkey: 3554.27
    account_tax_group_tax_receivable_account_id_fkey: 2772.1
    account_tax_repartition_line_account_id_fkey: 47923.3
    account_transfer_model_line_account_id_fkey: 1309.84
    asset_modify_account_asset_counterpart_id_fkey: 207.683
    asset_modify_account_asset_id_fkey: 454.126
    asset_modify_account_depreciation_expense_id_fkey: 189.258
    asset_modify_account_depreciation_id_fkey: 192.029
    mrp_account_wip_accounting_line_account_id_fkey: 305.605
    mrp_workcenter_expense_account_id_fkey: 565.317
    pos_close_session_wizard_account_id_fkey: 285.536
    pos_payment_method_outstanding_account_id_fkey: 432.131
    pos_payment_method_receivable_account_id_fkey: 249.401
    res_company_account_cash_basis_base_account_id_fkey: 5195.51
    res_company_account_default_pos_receivable_account_id_fkey: 5357.29
    res_company_account_discount_expense_allocation_id_fkey: 5113.98
    res_company_account_discount_income_allocation_id_fkey: 5151.48
    res_company_account_fiscal_country_id_fkey: 1
    res_company_account_journal_early_pay_discount_gain_accoun_fkey: 5640.61
    res_company_account_journal_early_pay_discount_loss_accoun_fkey: 5489.35
    res_company_account_journal_suspense_account_id_fkey: 5811.88
    res_company_account_production_wip_account_id_fkey: 8351.27
    res_company_account_production_wip_overhead_account_id_fkey: 7914.54
    res_company_account_revaluation_expense_provision_account__fkey: 8858.1
    res_company_account_revaluation_income_provision_account_i_fkey: 8169.02
    res_company_batch_payment_sequence_id_fkey: 0.995
    res_company_create_uid_fkey: 2.96
    res_company_currency_id_fkey: 1.081
    res_company_default_cash_difference_expense_account_id_fkey: 6060.06
    res_company_default_cash_difference_income_account_id_fkey: 6404.5
    res_company_deferred_expense_account_id_fkey: 10447.3
    res_company_deferred_revenue_account_id_fkey: 8923.24
    res_company_documents_employee_folder_id_fkey: 0.875
    res_company_documents_fleet_folder_fkey: 1.374
    res_company_documents_hr_folder_fkey: 0.829
    res_company_documents_project_folder_id_fkey: 0.779
    res_company_downpayment_account_id_fkey: 8009.08
    res_company_exemption_bachelor_account_id_fkey: 10964.3
    res_company_exemption_bachelor_capping_account_id_fkey: 10860.6
    res_company_exemption_doctor_master_account_id_fkey: 11117
    res_company_expense_account_id_fkey: 5124.13
    res_company_expense_accrual_account_id_fkey: 5246.67
    res_company_expense_currency_exchange_account_id_fkey: 5352.77
    res_company_external_report_layout_id_fkey: 0.308
    res_company_gain_account_id_fkey: 14196.4
    res_company_income_account_id_fkey: 5136.8
    res_company_income_currency_exchange_account_id_fkey: 5441.56
    res_company_internal_project_id_fkey: 1.151
    res_company_internal_transit_location_id_fkey: 1.019
    res_company_l10n_ae_tax_report_asset_account_fkey: 10908.2
    res_company_l10n_ae_tax_report_expenses_account_fkey: 11365.8
    res_company_l10n_ae_tax_report_liabilities_account_fkey: 11898.4
    res_company_l10n_ar_tax_base_account_id_fkey: 10648.4
    res_company_l10n_bd_corporate_tax_expense_fkey: 8098.52
    res_company_l10n_bd_corporate_tax_liability_fkey: 8176.24
    res_company_l10n_ch_delegate_country_id_fkey: 0.864
    res_company_l10n_cl_factoring_counterpart_account_id_fkey: 10872.3
    res_company_l10n_ec_tax_base_purchase_account_id_fkey: 10358.2
    res_company_l10n_ec_tax_base_sale_account_id_fkey: 10547
    res_company_l10n_ee_rounding_difference_loss_account_id_fkey: 8158.92
    res_company_l10n_ee_rounding_difference_profit_account_id_fkey: 7896.55
    res_company_l10n_eg_annual_leave_type_id_fkey: 0.887
    res_company_l10n_fr_rounding_difference_loss_account_id_fkey: 8227.23
    res_company_l10n_fr_rounding_difference_profit_account_id_fkey: 7965.89
    res_company_l10n_in_withholding_account_id_fkey: 7820.82
    res_company_l10n_nl_rounding_difference_loss_account_id_fkey: 7982.45
    res_company_l10n_nl_rounding_difference_profit_account_id_fkey: 7874.47
    res_company_leave_timesheet_task_id_fkey: 1.153
    res_company_loss_account_id_fkey: 12688.6
    res_company_nomenclature_id_fkey: 0.828
    res_company_paperformat_id_fkey: 0.941
    res_company_partner_id_fkey: 5.739
    res_company_project_time_mode_id_fkey: 1.273
    res_company_recruitment_folder_id_fkey: 0.816
    res_company_rental_loc_id_fkey: 0.851
    res_company_resource_calendar_id_fkey: 1.515
    res_company_revenue_accrual_account_id_fkey: 5175.54
    res_company_stock_mail_confirmation_template_id_fkey: 0.9
    res_company_stock_sms_confirmation_template_id_fkey: 0.861
    res_company_timesheet_encode_uom_id_fkey: 0.78
    res_company_transfer_account_id_fkey: 7072.12
    res_company_withholding_tax_base_account_id_fkey: 8502.05
    res_company_write_uid_fkey: 0.743
    soda_account_mapping_account_id_fkey: 398.04
    stock_landed_cost_lines_account_id_fkey: 658.493
    stock_location_valuation_in_account_id_fkey: 3940.27
    stock_location_valuation_out_account_id_fkey: 2818.23
    stock_valuation_layer_revaluation_account_id_fkey: 340.648

for a total of 661283ms = 11mn[^0].

This commit adds temporary indexes for every m2o field to account
which is not already indexed[^1][^2] after all the l10n modules are
installed, those indexes are then deleted at the end of the test to
avoid polluting the database for the split tests.

This removes most of the cost of deleting accounts (not going to
bother with the detail, the entire thing comes out at under a second),
at a very minor cost (a few seconds) to create the indices though an
increased overall load (due to having to update indexes).

Saves around 5mn on an unloaded 30mn build, and because it avoids a
significant amount of parallelized seq scans it saves even more when
running on a loaded runbot where parallel postgres workers are CPU
starved (10~15mn out of 50~55).

Note: patched `load_file` because `l10n_tr` enables `tr_TR`, and then
the tx subsystem complains about pretty much every module being
installed because few to none of them have a tr_TR po file.

[^0]: `EXPLAIN ANALYZE`-ing everything slows down the test by a factor
    of 2x, which is why this takes 11mn instead of the original 5, and
    the test itself takes 1h instead of the original 30mn
[^1]: Kinda, currently it just checks if the field is `index` on the
    Odoo side, so it's going to miss things like manual partial
    indexes, or compound index (though in that case we should only
    take in account cases where the account field is the first one),
    etc...
[^2]: The specific missing indexes could have been enumerated and
    created specifically but it doesn't seem worth the hassle, the
    gain from trimming down the list would only be a fraction of a
    second from creating a few less indexes, with the risk of missing
    new missing indexes. A blacklist might make sense to avoid
    creating indexes for constraints with extremely low costs (either
    empty tables or already indexed) e.g. constraints with under 250ms
    total runtime[^3].
[^3]: Note that the numbers above are full dumps of the trigger times,
    a fair number of triggers in the dumps are *not* on accounts but
    are due to ancillary deletions or deletion cascades. Pretty much
    every trigger below triple digit (ms) runtime is a non-account
    trigger, and this PR is not creating indexes for any of those.

closes #217690

Signed-off-by: Xavier Morel (xmo) <[email protected]>
This commit removes the custom padding defined on `website_sale/shop`
page in order to align the `fullwidth` layout on the `.container-fluid`
values.

Prior to this commit, the `website_sale/shop` page was enforcing a bigger
padding on the side of the sidebar and the main content to prevent this
specific layout to be close to edges.

While this desserved the design of the shop page, it created a
misalignment with the regular values defined for `.container-fluid`.

This would result in a misalignment between :

- The `/shop` page, that uses a custom value ;
- Header, snippets, footer that uses the default `container-fluid` value.

Ideally, the `website_sale` approach should be make global and apply to
every `container-fluid`, we there are some technical caveat with snippets,
which leads us to revert that improvement for now.

task-4921832
part of task-4840034

closes #217504

Signed-off-by: Antoine Vandevenne (anv) <[email protected]>
Making a cleaner recruitment job positions view:
- Adding activity and configure button directly in the view to avoid losing time clicking o_kanban_card_manage_settings -> Activities/Configuration
- Renaming
	- open slots -> new applications
	- open applications -> new applications
- Adding "in progress" (more convenient)
- Displaying company name when it's possible instead of the user_id (more convenient)

Cleaner recruitment job position for mobile:
- Displaying only usefull infos
- Displaying company name when it's possible instead of the user_id (more convenient)

On job position activities view:
- Adjusting spacing right to the assignee avatar

[IMP] #4762193

closes #214213

Related: odoo/upgrade#7971
Signed-off-by: Yannick Tivisse (yti) <[email protected]>
Some l10ns need to overwrite and add some selection options to the certificate field. Having a function to return the selection makes it easier to overwrite and to change the order of the selection.

task-4908830

Part-of: #216877
Related: odoo/enterprise#89133
Signed-off-by: Yannick Tivisse (yti) <[email protected]>
Removed some dead code.

closes #216877

Related: odoo/enterprise#89133
Signed-off-by: Yannick Tivisse (yti) <[email protected]>
closes #217701

X-original-commit: de21d07
Signed-off-by: Florian Gilbert (flg) <[email protected]>
Signed-off-by: de Wouters de Bouchout Jean-Benoît (jbw) <[email protected]>
Some po files were mistakenly added to either deleted modules or weren't
necessary during translation syncs across versions. This commit cleans up
those files.

Also delete leftover pot file with mismatching name to module

closes #217404

X-original-commit: 0b254af
Related: odoo/enterprise#89462
Signed-off-by: Louis Wicket (wil) <[email protected]>
Signed-off-by: Tiffany Chang (tic) <[email protected]>
- break the test calsses each to individual file

closes #217687

Task: 4925674
Signed-off-by: Bertrand Dossogne (bedo) <[email protected]>
This commit removes the `mute_until_dt` field
of `ResUsersSettings` after it was replaced by
busy behavior by #215866.

This commit also removes the cron job that
called a method removed in said PR.

closes #217638

Related: odoo/upgrade#8018
Signed-off-by: Alexandre Kühn (aku) <[email protected]>
__Current behavior before commit:__
When using a right-to-left (RTL) language on a website, the snippet
dialog in the website builder does not correctly apply the RTL direction
to the snippet previews. The CSS for the frontend assets is loaded
without considering the RTL context of the website.

This is mainly an issue when the website default language has a
different direction than the user language.

__Description of the fix:__
This commit corrects the RTL behavior in the snippet dialog by:
- Setting the dir attribute to the snippet preview container based on
the direction of the editable element.
- Ensuring the correct CSS bundle (including the RTL version) is loaded
for the snippet previews by retrieving the CSS bundle URL from the
editor's document similarly as it was done in `web_editor`.
- Adding a tour to test the fix.

Website refactor: #187419
task-4367641

closes #217744

X-original-commit: 7bcd56c
Signed-off-by: Francois Georis (fge) <[email protected]>
Signed-off-by: Julien Launois (jula) <[email protected]>
Adds a button to download an import template to simplify the data import process and provide users with a plug-and-play example using demo data.
Includes a test to ensure the template remains valid.

task-4875951

closes #214590

Signed-off-by: Lucas Perais (lpe) <[email protected]>
*: test_discuss_full, website_livechat

task-4851870

closes #216144

Signed-off-by: Maryam Kia (maki) <[email protected]>
…oadPage`

Cause:
 - After recent improvement #205165, our tour
   was not adapted with new `expectUnloadPage` attribute and was somehow missed
   during staging.
 - Also because of this tour was blacklisted it wasn't adapted along with
   #205187 improvement.

Fix:
 - Add `expectUnloadPage` attribute at missing steps
 - Add correct selector when finding invisible wishlist add button.

runbot error-229624

Affected Version-master

closes #217659

Signed-off-by: Victor Feyens (vfe) <[email protected]>
Steps to reproduce
===============
1. Create a company called ACME.
2. Create a child contact of type invoice address without any name.
3. Go to invoice and create invoice for this child contact.
4. Open composer to send invoice.
----> The mail body will have Dear (ACME) as first line.

After this commit, the wording for the contacts without name will be their
company name in the mail template.

Task-4812554

closes #212232

Related: odoo/upgrade#7767
Signed-off-by: Warnon Aurélien (awa) <[email protected]>
Before to this commit, the ‘closing s_popup with the X button updates
the invisible elements panel’ test failed from sometimes on runbot.
We think boostrap.js takes longer than normal to display the popup.

Solution:
We're going to increase the waiting timeout so that the crash doesn't recur.
We've taken this decision because the problem is very specific
and probably link to bootstrap.js.

In commit 955c1df,
we forgot to wait for visibility in the waitFor

closes #217746

X-original-commit: bdb9ec7
Signed-off-by: Géry Debongnie <[email protected]>
The number of tests in the hoot suite keeps increasing, and we're
close to the timeout for the desktop suite. Depending on the CPU
load, it happens that the suite timeout. This commit thus shifts it
up to 40 minutes.

closes #217748

X-original-commit: fc2cf31
Signed-off-by: Christophe Monniez (moc) <[email protected]>
Signed-off-by: Aaron Bohy (aab) <[email protected]>
Introduce by odoo-dev@94d95eb
This variable isn't used anywhere, therefore safe to remove.

closes #217655

Signed-off-by: Sébastien Theys (seb) <[email protected]>
This commit fixes the `test_chatbot_steps_sequence_ui` and the
`test_chatbot_steps_sequence_with_move_ui` tours. Those tours
create chat bot steps to check their order. To do so, they edit
the textarea and click on the save button. However, under high
load, the button can be clicked before the textarea is updated.
When this occurs, the validation fails and the step is not created.

This commit fixes the issue by waiting for the textarea content to
update before clicking on the save button.

fixes runbot-228498

closes #217857

X-original-commit: cd30b61
Signed-off-by: Alexandre Kühn (aku) <[email protected]>
Signed-off-by: Matthieu Stockbauer (tsm) <[email protected]>
After [this PR](#209628) was merged, a few last comments were made, this commit
includes the changes suggested in those comments.

task-none

closes #217820

X-original-commit: c0b8691
Signed-off-by: William André (wan) <[email protected]>
Signed-off-by: Thomas Becquevort (thbe) <[email protected]>
Before this commit, the `get_current()` method in the wifi helper would
occasionally run very slowly, taking 5-15 seconds. This is because the
`nmcli` command it was calling would periodically re-scan the network
so the information it returned was up-to-date. Because the homepage data
controller used this method, it would also sometimes take 5-15 seconds
to load, leading to a bad experience for the user.

After this commit, the `get_current()` method uses a different `nmcli`
command that only shows the status of the currently connected network,
avoiding a re-scan and therefore always running quickly.

task-4922640

closes #217807

X-original-commit: 8bfb927
Signed-off-by: Louis Travaux (lotr) <[email protected]>
Signed-off-by: Max Whale (mawh) <[email protected]>
Steps to reproduce:
- Install Sales and Stock
- Activate the multi-step routes setting
- Go to a Delivery route in the warehouse
- Change the `location_dest_id` of the operation type set on the rule
- Enable the "Location Dest. Taken from Rule" checkbox
- Ensure `rule.location_dest_id` and `operation_type.location_dest_id`
  are different
- Create a Sales Order (SO) for a product with quantity = 5 and confirm
- Change the SO line quantity to 3 and save

Issue:
A second picking is created with a move taking the product from
`rule.operation_type.location_dest_id -> rule.operation_type.
location_src_id` with quantity = -2.

This happens because the decrease in the SO quantity triggers a
negative move, and this move is not merged with the existing
positive move. Instead, a new move is created in the opposite
direction.

In `_merge_moves`:
https://github.com/odoo/odoo/blob/3c4275fb00255e519f01bf5547eff1db3a59d4b5/addons/stock/models/stock_move.py#L1191-L1193

It checks if the negative move has similar characteristics to the
existing positive moves. However, the `neg_key(neg_move)` differs in
`location_dest_id`, so the merge fails. This happens because the
negative move does **not** read the `location_dest_id` from the rule —
unlike the procurement, which **does** use the rule and therefore
creates positive moves with the correct destination.

When the negative move is created with the procurement, it initially
has the correct `location_dest_id`. But then:

https://github.com/odoo/odoo/blob/b984c72df398c4fe942d8894442e4e893ca0660e/addons/stock/models/stock_move.py#L1191
triggers `_compute_location_dest_id`, which doesn't consider the
`rule.location_dest_id` and defaults to `operation_type.
location_dest_id`, causing the merge to fail due to mismatched
destination_locations.

The positive move has read the correct value, because when it
was assigned to a picking, the picking has the correct destination
from the procurement. But for the neg_move it has picking None so
it maps to the operation_type without consdiering the location from
rule checkbox.

opw-4793171

closes #217557

X-original-commit: 7b90c41
Signed-off-by: Tiffany Chang (tic) <[email protected]>
Signed-off-by: Lancelot Semal (lase) <[email protected]>
After this commit:
Amazon Pay method has been added to stripe payment provider

Affected version - master
Task-4509363

closes #198116

Related: odoo/upgrade#7246
Signed-off-by: Antoine Vandevenne (anv) <[email protected]>
Serhii Rubanskyi and others added 25 commits July 8, 2025 13:35
*: survey, website, website_blog, website_event, website_forum.
Updates imports to use the new html_builder scrollTo method instead of
the deprecated web_editor.
Part of the [html_builder refactoring]

[html_builder refactoring]: 9fe45e2b7ddb
Related to task-4367641

closes #217856

X-original-commit: 71c8789
Signed-off-by: Francois Georis (fge) <[email protected]>
Before this commit, the width of the calendar side panel varied
depending on the content.

Steps to reproduce:
- Go to Timesheet
- Select the calendar view
- Click on the "+" button  and click on the filter button.

task-4921562

closes #217797

X-original-commit: 863cf5d
Signed-off-by: Romeo Fragomeli (rfr) <[email protected]>
For reasons explained in [1], waitFor should be used for popovers
in order to avoid non-deterministic failures on runbot.

[1]: 54da715

X-original-commit: 1f45fe6
Part-of: #217775
Signed-off-by: David Monjoie (dmo) <[email protected]>
It had so much awaits in the same test itself that it could reach
the timeout of the test when the runbot was slow enough, leading to
non-deterministic failures. Splitting them solves the issue and
there was no real reason to execute all these in a single test case.

closes #215168

closes #217775

X-original-commit: 5195246
Signed-off-by: David Monjoie (dmo) <[email protected]>
Before this commit, modifying the response directly (whether from the RAM cache
or the IndexedDB cache) would also modify the RAM cache content.

Now, rather than storing a reference, the RAM cache stores a copy of the
IndexedDB value. Also, when the RAM cache is returned, a copy of the stored
value is returned.

closes #217750

X-original-commit: 6890495
Signed-off-by: Aaron Bohy (aab) <[email protected]>
Signed-off-by: Jorge Pinna Puissant (jpp) <[email protected]>
When the table of content options were converted to `html_builder`, the
drag'n'drop of the content part and the navbar part was not restricted
to remain within the table of content section.
Because of this it was possible to e.g. drop the navbar inside the grid
layout of another block.

This commit prevents this by disabling dragging on the main parts of
the table of content. They can still be swapped by using the arrow icon
buttons.

task-4367641

closes #217672

X-original-commit: 652e6da
Signed-off-by: Francois Georis (fge) <[email protected]>
Prior this commit:
- We sent brand-specific payment product id (e.g., for VISA, Mastercard) by
  mapping each card brand individually.

After this commit:
-  'group' parameter cover all supported card brands, simplifying the
   configuration.

task-4347430

closes #198462

Signed-off-by: Antoine Vandevenne (anv) <[email protected]>
Change label of `non_deductible_account_id` field on `account.journal` from
`Private Part Account` to `Private Share Account` as private part means
something else in english.

task-4868244

closes #217859

X-original-commit: ae9fe3b
Signed-off-by: William André (wan) <[email protected]>
Signed-off-by: Pratham Nareshbhai Patel (ppat) <[email protected]>
Changing the `channel _to_store_defaults` query count to the correct value. This
 increase is related to #216031.

closes #217851

X-original-commit: 850e575
Signed-off-by: Sébastien Theys (seb) <[email protected]>
Currently, a user needs to be time off, expense and timesheet approver
of an employee for those links to be removed by the departure wizard.
If not all the approver fields are the same user, that link will not be
removed.

Steps to reproduce:
- Set Marc Demo as only Time Off approver on an employee.
- Archive Marc Demo's employee (This does not remove time off approver
from the previous employee)

To rectify this issue, we correctly group the `user_domain` so that
their contents are properly OR'd.

closes #217822

X-original-commit: 1b65d85
Signed-off-by: Bertrand Dossogne (bedo) <[email protected]>
Signed-off-by: Simon Goffaux (sigo) <[email protected]>
**Problem:**
When cashier A is assigned to an order, then changed during the payment
screen process to cashier B, the receipt will display Served by cashier A.
It should be Served by cashier B as this is the one that closed the order.
This used to work until 18.0.

**Steps to reproduce:**
- Add some employees to your PoS, using pos_hr
- Select one of them, then change to another one during the payment screen, before paying
- Pay for it, the receipt screen still displays the first cashier

**Why the fix:**
The receipt should first display the current cashier, not the order's
cashier. It was done the other way around before this commit. We now
first display the session's cashier, then if not available we display
the order's cashier.

opw-4868038

closes #217707

X-original-commit: 1abbce3
Signed-off-by: Adrien Guilliams (adgu) <[email protected]>
Signed-off-by: Arthur Nanson (artn) <[email protected]>
When creating a sale order through crm, default_user_id was being
passed through the context. This was causing issues when confirming the
sale orders when quality checks were enabled as the user on the
quality checks would be set as the user from the CRM lead. Removing this
from the context before confirming and thus creating any linked records
avoids this issue.

opw-4658850

closes #216999

X-original-commit: 1540c30
Signed-off-by: Ryan Cen (ryce) <[email protected]>
Purpose
=======
We don't want to log all property changes; we only want to log a note
if the parent changed (and so all properties are removed).

Technical
=========
Because we want to track the change only if the parent changed,
the definition record field needs to be tracked.

Task-3644407

closes #156236

Related: odoo/enterprise#57963
Signed-off-by: Thibault Delavallee (tde) <[email protected]>
Steps to reproduce:
- Open website builder
- Select some text and "Add a link" with the toolbar
- Fill the URL field
- Select "Button Primary"
- Click "Discard"
- Bugs: The link popover does not closes
  The dom changes are discarded, but it still shows the same info

task-4367641

closes #217801

X-original-commit: 6c04e42
Signed-off-by: Francois Georis (fge) <[email protected]>
Steps to reproduce:

- Install the Website module.
- Go to a To-Do  and type a slash command, e.g., /link.
- Enter a label for the link.
- Type in the URL input — observe the preview.
- Select a suggestion from autocomplete dropdown — observe the preview.

Before this commit:

- The link preview did not update while typing in the URL input.
- It also did not update after selecting an item from autocomplete dropdown.

After this commit:

- The link preview updates live while typing and upon selecting a suggestion.

task-4910827

closes #217799

X-original-commit: 6bfd4dc
Signed-off-by: David Monjoie (dmo) <[email protected]>
Signed-off-by: Adnan Chaudhary (adch) <[email protected]>
The goal of this commit is to prevent the BuilderSelect from having part
of its dropdown outside the screen. This makes some of the elements
in the dropdown inaccessible.

This problem is linked to a popover limit that should be set in the future.

Solution:
We will set a limit of 50% of the screen for the height in BuilderSelect

To reproduce:
- Have a BuilderSelect containing many items
    For example, Type when a Field is selected in a Form.
- Click on the BuilderSelect

Before this commit:
    Part of the dropdown is outside the screen and therefore few elements
    are impossible to select.

After this commit:
    The size of the dropdown is limited to prevent it from being outside the screen.

closes #217776

X-original-commit: cdc74d6
Signed-off-by: Géry Debongnie <[email protected]>
Signed-off-by: Francois Georis (fge) <[email protected]>
In this commit, we fix the donation_snippet_use tour.
At the end of the tour, when you click on submit donation,
you are redirected to a page "Your payment has been processed."
From this page, you are then redirected to a page with "Thank you".
This intermediate redirection page can be a problem if there are
several steps that concern it because we do not know when the
redirection will be triggered (in the first or the second step?)
Therefore, it is essential to have only one step for intermediate
redirections.

closes #217740

X-original-commit: d68db06
Signed-off-by: Bastien Fafchamps (bafa) <[email protected]>
Signed-off-by: Pierre Pulinckx (pipu) <[email protected]>
closes #217827

X-original-commit: 027d07d
Signed-off-by: Ruben Gomes (rugo) <[email protected]>
Signed-off-by: Josse Colpaert (jco) <[email protected]>
An error occurs if the Validity Period is removed while creating a new
allocation.

Steps to reproduce:
- Install the 'hr_holidays' module
- Time Off > My Time > My Allocation
- Open New and remove the 'Validity Period'

Traceback:
AttributeError: 'bool' object has no attribute 'strftime'

This commit ensures that changing the date won't cause an error, but instead
will display a warning upon saving the form, as it is a required field.

sentry-6709097746

closes #217833

X-original-commit: 70d7842
Signed-off-by: Bertrand Dossogne (bedo) <[email protected]>
Signed-off-by: Aayush Modi (aamo) <[email protected]>
Before this commit:
1. Insert an image and add a link to it.
2. Click on the image and remove it by clicking the remove button in the toolbar.
3. The link popover remains open and only disappears after clicking away.

This occurs because the default behavior of a link with text preserves the link
element to allow the possibility of completely changing the label of the link
directly in the editing area.

After this commit: We made a override in link_plugin, to handle the delete of an
image when its parent element is a link, e.g. image link. The link popover is
properly closed when an image link is removed, and the link element is removed
when the link element associated with the image is empty.

We also improve the media modify handler, move it partially to normalize,
ref: #211401

From the ref pr, we unwrap the link in other media plugins when unsupported
media type is inserted to a link by replacing the image. In this commit, we
move that logic to the link plugin, and do it in the normalize step. By doing
this, the dispatching in the ref pr won't be needed.

The unwrapping condition is when a link has another link inside it (media type
document), or when the link has an inframe inside (video media type, possible
in new html_builder website). It's possible that a link has other type of child
like img element, font element (background color), span element (icon), t
element (template), textnode etc. It's easier to specify in which cases we want
to unwrap a link.

task-4805029

closes #217699

X-original-commit: 02ef4fb
Signed-off-by: David Monjoie (dmo) <[email protected]>
Signed-off-by: Jinjiu Liu (jili) <[email protected]>
This commit: e2a0c6e
change a help in the intercompany rules. The help sentence is wrong since we
don't create invoice but bills.

task-4907810

closes #217821

X-original-commit: c7f11ff
Related: odoo/enterprise#89701
Signed-off-by: William André (wan) <[email protected]>
Signed-off-by: Maximilien La Barre (malb) <[email protected]>
Following the fix in d927a7b, we broke the default behaviour of empty
text/chart fields. While the server returns the value `false` when
they're empty, we want to display an empty string in the `ODOO.LIST`
formulas.

Task-4897690

closes #217611

X-original-commit: c6c118c
Signed-off-by: Rémi Rahir (rar) <[email protected]>
Signed-off-by: Pierre Rousseau (pro) <[email protected]>
* = l10n_in_hr_holidays, l10n_ae_hr_payroll, l10n_be_hr_payroll

Steps:
- Navigate to Time Off > Configuration > Time Off Types.
- Open any time off type form with localization or payroll-related options.

Issues:
- Configuration fields (including localization modules) appeared misaligned.
- The Payroll section was not utilizing space effectively in the layout.

Fix:
- Aligned all configuration fields in a consistent two-column layout, including
  localization and payroll-related options.,
- Repositioned the Payroll section below the Negative Cap section.

Task - 4759116

closes #213487

Related: odoo/enterprise#87274
Signed-off-by: Yannick Tivisse (yti) <[email protected]>
Currently, when creating a refund, the move type selector shows all
possible move_type out there. We obviously don't want that...

Solution: show only the current move type for refunds.

task-4926014

closes #217849

X-original-commit: 2977874
Signed-off-by: Ruben Gomes (rugo) <[email protected]>
Signed-off-by: Antoine Boonen (aboo) <[email protected]>
* = html_editor, mail

A BottomSheet is a UI component in mobile apps that slides up from the
bottom of the screen to display additional content or options. It can be
partially or fully expanded and is commonly used for actions, menus, or
forms. BottomSheets provide a non-intrusive way to show relevant
information without leaving the current screen.

This commit adds:
* BottomSheet Component
* Dynamic Viewport Units (DVU) hook
* Feature Detection (virtualKeyboard)
* Adapt Popover service to use BottomSheet Component
* All Dropdown are show in bottom sheet
* Adapt code to support `prefers-reduced-motion`
* IMP kanban color picker in menu
* CSS tweak: stats button, "switch view"
* CSS adapt home menu navbar (box-shadow)
* CSS scroll-state when more content in sheet (content not visible)
* Disable bottom sheet for search bar
* Disable bottom sheet for some dropdown of HTML Editor
* Disable bottom sheet for activity menu and messaging menu

task-4551522

closes #216854

Related: odoo/enterprise#89119
Signed-off-by: Pierre Paridans (app) <[email protected]>
Co-authored-by: Romeo Fragomeli <[email protected]>
Co-authored-by: Luca Vitali <[email protected]>
@bt-admin bt-admin merged commit 56002da into brain-tec:tmp.master Jul 9, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.