[selling] [calculations] client side calculations, cleanup, patch fixes

This commit is contained in:
Anand Doshi
2013-05-21 19:35:06 +05:30
parent b5aa8da0dd
commit f309613a7d
23 changed files with 1174 additions and 1318 deletions

View File

@@ -84,20 +84,8 @@ erpnext.buying.BuyingController = wn.ui.form.Controller.extend({
item_code: function(doc, cdt, cdn) {
var me = this;
var item = wn.model.get_doc(cdt, cdn);
// validate company
if(item.item_code) {
var fetch = true;
$.each(["company", "supplier"], function(i, fieldname) {
if(!me.frm.doc[fieldname]) {
fetch = false;
msgprint(wn._("Please specify") + ": " +
wn.meta.get_label(me.frm.doc.doctype, fieldname, me.frm.doc.name) +
". " + wn._("It is needed to fetch Item Details."));
}
});
if(!fetch) {
if(!this.validate_company_and_party()) {
item.item_code = null;
refresh_field("item_code", item.name, item.parentfield);
} else {
@@ -128,6 +116,19 @@ erpnext.buying.BuyingController = wn.ui.form.Controller.extend({
}
},
validate_company_and_party: function() {
var valid = true;
$.each(["company", "supplier"], function(i, fieldname) {
if(!me.frm.doc[fieldname]) {
valid = false;
msgprint(wn._("Please specify") + ": " +
wn.meta.get_label(me.frm.doc.doctype, fieldname, me.frm.doc.name) +
". " + wn._("It is needed to fetch Item Details."));
}
});
return valid;
},
update_item_details: function(doc, dt, dn, callback) {
if(!this.frm.doc.__islocal) return;

View File

@@ -59,23 +59,12 @@ def get_item_details(args):
out.schedule_date = out.lead_time_date = add_days(args.transaction_date,
item.lead_time_days)
# set zero
out.purchase_ref_rate = out.discount_rate = out.purchase_rate = \
out.import_ref_rate = out.import_rate = 0.0
meta = webnotes.get_doctype(args.doctype)
if args.doctype in ["Purchase Order", "Purchase Invoice", "Purchase Receipt",
"Supplier Quotation"]:
# try fetching from price list
if args.price_list_name and args.price_list_currency:
rates_as_per_price_list = get_rates_as_per_price_list(args, item_bean.doclist)
if rates_as_per_price_list:
out.update(rates_as_per_price_list)
# if not found, fetch from last purchase transaction
if not out.purchase_rate:
last_purchase = get_last_purchase_details(item.name, args.docname, args.conversion_rate)
if last_purchase:
out.update(last_purchase)
if meta.get_field("currency"):
out.purchase_ref_rate = out.discount_rate = out.purchase_rate = \
out.import_ref_rate = out.import_rate = 0.0
out.update(_get_price_list_rate(args, item_bean, meta))
return out
@@ -100,34 +89,38 @@ def _get_basic_details(args, item_bean):
return out
def _get_price_list_rate(args, item_bean, meta=None):
from utilities.transaction_base import validate_currency
item = item_bean.doc
out = webnotes._dict()
# try fetching from price list
if args.price_list_name and args.price_list_currency:
price_list_rate = item_bean.doclist.get({
"parentfield": "ref_rate_details",
"price_list_name": args.price_list_name,
"ref_currency": args.price_list_currency,
"buying": 1})
if price_list_rate:
out.purchase_ref_rate = flt(price_list_rate[0].ref_rate) * flt(args.plc_conversion_rate)
# if not found, fetch from last purchase transaction
if not out.purchase_ref_rate:
last_purchase = get_last_purchase_details(item.name, args.docname, args.conversion_rate)
if last_purchase:
out.update(last_purchase)
if out.purchase_ref_rate or out.purchase_rate or out.rate:
validate_currency(args, item, meta)
return out
def _get_supplier_part_no(args, item_bean):
item_supplier = item_bean.doclist.get({"parentfield": "item_supplier_details",
"supplier": args.supplier})
return item_supplier and item_supplier[0].supplier_part_no or None
def get_rates_as_per_price_list(args, item_doclist=None):
if not item_doclist:
item_doclist = webnotes.bean("Item", args.item_code).doclist
result = item_doclist.get({"parentfield": "ref_rate_details",
"price_list_name": args.price_list_name, "ref_currency": args.price_list_currency,
"buying": 1})
if result:
purchase_ref_rate = flt(result[0].ref_rate) * flt(args.plc_conversion_rate)
conversion_rate = flt(args.conversion_rate) or 1.0
return webnotes._dict({
"purchase_ref_rate": purchase_ref_rate,
"purchase_rate": purchase_ref_rate,
"rate": purchase_ref_rate,
"discount_rate": 0,
"import_ref_rate": purchase_ref_rate / conversion_rate,
"import_rate": purchase_ref_rate / conversion_rate
})
else:
return webnotes._dict()
def _validate_item_details(args, item):
from utilities.transaction_base import validate_item_fetch
validate_item_fetch(args, item)