Ejemplo n.º 1
0
def validate_conversion_rate(args, meta):
	from erpnext.controllers.accounts_controller import validate_conversion_rate

	if (not args.conversion_rate
		and args.currency==frappe.db.get_value("Company", args.company, "default_currency")):
		args.conversion_rate = 1.0

	# validate currency conversion rate
	validate_conversion_rate(args.currency, args.conversion_rate,
		meta.get_label("conversion_rate"), args.company)

	args.conversion_rate = flt(args.conversion_rate,
		get_field_precision(meta.get_field("conversion_rate"),
			frappe._dict({"fields": args})))

	# validate price list currency conversion rate
	if not args.get("price_list_currency"):
		throw(_("Price List Currency not selected"))
	else:
		validate_conversion_rate(args.price_list_currency, args.plc_conversion_rate,
			meta.get_label("plc_conversion_rate"), args.company)

		args.plc_conversion_rate = flt(args.plc_conversion_rate,
			get_field_precision(meta.get_field("plc_conversion_rate"),
			frappe._dict({"fields": args})))
Ejemplo n.º 2
0
def get_price_list_rate(args, item_doc, out):

	meta = frappe.get_meta(args.parenttype or args.doctype)

	if meta.get_field("currency"):
		validate_price_list(args)
		validate_conversion_rate(args, meta)

		price_list_rate = get_price_list_rate_for(args.price_list, item_doc.name)

		# variant
		if not price_list_rate and item_doc.variant_of:
			price_list_rate = get_price_list_rate_for(args.price_list, item_doc.variant_of)

		# insert in database
		if not price_list_rate:
			if args.price_list and args.rate:
				insert_item_price(args)
			return {}

		out.price_list_rate = flt(price_list_rate) * flt(args.plc_conversion_rate) \
			/ flt(args.conversion_rate)

		if not out.price_list_rate and args.transaction_type=="buying":
			from erpnext.stock.doctype.item.item import get_last_purchase_details
			out.update(get_last_purchase_details(item_doc.name,
				args.name, args.conversion_rate))
def get_price_list_rate(args, item_doc, out):
	meta = frappe.get_meta(args.parenttype or args.doctype)

	if meta.get_field("currency") or args.get('currency'):
		pl_details = get_price_list_currency_and_exchange_rate(args)
		args.update(pl_details)
		validate_price_list(args)
		if meta.get_field("currency") and args.price_list:
			validate_conversion_rate(args, meta)

		price_list_rate = get_price_list_rate_for(args, item_doc.name) or 0

		# variant
		if not price_list_rate and item_doc.variant_of:
			price_list_rate = get_price_list_rate_for(args, item_doc.variant_of)

		# insert in database
		if not price_list_rate:
			if args.price_list and args.rate:
				insert_item_price(args)
			return {}

		out.price_list_rate = flt(price_list_rate) * flt(args.plc_conversion_rate) \
			/ flt(args.conversion_rate)
		out.discount_percentage = 0
		out.margin_type = ""

		if not out.price_list_rate and args.transaction_type=="buying":
			from erpnext.stock.doctype.item.item import get_last_purchase_details
			out.update(get_last_purchase_details(item_doc.name,
				args.name, args.conversion_rate))
Ejemplo n.º 4
0
def validate_conversion_rate(args, meta):
	from erpnext.controllers.accounts_controller import validate_conversion_rate

	company_currency = frappe.get_cached_value('Company',  args.company,  "default_currency")
	if (not args.conversion_rate and args.currency==company_currency):
		args.conversion_rate = 1.0

	if (not args.ignore_conversion_rate and args.conversion_rate == 1 and args.currency!=company_currency):
		args.conversion_rate = get_exchange_rate(args.currency,
			company_currency, args.transaction_date, "for_buying") or 1.0

	# validate currency conversion rate
	validate_conversion_rate(args.currency, args.conversion_rate,
		meta.get_label("conversion_rate"), args.company)

	args.conversion_rate = flt(args.conversion_rate,
		get_field_precision(meta.get_field("conversion_rate"),
			frappe._dict({"fields": args})))

	if args.price_list:
		if (not args.plc_conversion_rate
			and args.price_list_currency==frappe.db.get_value("Price List", args.price_list, "currency", cache=True)):
			args.plc_conversion_rate = 1.0

		# validate price list currency conversion rate
		if not args.get("price_list_currency"):
			throw(_("Price List Currency not selected"))
		else:
			validate_conversion_rate(args.price_list_currency, args.plc_conversion_rate,
				meta.get_label("plc_conversion_rate"), args.company)

			if meta.get_field("plc_conversion_rate"):
				args.plc_conversion_rate = flt(args.plc_conversion_rate,
					get_field_precision(meta.get_field("plc_conversion_rate"),
					frappe._dict({"fields": args})))
