示例#1
0
	def get_last_purchase_rate(self):
		"""get last purchase rates for all items"""

		conversion_rate = flt(self.get('conversion_rate')) or 1.0

		for d in self.get("items"):
			if d.item_code:
				last_purchase_details = get_last_purchase_details(d.item_code, self.name)

				if last_purchase_details:
					d.base_price_list_rate = (last_purchase_details['base_price_list_rate'] *
						(flt(d.conversion_factor) or 1.0))
					d.discount_percentage = last_purchase_details['discount_percentage']
					d.base_rate = last_purchase_details['base_rate'] * (flt(d.conversion_factor) or 1.0)
					d.price_list_rate = d.base_price_list_rate / conversion_rate
					d.rate = d.base_rate / conversion_rate
				else:
					# if no last purchase found, reset all values to 0
					for field in ("base_price_list_rate", "base_rate",
						"price_list_rate", "rate", "discount_percentage"):
							d.set(field, 0)

					item_last_purchase_rate = frappe.db.get_value("Item", d.item_code, "last_purchase_rate")
					if item_last_purchase_rate:
						d.base_price_list_rate = d.base_rate = d.price_list_rate \
							= d.rate = item_last_purchase_rate
示例#2
0
    def get_last_purchase_rate(self):
        """get last purchase rates for all items"""

        conversion_rate = flt(self.get('conversion_rate')) or 1.0

        for d in self.get("items"):
            if d.item_code:
                last_purchase_details = get_last_purchase_details(
                    d.item_code, self.name)

                if last_purchase_details:
                    d.base_price_list_rate = (
                        last_purchase_details['base_price_list_rate'] *
                        (flt(d.conversion_factor) or 1.0))
                    d.discount_percentage = last_purchase_details[
                        'discount_percentage']
                    d.base_rate = last_purchase_details['base_rate'] * (flt(
                        d.conversion_factor) or 1.0)
                    d.price_list_rate = d.base_price_list_rate / conversion_rate
                    d.rate = d.base_rate / conversion_rate
                else:
                    msgprint(_("Last purchase rate not found"))

                    item_last_purchase_rate = frappe.db.get_value(
                        "Item", d.item_code, "last_purchase_rate")
                    if item_last_purchase_rate:
                        d.base_price_list_rate = d.base_rate = d.price_list_rate \
                         = d.rate = item_last_purchase_rate
示例#3
0
    def get_last_purchase_rate(self):
        """get last purchase rates for all items"""

        conversion_rate = flt(self.get("conversion_rate")) or 1.0
        for d in self.get("items"):
            if d.item_code:
                last_purchase_details = get_last_purchase_details(
                    d.item_code, self.name)
                if last_purchase_details:
                    d.base_price_list_rate = last_purchase_details[
                        "base_price_list_rate"] * (flt(d.conversion_factor)
                                                   or 1.0)
                    d.discount_percentage = last_purchase_details[
                        "discount_percentage"]
                    d.base_rate = last_purchase_details["base_rate"] * (flt(
                        d.conversion_factor) or 1.0)
                    d.price_list_rate = d.base_price_list_rate / conversion_rate
                    d.rate = d.base_rate / conversion_rate
                    d.last_purchase_rate = d.rate
                else:

                    item_last_purchase_rate = frappe.get_cached_value(
                        "Item", d.item_code, "last_purchase_rate")
                    if item_last_purchase_rate:
                        d.base_price_list_rate = (
                            d.base_rate
                        ) = d.price_list_rate = d.rate = d.last_purchase_rate = item_last_purchase_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))
