mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-24 23:49:19 +00:00
allow changing the uom conversion factor in purchase cycle
This commit is contained in:
@@ -202,23 +202,37 @@ cur_frm.cscript.update_stock_qty = function(doc,cdt,cdn){
|
|||||||
}
|
}
|
||||||
|
|
||||||
//==================== UOM ======================================================================
|
//==================== 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];
|
var d = locals[cdt][cdn];
|
||||||
if (d.item_code && d.uom) {
|
$.extend(args, {
|
||||||
call_back = function(doc, cdt, cdn){
|
item_code: d.item_code,
|
||||||
cur_frm.cscript.calc_amount(doc, 2);
|
uom: d.uom,
|
||||||
}
|
stock_qty: flt(d.stock_qty),
|
||||||
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);
|
if(d.item_code && d.uom) {
|
||||||
// don't make mistake of calling update_stock_qty() the get_uom_details returns stock_qty as per conversion factor properly
|
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 =========================================================
|
//==================== Conversion factor =========================================================
|
||||||
cur_frm.cscript.conversion_factor = function(doc, cdt, cdn) {
|
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 ======================================================================
|
//==================== stock qty ======================================================================
|
||||||
|
|||||||
@@ -182,39 +182,6 @@ class DocType(TransactionBase):
|
|||||||
ret = { 'projected_qty' : bin and flt(bin[0]['projected_qty']) or 0 }
|
ret = { 'projected_qty' : bin and flt(bin[0]['projected_qty']) or 0 }
|
||||||
return ret
|
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 ---
|
# --- Last Purchase Rate related methods ---
|
||||||
|
|
||||||
def update_last_purchase_rate(self, obj, is_submit):
|
def update_last_purchase_rate(self, obj, is_submit):
|
||||||
@@ -683,3 +650,27 @@ class DocType(TransactionBase):
|
|||||||
if d.prevdoc_doctype and d.prevdoc_docname:
|
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))
|
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 ''
|
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,
|
||||||
|
}
|
||||||
@@ -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
|
# get available qty at warehouse
|
||||||
def get_bin_details(self, arg = ''):
|
def get_bin_details(self, arg = ''):
|
||||||
return get_obj(dt='Purchase Common').get_bin_details(arg)
|
return get_obj(dt='Purchase Common').get_bin_details(arg)
|
||||||
|
|||||||
@@ -121,11 +121,6 @@ class DocType:
|
|||||||
doc.fields[r] = ret[r]
|
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
|
# GET TERMS & CONDITIONS
|
||||||
#-----------------------------
|
#-----------------------------
|
||||||
def get_tc_details(self):
|
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)
|
self.update_bin(is_submit = 0, is_stopped = (cstr(self.doc.status) == 'Stopped') and 1 or 0)
|
||||||
|
|
||||||
# Step 5:=> Set Status
|
# Step 5:=> Set Status
|
||||||
webnotes.conn.set(self.doc,'status','Cancelled')
|
webnotes.conn.set(self.doc,'status','Cancelled')
|
||||||
@@ -64,10 +64,6 @@ class DocType(TransactionBase):
|
|||||||
doc.fields[r] = ret[r]
|
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
|
# GET TERMS & CONDITIONS
|
||||||
# =====================================================================================
|
# =====================================================================================
|
||||||
def get_tc_details(self):
|
def get_tc_details(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user