Ejemplo n.º 5
0
	def validate_conversion_rate(self):
		# validate conversion rate
		company_currency = erpnext.get_company_currency(self.doc.company)
		if not self.doc.currency or self.doc.currency == company_currency:
			self.doc.currency = company_currency
			self.doc.conversion_rate = 1.0
		else:
			validate_conversion_rate(self.doc.currency, self.doc.conversion_rate,
				self.doc.meta.get_label("conversion_rate"), self.doc.company)

		self.doc.conversion_rate = flt(self.doc.conversion_rate)
Ejemplo n.º 6
0
	def validate_conversion_rate(self):
		# validate conversion rate
		company_currency = erpnext.get_company_currency(self.doc.company)
		if not self.doc.currency or self.doc.currency == company_currency:
			self.doc.currency = company_currency
			self.doc.conversion_rate = 1.0
		else:
			validate_conversion_rate(self.doc.currency, self.doc.conversion_rate,
				self.doc.meta.get_label("conversion_rate"), self.doc.company)

		self.doc.conversion_rate = flt(self.doc.conversion_rate)
Ejemplo n.º 7
0
def get_price_list_rate(args, item_doc, out):
    meta = frappe.get_meta(args.parenttype or args.doctype)

    if meta.get_field("currency") or args.get('currency'):
        pl_details = get_price_list_currency_and_exchange_rate(args)
        args.update(pl_details)
        if meta.get_field("currency"):
            validate_conversion_rate(args, meta)

        price_list_rate = get_price_list_rate_for(args, item_doc.name) or 0

        # variant
        if not price_list_rate and item_doc.variant_of:
            price_list_rate = get_price_list_rate_for(args,
                                                      item_doc.variant_of)

        # insert in database
        if not price_list_rate:
            if args.price_list and args.rate:
                insert_item_price(args)
            return {}

        if args.doctype != "Material Request":

            last_cust_price = 0
            last_cust_price = frappe.db.get_value(
                "Sales Order Item", {
                    "item_code": args.item_code,
                    "customer_price": args.customer
                }, "rate")
            xsub_unit = frappe.db.get_value("Item",
                                            {"item_code": args.item_code},
                                            "sub_unit")

            out.price_list_rate = last_cust_price
            out.sub_rate = last_cust_price
            out.qty = out.qty * xsub_unit

        #out.price_list_rate = flt(price_list_rate) * flt(args.plc_conversion_rate) \
        #	/ flt(args.conversion_rate)

        if not out.price_list_rate and args.transaction_type == "buying":
            from erpnext.stock.doctype.item.item import get_last_purchase_details
            out.update(
                get_last_purchase_details(item_doc.name, args.name,
                                          args.conversion_rate))
Ejemplo n.º 8
0
def get_price_list_rate(args, item_doc, out=None):
	if out is None:
		out = frappe._dict()

	meta = frappe.get_meta(args.parenttype or args.doctype)

	if meta.get_field("currency") or args.get('currency'):
		if not args.get("price_list_currency") or not args.get("plc_conversion_rate"):
			# if currency and plc_conversion_rate exist then
			# `get_price_list_currency_and_exchange_rate` has already been called
			pl_details = get_price_list_currency_and_exchange_rate(args)
			args.update(pl_details)

		if meta.get_field("currency"):
			validate_conversion_rate(args, meta)

		price_list_rate = get_price_list_rate_for(args, item_doc.name)

		# variant
		if price_list_rate is None and item_doc.variant_of:
			price_list_rate = get_price_list_rate_for(args, item_doc.variant_of)

		# insert in database
		if price_list_rate is None:
			if args.price_list and args.rate:
				insert_item_price(args)
			return out

		out.price_list_rate = flt(price_list_rate) * flt(args.plc_conversion_rate) \
			/ flt(args.conversion_rate)

		if not out.price_list_rate and args.transaction_type=="buying":
			from erpnext.stock.doctype.item.item import get_last_purchase_details
			out.update(get_last_purchase_details(item_doc.name,
				args.name, args.conversion_rate))

	return out