def _calculate_taxes_and_totals(self): # validate conversion rate company_currency = get_company_currency(self.company) if not self.currency or self.currency == company_currency: self.currency = company_currency self.conversion_rate = 1.0 else: from erpnext.setup.doctype.currency.currency import validate_conversion_rate validate_conversion_rate(self.currency, self.conversion_rate, self.meta.get_label("conversion_rate"), self.company) self.conversion_rate = flt(self.conversion_rate) self.item_doclist = self.get(self.fname) self.tax_doclist = self.get(self.other_fname) self.calculate_item_values() self.initialize_taxes() if hasattr(self, "determine_exclusive_rate"): self.determine_exclusive_rate() self.calculate_net_total() self.calculate_taxes() self.calculate_totals() self._cleanup()
def validate_conversion_rate(args, meta): from erpnext.setup.doctype.currency.currency import validate_conversion_rate from frappe.model.meta import get_field_precision # 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})))
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 validate_conversion_rate(args, meta): from erpnext.setup.doctype.currency.currency import validate_conversion_rate from frappe.model.meta import get_field_precision # 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})))