Skip to Content
Menu
This question has been flagged
2 Replies
140 Rodiniai

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


Portretas
Atmesti
Autorius Best Answer

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?

Portretas
Atmesti

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.

Best Answer

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)]"/>

Portretas
Atmesti
Related Posts Replies Rodiniai Veikla
2
rugp. 25
855
1
geg. 25
1877
2
bal. 25
2905
0
saus. 25
1523
1
gruod. 24
2413