Пример #1
0
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
Пример #2
0
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