Пример #1
0
def get_bom_item_rate(args, bom_doc):
	if bom_doc.rm_cost_as_per == 'Valuation Rate':
		rate = get_valuation_rate(args) * (args.get("conversion_factor") or 1)
	elif bom_doc.rm_cost_as_per == 'Last Purchase Rate':
		rate = ( flt(args.get('last_purchase_rate')) \
			or frappe.db.get_value("Item", args['item_code'], "last_purchase_rate")) \
				* (args.get("conversion_factor") or 1)
	elif bom_doc.rm_cost_as_per == "Price List":
		if not bom_doc.buying_price_list:
			frappe.throw(_("Please select Price List"))
		bom_args = frappe._dict({
			"doctype": "BOM",
			"price_list": bom_doc.buying_price_list,
			"qty": args.get("qty") or 1,
			"uom": args.get("uom") or args.get("stock_uom"),
			"stock_uom": args.get("stock_uom"),
			"transaction_type": "buying",
			"company": bom_doc.company,
			"currency": bom_doc.currency,
			"conversion_rate": 1, # Passed conversion rate as 1 purposefully, as conversion rate is applied at the end of the function
			"conversion_factor": args.get("conversion_factor") or 1,
			"plc_conversion_rate": 1,
			"ignore_party": True
		})
		item_doc = frappe.get_cached_doc("Item", args.get("item_code"))
		out = frappe._dict()
		get_price_list_rate(bom_args, item_doc, out)
		rate = out.price_list_rate

	return rate
Пример #2
0
 def get_stock_and_rate(self):
     from erpnext.stock.dashboard.item_dashboard import get_data
     from erpnext.stock.get_item_details import get_price_list_rate
     stock_data = get_data(self.itemid)
     data = []
     total_stock = 0
     for d in stock_data:
         total_stock += d.actual_qty
         data.append({
             'warehouse': d.warehouse,
             'actual_qty': d.actual_qty,
             'uom': self.stock_uom
         })
     args = frappe._dict({
         "doctype":
         self.doctype,
         "price_list":
         frappe.db.get_single_value("NGSE BOM Setting",
                                    "buying_price_list"),
         "qty":
         1,
         "uom":
         self.uom or "Nos",
         "stock_uom":
         self.stock_uom,
         "transaction_type":
         "buying",
         "company":
         frappe.defaults.get_defaults("Company")["company"],
         "currency":
         frappe.defaults.get_defaults("Company")["currency"],
         "conversion_rate":
         1,  # Passed conversion rate as 1 purposefully, as conversion rate is applied at the end of the function
         "conversion_factor":
         1,
         "plc_conversion_rate":
         1,
         "ignore_party":
         True
     })
     item_doc = frappe.get_doc("Item", self.itemid)
     out = frappe._dict()
     get_price_list_rate(args, item_doc, out)
     rate = out.price_list_rate
     data.append({
         'warehouse': "Total Stock",
         'actual_qty': total_stock,
         'uom': self.stock_uom
     })
     data.append({
         'warehouse': "Rate",
         'actual_qty': rate,
         'uom': frappe.defaults.get_defaults("Company")["currency"]
     })
     return data, total_stock, rate
