Skip to content

Commit 1e912db

Browse files
committed
feat: Added check box to combine items
1 parent e7895ce commit 1e912db

8 files changed

Lines changed: 376 additions & 788 deletions

File tree

erpnext/manufacturing/doctype/production_plan/production_plan.js

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -211,16 +211,30 @@ frappe.ui.form.on('Production Plan', {
211211
});
212212
},
213213

214-
get_items: function(frm) {
214+
get_items: function (frm) {
215+
frm.clear_table('prod_plan_ref');
216+
215217
frappe.call({
216218
method: "get_items",
217219
freeze: true,
218220
doc: frm.doc,
219-
callback: function() {
221+
callback: function () {
220222
refresh_field('po_items');
221223
}
222224
});
223225
},
226+
combine_items: function (frm) {
227+
frm.clear_table('po_items');
228+
frm.clear_table('prod_plan_ref');
229+
230+
frappe.call({
231+
method: "get_items",
232+
freeze: true,
233+
doc: frm.doc,
234+
});
235+
236+
237+
},
224238

225239
get_items_for_mr: function(frm) {
226240
if (!frm.doc.for_warehouse) {

erpnext/manufacturing/doctype/production_plan/production_plan.json

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@
2828
"material_requests",
2929
"select_items_to_manufacture_section",
3030
"get_items",
31+
"combine_items",
3132
"po_items",
33+
"section_break_25",
34+
"prod_plan_ref",
3235
"material_request_planning",
3336
"include_non_stock_items",
3437
"include_subcontracted_items",
@@ -316,13 +319,30 @@
316319
"fieldname": "include_safety_stock",
317320
"fieldtype": "Check",
318321
"label": "Include Safety Stock in Required Qty Calculation"
322+
},
323+
{
324+
"fieldname": "prod_plan_ref",
325+
"fieldtype": "Table",
326+
"hidden": 1,
327+
"label": "Production Plan Item Reference",
328+
"options": "Production Plan Item Reference"
329+
},
330+
{
331+
"default": "0",
332+
"fieldname": "combine_items",
333+
"fieldtype": "Check",
334+
"label": "Consolidate Items"
335+
},
336+
{
337+
"fieldname": "section_break_25",
338+
"fieldtype": "Section Break"
319339
}
320340
],
321341
"icon": "fa fa-calendar",
322342
"index_web_pages_for_search": 1,
323343
"is_submittable": 1,
324344
"links": [],
325-
"modified": "2021-03-08 11:17:25.470147",
345+
"modified": "2021-04-26 14:11:43.564957",
326346
"modified_by": "Administrator",
327347
"module": "Manufacturing",
328348
"name": "Production Plan",

erpnext/manufacturing/doctype/production_plan/production_plan.py

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,10 @@ def add_mr_in_table(self, pending_mr):
9696

9797
@frappe.whitelist()
9898
def get_items(self):
99+
self.set('po_items', [])
99100
if self.get_items_from == "Sales Order":
100-
self.get_so_items()
101+
self.get_so_items()
102+
101103
elif self.get_items_from == "Material Request":
102104
self.get_mr_items()
103105

@@ -165,10 +167,24 @@ def get_mr_items(self):
165167
self.calculate_total_planned_qty()
166168

167169
def add_items(self, items):
168-
self.set('po_items', [])
170+
refs = {}
169171
for data in items:
170172
item_details = get_item_details(data.item_code)
173+
if self.combine_items:
174+
if item_details.bom_no in refs.keys():
175+
refs[item_details.bom_no]['qty'] = refs[item_details.bom_no]['qty'] + data.pending_qty
176+
refs[item_details.bom_no]['so'].append(data.parent)
177+
refs[item_details.bom_no]['so_items'].append(data.name)
178+
refs[item_details.bom_no]['planned_qty'].append(data.pending_qty)
179+
continue
180+
else:
181+
refs[item_details.bom_no] = {'qty': data.pending_qty, 'ref': data.name}
182+
refs[item_details.bom_no]['so'] = [data.parent]
183+
refs[item_details.bom_no]['so_items'] = [data.name]
184+
refs[item_details.bom_no]['planned_qty'] = [data.pending_qty]
185+
171186
pi = self.append('po_items', {
187+
'name': data.name,
172188
'include_exploded_items': 1,
173189
'warehouse': data.warehouse,
174190
'item_code': data.item_code,
@@ -185,11 +201,32 @@ def add_items(self, items):
185201
pi.sales_order = data.parent
186202
pi.sales_order_item = data.name
187203
pi.description = data.description
188-
204+
205+
189206
elif self.get_items_from == "Material Request":
190207
pi.material_request = data.parent
191208
pi.material_request_item = data.name
192209
pi.description = data.description
210+
211+
if refs:
212+
for d in self.po_items:
213+
d.planned_qty = refs[d.bom_no]['qty']
214+
d.pending_qty = refs[d.bom_no]['qty']
215+
d.sales_order = ''
216+
self.add_pp_ref(refs)
217+
218+
def add_pp_ref(self, refs):
219+
for r in refs:
220+
idx = 0
221+
for so in refs[r]['so']:
222+
self.append('prod_plan_ref', {
223+
'item_ref': refs[r]['ref'],
224+
'sales_order': so,
225+
'sales_order_item':refs[r]['so_items'][idx],
226+
'qty':refs[r]['planned_qty'][idx]
227+
})
228+
idx+=1
229+
193230

194231
def calculate_total_planned_qty(self):
195232
self.total_planned_qty = 0

0 commit comments

Comments
 (0)