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""" 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
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))
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))
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))
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
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))
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))
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
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
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
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
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))
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))
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_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
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
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
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