Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit b55e985

Browse files
committed
Minor fixes
2 parents cd13a28 + eb662b5 commit b55e985

File tree

7 files changed

+89
-12
lines changed

7 files changed

+89
-12
lines changed

erpnext/manufacturing/doctype/production_order/production_order.json

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1314,6 +1314,36 @@
13141314
"set_only_once": 0,
13151315
"unique": 0
13161316
},
1317+
{
1318+
"allow_bulk_edit": 0,
1319+
"allow_on_submit": 0,
1320+
"bold": 0,
1321+
"collapsible": 0,
1322+
"columns": 0,
1323+
"fieldname": "sales_order_item",
1324+
"fieldtype": "Data",
1325+
"hidden": 1,
1326+
"ignore_user_permissions": 0,
1327+
"ignore_xss_filter": 0,
1328+
"in_filter": 0,
1329+
"in_global_search": 0,
1330+
"in_list_view": 0,
1331+
"in_standard_filter": 0,
1332+
"label": "Sales Order Item",
1333+
"length": 0,
1334+
"no_copy": 0,
1335+
"permlevel": 0,
1336+
"precision": "",
1337+
"print_hide": 0,
1338+
"print_hide_if_no_value": 0,
1339+
"read_only": 1,
1340+
"remember_last_selected_value": 0,
1341+
"report_hide": 0,
1342+
"reqd": 0,
1343+
"search_index": 0,
1344+
"set_only_once": 0,
1345+
"unique": 0
1346+
},
13171347
{
13181348
"allow_bulk_edit": 0,
13191349
"allow_on_submit": 0,
@@ -1358,7 +1388,7 @@
13581388
"issingle": 0,
13591389
"istable": 0,
13601390
"max_attachments": 0,
1361-
"modified": "2017-11-03 05:31:56.636424",
1391+
"modified": "2017-11-03 05:31:56.636724",
13621392
"modified_by": "Administrator",
13631393
"module": "Manufacturing",
13641394
"name": "Production Order",

erpnext/manufacturing/doctype/production_order/production_order.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ def validate(self):
3535
validate_bom_no(self.production_item, self.bom_no)
3636

3737
self.validate_sales_order()
38+
self.set_default_warehouse()
3839
self.validate_warehouse_belongs_to_company()
3940
self.calculate_operating_cost()
4041
self.validate_qty()
@@ -69,6 +70,12 @@ def validate_sales_order(self):
6970
else:
7071
frappe.throw(_("Sales Order {0} is not valid").format(self.sales_order))
7172

73+
def set_default_warehouse(self):
74+
if not self.wip_warehouse:
75+
self.wip_warehouse = frappe.db.get_single_value("Manufacturing Settings", "default_wip_warehouse")
76+
if not self.fg_warehouse:
77+
self.fg_warehouse = frappe.db.get_single_value("Manufacturing Settings", "default_fg_warehouse")
78+
7279
def validate_warehouse_belongs_to_company(self):
7380
warehouses = [self.fg_warehouse, self.wip_warehouse]
7481
for d in self.get("required_items"):

erpnext/patches.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ execute:frappe.reload_doc('selling', 'doctype', 'customer') # 2014-01-29
2323
execute:frappe.reload_doc('buying', 'doctype', 'supplier') # 2014-01-29
2424
execute:frappe.reload_doc('accounts', 'doctype', 'asset_category')
2525
execute:frappe.reload_doc('accounts', 'doctype', 'pricing_rule')
26-
execute:frappe.reload_doc('stock', 'doctype', 'item_settings')
2726
erpnext.patches.v4_0.map_charge_to_taxes_and_charges
2827
execute:frappe.reload_doc('support', 'doctype', 'newsletter') # 2014-01-31
2928
execute:frappe.reload_doc('hr', 'doctype', 'employee') # 2014-02-03

erpnext/selling/doctype/sales_order/sales_order.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ erpnext.selling.SalesOrderController = erpnext.selling.SellingController.extend(
197197
});
198198
return;
199199
}
200-
else if(!r.message.every(function(d) { return !!d.pending_qty })) {
200+
else if(!r.message) {
201201
frappe.msgprint({
202202
title: __('Production Order not created'),
203203
message: __('Production Order already created for all items with BOM'),
@@ -217,6 +217,8 @@ erpnext.selling.SalesOrderController = erpnext.selling.SellingController.extend(
217217
}},
218218
{fieldtype:'Float', fieldname:'pending_qty', reqd: 1,
219219
label: __('Qty'), in_list_view:1},
220+
{fieldtype:'Data', fieldname:'sales_order_item', reqd: 1,
221+
label: __('Sales Order Item'), hidden:1}
220222
],
221223
get_data: function() {
222224
return r.message

erpnext/selling/doctype/sales_order/sales_order.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -336,14 +336,16 @@ def get_production_order_items(self):
336336
bom = get_default_bom_item(i.item_code)
337337
if bom:
338338
stock_qty = i.qty if i.doctype == 'Packed Item' else i.stock_qty
339-
items.append(dict(
340-
item_code= i.item_code,
341-
bom = bom,
342-
warehouse = i.warehouse,
343-
pending_qty= stock_qty - flt(frappe.db.sql('''select sum(qty) from `tabProduction Order`
344-
where production_item=%s and sales_order=%s''', (i.item_code, self.name))[0][0])
345-
))
346-
339+
pending_qty= stock_qty - flt(frappe.db.sql('''select sum(qty) from `tabProduction Order`
340+
where production_item=%s and sales_order=%s and sales_order_item = %s and docstatus<2''', (i.item_code, self.name, i.name))[0][0])
341+
if pending_qty:
342+
items.append(dict(
343+
item_code= i.item_code,
344+
bom = bom,
345+
warehouse = i.warehouse,
346+
pending_qty = pending_qty,
347+
sales_order_item = i.name
348+
))
347349
return items
348350

349351
def on_recurring(self, reference_doc, subscription_doc):
@@ -769,6 +771,7 @@ def make_production_orders(items, sales_order, company, project=None):
769771
qty=i['pending_qty'],
770772
company=company,
771773
sales_order=sales_order,
774+
sales_order_item=i['sales_order_item'],
772775
project=project,
773776
fg_warehouse=i['warehouse']
774777
)).insert()

erpnext/selling/doctype/sales_order/test_sales_order.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import make_material_request, make_delivery_note, make_sales_invoice, WarehouseRequired
1111
from erpnext.stock.doctype.stock_entry.stock_entry_utils import make_stock_entry
1212
from frappe.tests.test_permissions import set_user_permission_doctypes
13+
from erpnext.selling.doctype.sales_order.sales_order import make_production_orders
14+
import json
1315

1416
class TestSalesOrder(unittest.TestCase):
1517
def tearDown(self):
@@ -505,6 +507,40 @@ def test_create_so_with_margin(self):
505507

506508
self.assertEquals(new_so.get("items")[0].rate, flt((price_list_rate*25)/100 + price_list_rate))
507509

510+
def test_make_production_order(self):
511+
# Make a new Sales Order
512+
so = make_sales_order(**{
513+
"item_list": [{
514+
"item_code": "_Test FG Item",
515+
"qty": 10,
516+
"rate":100
517+
},
518+
{
519+
"item_code": "_Test FG Item",
520+
"qty": 20,
521+
"rate":200
522+
}]
523+
})
524+
525+
# Raise Production Orders
526+
po_items= []
527+
so_item_name= {}
528+
for item in so.get_production_order_items():
529+
po_items.append({
530+
"warehouse": item.get("warehouse"),
531+
"item_code": item.get("item_code"),
532+
"pending_qty": item.get("pending_qty"),
533+
"sales_order_item": item.get("sales_order_item"),
534+
"bom": item.get("bom")
535+
})
536+
so_item_name[item.get("sales_order_item")]= item.get("pending_qty")
537+
make_production_orders(json.dumps({"items":po_items}), so.name, so.company)
538+
539+
# Check if Production Orders were raised
540+
for item in so_item_name:
541+
po_qty = frappe.db.sql("select sum(qty) from `tabProduction Order` where sales_order=%s and sales_order_item=%s", (so.name, item))
542+
self.assertEquals(po_qty[0][0], so_item_name.get(item))
543+
508544
def make_sales_order(**args):
509545
so = frappe.new_doc("Sales Order")
510546
args = frappe._dict(args)

erpnext/stock/doctype/item/item.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -633,7 +633,7 @@ def validate_has_variants(self):
633633

634634
def validate_stock_exists_for_template_item(self):
635635
if self.stock_ledger_created():
636-
if ((self._doc._doc_before_save
636+
if ((self._doc_before_save
637637
and self._doc_before_save.has_variants != self.has_variants)
638638
or self.variant_of != self._doc_before_save.variant_of):
639639
frappe.throw(_("Cannot change Variant properties after stock transction. You will have to make a new Item to do this.").format(self.name),

0 commit comments

Comments
 (0)