Update ordered qty in blanket order

This commit is contained in:
Nabin Hait 2018-06-14 15:54:34 +05:30
parent 9a31dd7062
commit b2d3c0f040
7 changed files with 39 additions and 25 deletions

View File

@ -244,7 +244,7 @@ class PurchaseOrder(BuyingController):
self.update_requested_qty()
self.update_ordered_qty()
self.update_blanket_order(cancel=True)
self.update_blanket_order()
def on_update(self):
@ -323,6 +323,7 @@ def close_or_unclose_purchase_orders(names, status):
else:
if po.status == "Closed":
po.update_status("Draft")
po.update_blanket_order()
frappe.local.message_log = []

View File

@ -342,17 +342,10 @@ class StockController(AccountsController):
if self.docstatus==1:
raise frappe.ValidationError
def update_blanket_order(self, cancel=False):
for item in self.items:
if item.blanket_order:
ordered_quantity, doc_name = frappe.db.get_value("Blanket Order Item", {"parent": item.blanket_order}, ["ordered_quantity", "name"])
if not cancel:
ordered_quantity = ordered_quantity + item.qty
else:
ordered_quantity = ordered_quantity - item.qty
ordered_quantity = flt(ordered_quantity, item.precision("qty"))
frappe.db.set_value("Blanket Order Item", doc_name, "ordered_quantity", ordered_quantity)
def update_blanket_order(self):
blanket_orders = list(set([d.blanket_order for d in self.items]))
for blanket_order in blanket_orders:
frappe.get_doc("Blanket Order", blanket_order).update_ordered_qty()
def update_gl_entries_after(posting_date, posting_time, for_warehouses=None, for_items=None,
warehouse_account=None):

View File

@ -66,6 +66,10 @@ class Employee(NestedSet):
def update_user_permissions(self):
if not self.create_user_permission: return
if has_user_permission_for_employee(self.user_id, self.name) \
or not has_permission('User Permission', ptype='write'):
return
add_user_permission("Employee", self.name, self.user_id)
set_user_permission_if_allowed("Company", self.company, self.user_id)
@ -207,8 +211,6 @@ def validate_employee_role(doc, method):
def update_user_permissions(doc, method):
# called via User hook
if "Employee" in [d.role for d in doc.get("roles")]:
employee_name = frappe.get_value('Employee', {'user_id': doc.name}, 'name')
if has_user_permission_for_employee(doc.name, employee_name): return
if not has_permission('User Permission', ptype='write'): return
employee = frappe.get_doc("Employee", {"user_id": doc.name})
employee.update_user_permissions()

View File

@ -10,13 +10,25 @@ from erpnext.stock.doctype.item.item import get_item_defaults
class BlanketOrder(Document):
pass
def update_ordered_qty(self):
ref_doctype = "Sales Order" if self.blanket_order_type == "Selling" else "Purchase Order"
item_ordered_qty = frappe._dict(frappe.db.sql("""
select trans_item.item_code, sum(trans_item.stock_qty) as qty
from `tab{0} Item` trans_item, `tab{0}` trans
where trans.name = trans_item.parent
and trans_item.blanket_order=%s
and trans.docstatus=1
and trans.status not in ('Closed', 'Stopped')
group by trans_item.item_code
""".format(ref_doctype), self.name))
for d in self.items:
d.db_set("ordered_qty", item_ordered_qty.get(d.item_code, 0))
@frappe.whitelist()
def make_sales_order(source_name):
def update_item(source, target, source_parent):
target.qty = source.get("qty") - source.get("ordered_quantity")
target.qty = source.get("qty") - source.get("ordered_qty")
item = get_item_defaults(target.item_code, source_parent.company)
if item:
target.item_name = item.get("item_name")
@ -41,7 +53,7 @@ def make_sales_order(source_name):
@frappe.whitelist()
def make_purchase_order(source_name):
def update_item(source, target, source_parent):
target.qty = source.get("qty") - source.get("ordered_quantity")
target.qty = source.get("qty") - source.get("ordered_qty")
item = get_item_defaults(target.item_code, source_parent.company)
if item:
target.item_name = item.get("item_name")

View File

@ -6,6 +6,7 @@ from __future__ import unicode_literals
import frappe
import unittest
from frappe.utils import add_months, today
from erpnext import get_company_currency
from .blanket_order import make_sales_order, make_purchase_order
class TestBlanketOrder(unittest.TestCase):
@ -13,6 +14,7 @@ class TestBlanketOrder(unittest.TestCase):
bo = make_blanket_order(blanket_order_type="Selling")
so = make_sales_order(bo.name)
so.currency = get_company_currency(so.company)
so.delivery_date = today()
so.items[0].qty = 10
so.submit()
@ -24,17 +26,19 @@ class TestBlanketOrder(unittest.TestCase):
self.assertEqual(so.items[0].rate, bo.items[0].rate)
bo = frappe.get_doc("Blanket Order", bo.name)
self.assertEqual(so.items[0].qty, bo.items[0].ordered_quantity)
self.assertEqual(so.items[0].qty, bo.items[0].ordered_qty)
# test the quantity
so1 = make_sales_order(bo.name)
self.assertEqual(so1.items[0].qty, (bo.items[0].qty-bo.items[0].ordered_quantity))
so1.currency = get_company_currency(so1.company)
self.assertEqual(so1.items[0].qty, (bo.items[0].qty-bo.items[0].ordered_qty))
def test_purchase_order_creation(self):
bo = make_blanket_order(blanket_order_type="Purchasing")
po = make_purchase_order(bo.name)
po.currency = get_company_currency(po.company)
po.schedule_date = today()
po.items[0].qty = 10
po.submit()
@ -46,11 +50,12 @@ class TestBlanketOrder(unittest.TestCase):
self.assertEqual(po.items[0].rate, po.items[0].rate)
bo = frappe.get_doc("Blanket Order", bo.name)
self.assertEqual(po.items[0].qty, bo.items[0].ordered_quantity)
self.assertEqual(po.items[0].qty, bo.items[0].ordered_qty)
# test the quantity
po1 = make_sales_order(bo.name)
self.assertEqual(po1.items[0].qty, (bo.items[0].qty-bo.items[0].ordered_quantity))
po1.currency = get_company_currency(po1.company)
self.assertEqual(po1.items[0].qty, (bo.items[0].qty-bo.items[0].ordered_qty))

View File

@ -181,7 +181,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "ordered_quantity",
"fieldname": "ordered_qty",
"fieldtype": "Float",
"hidden": 0,
"ignore_user_permissions": 0,
@ -280,7 +280,7 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2018-06-04 07:04:14.050836",
"modified": "2018-06-14 07:04:14.050836",
"modified_by": "Administrator",
"module": "Manufacturing",
"name": "Blanket Order Item",

View File

@ -190,7 +190,7 @@ class SalesOrder(SellingController):
frappe.db.set(self, 'status', 'Cancelled')
self.update_blanket_order(cancel=True)
self.update_blanket_order()
def update_project(self):
project_list = []
@ -414,6 +414,7 @@ def close_or_unclose_sales_orders(names, status):
else:
if so.status == "Closed":
so.update_status('Draft')
so.update_blanket_order()
frappe.local.message_log = []