def make_stock_requisition(planning_warehouse, required_date, reference_no, workflowStatus, check_flag): global required_date_count global test_whole_number global only_transfer only_transfer = "" if check_flag is "" or check_flag is None: only_transfer = False else: only_transfer = bool(check_flag) #print "########-parseBoolString::", only_transfer test_whole_number = 1 if required_date == getdate(datetime.now().strftime('%Y-%m-%d')): if required_date_count == False: required_date_count = True frappe.throw(_("Required Date is set to today's date, if you still want to proceed click on 'Stock Requisition' again")) if hidden_bom_list.get("hidden_bom") is not None: bom_list = hidden_bom_list.get("hidden_bom") bom_list = bom_list.split(",") for bom in bom_list: if bom!="null": test_whole_number = check_for_whole_number(bom) if test_whole_number and float(qty_to_make) % 1 != 0: frappe.throw("Quantity to Make should be whole number") else: if bom_for_validation: test_whole_number = check_for_whole_number(bom_for_validation) if test_whole_number and float(qty_to_make) % 1 != 0: frappe.throw("Quantity to Make should be whole number") innerJson_requisition = " " innerJson_transfer = " " ret = "" newJson_transfer = { "company": company, "doctype": "Stock Requisition", "title": "Material Transfer", "workflow_state": workflowStatus, "material_request_type": "Material Transfer", "quantity_to_make": qty_to_make, "requested_by" : reference_no, "items": [ ] } newJson_requisition = { "company": company, "doctype": "Stock Requisition", "title": "Purchase", "material_request_type": "Purchase", "quantity_to_make": qty_to_make, "workflow_state": workflowStatus, "requested_by" : reference_no, "items": [ ] } no_requisition = 0 no_transfer = 0 required = "" delta_qty = "" whse_map = {} empty_desc = [] empty_uom = [] for rows in summ_data: required = str(rows[10]).strip() if required and rows[11] and planning_warehouse != (rows[16]) : if whse_map: if whse_map.get(planning_warehouse): if rows[10] > whse_map.get(planning_warehouse): rows[10] = rows[10] - whse_map.get(planning_warehouse) #rows[9] = required rows[11] = rows[11] - whse_map.get(planning_warehouse) else: rows[10] = 0 whse_map.clear() item_code = rows[8] #uom = getUOM(item_code) if rows[10]: if rows[3] == "<br>" or rows[3] == "<div><br></div>" or str(rows[3]) == "": empty_desc.append(rows[7]) if rows[6] == "": empty_uom.append(rows[8]) no_transfer = no_transfer + 1 if rows[10] < rows[11]: req_qty = rows[10] if req_qty > 0: innerJson_transfer ={ "doctype": "Stock Requisition Item", "item_code": rows[8], "qty": req_qty, "schedule_date": required_date, "warehouse":planning_warehouse, "uom": rows[6], "stock_uom": rows[6], "conversion_factor":rows[17], "description": rows[3] } newJson_transfer["items"].append(innerJson_transfer) if rows[10] >= rows[11]: balance_qty = rows[11] if balance_qty > 0: innerJson_transfer = { "doctype": "Stock Requisition Item", "item_code": rows[8], "qty": balance_qty, "schedule_date": required_date, "warehouse":planning_warehouse, "uom":rows[6], "stock_uom": rows[6], "conversion_factor":rows[17], "description": rows[3] } newJson_transfer["items"].append(innerJson_transfer) else: if str(rows[12]).strip(): whse_map[(rows[12])] = rows[11] if no_transfer == 0: frappe.msgprint("Planning Warehouse has all the item !! Stock transfer is not required") elif curr_stock_balance == 1 or only_transfer: #print "###################-inside_transfer::" doctype = "" item_code = "" qty = 0 schedule_date = "" warehouse = "" uom = "" stock_uom = "" conversion_factor = 1 description = "" newJson_transfer1 = { "company": company, "doctype": "Stock Requisition", "title": "Material Transfer", "workflow_state": workflowStatus, "material_request_type": "Material Transfer", "quantity_to_make": qty_to_make, "requested_by" : reference_no, "items": [] } if empty_uom: frappe.throw(_("UOM for {0} is empty,Please add UOM in Item Master Doctype.").format(frappe.bold(comma_and(empty_uom)))) if empty_desc: frappe.throw(_("Description for {0} is empty,Please add description in Item Master Doctype.").format(frappe.bold(comma_and(empty_desc)))) sreq_items= newJson_transfer["items"] sreq_items_map = get_unique_stock_requisition_items(sreq_items) #print "len of sreq_items_map::", sreq_items_map if len(sreq_items_map)!=0: sreq_dict = [] for item_code in sreq_items_map: sreq_dict_items = sreq_items_map[item_code] doctype = sreq_dict_items['doctype'] item_code = sreq_dict_items['item_code'] qty = sreq_dict_items['qty'] schedule_date = sreq_dict_items['schedule_date'] warehouse = sreq_dict_items['warehouse'] uom = sreq_dict_items['uom'] stock_uom = sreq_dict_items['stock_uom'] conversion_factor = sreq_dict_items['conversion_factor'] description = sreq_dict_items['description'] innerJson_requisition1 ={ "doctype": doctype, "item_code": item_code, "qty": qty, "schedule_date": schedule_date, "warehouse": warehouse, "uom": uom, "stock_uom": stock_uom, "conversion_factor": conversion_factor, "description": description } newJson_transfer1["items"].append(innerJson_requisition1) sreq_doc = frappe.new_doc("Stock Requisition") sreq_doc.update(newJson_transfer1) #print "sreq_doc-items#######################:", sreq_doc.items type_of_doc = type(sreq_doc) frappe.msgprint("doc#######################: "+ str(type_of_doc) ) if workflowStatus == "Approved": sreq_doc.submit() else: sreq_doc.save() ret = sreq_doc.doctype if only_transfer: if ret: return ret for rows in summ_data: if curr_stock_balance == 1: delta_qty = str(rows[12]).strip() else: delta_qty = str(rows[10]).strip() if (delta_qty and float(delta_qty) != 0.0): if rows[3] == "<br>" or rows[3] == "<div><br></div>" or str(rows[3]) == "": empty_desc.append(rows[8]) if rows[6] == "": empty_uom.append(rows[8]) no_requisition = no_requisition + 1 if delta_qty > 0: innerJson_requisition = { "doctype": "Stock Requisition Item", "item_code": rows[8], "qty": delta_qty, "schedule_date": required_date, "warehouse":planning_warehouse, "uom":rows[6], "stock_uom": rows[6], "conversion_factor":rows[17], "description": rows[3] } newJson_requisition["items"].append(innerJson_requisition) del summ_data[:] del required del test_whole_number del delta_qty if no_requisition == 0: frappe.msgprint("All Items are in Stock !! Stock Requisition is not required ") else: if empty_uom: frappe.throw(_("UOM for {0} is empty,Please add UOM in Item Master Doctype.").format(frappe.bold(comma_and(empty_uom)))) if empty_desc: frappe.throw(_("Description for {0} is empty,Please add description in Item Master Doctype.").format(frappe.bold(comma_and(empty_desc)))) #print "only_transfer for purchase::", only_transfer if not only_transfer: doc = frappe.new_doc("Stock Requisition") sreq_items= newJson_requisition["items"] #print "-------------------sreq_items for purchase::", sreq_items sreq_items_map = get_unique_stock_requisition_items(sreq_items) if len(sreq_items_map)!=0: sreq_dict = [] for item_code in sreq_items_map: sreq_dict_items = sreq_items_map[item_code] sreq_dict.append(sreq_dict_items) #print "####################-newJson_transfer::", sreq_dict newJson_requisition["items"] = sreq_dict doc.update(newJson_requisition) #print "#######################-newJson_requisition purchse::", newJson_requisition if workflowStatus == "Approved": doc.submit() else: doc.save() ret = doc.doctype if ret: return ret if ret: return ret
def make_stock_requisition(planning_warehouse, required_date, reference_no, workflowStatus): global required_date_count # if getdate(required_date) == getdate(datetime.now().strftime('%Y-%m-%d')): if required_date == getdate(datetime.now().strftime('%Y-%m-%d')): if required_date_count == False: required_date_count = True frappe.throw( _("Required Date is set to today's date, if you still want to proceed click on 'Stock Requisition' again" )) test_whole_number = check_for_whole_number(bom_for_validation) if test_whole_number and float(qty_to_make) % 1 != 0: frappe.throw("Quantity to Make should be whole number") innerJson_requisition = " " innerJson_transfer = " " ret = "" newJson_transfer = { "company": company, "doctype": "Stock Requisition", "title": "Material Transfer", "workflow_state": workflowStatus, "material_request_type": "Material Transfer", "quantity_to_make": qty_to_make, "requested_by": reference_no, "items": [] } newJson_requisition = { "company": company, "doctype": "Stock Requisition", "title": "Purchase", "material_request_type": "Purchase", "quantity_to_make": qty_to_make, "workflow_state": workflowStatus, "requested_by": reference_no, "items": [] } no_requisition = 0 no_transfer = 0 required = "" delta_qty = "" whse_map = {} empty_desc = [] empty_uom = [] for rows in summ_data: required = str(rows[10]).strip() if required and rows[11] and planning_warehouse != (rows[16]): if whse_map: if whse_map.get(planning_warehouse): if rows[10] > whse_map.get(planning_warehouse): rows[10] = rows[10] - whse_map.get(planning_warehouse) #rows[9] = required rows[11] = rows[11] - whse_map.get(planning_warehouse) else: rows[10] = 0 whse_map.clear() item_code = rows[8] #uom = getUOM(item_code) if rows[10]: if rows[3] == "<br>" or rows[3] == "<div><br></div>" or str( rows[3]) == "": empty_desc.append(rows[7]) if rows[6] == "": empty_uom.append(rows[8]) no_transfer = no_transfer + 1 if rows[10] < rows[11]: req_qty = rows[10] if req_qty > 0: innerJson_transfer = { "doctype": "Stock Requisition Item", "item_code": rows[8], "qty": req_qty, "schedule_date": required_date, "warehouse": planning_warehouse, "uom": rows[6], "stock_uom": rows[6], "conversion_factor": rows[17], "description": rows[3] } newJson_transfer["items"].append(innerJson_transfer) if rows[10] >= rows[11]: balance_qty = rows[11] if balance_qty > 0: innerJson_transfer = { "doctype": "Stock Requisition Item", "item_code": rows[8], "qty": balance_qty, "schedule_date": required_date, "warehouse": planning_warehouse, "uom": rows[6], "stock_uom": rows[6], "conversion_factor": rows[17], "description": rows[3] } newJson_transfer["items"].append(innerJson_transfer) else: if str(rows[12]).strip(): whse_map[(rows[12])] = rows[11] if no_transfer == 0: frappe.msgprint( "Planning Warehouse has all the item !! Stock transfer is not required" ) elif curr_stock_balance == 1: if empty_uom: frappe.throw( _("UOM for {0} is empty,Please add UOM in Item Master Doctype." ).format(frappe.bold(comma_and(empty_uom)))) if empty_desc: frappe.throw( _("Description for {0} is empty,Please add description in Item Master Doctype." ).format(frappe.bold(comma_and(empty_desc)))) doc = frappe.new_doc("Stock Requisition") doc.update(newJson_transfer) print "####################-newJson_transfer::", newJson_transfer if workflowStatus == "Approved": doc.submit() else: doc.save() ret = doc.doctype for rows in summ_data: if curr_stock_balance == 1: delta_qty = str(rows[12]).strip() else: delta_qty = str(rows[10]).strip() print "#########-delta_qty::", delta_qty if (delta_qty and float(delta_qty) != 0.0): if rows[3] == "<br>" or rows[3] == "<div><br></div>" or str( rows[3]) == "": empty_desc.append(rows[8]) if rows[6] == "": empty_uom.append(rows[8]) no_requisition = no_requisition + 1 if delta_qty > 0: innerJson_requisition = { "doctype": "Stock Requisition Item", "item_code": rows[8], "qty": delta_qty, "schedule_date": required_date, "warehouse": planning_warehouse, "uom": rows[6], "conversion_factor": rows[17], "description": rows[3] } newJson_requisition["items"].append(innerJson_requisition) del summ_data[:] del required del test_whole_number del delta_qty if no_requisition == 0: frappe.msgprint( "All Items are in Stock !! Stock Requisition is not required ") else: if empty_uom: frappe.throw( _("UOM for {0} is empty,Please add UOM in Item Master Doctype." ).format(frappe.bold(comma_and(empty_uom)))) if empty_desc: frappe.throw( _("Description for {0} is empty,Please add description in Item Master Doctype." ).format(frappe.bold(comma_and(empty_desc)))) doc = frappe.new_doc("Stock Requisition") doc.update(newJson_requisition) print "#######################-newJson_requisition purchse::", newJson_requisition if workflowStatus == "Approved": doc.submit() else: doc.save() ret = doc.doctype if ret: return ret