Skip to content

Commit

Permalink
fix: valuation rate in tree ui
Browse files Browse the repository at this point in the history
  • Loading branch information
rohitwaghchaure committed Aug 7, 2023
1 parent bfa285a commit 2237930
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 45 deletions.
64 changes: 30 additions & 34 deletions erpnext/manufacturing/doctype/bom_creator/bom_creator.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,46 +52,42 @@ def set_rate_for_items(self):
if self.rm_cost_as_per == "Manual":
return

self.set_rate_for_raw_materials()
self.set_rate_for_sub_assemblies()
amount = self.get_raw_material_cost()
self.raw_material_cost = amount

def set_rate_for_raw_materials(self):
for row in self.items:
if row.is_expandable:
continue
def get_raw_material_cost(self, fg_reference_id=None, amount=0):
if not fg_reference_id:
fg_reference_id = self.name

row.rate = get_bom_item_rate(
{
"company": self.company,
"item_code": row.item_code,
"bom_no": "",
"qty": row.qty,
"uom": row.uom,
"stock_uom": row.stock_uom,
"conversion_factor": row.conversion_factor,
"sourced_by_supplier": row.sourced_by_supplier,
},
self,
)

row.amount = flt(row.rate) * flt(row.qty)

def set_rate_for_sub_assemblies(self):
sub_assemblies = frappe._dict({})
for row in self.items:
if row.fg_reference_id == self.name:
if row.fg_reference_id != fg_reference_id:
continue

sub_assemblies.setdefault((row.fg_reference_id), []).append(flt(row.amount))

self.raw_material_cost = 0
for row in self.items:
if row.name in sub_assemblies:
row.amount = sum(sub_assemblies.get(row.name))
if not row.is_expandable:
row.rate = get_bom_item_rate(
{
"company": self.company,
"item_code": row.item_code,
"bom_no": "",
"qty": row.qty,
"uom": row.uom,
"stock_uom": row.stock_uom,
"conversion_factor": row.conversion_factor,
"sourced_by_supplier": row.sourced_by_supplier,
},
self,
)

row.amount = flt(row.rate) * flt(row.qty)

else:
row.amount = 0.0
row.amount = self.get_raw_material_cost(row.name, row.amount)
row.rate = flt(row.amount) / (flt(row.qty) * flt(row.conversion_factor))

if row.fg_reference_id == self.name:
self.raw_material_cost += flt(row.amount)
amount += flt(row.amount)

return amount

def set_is_expandable(self):
fg_items = [row.fg_item for row in self.items]
Expand Down Expand Up @@ -335,7 +331,7 @@ def delete_node(**kwargs):
delete_node(fg_item=item.value, parent=item.parent_id)

doc = frappe.get_doc("BOM Creator", kwargs.parent)
doc.set_rate_for_sub_assemblies()
doc.set_rate_for_items()
doc.save()

return doc
Expand Down
46 changes: 35 additions & 11 deletions erpnext/public/js/bom_configurator/bom_configurator.bundle.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ class BOMConfigurator {
};

frappe.views.trees["BOM Configurator"] = new frappe.views.TreeView(options);
this.tree_view = frappe.views.trees["BOM Configurator"];
}

bind_events() {
Expand Down Expand Up @@ -76,7 +77,11 @@ class BOMConfigurator {
const qty = node.data.qty || frm_obj.frm.doc.qty;
const uom = node.data.uom || frm_obj.frm.doc.uom;
const docname = node.data.name || frm_obj.frm.doc.name;
let amount = node.data.amount || frm_obj.frm.doc.raw_material_cost;
let amount = node.data.amount;
if (node.data.value === frm_obj.frm.doc.item_code) {
amount = frm_obj.frm.doc.raw_material_cost;
}

amount = frappe.format(amount, { fieldtype: "Currency", currency: frm_obj.frm.doc.currency });

$(`
Expand Down Expand Up @@ -356,20 +361,39 @@ class BOMConfigurator {
}

load_tree(response, node) {
let item_row = "";
let parent_dom = ""
let total_amount = response.message.raw_material_cost;

frappe.views.trees["BOM Configurator"].tree.load_children(node);
let parent_dom = $(node.parent.get(0));
if (node?.parent_node) {
parent_dom = $(node.parent_node.$tree_link.get(0));
}

let total_amount = frappe.format(
response.message.raw_material_cost, {
fieldtype: "Currency",
currency: this.frm.doc.currency
while (true) {
item_row = response.message.items.filter(item => item.name === node.data.name);

if (item_row?.length) {
node.data.amount = item_row[0].amount;
total_amount = node.data.amount
} else {
total_amount = response.message.raw_material_cost;
}

parent_dom = $(node.parent.get(0));
total_amount = frappe.format(
total_amount, {
fieldtype: "Currency",
currency: this.frm.doc.currency
}
);

$($(parent_dom).find(".fg-item-amt")[0]).html(total_amount);

if (node.is_root) {
break;
}
);

$(parent_dom).find(".fg-item-amt").html(total_amount);
node = node.parent_node;
}

}
}

Expand Down

0 comments on commit 2237930

Please sign in to comment.