From 3a95465ced340b28cc4a814d328ba20cd62fd63c Mon Sep 17 00:00:00 2001 From: Avishna Murali Date: Thu, 13 Feb 2025 17:19:13 +0530 Subject: [PATCH 1/6] feat:add validation for Item Wise Stone Details --- .../item_wise_stone_details.json | 3 +- .../jewellery_item_receipt.json | 5 ++-- .../jewellery_receipt/jewellery_receipt.js | 28 +++++++++++++++---- .../jewellery_receipt/jewellery_receipt.json | 5 ++-- 4 files changed, 29 insertions(+), 12 deletions(-) diff --git a/aumms/aumms/doctype/item_wise_stone_details/item_wise_stone_details.json b/aumms/aumms/doctype/item_wise_stone_details/item_wise_stone_details.json index f26f688..adc8f79 100644 --- a/aumms/aumms/doctype/item_wise_stone_details/item_wise_stone_details.json +++ b/aumms/aumms/doctype/item_wise_stone_details/item_wise_stone_details.json @@ -28,6 +28,7 @@ "options": "AuMMS Item" }, { + "default": "Gram", "fieldname": "uom", "fieldtype": "Link", "in_list_view": 1, @@ -56,7 +57,7 @@ "index_web_pages_for_search": 1, "istable": 1, "links": [], - "modified": "2024-08-20 10:07:11.991708", + "modified": "2025-02-13 15:16:58.071888", "modified_by": "Administrator", "module": "AuMMS", "name": "Item Wise Stone Details", diff --git a/aumms/aumms/doctype/jewellery_item_receipt/jewellery_item_receipt.json b/aumms/aumms/doctype/jewellery_item_receipt/jewellery_item_receipt.json index 24b5abc..d9e3279 100644 --- a/aumms/aumms/doctype/jewellery_item_receipt/jewellery_item_receipt.json +++ b/aumms/aumms/doctype/jewellery_item_receipt/jewellery_item_receipt.json @@ -194,7 +194,8 @@ "fieldname": "stone_weight_gold_weight_uom", "fieldtype": "Float", "in_list_view": 1, - "label": "Stone Weight (Gold Weight UOM)" + "label": "Stone Weight (Gold Weight UOM)", + "read_only": 1 }, { "default": "Gram", @@ -233,7 +234,7 @@ "index_web_pages_for_search": 1, "istable": 1, "links": [], - "modified": "2025-01-20 12:56:15.072112", + "modified": "2025-02-13 15:11:59.142367", "modified_by": "Administrator", "module": "AuMMS", "name": "Jewellery Item Receipt", diff --git a/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.js b/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.js index 249f5e3..37cfa78 100644 --- a/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.js +++ b/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.js @@ -18,6 +18,10 @@ frappe.ui.form.on("Jewellery Receipt", { }); set_sub_category_filter(frm); }, + onload: function (frm) { + frm.fields_dict["item_wise_stone_details"].grid.cannot_add_rows = true; + frm.refresh_field("item_wise_stone_details"); + }, item_sub_category: function (frm) { frm.events.update_item_details_table(frm); }, @@ -202,15 +206,27 @@ frappe.ui.form.on("Jewellery Item Receipt", { }, add_stone: function (frm, cdt, cdn) { let row = locals[cdt][cdn]; + if (row.has_stone) { + if (!row.stone || !row.stone_uom || !row.stone_weight || !row.rate) { + frappe.msgprint(__( + 'Please ensure all stone details are filled before adding.')); + return; + } + frm.add_child("item_wise_stone_details", { - reference: row.idx, - stone: row.stone, - uom: row.stone_uom, - stone_weight: row.stone_weight, - rate: row.rate, - amount: row.rate * row.stone_weight, + reference: row.idx, + stone: row.stone, + uom: row.stone_uom, + stone_weight: row.stone_weight, + rate: row.rate, + amount: row.rate * row.stone_weight, }); + frm.refresh_field("item_wise_stone_details"); + } else { + frappe.msgprint(__('Has Stone must be checked to add a stone.')); + } + if (row.stone_weight_gold_weight_uom) row.stone_weight_gold_weight_uom += row.stone_weight; else row.stone_weight_gold_weight_uom = row.stone_weight; diff --git a/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.json b/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.json index 373408c..6734a46 100644 --- a/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.json +++ b/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.json @@ -121,8 +121,7 @@ "fieldname": "item_wise_stone_details", "fieldtype": "Table", "label": "Item Wise Stone Details", - "options": "Item Wise Stone Details", - "read_only": 1 + "options": "Item Wise Stone Details" }, { "fieldname": "item_sub_category", @@ -135,7 +134,7 @@ "index_web_pages_for_search": 1, "is_submittable": 1, "links": [], - "modified": "2025-01-20 14:25:31.637164", + "modified": "2025-02-13 15:28:43.982739", "modified_by": "Administrator", "module": "AuMMS", "name": "Jewellery Receipt", From 886caae8374469d3c81bda5cb1e453a1e9d32067 Mon Sep 17 00:00:00 2001 From: Avishna Murali Date: Fri, 14 Feb 2025 15:14:40 +0530 Subject: [PATCH 2/6] Fix: Update stone_weight_gold_weight_uom on row deletion in item_wise_stone_details --- .../jewellery_receipt/jewellery_receipt.js | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.js b/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.js index 37cfa78..99864e2 100644 --- a/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.js +++ b/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.js @@ -9,6 +9,15 @@ frappe.ui.form.on("Jewellery Receipt", { }); }, refresh: function (frm) { + frm.fields_dict["item_wise_stone_details"].grid.wrapper.on( + "click", + ".grid-remove-row", + function () { + setTimeout(() => { + update_stone_weight_gold_weight_uom(frm); + }, 100); + } + ); frm.set_query("stone", "item_details", () => { return { filters: { @@ -421,3 +430,21 @@ function set_sub_category_filter(frm) { }; }); } +frappe.ui.form.on("Item Wise Stone Details", { + item_wise_stone_details_remove: function (frm, cdt, cdn) { + update_stone_weight_gold_weight_uom(frm); + } +}); + +function update_stone_weight_gold_weight_uom(frm) { + frm.doc.item_details.forEach((item) => { + item.stone_weight_gold_weight_uom = 0; + }); + frm.doc.item_wise_stone_details.forEach((stone_row) => { + let parent_row = frm.doc.item_details.find((item) => item.idx === stone_row.reference); + if (parent_row) { + parent_row.stone_weight_gold_weight_uom += stone_row.stone_weight; + } + }); + frm.refresh_field("item_details"); +} From fa694c45eaeb01e0868f12a0e578bea5a20964b9 Mon Sep 17 00:00:00 2001 From: Avishna Murali Date: Fri, 14 Feb 2025 16:30:27 +0530 Subject: [PATCH 3/6] fix:Update stone_charge on row deletion in item_wise_stone_details --- .../aumms/doctype/jewellery_receipt/jewellery_receipt.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.js b/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.js index 99864e2..9c12457 100644 --- a/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.js +++ b/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.js @@ -14,7 +14,7 @@ frappe.ui.form.on("Jewellery Receipt", { ".grid-remove-row", function () { setTimeout(() => { - update_stone_weight_gold_weight_uom(frm); + update_stone_weight_and_charge(frm); }, 100); } ); @@ -432,18 +432,20 @@ function set_sub_category_filter(frm) { } frappe.ui.form.on("Item Wise Stone Details", { item_wise_stone_details_remove: function (frm, cdt, cdn) { - update_stone_weight_gold_weight_uom(frm); + update_stone_weight_and_charge(frm); } }); -function update_stone_weight_gold_weight_uom(frm) { +function update_stone_weight_and_charge(frm) { frm.doc.item_details.forEach((item) => { item.stone_weight_gold_weight_uom = 0; + item.stone_charge = 0; }); frm.doc.item_wise_stone_details.forEach((stone_row) => { let parent_row = frm.doc.item_details.find((item) => item.idx === stone_row.reference); if (parent_row) { parent_row.stone_weight_gold_weight_uom += stone_row.stone_weight; + parent_row.stone_charge += stone_row.rate * stone_row.stone_weight; } }); frm.refresh_field("item_details"); From 1e50c2b78f2ef711f97f366b1fc9b6fc0fe75273 Mon Sep 17 00:00:00 2001 From: Avishna Murali Date: Fri, 14 Feb 2025 17:01:07 +0530 Subject: [PATCH 4/6] fix:Updates values when stone_weight,rate is changed in any row of Item Wise Stone Details --- aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.js b/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.js index 9c12457..77ba8d5 100644 --- a/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.js +++ b/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.js @@ -433,6 +433,12 @@ function set_sub_category_filter(frm) { frappe.ui.form.on("Item Wise Stone Details", { item_wise_stone_details_remove: function (frm, cdt, cdn) { update_stone_weight_and_charge(frm); + }, + stone_weight: function (frm, cdt, cdn) { + update_stone_weight_and_charge(frm); + }, + rate: function (frm, cdt, cdn) { + update_stone_weight_and_charge(frm); } }); From d83e9246daa778a9f0c16967b107786156afba69 Mon Sep 17 00:00:00 2001 From: Muhammed Sinan K T <91651425+MhmdSinanKT@users.noreply.github.com> Date: Wed, 22 Jan 2025 10:01:47 +0530 Subject: [PATCH 5/6] fix: total gold weight and making charge --- .../jewellery_item_receipt.json | 4 +- .../jewellery_receipt/jewellery_receipt.js | 50 +++++++++++++------ .../jewellery_receipt/jewellery_receipt.json | 8 +++ .../jewellery_receipt/jewellery_receipt.py | 6 +++ 4 files changed, 50 insertions(+), 18 deletions(-) diff --git a/aumms/aumms/doctype/jewellery_item_receipt/jewellery_item_receipt.json b/aumms/aumms/doctype/jewellery_item_receipt/jewellery_item_receipt.json index d9e3279..8033384 100644 --- a/aumms/aumms/doctype/jewellery_item_receipt/jewellery_item_receipt.json +++ b/aumms/aumms/doctype/jewellery_item_receipt/jewellery_item_receipt.json @@ -68,7 +68,7 @@ { "fieldname": "net_weight", "fieldtype": "Float", - "label": "Total Weight", + "label": "Gross Weight", "read_only": 1 }, { @@ -105,7 +105,7 @@ "read_only": 1 }, { - "default": "0", + "default": "1", "fieldname": "has_stone", "fieldtype": "Check", "label": "Has Stone" diff --git a/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.js b/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.js index 77ba8d5..e5388a6 100644 --- a/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.js +++ b/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.js @@ -120,28 +120,46 @@ frappe.ui.form.on("Jewellery Receipt", { if (quantity < cur_items_len) { frm.doc.item_details.splice(quantity); } else { - for (var i = cur_items_len; i < quantity; i++) { - let row = frm.add_child("item_details", { - item_category: frm.doc.item_category, - item_type: frm.doc.item_type, - item_group: frm.doc.item_group, - purity: frm.doc.purity, - board_rate: frm.doc.board_rate, + frappe.db + .get_value( + "Item Sub Category", + frm.doc.item_sub_category, + "making_charge_in_percentage" + ) + .then((r) => { + console.log("here1"); + console.log(cur_items_len); + console.log(quantity); + + + for (var i = cur_items_len; i < quantity; i++) { + console.log("loop"); + + frm.add_child("item_details", { + item_category: frm.doc.item_category, + item_type: frm.doc.item_type, + item_group: frm.doc.item_group, + purity: frm.doc.purity, + board_rate: frm.doc.board_rate, + making_chargein_percentage: r.message.making_charge_in_percentage, + }); + frm.refresh_fields() + } }); - } + } frm.refresh_field("item_details"); }, }); frappe.ui.form.on("Jewellery Item Receipt", { - form_render: function (frm, cdt, cdn) { - let d = locals[cdt][cdn]; - if (d.has_stone) { - let net_weight = d.gold_weight + d.stone_weight; - frappe.model.set_value(cdt, cdn, "net_weight", net_weight); - } - }, + // form_render: function (frm, cdt, cdn) { + // let d = locals[cdt][cdn]; + // if (d.has_stone) { + // let net_weight = d.gold_weight + d.stone_weight; + // frappe.model.set_value(cdt, cdn, "net_weight", net_weight); + // } + // }, kept for future reference stone_weight: function (frm, cdt, cdn) { let d = locals[cdt][cdn]; if (d.single_stone) { @@ -167,7 +185,7 @@ frappe.ui.form.on("Jewellery Item Receipt", { }, gold_weight: function (frm, cdt, cdn) { let d = locals[cdt][cdn]; - if (!d.has_stone) { + if (!d.has_stone || !d.stone_charge) { let net_weight = d.gold_weight; frappe.model.set_value(cdt, cdn, "net_weight", net_weight); let amount_without_making_charge = d.gold_weight * frm.doc.board_rate; diff --git a/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.json b/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.json index 6734a46..6cff5de 100644 --- a/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.json +++ b/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.json @@ -18,6 +18,7 @@ "board_rate", "date", "quantity", + "total_gold_weight", "section_break_vxux", "item_details", "item_wise_stone_details", @@ -129,6 +130,13 @@ "label": "Item Sub Category", "options": "Item Sub Category", "reqd": 1 + }, + { + "fieldname": "total_gold_weight", + "fieldtype": "Float", + "label": "Total Gold Weight", + "precision": "2", + "read_only": 1 } ], "index_web_pages_for_search": 1, diff --git a/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.py b/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.py index 5c4d7b8..8b97c6f 100644 --- a/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.py +++ b/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.py @@ -19,6 +19,12 @@ def autoname(self): def validate(self): self.validate_date() + + def before_save(self): + total_gold_weight = 0 + for item in self.item_details: + total_gold_weight += item.gold_weight + self.total_gold_weight = total_gold_weight def on_submit(self): self.create_item() From 16419ed51fb730c4f6b7bcb8a00f6bf209127b98 Mon Sep 17 00:00:00 2001 From: Muhammed Sinan K T <91651425+MhmdSinanKT@users.noreply.github.com> Date: Wed, 22 Jan 2025 10:34:11 +0530 Subject: [PATCH 6/6] fix: dynamic calculations in jewellery receipt --- aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.js | 7 ++++++- aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.py | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.js b/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.js index e5388a6..b31a453 100644 --- a/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.js +++ b/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.js @@ -201,6 +201,7 @@ frappe.ui.form.on("Jewellery Item Receipt", { d.amount_without_making_charge * (d.making_chargein_percentage / 100); frappe.model.set_value(cdt, cdn, "making_charge", making_charge); } + frm.call("calculate_item_details") }, making_chargein_percentage: function (frm, cdt, cdn) { let d = locals[cdt][cdn]; @@ -262,13 +263,17 @@ frappe.ui.form.on("Jewellery Item Receipt", { else row.stone_charge = row.rate * row.stone_weight; row.stone = ""; - row.stone_uom = ""; + row.stone_uom = "Gram"; row.stone_weight = ""; row.rate = ""; frm.refresh_field("item_wise_stone_details"); frm.refresh_field("item_details"); + frm.call("calculate_item_details") }, + board_rate: function(frm) { + frm.call("calculate_item_details") + } }); let create_multi_stone = function (frm, cdt, cdn) { diff --git a/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.py b/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.py index 8b97c6f..f798b7a 100644 --- a/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.py +++ b/aumms/aumms/doctype/jewellery_receipt/jewellery_receipt.py @@ -96,6 +96,7 @@ def create_purchase_receipt(self): purchase_receipt.submit() frappe.msgprint('Purchase Receipt created.', indicator="green", alert=1) + @frappe.whitelist() def calculate_item_details(self): for item_detail in self.get("item_details"): board_rate = self.board_rate or 0