feat(pick list): group items based on item code and warehouse before printing picklist

This commit is contained in:
Diksha Jadhav 2021-10-05 14:50:29 +05:30 committed by Ankush Menat
parent 6ec047cba9
commit f2d136e574
2 changed files with 45 additions and 3 deletions

View File

@ -18,7 +18,9 @@
"get_item_locations",
"section_break_6",
"locations",
"amended_from"
"amended_from",
"print_settings_section",
"group_same_items"
],
"fields": [
{
@ -110,14 +112,28 @@
"options": "STO-PICK-.YYYY.-",
"reqd": 1,
"set_only_once": 1
},
{
"fieldname": "print_settings_section",
"fieldtype": "Section Break",
"label": "Print Settings"
},
{
"allow_on_submit": 1,
"default": "0",
"fieldname": "group_same_items",
"fieldtype": "Check",
"label": "Group Same Items",
"print_hide": 1
}
],
"is_submittable": 1,
"links": [],
"modified": "2020-03-17 11:38:41.932875",
"modified": "2021-10-05 15:08:40.369957",
"modified_by": "Administrator",
"module": "Stock",
"name": "Pick List",
"naming_rule": "By \"Naming Series\" field",
"owner": "Administrator",
"permissions": [
{
@ -184,4 +200,4 @@
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 1
}
}

View File

@ -121,6 +121,32 @@ class PickList(Document):
and (self.for_qty is None or self.for_qty == 0):
frappe.throw(_("Qty of Finished Goods Item should be greater than 0."))
def before_print(self, settings=None):
if self.get("group_same_items"):
self.group_similar_items()
def group_similar_items(self):
group_item_qty = {}
group_picked_qty = {}
count = 0
for item in self.locations:
group_item_qty[(item.item_code, item.warehouse)] = group_item_qty.get((item.item_code,item.warehouse), 0) + item.qty
group_picked_qty[(item.item_code, item.warehouse)] = group_picked_qty.get((item.item_code,item.warehouse), 0) + item.picked_qty
duplicate_list = []
for item in self.locations:
if (item.item_code, item.warehouse) in group_item_qty:
count += 1
item.qty = group_item_qty[(item.item_code, item.warehouse)]
item.picked_qty = group_picked_qty[(item.item_code, item.warehouse)]
item.stock_qty = group_item_qty[(item.item_code, item.warehouse)]
item.idx = count
del group_item_qty[(item.item_code, item.warehouse)]
else:
duplicate_list.append(item)
for item in duplicate_list:
self.remove(item)
def validate_item_locations(pick_list):
if not pick_list.locations: