Fix - BOM calculated wrong cost on update cost

This commit is contained in:
Neil Trini Lasrado 2014-10-10 18:48:09 +05:30
parent b3a962e121
commit 6644406185
3 changed files with 33 additions and 14 deletions

View File

@ -115,6 +115,9 @@ class BOM(Document):
return rate
def update_cost(self):
if self.docstatus == 2:
return
for d in self.get("bom_materials"):
d.rate = self.get_bom_material_detail({
'item_code': d.item_code,
@ -122,9 +125,10 @@ class BOM(Document):
'qty': d.qty
})["rate"]
if self.docstatus in (0, 1):
if self.docstatus == 1:
self.ignore_validate_update_after_submit = True
self.save()
self.calculate_cost()
self.save()
def get_bom_unitcost(self, bom_no):
bom = frappe.db.sql("""select name, total_variable_cost/quantity as unit_cost from `tabBOM`
@ -269,29 +273,27 @@ class BOM(Document):
"""Calculate bom totals"""
self.calculate_op_cost()
self.calculate_rm_cost()
self.calculate_fixed_cost()
self.total_variable_cost = self.raw_material_cost + self.operating_cost
self.total_cost = self.total_variable_cost + self.total_fixed_cost
def calculate_op_cost(self):
"""Update workstation rate and calculates totals"""
total_op_cost = 0
total_op_cost, fixed_cost = 0, 0
for d in self.get('bom_operations'):
if d.workstation and not d.hour_rate:
d.hour_rate = frappe.db.get_value("Workstation", d.workstation, "hour_rate")
if d.workstation:
w = frappe.db.get_value("Workstation", d.workstation, ["hour_rate", "fixed_cycle_cost"])
if not d.hour_rate:
d.hour_rate = flt(w[0])
fixed_cost += flt(w[1])
if d.hour_rate and d.time_in_mins:
d.operating_cost = flt(d.hour_rate) * flt(d.time_in_mins) / 60.0
total_op_cost += flt(d.operating_cost)
self.operating_cost = total_op_cost
def calculate_fixed_cost(self):
"""Update workstation rate and calculates totals"""
fixed_cost = 0
for d in self.get('bom_operations'):
if d.workstation:
fixed_cost += flt(frappe.db.get_value("Workstation", d.workstation, "fixed_cycle_cost"))
self.total_fixed_cost = fixed_cost
def calculate_rm_cost(self):
"""Fetch RM rate as per today's valuation rate and calculate totals"""
total_rm_cost = 0

View File

@ -85,3 +85,4 @@ erpnext.patches.v4_2.seprate_manufacture_and_repack
execute:frappe.delete_doc("Report", "Warehouse-Wise Stock Balance")
execute:frappe.delete_doc("DocType", "Purchase Request")
execute:frappe.delete_doc("DocType", "Purchase Request Item")
erpnext.patches.v4_2.recalculate_bom_cost

View File

@ -0,0 +1,16 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import frappe
def execute():
try:
for d in frappe.db.sql("select name from `tabBOM` where docstatus < 2"):
document = frappe.get_doc('BOM', d[0])
if document.docstatus == 1:
document.ignore_validate_update_after_submit = True
document.calculate_cost()
document.save()
except:
pass