# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd.
# License: GNU General Public License v3. See license.txt

from home import update_feed
from core.doctype.notification_count.notification_count import clear_doctype_notifications
from stock.doctype.material_request.material_request import update_completed_qty

def on_method(bean, method):
	if method in ("on_update", "on_submit"):
		update_feed(bean.controller, method)
	
	if method in ("on_update", "on_cancel", "on_trash"):
		clear_doctype_notifications(bean.controller, method)

	if bean.doc.doctype=="Stock Entry" and method in ("on_submit", "on_cancel"):
		update_completed_qty(bean.controller, method)