diff --git a/.gitignore b/.gitignore index 7f90378aec..0818a02453 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ server_tools patch.log lib versions-local.db +*.sql* diff --git a/erpnext/stock/doctype/bin/bin.py b/erpnext/stock/doctype/bin/bin.py index e3af0a2789..bb1101ea3f 100644 --- a/erpnext/stock/doctype/bin/bin.py +++ b/erpnext/stock/doctype/bin/bin.py @@ -146,7 +146,7 @@ class DocType: in_rate = flt(sql("select ifnull(avg(purchase_rate), 0) from `tabSerial No` where name in (%s)" % (serial_nos))[0][0]) if in_rate and val_rate == 0: # First entry - val_rate = in_rate + val_rate = in_rate # val_rate is same as previous entry if val_rate is negative # Otherwise it will be calculated as per moving average elif opening_qty + actual_qty > 0 and ((opening_qty * val_rate) + (actual_qty * in_rate)) > 0: diff --git a/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.py b/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.py index 2b828f9059..c791e865ed 100644 --- a/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.py +++ b/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.py @@ -166,7 +166,7 @@ class DocType: tax_amount = flt(rate) * (flt(ocd[row-1].total_tax_amount)+flt(ocd[row-1].total_amount)) / 100 elif ocd[row-1].add_deduct_tax == 'Deduct': tax_amount = flt(rate) * (flt(ocd[row-1].total_tax_amount)-flt(ocd[row-1].total_amount)) / 100 - + return tax_amount def add_deduct_taxes(self, ocd, oc, tax_amount, total, prev_total, item_tax): @@ -202,7 +202,8 @@ class DocType: for d in getlist(pr_obj.doclist, 'purchase_receipt_details'): if flt(d.qty): d.valuation_rate = (flt(d.purchase_rate) + (flt(d.rm_supp_cost)/flt(d.qty)) + (flt(d.item_tax_amount)/flt(d.qty))) / flt(d.conversion_factor) - d.save() + d.save() + self.update_serial_no(d.serial_no, d.valuation_rate) sql("update `tabStock Ledger Entry` set incoming_rate = '%s' where voucher_detail_no = '%s'"%(flt(d.valuation_rate), d.name)) bin = sql("select t1.name, t2.posting_date, t2.posting_time from `tabBin` t1, `tabStock Ledger Entry` t2 where t2.voucher_detail_no = '%s' and t2.item_code = t1.item_code and t2.warehouse = t1.warehouse LIMIT 1" % d.name) @@ -211,6 +212,13 @@ class DocType: if bin and bin[0][0]: obj = get_obj('Bin', bin[0][0]).update_entries_after(bin[0][1], bin[0][2]) + + def update_serial_no(self, sr_no, rate): + """ update valuation rate in serial no""" + sr_no = sr_no.split('\n') + for d in sr_no: + sql("update `tabSerial No` set purchase_rate = %s where name = %s", (rate, d)) + def update_landed_cost(self): """ diff --git a/erpnext/stock/doctype/stock_ledger/stock_ledger.py b/erpnext/stock/doctype/stock_ledger/stock_ledger.py index 5165cc9dbc..0970b78056 100644 --- a/erpnext/stock/doctype/stock_ledger/stock_ledger.py +++ b/erpnext/stock/doctype/stock_ledger/stock_ledger.py @@ -93,27 +93,27 @@ class DocType: # --------------------- def set_pur_serial_no_values(self, obj, serial_no, d, s, new_rec): item_details = sql("select item_group, warranty_period from `tabItem` where name = '%s' and (ifnull(end_of_life,'')='' or end_of_life = '0000-00-00' or end_of_life > now()) " %(d.item_code), as_dict=1) - s.purchase_document_type= obj.doc.doctype - s.purchase_document_no = obj.doc.name - s.purchase_date = obj.doc.posting_date - s.purchase_time = obj.doc.posting_time - s.purchase_rate = d.purchase_rate or d.incoming_rate - s.item_code = d.item_code - s.brand = d.brand - s.description = d.description - s.item_group = item_details and item_details[0]['item_group'] or '' - s.warranty_period = item_details and item_details[0]['warranty_period'] or 0 - s.supplier = obj.doc.supplier - s.supplier_name = obj.doc.supplier_name - s.supplier_address = obj.doc.supplier_address - s.warehouse = d.warehouse or d.t_warehouse - s.docstatus = 0 - s.status = 'In Store' - s.modified = nowdate() - s.modified_by = session['user'] - s.serial_no = serial_no - s.fiscal_year = obj.doc.fiscal_year - s.company = obj.doc.company + s.purchase_document_type = obj.doc.doctype + s.purchase_document_no = obj.doc.name + s.purchase_date = obj.doc.posting_date + s.purchase_time = obj.doc.posting_time + s.purchase_rate = d.valuation_rate or d.incoming_rate + s.item_code = d.item_code + s.brand = d.brand + s.description = d.description + s.item_group = item_details and item_details[0]['item_group'] or '' + s.warranty_period = item_details and item_details[0]['warranty_period'] or 0 + s.supplier = obj.doc.supplier + s.supplier_name = obj.doc.supplier_name + s.supplier_address = obj.doc.supplier_address + s.warehouse = d.warehouse or d.t_warehouse + s.docstatus = 0 + s.status = 'In Store' + s.modified = nowdate() + s.modified_by = session['user'] + s.serial_no = serial_no + s.fiscal_year = obj.doc.fiscal_year + s.company = obj.doc.company s.save(new_rec)