Fix - BOM calculated wrong cost on update cost
This commit is contained in:
parent
b3a962e121
commit
6644406185
@ -115,6 +115,9 @@ class BOM(Document):
|
|||||||
return rate
|
return rate
|
||||||
|
|
||||||
def update_cost(self):
|
def update_cost(self):
|
||||||
|
if self.docstatus == 2:
|
||||||
|
return
|
||||||
|
|
||||||
for d in self.get("bom_materials"):
|
for d in self.get("bom_materials"):
|
||||||
d.rate = self.get_bom_material_detail({
|
d.rate = self.get_bom_material_detail({
|
||||||
'item_code': d.item_code,
|
'item_code': d.item_code,
|
||||||
@ -122,9 +125,10 @@ class BOM(Document):
|
|||||||
'qty': d.qty
|
'qty': d.qty
|
||||||
})["rate"]
|
})["rate"]
|
||||||
|
|
||||||
if self.docstatus in (0, 1):
|
if self.docstatus == 1:
|
||||||
self.ignore_validate_update_after_submit = True
|
self.ignore_validate_update_after_submit = True
|
||||||
self.save()
|
self.calculate_cost()
|
||||||
|
self.save()
|
||||||
|
|
||||||
def get_bom_unitcost(self, bom_no):
|
def get_bom_unitcost(self, bom_no):
|
||||||
bom = frappe.db.sql("""select name, total_variable_cost/quantity as unit_cost from `tabBOM`
|
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"""
|
"""Calculate bom totals"""
|
||||||
self.calculate_op_cost()
|
self.calculate_op_cost()
|
||||||
self.calculate_rm_cost()
|
self.calculate_rm_cost()
|
||||||
self.calculate_fixed_cost()
|
|
||||||
self.total_variable_cost = self.raw_material_cost + self.operating_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):
|
def calculate_op_cost(self):
|
||||||
"""Update workstation rate and calculates totals"""
|
"""Update workstation rate and calculates totals"""
|
||||||
total_op_cost = 0
|
total_op_cost, fixed_cost = 0, 0
|
||||||
for d in self.get('bom_operations'):
|
for d in self.get('bom_operations'):
|
||||||
if d.workstation and not d.hour_rate:
|
if d.workstation:
|
||||||
d.hour_rate = frappe.db.get_value("Workstation", d.workstation, "hour_rate")
|
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:
|
if d.hour_rate and d.time_in_mins:
|
||||||
d.operating_cost = flt(d.hour_rate) * flt(d.time_in_mins) / 60.0
|
d.operating_cost = flt(d.hour_rate) * flt(d.time_in_mins) / 60.0
|
||||||
total_op_cost += flt(d.operating_cost)
|
total_op_cost += flt(d.operating_cost)
|
||||||
|
|
||||||
self.operating_cost = total_op_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
|
self.total_fixed_cost = fixed_cost
|
||||||
|
|
||||||
|
|
||||||
def calculate_rm_cost(self):
|
def calculate_rm_cost(self):
|
||||||
"""Fetch RM rate as per today's valuation rate and calculate totals"""
|
"""Fetch RM rate as per today's valuation rate and calculate totals"""
|
||||||
total_rm_cost = 0
|
total_rm_cost = 0
|
||||||
|
@ -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("Report", "Warehouse-Wise Stock Balance")
|
||||||
execute:frappe.delete_doc("DocType", "Purchase Request")
|
execute:frappe.delete_doc("DocType", "Purchase Request")
|
||||||
execute:frappe.delete_doc("DocType", "Purchase Request Item")
|
execute:frappe.delete_doc("DocType", "Purchase Request Item")
|
||||||
|
erpnext.patches.v4_2.recalculate_bom_cost
|
16
erpnext/patches/v4_2/recalculate_bom_cost.py
Normal file
16
erpnext/patches/v4_2/recalculate_bom_cost.py
Normal 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
|
Loading…
Reference in New Issue
Block a user