示例#5
0
def update_last_purchase_rate(doc, is_submit):
    """updates last_purchase_rate in item table for each item"""

    import frappe.utils
    this_purchase_date = frappe.utils.getdate(
        doc.get('posting_date') or doc.get('transaction_date'))

    for d in doc.get("items"):
        # get last purchase details
        last_purchase_details = get_last_purchase_details(
            d.item_code, doc.name)

        # compare last purchase date and this transaction's date
        last_purchase_rate = None
        if last_purchase_details and \
          (last_purchase_details.purchase_date > this_purchase_date):
            last_purchase_rate = last_purchase_details['base_rate']
        elif is_submit == 1:
            # even if this transaction is the latest one, it should be submitted
            # for it to be considered for latest purchase rate
            if flt(d.conversion_factor):
                last_purchase_rate = flt(d.base_rate) / flt(
                    d.conversion_factor)
            else:
                frappe.throw(
                    _("UOM Conversion factor is required in row {0}").format(
                        d.idx))

        # update last purchsae rate
        if last_purchase_rate:
            frappe.db.sql(
                """update `tabItem` set last_purchase_rate = %s where name = %s""",
                (flt(last_purchase_rate), d.item_code))
示例#6
0
    def get_last_purchase_rate(self, obj):
        """get last purchase rates for all items"""
        doc_name = obj.name
        conversion_rate = flt(obj.get('conversion_rate')) or 1.0

        for d in obj.get(obj.fname):
            if d.item_code:
                last_purchase_details = get_last_purchase_details(
                    d.item_code, doc_name)

                if last_purchase_details:
                    d.base_price_list_rate = last_purchase_details[
                        'base_price_list_rate'] * (flt(d.conversion_factor)
                                                   or 1.0)
                    d.discount_percentage = last_purchase_details[
                        'discount_percentage']
                    d.base_rate = last_purchase_details['base_rate'] * (flt(
                        d.conversion_factor) or 1.0)
                    d.price_list_rate = d.base_price_list_rate / conversion_rate
                    d.rate = d.base_rate / conversion_rate
                else:
                    # if no last purchase found, reset all values to 0
                    d.base_price_list_rate = d.base_rate = d.price_list_rate = d.rate = d.discount_percentage = 0

                    item_last_purchase_rate = frappe.db.get_value(
                        "Item", d.item_code, "last_purchase_rate")
                    if item_last_purchase_rate:
                        d.base_price_list_rate = d.base_rate = d.price_list_rate \
                         = d.rate = item_last_purchase_rate
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))
示例#8
0
    def get_last_purchase_rate(self):
        """get last purchase rates for all items"""

        conversion_rate = flt(self.get('conversion_rate')) or 1.0

        for d in self.get("items"):
            if d.item_code:
                last_purchase_details = get_last_purchase_details(
                    d.item_code, self.name)

                if last_purchase_details:
                    d.base_price_list_rate = (
                        last_purchase_details['base_price_list_rate'] *
                        (flt(d.conversion_factor) or 1.0))
                    d.discount_percentage = last_purchase_details[
                        'discount_percentage']
                    d.base_rate = last_purchase_details['base_rate'] * (flt(
                        d.conversion_factor) or 1.0)
                    d.price_list_rate = d.base_price_list_rate / conversion_rate
                    d.rate = d.base_rate / conversion_rate
                else:
                    # if no last purchase found, reset all values to 0
                    for field in ("base_price_list_rate", "base_rate",
                                  "price_list_rate", "rate",
                                  "discount_percentage"):
                        d.set(field, 0)

                    item_last_purchase_rate = frappe.db.get_value(
                        "Item", d.item_code, "last_purchase_rate")
                    if item_last_purchase_rate:
                        d.base_price_list_rate = d.base_rate = d.price_list_rate \
                         = d.rate = item_last_purchase_rate
    def get_last_purchase_rate(self):
        """get last purchase rates for all items"""
        if cint(
                frappe.db.get_single_value(
                    "Buying Settings", "disable_fetch_last_purchase_rate")):
            return

        conversion_rate = flt(self.get('conversion_rate')) or 1.0
        for d in self.get("items"):
            if d.item_code:
                last_purchase_details = get_last_purchase_details(
                    d.item_code, self.name)
                if last_purchase_details:
                    d.base_price_list_rate = (
                        last_purchase_details['base_price_list_rate'] *
                        (flt(d.conversion_factor) or 1.0))
                    d.discount_percentage = last_purchase_details[
                        'discount_percentage']
                    d.base_rate = last_purchase_details['base_rate'] * (flt(
                        d.conversion_factor) or 1.0)
                    d.price_list_rate = d.base_price_list_rate / conversion_rate
                    d.rate = d.base_rate / conversion_rate
                    d.last_purchase_rate = d.rate
                else:

                    item_last_purchase_rate = frappe.db.get_value(
                        "Item", d.item_code, "last_purchase_rate")
                    if item_last_purchase_rate:
                        d.base_price_list_rate = d.base_rate = d.price_list_rate \
                         = d.rate = d.last_purchase_rate = item_last_purchase_rate
