示例#1
0
    def test_uom_conversion_factor(self):
        if frappe.db.exists('Item', 'Test Item UOM'):
            frappe.delete_doc('Item', 'Test Item UOM')

        item_doc = make_item(
            "Test Item UOM", {
                "stock_uom":
                "Gram",
                "uom_conversion_graph": [
                    dict(from_qty=1,
                         from_uom='Carat',
                         to_uom='Gram',
                         to_qty=get_uom_conv_factor('Carat', 'Gram')),
                    dict(from_qty=1,
                         from_uom='Kg',
                         to_uom='Gram',
                         to_qty=get_uom_conv_factor('Kg', 'Gram'))
                ]
            })

        carat = filter(lambda d: d.uom == "Carat", item_doc.uoms)
        self.assertEqual(len(carat), 1)
        self.assertEqual(carat[0].conversion_factor, 0.2)

        kg = filter(lambda d: d.uom == "Kg", item_doc.uoms)
        self.assertEqual(len(kg), 1)
        self.assertEqual(kg[0].conversion_factor, 1000)
示例#2
0
def convert_to_ounces(uom, qty):
	conversion_factor = get_uom_conv_factor(uom, 'Ounce')
	if not conversion_factor:
		frappe.throw(_("Please set Conversion Factor for {0} to Ounce").format(uom))

	qty_in_ounce = qty * conversion_factor
	return qty_in_ounce
示例#3
0
def get_conversion_factor(item_code, uom):
	variant_of = frappe.db.get_value("Item", item_code, "variant_of", cache=True)
	filters = {"parent": item_code, "uom": uom}
	if variant_of:
		filters["parent"] = ("in", (item_code, variant_of))
	conversion_factor = frappe.db.get_value("UOM Conversion Detail",
		filters, "conversion_factor")
	if not conversion_factor:
		stock_uom = frappe.db.get_value("Item", item_code, "stock_uom")
		conversion_factor = get_uom_conv_factor(uom, stock_uom)
	return {"conversion_factor": conversion_factor or 1.0}
示例#4
0
def get_conversion_factor(item_code, uom):
	variant_of = frappe.db.get_value("Item", item_code, "variant_of", cache=True)
	filters = {"parent": item_code, "uom": uom}
	if variant_of:
		filters["parent"] = ("in", (item_code, variant_of))
	conversion_factor = frappe.db.get_value("UOM Conversion Detail",
		filters, "conversion_factor")
	if not conversion_factor:
		stock_uom = frappe.db.get_value("Item", item_code, "stock_uom")
		conversion_factor = get_uom_conv_factor(uom, stock_uom)
	return {"conversion_factor": conversion_factor or 1.0}
示例#5
0
	def test_uom_conversion_factor(self):
		if frappe.db.exists('Item', 'Test Item UOM'):
			frappe.delete_doc('Item', 'Test Item UOM')

		item_doc = make_item("Test Item UOM", {
			"stock_uom": "Gram",
			"uoms": [dict(uom='Carat'), dict(uom='Kg')]
		})

		for d in item_doc.uoms:
			value = get_uom_conv_factor(d.uom, item_doc.stock_uom)
			d.conversion_factor = value

		self.assertEqual(item_doc.uoms[0].uom, "Carat")
		self.assertEqual(item_doc.uoms[0].conversion_factor, 0.2)
		self.assertEqual(item_doc.uoms[1].uom, "Kg")
		self.assertEqual(item_doc.uoms[1].conversion_factor, 1000)
示例#6
0
    def test_uom_conversion_factor(self):
        if frappe.db.exists('Item', 'Test Item UOM'):
            frappe.delete_doc('Item', 'Test Item UOM')

        item_doc = make_item("Test Item UOM", {
            "stock_uom": "Gram",
            "uoms": [dict(uom='Carat'), dict(uom='Kg')]
        })

        for d in item_doc.uoms:
            value = get_uom_conv_factor(d.uom, item_doc.stock_uom)
            d.conversion_factor = value

        self.assertEqual(item_doc.uoms[0].uom, "Carat")
        self.assertEqual(item_doc.uoms[0].conversion_factor, 0.2)
        self.assertEqual(item_doc.uoms[1].uom, "Kg")
        self.assertEqual(item_doc.uoms[1].conversion_factor, 1000)
