Přejít na obsah
Menu
You need to be registered to interact with the community.
This question has been flagged
2 Odpovědi
144 Zobrazení

I want to hide the action reports of stock.picking based on the picking_type_code. Specifically, if picking_type_code = "outgoing", I want to hide stock.action_report_delivery; if picking_type_code = "incoming", I want to hide stock.stock_reception_report_action. All other reports should remain visible. How can I achieve this? Here is what I have tried so far:


class StockPicking(models.Model):

_inherit = "stock.picking"


def _get_action_ids(self, xml_ids):

action_ids = []

for xml_id in xml_ids:

try:

action_ids.append(self.env.ref(xml_id).id)

except ValueError:

_logger.warning("XML ID not found: %s", xml_id)

return action_ids


def _filter_toolbar_actions(self, view, allowed_ids=None, hidden_ids=None):

if not view or not view.get("toolbar"):

return

print_actions = view["toolbar"].get("print", [])

if allowed_ids is not None:

view["toolbar"]["print"] = [

a for a in print_actions if a.get("id") in allowed_ids

]

elif hidden_ids is not None:

view["toolbar"]["print"] = [

a for a in print_actions if a.get("id") not in hidden_ids

]


@api.model

def get_views(self, views, options=None):

res = super().get_views(views, options)

picking_type_code = self.env.context.get("restricted_picking_type_code")


if picking_type_code == "outgoing":

hidden_xml_ids = [

"stock.action_report_delivery",

]

hidden_ids = self._get_action_ids(hidden_xml_ids)

form_view = res["views"].get("form")

self._filter_toolbar_actions(form_view, hidden_ids=hidden_ids)

if picking_type_code == "incoming":

hidden_xml_ids = [

"stock.stock_reception_report_action",

]

hidden_ids = self._get_action_ids(hidden_xml_ids)

form_view = res["views"].get("form")

self._filter_toolbar_actions(form_view, hidden_ids=hidden_ids)


return res


Avatar
Zrušit
Autor Nejlepší odpověď

I want to hide the Print button in the toolbar. I've tried several times, but the Print button still doesn't go away. Is there any other way to do it?

Avatar
Zrušit

You need to customize as per your needs in below file:
-> action_menu.js
static defaultProps = {
printDropdownTitle: _t("Print"),
onActionExecuted: () => {},
shouldExecuteAction: () => true,
loadExtraPrintItems: () => [],
};
->action_menu.xml
Template name: <t t-name="web.ActionMenus">

Also you can check this free app by Cybrosys: https://apps.odoo.com/apps/modules/19.0/hide_all_print_button
Hope it is helpful for you.

Nejlepší odpověď

Hello,

You can use domain in the XML code of report action like below:
<field name="domain" eval=[(custom condition based on picking_type_code)]"/>

Avatar
Zrušit
Related Posts Odpovědi Zobrazení Aktivita
2
srp 25
857
1
kvě 25
1881
2
dub 25
2910
0
led 25
1526
1
pro 24
2415