示例#10
0
def update_last_purchase_rate(doc, is_submit):
	"""updates last_purchase_rate in item table for each item"""
	import frappe.utils
	this_purchase_date = frappe.utils.getdate(doc.get('posting_date') or doc.get('transaction_date'))

	for d in doc.get("items"):
		# get last purchase details
		last_purchase_details = get_last_purchase_details(d.item_code, doc.name)

		# compare last purchase date and this transaction's date
		last_purchase_rate = None
		if last_purchase_details and \
				(doc.get('docstatus') == 2 or last_purchase_details.purchase_date > this_purchase_date):
			last_purchase_rate = last_purchase_details['base_net_rate']
		elif is_submit == 1:
			# even if this transaction is the latest one, it should be submitted
			# for it to be considered for latest purchase rate
			if flt(d.conversion_factor):
				last_purchase_rate = flt(d.base_net_rate) / flt(d.conversion_factor)
			# Check if item code is present
			# Conversion factor should not be mandatory for non itemized items
			elif d.item_code:
				frappe.throw(_("UOM Conversion factor is required in row {0}").format(d.idx))

		# update last purchsae rate
		frappe.db.set_value('Item', d.item_code, 'last_purchase_rate', flt(last_purchase_rate))
示例#11
0
	def update_last_purchase_rate(self, obj, is_submit):
		"""updates last_purchase_rate in item table for each item"""

		import frappe.utils
		this_purchase_date = frappe.utils.getdate(obj.get('posting_date') or obj.get('transaction_date'))

		for d in obj.get("items"):
			# get last purchase details
			last_purchase_details = get_last_purchase_details(d.item_code, obj.name)

			# compare last purchase date and this transaction's date
			last_purchase_rate = None
			if last_purchase_details and \
					(last_purchase_details.purchase_date > this_purchase_date):
				last_purchase_rate = last_purchase_details['base_rate']
			elif is_submit == 1:
				# even if this transaction is the latest one, it should be submitted
				# for it to be considered for latest purchase rate
				if flt(d.conversion_factor):
					last_purchase_rate = flt(d.base_rate) / flt(d.conversion_factor)
				else:
					frappe.throw(_("UOM Conversion factor is required in row {0}").format(d.idx))

			# update last purchsae rate
			if last_purchase_rate:
				frappe.db.sql("""update `tabItem` set last_purchase_rate = %s where name = %s""",
					(flt(last_purchase_rate), d.item_code))
示例#12
0
def get_last_purchase_rate(item_code):
    if item_code:
        last_purchase_details = get_last_purchase_details(item_code)
        if last_purchase_details:
            return last_purchase_details['base_rate'] * 1.0

        else:

            item_last_purchase_rate = frappe.get_cached_value(
                "Item", item_code, "last_purchase_rate")
            if item_last_purchase_rate:
                return item_last_purchase_rate
