allow changing the uom conversion factor in purchase cycle

This commit is contained in:
Anand Doshi 2012-12-05 16:50:42 +05:30
parent 69e9620609
commit 0a32ed3219
5 changed files with 49 additions and 57 deletions

View File

@ -202,23 +202,37 @@ cur_frm.cscript.update_stock_qty = function(doc,cdt,cdn){
}
//==================== UOM ======================================================================
cur_frm.cscript.uom = function(doc, cdt, cdn) {
cur_frm.cscript.uom = function(doc, cdt, cdn, args) {
if(!args) args = {};
// args passed can contain conversion_factor
var d = locals[cdt][cdn];
if (d.item_code && d.uom) {
call_back = function(doc, cdt, cdn){
cur_frm.cscript.calc_amount(doc, 2);
}
str_arg = {'item_code':d.item_code, 'uom':d.uom, 'stock_qty':flt(d.stock_qty), 'qty': flt(d.qty), 'conversion_rate':doc.conversion_rate, 'doc_name': doc.name}
// Updates Conversion Factor, Qty and Purchase Rate
get_server_fields('get_uom_details',JSON.stringify(str_arg), fname, doc,cdt,cdn,1, call_back);
// don't make mistake of calling update_stock_qty() the get_uom_details returns stock_qty as per conversion factor properly
$.extend(args, {
item_code: d.item_code,
uom: d.uom,
stock_qty: flt(d.stock_qty),
});
if(d.item_code && d.uom) {
wn.call({
method: "buying.doctype.purchase_common.purchase_common.get_uom_details",
args: { args: args },
callback: function(r) {
d = locals[cdt][cdn];
$.extend(d, r.message);
refresh_field(cur_frm.cscript.fname);
cur_frm.cscript.calc_amount(doc, 2);
}
});
}
}
//==================== Conversion factor =========================================================
cur_frm.cscript.conversion_factor = function(doc, cdt, cdn) {
cur_frm.cscript.uom(doc, cdt, cdn);
var item = locals[cdt][cdn];
cur_frm.cscript.uom(doc, cdt, cdn, { conversion_factor: item.conversion_factor });
}
//==================== stock qty ======================================================================

View File

@ -182,39 +182,6 @@ class DocType(TransactionBase):
ret = { 'projected_qty' : bin and flt(bin[0]['projected_qty']) or 0 }
return ret
def get_uom_details(self, arg = ''):
"""fetches details on change of UOM"""
import json
arg, ret = json.loads(arg), {}
uom = webnotes.conn.sql("""\
select conversion_factor
from `tabUOM Conversion Detail`
where parent = %s and uom = %s""", (arg['item_code'],arg['uom']), as_dict = 1)
if not uom: return ret
last_purchase_details, last_purchase_date = self.get_last_purchase_details(arg['item_code'], arg['doc_name'])
conversion_factor = flt(uom[0]['conversion_factor'])
conversion_rate = flt(arg['conversion_rate'])
purchase_ref_rate = last_purchase_details and \
(last_purchase_details['purchase_ref_rate'] * conversion_factor) or 0
purchase_rate = last_purchase_details and \
(last_purchase_details['purchase_rate'] * conversion_factor) or 0
ret = {
'conversion_factor': conversion_factor,
'qty': flt(arg['stock_qty']) / conversion_factor,
'purchase_ref_rate': purchase_ref_rate,
'purchase_rate': purchase_rate,
'import_ref_rate': purchase_ref_rate / conversion_rate,
'import_rate': purchase_rate / conversion_rate,
}
return ret
# --- Last Purchase Rate related methods ---
def update_last_purchase_rate(self, obj, is_submit):
@ -683,3 +650,27 @@ class DocType(TransactionBase):
if d.prevdoc_doctype and d.prevdoc_docname:
dt = sql("select transaction_date from `tab%s` where name = '%s'" % (d.prevdoc_doctype, d.prevdoc_docname))
d.prevdoc_date = dt and dt[0][0].strftime('%Y-%m-%d') or ''
@webnotes.whitelist()
def get_uom_details(args=None):
"""fetches details on change of UOM"""
if not args:
return {}
if isinstance(args, basestring):
import json
args = json.loads(args)
uom = webnotes.conn.sql("""select conversion_factor
from `tabUOM Conversion Detail` where parent = %s and uom = %s""",
(args['item_code'], args['uom']), as_dict=1)
if not uom: return {}
conversion_factor = args.get("conversion_factor") or \
flt(uom[0]["conversion_factor"])
return {
"conversion_factor": conversion_factor,
"qty": flt(args["stock_qty"]) / conversion_factor,
}

View File

@ -69,10 +69,6 @@ class DocType(TransactionBase):
# Get UOM Details
def get_uom_details(self, arg = ''):
return get_obj('Purchase Common').get_uom_details(arg)
# get available qty at warehouse
def get_bin_details(self, arg = ''):
return get_obj(dt='Purchase Common').get_bin_details(arg)

View File

@ -121,11 +121,6 @@ class DocType:
doc.fields[r] = ret[r]
# Get UOM Details
# ---------------------------------
def get_uom_details(self, arg = ''):
return get_obj(dt='Purchase Common').get_uom_details(arg)
# GET TERMS & CONDITIONS
#-----------------------------
def get_tc_details(self):
@ -219,4 +214,4 @@ class DocType:
self.update_bin(is_submit = 0, is_stopped = (cstr(self.doc.status) == 'Stopped') and 1 or 0)
# Step 5:=> Set Status
webnotes.conn.set(self.doc,'status','Cancelled')
webnotes.conn.set(self.doc,'status','Cancelled')

View File

@ -64,10 +64,6 @@ class DocType(TransactionBase):
doc.fields[r] = ret[r]
# Get UOM Details
def get_uom_details(self, arg = ''):
return get_obj(dt='Purchase Common').get_uom_details(arg)
# GET TERMS & CONDITIONS
# =====================================================================================
def get_tc_details(self):