示例#7
0
def get_conversion_factor(item_code, uom):
	variant_of = frappe.db.get_value("Item", item_code, "variant_of", cache=True)
	stock_uom = frappe.db.get_value("Item", item_code, "stock_uom")

	filters = {"parent": item_code, "uom": uom}
	if variant_of:
		filters["parent"] = ("in", (item_code, variant_of))
	conversion_factor = frappe.db.get_value("UOM Conversion Detail",
		filters, "conversion_factor")
	
	if not conversion_factor:
		if uom == "Sheet" and stock_uom == "Nos":
			conversion_factor = 1.0
		elif uom == "Nos" and stock_uom == "Sheet":
			conversion_factor = 1.0
		
		conversion_factor = get_uom_conv_factor(uom, stock_uom)

		# conversion_factor = convert_SI(1,stock_uom,uom)
		# if conversion_factor:
			# return {"conversion_factor": conversion_factor}
		# else:
			
			# filters["uom"] = ("in",get_SI_units().keys())
			# conversion_factor,test_uom = frappe.db.get_value("UOM Conversion Detail", filters, ["conversion_factor","uom"])
			# if conversion_factor:
				# SI_Conversion = convert_SI(conversion_factor,uom,test_uom)
				# if SI_Conversion:
					# return {"conversion_factor": SI_Conversion}
				# else:
					# return {"conversion_factor": None}
			# else:
				# return {"conversion_factor": None}
				

	return {"conversion_factor": conversion_factor or 1.0}
示例#8
0
	def make_material_request(self):
		'''Create Material Requests grouped by Sales Order and Material Request Type'''
		material_request_list = []
		material_request_map = {}

		for item in self.mr_items:
			item_doc = frappe.get_cached_doc('Item', item.item_code)

			material_request_type = item.material_request_type or item_doc.default_material_request_type

			# key for Sales Order:Material Request Type:Customer
			key = '{}:{}:{}'.format(item.sales_order, material_request_type, item_doc.customer or '')
			schedule_date = add_days(nowdate(), cint(item_doc.lead_time_days))

			# make a new MR
			material_request_map[key] = frappe.new_doc("Material Request")
			material_request_doc = material_request_map[key]
			material_request_doc.update({
				"transaction_date" : nowdate(),
				"status": "Draft",
				"company": self.company,
				"requested_by": frappe.session.user,
				"material_request_type": material_request_type,
				"customer": item_doc.customer or ''
			})

			if item_doc.min_order_qty and item.quantity < item_doc.min_order_qty:
				frappe.msgprint(_("Order Quantity is set to <b>{0}</b> as Minimum Order Qty for Item <b>{1}</b> is <b>{2}</b>").format(item_doc.min_order_qty, item_doc.item_code, item_doc.min_order_qty))
				item.quantity = item_doc.min_order_qty

			conversion_factor = get_uom_conv_factor(item_doc.purchase_uom, item_doc.stock_uom)
			if conversion_factor:
				item.quantity = item.quantity * conversion_factor

			# add item
			material_request_doc.append("items", {
				"item_code": item.item_code,
				"qty": item.quantity,
				"schedule_date": schedule_date,
				"warehouse": item.warehouse,
				"sales_order": item.sales_order,
				'production_plan': self.name,
				'material_request_plan_item': item.name,
				'production_plan_item': item.name,
				"project": frappe.db.get_value("Sales Order", item.sales_order, "project") \
					if item.sales_order else None
			})

			material_request_doc.run_method("set_missing_values")
			material_request_doc.flags.ignore_permissions = 1
			material_request_list.append(material_request_doc)
			material_request_doc.save()

		frappe.flags.mute_messages = False

		if material_request_list:
			material_request_list = ["""<a href="#Form/Material Request/{0}">{1}</a>""".format(m.name, m.name) \
				for m in material_request_list]
			msgprint(_("{0} created").format(comma_and(material_request_list)))
			self.db_set("status", "Material Requested")
		else :
			msgprint(_("No material request created"))
 def validate(self):
     base_uom = frappe.get_doc("Senstech Messgroesse", self.measurand).base_uom
     if self.uom != base_uom:
         if get_uom_conv_factor(self.uom, base_uom) == '':
             frappe.throw(_("Unit of measure cannot be converted to measurand's base unit")+" ({from_uom} => {to_uom})".format(from_uom=self.uom, to_uom=base_uom))
示例#10
0
 def test_uom_conv_base_case(self):
     factor = get_uom_conv_factor("m", "m")
     self.assertEqual(factor, 1.0)
示例#11
0
 def test_uom_conv_intermediate(self):
     factor = get_uom_conv_factor("Pound", "Gram")
     self.assertAlmostEqual(factor, 453.592, 3)