示例#13
0
def item_last_purchase_rate(name, conversion_rate, item_code, conversion_factor= 1.0):
	"""get last purchase rate for an item"""

	conversion_rate = flt(conversion_rate) or 1.0

	last_purchase_details =  get_last_purchase_details(item_code, name)
	if last_purchase_details:
		last_purchase_rate = (last_purchase_details['base_rate'] * (flt(conversion_factor) or 1.0)) / conversion_rate
		return last_purchase_rate
	else:
		item_last_purchase_rate = frappe.get_cached_value("Item", item_code, "last_purchase_rate")
		if item_last_purchase_rate:
			return item_last_purchase_rate
示例#14
0
def item_last_purchase_rate(name, conversion_rate, item_code, conversion_factor= 1.0):
	"""get last purchase rate for an item"""

	conversion_rate = flt(conversion_rate) or 1.0

	last_purchase_details =  get_last_purchase_details(item_code, name)
	if last_purchase_details:
		last_purchase_rate = (last_purchase_details['base_rate'] * (flt(conversion_factor) or 1.0)) / conversion_rate
		return last_purchase_rate
	else:
		item_last_purchase_rate = frappe.db.get_value("Item", item_code, "last_purchase_rate")
		if item_last_purchase_rate:
			return item_last_purchase_rate
示例#15
0
def item_last_purchase_rate(name, conversion_rate, item_code, conversion_factor= 1.0):
	"""get last purchase rate for an item"""
	if cint(frappe.db.get_single_value("Buying Settings", "disable_fetch_last_purchase_rate")): return

	conversion_rate = flt(conversion_rate) or 1.0

	last_purchase_details =  get_last_purchase_details(item_code, name)
	if last_purchase_details:
		last_purchase_rate = (last_purchase_details['base_rate'] * (flt(conversion_factor) or 1.0)) / conversion_rate
		return last_purchase_rate
	else:
		item_last_purchase_rate = frappe.db.get_value("Item", item_code, "last_purchase_rate")
		if item_last_purchase_rate:
			return item_last_purchase_rate
示例#16
0
def item_last_purchase_rate(name, conversion_rate, item_code, conversion_factor= 1.0):
	"""get last purchase rate for an item"""
	if cint(frappe.db.get_single_value("Buying Settings", "disable_fetch_last_purchase_rate")): return

	conversion_rate = flt(conversion_rate) or 1.0

	last_purchase_details =  get_last_purchase_details(item_code, name)
	if last_purchase_details:
		last_purchase_rate = (last_purchase_details['base_rate'] * (flt(conversion_factor) or 1.0)) / conversion_rate
		return last_purchase_rate
	else:
		item_last_purchase_rate = frappe.db.get_value("Item", item_code, "last_purchase_rate")
		if item_last_purchase_rate:
			return item_last_purchase_rate
示例#17
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))
示例#18
0
def get_price_list_rate(args, item_doc, out):
	meta = frappe.get_meta(args.doctype)

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

		price_list_rate = frappe.db.get_value("Item Price",
			{"price_list": args.price_list, "item_code": args.item_code}, "price_list_rate")

		if not price_list_rate: 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.docname, args.conversion_rate))
示例#19
0
	def get_last_purchase_rate(self):
		"""get last purchase rates for all items"""

		conversion_rate = flt(self.get('conversion_rate')) or 1.0
		for d in self.get("items"):
			if d.item_code:
				last_purchase_details = get_last_purchase_details(d.item_code, self.name)
				if last_purchase_details:
					d.base_price_list_rate = (last_purchase_details['base_price_list_rate'] *
						(flt(d.conversion_factor) or 1.0))
					d.discount_percentage = last_purchase_details['discount_percentage']
					d.base_rate = last_purchase_details['base_rate'] * (flt(d.conversion_factor) or 1.0)
					d.price_list_rate = d.base_price_list_rate / conversion_rate
					d.rate = d.base_rate / conversion_rate
					d.last_purchase_rate = d.rate
				else:

					item_last_purchase_rate = frappe.get_cached_value("Item", d.item_code, "last_purchase_rate")
					if item_last_purchase_rate:
						d.base_price_list_rate = d.base_rate = d.price_list_rate \
							= d.rate = d.last_purchase_rate = item_last_purchase_rate