Пример #3
0
	def get_rm_rate(self, arg):
		"""	Get raw material rate as per selected method, if bom exists takes bom cost """
		rate = 0
		if not self.rm_cost_as_per:
			self.rm_cost_as_per = "Valuation Rate"

		if arg.get('scrap_items'):
			rate = self.get_valuation_rate(arg)
		elif arg:
			#Customer Provided parts will have zero rate
			if not frappe.db.get_value('Item', arg["item_code"], 'is_customer_provided_item'):
				if arg.get('bom_no') and self.set_rate_of_sub_assembly_item_based_on_bom:
					rate = flt(self.get_bom_unitcost(arg['bom_no'])) * (arg.get("conversion_factor") or 1)
				else:
					if self.rm_cost_as_per == 'Valuation Rate':
						rate = self.get_valuation_rate(arg) * (arg.get("conversion_factor") or 1)
					elif self.rm_cost_as_per == 'Last Purchase Rate':
						rate = (arg.get('last_purchase_rate') \
							or frappe.db.get_value("Item", arg['item_code'], "last_purchase_rate")) \
								* (arg.get("conversion_factor") or 1)
					elif self.rm_cost_as_per == "Price List":
						if not self.buying_price_list:
							frappe.throw(_("Please select Price List"))
						args = frappe._dict({
							"doctype": "BOM",
							"price_list": self.buying_price_list,
							"qty": arg.get("qty") or 1,
							"uom": arg.get("uom") or arg.get("stock_uom"),
							"stock_uom": arg.get("stock_uom"),
							"transaction_type": "buying",
							"company": self.company,
							"currency": self.currency,
							"conversion_rate": 1, # Passed conversion rate as 1 purposefully, as conversion rate is applied at the end of the function
							"conversion_factor": arg.get("conversion_factor") or 1,
							"plc_conversion_rate": 1,
							"ignore_party": True
						})
						item_doc = frappe.get_doc("Item", arg.get("item_code"))
						out = frappe._dict()
						get_price_list_rate(args, item_doc, out)
						rate = out.price_list_rate

					if not rate:
						if self.rm_cost_as_per == "Price List":
							frappe.msgprint(_("Price not found for item {0} in price list {1}")
								.format(arg["item_code"], self.buying_price_list), alert=True)
						else:
							frappe.msgprint(_("{0} not found for item {1}")
								.format(self.rm_cost_as_per, arg["item_code"]), alert=True)

		return flt(rate) / (self.conversion_rate or 1)
Пример #4
0
	def get_rm_rate(self, arg):
		"""	Get raw material rate as per selected method, if bom exists takes bom cost """
		rate = 0
		if not self.rm_cost_as_per:
			self.rm_cost_as_per = "Valuation Rate"

		if arg.get('scrap_items'):
			rate = self.get_valuation_rate(arg)
		elif arg:
			if arg.get('bom_no') and self.set_rate_of_sub_assembly_item_based_on_bom:
				rate = self.get_bom_unitcost(arg['bom_no'])
			else:
				if self.rm_cost_as_per == 'Valuation Rate':
					rate = self.get_valuation_rate(arg)
				elif self.rm_cost_as_per == 'Last Purchase Rate':
					rate = arg.get('last_purchase_rate') \
						or frappe.db.get_value("Item", arg['item_code'], "last_purchase_rate")
				elif self.rm_cost_as_per == "Price List":
					if not self.buying_price_list:
						frappe.throw(_("Please select Price List"))
					args = frappe._dict({
						"doctype": "BOM",
						"price_list": self.buying_price_list,
						"qty": arg.get("qty") or 1,
						"uom": arg.get("uom") or arg.get("stock_uom"),
						"stock_uom": arg.get("stock_uom"),
						"transaction_type": "buying",
						"company": self.company,
						"currency": self.currency,
						"conversion_rate": self.conversion_rate or 1,
						"conversion_factor": arg.get("conversion_factor") or 1,
						"plc_conversion_rate": 1,
						"ignore_party": True
					})
					item_doc = frappe.get_doc("Item", arg.get("item_code"))
					out = frappe._dict()
					get_price_list_rate(args, item_doc, out)
					rate = out.price_list_rate

				if not rate:
					if self.rm_cost_as_per == "Price List":
						frappe.msgprint(_("Price not found for item {0} and price list {1}")
							.format(arg["item_code"], self.buying_price_list), alert=True)
					else:
						frappe.msgprint(_("{0} not found for item {1}")
							.format(self.rm_cost_as_per, arg["item_code"]), alert=True)

		return flt(rate)
Пример #5
0
def update_packed_item_price_data(pi_row, item_data, doc):
	"Set price as per price list or from the Item master."
	if pi_row.rate:
		return

	item_doc = frappe.get_cached_doc("Item", pi_row.item_code)
	row_data = pi_row.as_dict().copy()
	row_data.update(
		{
			"company": doc.get("company"),
			"price_list": doc.get("selling_price_list"),
			"currency": doc.get("currency"),
			"conversion_rate": doc.get("conversion_rate"),
		}
	)
	rate = get_price_list_rate(row_data, item_doc).get("price_list_rate")

	pi_row.rate = rate or item_data.get("valuation_rate") or 0.0