hunk.code_window:             </t>
           </xpath>
           <xpath expr="//section[@id='details']//div[@id='quote_qty']" position="replace">
               <t t-if="sale_order.state in ['draft', 'sent'] and line.sale_order_option_ids">
                   <div class="input-group js_quantity_container pull-right">
                       <span class="d-print-none input-group-text d-none d-md-inline-block">
  
hunk.labels: keep keep keep keep replace keep keep keep
hunk.after_edit:             <t t-if="line._can_be_edited_on_portal()">
  
hunk.file_path: addons/sale_management/views/sale_portal_templates.xml
hunk.type: replace
file: # -*- coding: utf-8 -*-
  # Part of Odoo. See LICENSE file for full copyright and licensing details.
  
  from odoo import api, models, tools
  from odoo.http import request
  
  
  class IrUiMenu(models.Model):
      _inherit = 'ir.ui.menu'
  
      @api.model
      @tools.ormcache_context('self._uid', keys=('lang', 'force_action',))
      def load_menus_root(self):
          root_menus = super().load_menus_root()
          if self.env.context.get('force_action'):
              web_menus = self.load_web_menus(request.session.debug if request else False)
              for menu in root_menus['children']:
                  # Force the action.
                  if (
                      not menu['action']
                      and web_menus[menu['id']]['actionModel']
                      and web_menus[menu['id']]['actionID']
                  ):
                      menu['action'] = f"{web_menus[menu['id']]['actionModel']},{web_menus[menu['id']]['actionID']}"
  
          return root_menus
  