示例#20
0
	def get_last_purchase_rate(self):
		"""get last purchase rates for all items"""
		if cint(frappe.db.get_single_value("Buying Settings", "disable_fetch_last_purchase_rate")): return

		conversion_rate = flt(self.get('conversion_rate')) or 1.0
		for d in self.get("items"):
			if d.item_code:
				last_purchase_details = get_last_purchase_details(d.item_code, self.name)
				if last_purchase_details:
					d.base_price_list_rate = (last_purchase_details['base_price_list_rate'] *
						(flt(d.conversion_factor) or 1.0))
					d.discount_percentage = last_purchase_details['discount_percentage']
					d.base_rate = last_purchase_details['base_rate'] * (flt(d.conversion_factor) or 1.0)
					d.price_list_rate = d.base_price_list_rate / conversion_rate
					d.rate = d.base_rate / conversion_rate
					d.last_purchase_rate = d.rate
				else:

					item_last_purchase_rate = frappe.db.get_value("Item", d.item_code, "last_purchase_rate")
					if item_last_purchase_rate:
						d.base_price_list_rate = d.base_rate = d.price_list_rate \
							= d.rate = d.last_purchase_rate = item_last_purchase_rate
示例#21
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
示例#22
0
def get_item_cost(item_code, cost_method, qty):
	item_price = 0
	
	if cost_method == "Item Valuation Rate":
		# Get the item valuation method
		item_price == frappe.db.get_value("Bin",{"item_code": "item_code"}, "valuation_rate")

	elif cost_method == "Last Purchase Rate":
		last_purchase_details = get_last_purchase_details(item_code)
		item_price = last_purchase_details.base_rate
		
	elif cost_method == "Default Supplier":
	
		item = frappe.get_doc("Item", item_code)
		args = {
			"doctype": item.doctype,
			"name": item.name,
			"item_code": item.item_code, 
			"transaction_type": "buying",
			"supplier": item.default_supplier,
			"qty": qty
		}
		args = frappe._dict(args) 
		
		#frappe.msgprint(str(args))
		pr_price = 0		
		pr_result = get_pricing_rule_for_item(args) 
		if pr_result.pricing_rule:
			pricing_rule = frappe.get_doc("Pricing Rule", pr_result.pricing_rule)
			pr_price = pricing_rule.price 
		else:
			#Need to find the item price
			price_list = frappe.db.get_value("Supplier", item.default_supplier, "default_price_list")
			item_price = frappe.db.get_value("Item Price", {"price_list": price_list,"item_code": item.item_code}, "price_list_rate") or 0
	
		
	return item_price
示例#23
0
	def get_last_purchase_rate(self, obj):
		"""get last purchase rates for all items"""
		doc_name = obj.name
		conversion_rate = flt(obj.get('conversion_rate')) or 1.0

		for d in obj.get(obj.fname):
			if d.item_code:
				last_purchase_details = get_last_purchase_details(d.item_code, doc_name)

				if last_purchase_details:
					d.base_price_list_rate = last_purchase_details['base_price_list_rate'] * (flt(d.conversion_factor) or 1.0)
					d.discount_percentage = last_purchase_details['discount_percentage']
					d.base_rate = last_purchase_details['base_rate'] * (flt(d.conversion_factor) or 1.0)
					d.price_list_rate = d.base_price_list_rate / conversion_rate
					d.rate = d.base_rate / conversion_rate
				else:
					# if no last purchase found, reset all values to 0
					d.base_price_list_rate = d.base_rate = d.price_list_rate = d.rate = d.discount_percentage = 0

					item_last_purchase_rate = frappe.db.get_value("Item",
						d.item_code, "last_purchase_rate")
					if item_last_purchase_rate:
						d.base_price_list_rate = d.base_rate = d.price_list_rate \
							= d.rate = item_last_purchase_rate