Merge pull request #4695 from neilLasrado/develop
Material Request of type Manufcture
diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py
index 4b5ce43..afb9b85 100644
--- a/erpnext/accounts/doctype/journal_entry/journal_entry.py
+++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py
@@ -203,7 +203,7 @@
self.validate_invoices()
def validate_orders(self):
- """Validate totals, stopped and docstatus for orders"""
+ """Validate totals, closed and docstatus for orders"""
for reference_name, total in self.reference_totals.iteritems():
reference_type = self.reference_types[reference_name]
account = self.reference_accounts[reference_name]
@@ -217,8 +217,8 @@
if flt(order.per_billed) >= 100:
frappe.throw(_("{0} {1} is fully billed").format(reference_type, reference_name))
- if cstr(order.status) == "Stopped":
- frappe.throw(_("{0} {1} is stopped").format(reference_type, reference_name))
+ if cstr(order.status) == "Closed":
+ frappe.throw(_("{0} {1} is closed").format(reference_type, reference_name))
account_currency = get_account_currency(account)
if account_currency == self.company_currency:
diff --git a/erpnext/accounts/doctype/payment_tool/payment_tool.py b/erpnext/accounts/doctype/payment_tool/payment_tool.py
index 3648306..ef8ffb1 100644
--- a/erpnext/accounts/doctype/payment_tool/payment_tool.py
+++ b/erpnext/accounts/doctype/payment_tool/payment_tool.py
@@ -133,7 +133,7 @@
where
{party_type} = %s
and docstatus = 1
- and ifnull(status, "") != "Stopped"
+ and ifnull(status, "") != "Closed"
and {ref_field} > advance_paid
and abs(100 - per_billed) > 0.01
""".format(**{
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js
index b158ea2..b91df4b 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js
@@ -41,7 +41,7 @@
get_query_filters: {
supplier: cur_frm.doc.supplier || undefined,
docstatus: 1,
- status: ["not in", ["Stopped", "Closed"]],
+ status: ["!=", "Closed"],
per_billed: ["<", 99.99],
company: cur_frm.doc.company
}
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
index 6d61abe..d88a11e 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -49,7 +49,7 @@
self.check_conversion_rate()
self.validate_credit_to_acc()
self.clear_unallocated_advances("Purchase Invoice Advance", "advances")
- self.check_for_stopped_or_closed_status()
+ self.check_for_closed_status()
self.validate_with_previous_doc()
self.validate_uom_is_integer("uom", "qty")
self.set_against_expense_account()
@@ -104,14 +104,14 @@
self.party_account_currency = account.account_currency
- def check_for_stopped_or_closed_status(self):
+ def check_for_closed_status(self):
check_list = []
pc_obj = frappe.get_doc('Purchase Common')
for d in self.get('items'):
if d.purchase_order and not d.purchase_order in check_list and not d.purchase_receipt:
check_list.append(d.purchase_order)
- pc_obj.check_for_stopped_or_closed_status('Purchase Order', d.purchase_order)
+ pc_obj.check_for_closed_status('Purchase Order', d.purchase_order)
def validate_with_previous_doc(self):
super(PurchaseInvoice, self).validate_with_previous_doc({
@@ -405,7 +405,7 @@
make_gl_entries(gl_entries, cancel=(self.docstatus == 2))
def on_cancel(self):
- self.check_for_stopped_or_closed_status()
+ self.check_for_closed_status()
if not self.is_return:
from erpnext.accounts.utils import remove_against_link_from_jv
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
index 7b9b803..200fca6 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
@@ -116,7 +116,7 @@
source_doctype: "Sales Order",
get_query_filters: {
docstatus: 1,
- status: ["not in", ["Stopped", "Closed"]],
+ status: ["!=", "Closed"],
per_billed: ["<", 99.99],
customer: cur_frm.doc.customer || undefined,
company: cur_frm.doc.company
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index 3c60bfb..e120f18 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -53,7 +53,7 @@
self.validate_proj_cust()
self.validate_with_previous_doc()
self.validate_uom_is_integer("stock_uom", "qty")
- self.check_stop_or_close_sales_order("sales_order")
+ self.check_close_sales_order("sales_order")
self.validate_debit_to_acc()
self.validate_fixed_asset_account()
self.clear_unallocated_advances("Sales Invoice Advance", "advances")
@@ -121,7 +121,7 @@
if cint(self.update_stock) == 1:
self.update_stock_ledger()
- self.check_stop_or_close_sales_order("sales_order")
+ self.check_close_sales_order("sales_order")
from erpnext.accounts.utils import remove_against_link_from_jv
remove_against_link_from_jv(self.doctype, self.name)
diff --git a/erpnext/accounts/report/ordered_items_to_be_billed/ordered_items_to_be_billed.json b/erpnext/accounts/report/ordered_items_to_be_billed/ordered_items_to_be_billed.json
index cdbd5c1..a0be257 100644
--- a/erpnext/accounts/report/ordered_items_to_be_billed/ordered_items_to_be_billed.json
+++ b/erpnext/accounts/report/ordered_items_to_be_billed/ordered_items_to_be_billed.json
@@ -7,12 +7,12 @@
"doctype": "Report",
"idx": 1,
"is_standard": "Yes",
- "modified": "2015-11-04 11:56:32.699103",
+ "modified": "2016-02-23 18:48:42.372321",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Ordered Items To Be Billed",
"owner": "Administrator",
- "query": "select \n `tabSales Order`.`name` as \"Sales Order:Link/Sales Order:120\",\n `tabSales Order`.`customer` as \"Customer:Link/Customer:120\",\n `tabSales Order`.`status` as \"Status\",\n `tabSales Order`.`transaction_date` as \"Date:Date\",\n `tabSales Order`.`project_name` as \"Project\",\n `tabSales Order Item`.item_code as \"Item:Link/Item:120\",\n `tabSales Order Item`.base_amount as \"Amount:Currency:110\",\n (`tabSales Order Item`.billed_amt * ifnull(`tabSales Order`.conversion_rate, 1)) as \"Billed Amount:Currency:110\",\n (ifnull(`tabSales Order Item`.base_amount, 0) - (ifnull(`tabSales Order Item`.billed_amt, 0) * ifnull(`tabSales Order`.conversion_rate, 1))) as \"Pending Amount:Currency:120\",\n `tabSales Order Item`.item_name as \"Item Name::150\",\n `tabSales Order Item`.description as \"Description::200\",\n `tabSales Order`.`company` as \"Company:Link/Company:\"\nfrom\n `tabSales Order`, `tabSales Order Item`\nwhere\n `tabSales Order Item`.`parent` = `tabSales Order`.`name`\n and `tabSales Order`.docstatus = 1\n and `tabSales Order`.status not in (\"Stopped\", \"Closed\")\n and ifnull(`tabSales Order Item`.billed_amt,0) < ifnull(`tabSales Order Item`.amount,0)\norder by `tabSales Order`.transaction_date asc",
+ "query": "select \n `tabSales Order`.`name` as \"Sales Order:Link/Sales Order:120\",\n `tabSales Order`.`customer` as \"Customer:Link/Customer:120\",\n `tabSales Order`.`status` as \"Status\",\n `tabSales Order`.`transaction_date` as \"Date:Date\",\n `tabSales Order`.`project_name` as \"Project\",\n `tabSales Order Item`.item_code as \"Item:Link/Item:120\",\n `tabSales Order Item`.base_amount as \"Amount:Currency:110\",\n (`tabSales Order Item`.billed_amt * ifnull(`tabSales Order`.conversion_rate, 1)) as \"Billed Amount:Currency:110\",\n (ifnull(`tabSales Order Item`.base_amount, 0) - (ifnull(`tabSales Order Item`.billed_amt, 0) * ifnull(`tabSales Order`.conversion_rate, 1))) as \"Pending Amount:Currency:120\",\n `tabSales Order Item`.item_name as \"Item Name::150\",\n `tabSales Order Item`.description as \"Description::200\",\n `tabSales Order`.`company` as \"Company:Link/Company:\"\nfrom\n `tabSales Order`, `tabSales Order Item`\nwhere\n `tabSales Order Item`.`parent` = `tabSales Order`.`name`\n and `tabSales Order`.docstatus = 1\n and `tabSales Order`.status != \"Closed\"\n and ifnull(`tabSales Order Item`.billed_amt,0) < ifnull(`tabSales Order Item`.amount,0)\norder by `tabSales Order`.transaction_date asc",
"ref_doctype": "Sales Invoice",
"report_name": "Ordered Items To Be Billed",
"report_type": "Query Report"
diff --git a/erpnext/accounts/report/purchase_order_items_to_be_billed/purchase_order_items_to_be_billed.json b/erpnext/accounts/report/purchase_order_items_to_be_billed/purchase_order_items_to_be_billed.json
index 38361fb..5f67309 100644
--- a/erpnext/accounts/report/purchase_order_items_to_be_billed/purchase_order_items_to_be_billed.json
+++ b/erpnext/accounts/report/purchase_order_items_to_be_billed/purchase_order_items_to_be_billed.json
@@ -7,12 +7,12 @@
"doctype": "Report",
"idx": 1,
"is_standard": "Yes",
- "modified": "2015-11-04 11:56:14.321664",
+ "modified": "2016-02-23 18:51:21.968327",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Purchase Order Items To Be Billed",
"owner": "Administrator",
- "query": "select \n `tabPurchase Order`.`name` as \"Purchase Order:Link/Purchase Order:120\",\n `tabPurchase Order`.`transaction_date` as \"Date:Date:100\",\n\t`tabPurchase Order`.`supplier` as \"Supplier:Link/Supplier:120\",\n\t`tabPurchase Order Item`.`project_name` as \"Project\",\n\t`tabPurchase Order Item`.item_code as \"Item Code:Link/Item:120\",\n\t`tabPurchase Order Item`.base_amount as \"Amount:Currency:100\",\n\t(`tabPurchase Order Item`.billed_amt * ifnull(`tabPurchase Order`.conversion_rate, 1)) as \"Billed Amount:Currency:100\", \n\t(`tabPurchase Order Item`.base_amount - (ifnull(`tabPurchase Order Item`.billed_amt, 0) * ifnull(`tabPurchase Order`.conversion_rate, 1))) as \"Amount to Bill:Currency:100\",\n\t`tabPurchase Order Item`.item_name as \"Item Name::150\",\n\t`tabPurchase Order Item`.description as \"Description::200\",\n\t`tabPurchase Order`.company as \"Company:Link/Company:\"\nfrom\n\t`tabPurchase Order`, `tabPurchase Order Item`\nwhere\n\t`tabPurchase Order Item`.`parent` = `tabPurchase Order`.`name`\n\tand `tabPurchase Order`.docstatus = 1\n\tand `tabPurchase Order`.status not in (\"Stopped\", \"Closed\")\n\tand (ifnull(`tabPurchase Order Item`.billed_amt, 0) * ifnull(`tabPurchase Order`.conversion_rate, 1)) < ifnull(`tabPurchase Order Item`.base_amount, 0)\norder by `tabPurchase Order`.transaction_date asc",
+ "query": "select \n `tabPurchase Order`.`name` as \"Purchase Order:Link/Purchase Order:120\",\n `tabPurchase Order`.`transaction_date` as \"Date:Date:100\",\n\t`tabPurchase Order`.`supplier` as \"Supplier:Link/Supplier:120\",\n\t`tabPurchase Order Item`.`project_name` as \"Project\",\n\t`tabPurchase Order Item`.item_code as \"Item Code:Link/Item:120\",\n\t`tabPurchase Order Item`.base_amount as \"Amount:Currency:100\",\n\t(`tabPurchase Order Item`.billed_amt * ifnull(`tabPurchase Order`.conversion_rate, 1)) as \"Billed Amount:Currency:100\", \n\t(`tabPurchase Order Item`.base_amount - (ifnull(`tabPurchase Order Item`.billed_amt, 0) * ifnull(`tabPurchase Order`.conversion_rate, 1))) as \"Amount to Bill:Currency:100\",\n\t`tabPurchase Order Item`.item_name as \"Item Name::150\",\n\t`tabPurchase Order Item`.description as \"Description::200\",\n\t`tabPurchase Order`.company as \"Company:Link/Company:\"\nfrom\n\t`tabPurchase Order`, `tabPurchase Order Item`\nwhere\n\t`tabPurchase Order Item`.`parent` = `tabPurchase Order`.`name`\n\tand `tabPurchase Order`.docstatus = 1\n\tand `tabPurchase Order`.status != \"Closed\"\n\tand (ifnull(`tabPurchase Order Item`.billed_amt, 0) * ifnull(`tabPurchase Order`.conversion_rate, 1)) < ifnull(`tabPurchase Order Item`.base_amount, 0)\norder by `tabPurchase Order`.transaction_date asc",
"ref_doctype": "Purchase Invoice",
"report_name": "Purchase Order Items To Be Billed",
"report_type": "Query Report"
diff --git a/erpnext/buying/doctype/purchase_common/purchase_common.py b/erpnext/buying/doctype/purchase_common/purchase_common.py
index a86b330..df63e29 100644
--- a/erpnext/buying/doctype/purchase_common/purchase_common.py
+++ b/erpnext/buying/doctype/purchase_common/purchase_common.py
@@ -80,10 +80,10 @@
frappe.msgprint(_("Warning: Same item has been entered multiple times."))
- def check_for_stopped_or_closed_status(self, doctype, docname):
+ def check_for_closed_status(self, doctype, docname):
status = frappe.db.get_value(doctype, docname, "status")
- if status in ("Stopped", "Closed"):
+ if status == "Closed":
frappe.throw(_("{0} {1} status is {2}").format(doctype, docname, status), frappe.InvalidStatusError)
def check_docstatus(self, check, doctype, docname, detail_doctype = ''):
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.js b/erpnext/buying/doctype/purchase_order/purchase_order.js
index e23b0d4..40a1c8b 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.js
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.js
@@ -38,13 +38,13 @@
cur_frm.set_df_property("drop_ship", "hidden", !is_drop_ship);
- if(doc.docstatus == 1 && !in_list(["Stopped", "Closed", "Delivered"], doc.status)) {
+ if(doc.docstatus == 1 && !in_list(["Closed", "Delivered"], doc.status)) {
if (this.frm.has_perm("submit")) {
if(flt(doc.per_billed, 2) < 100 || doc.per_received < 100) {
- cur_frm.add_custom_button(__('Stop'), this.stop_purchase_order, __("Status"));
+ cur_frm.add_custom_button(__('Close'), this.close_purchase_order, __("Status"));
}
- cur_frm.add_custom_button(__('Close'), this.close_purchase_order, __("Status"));
+
}
@@ -58,13 +58,13 @@
cur_frm.cscript.add_from_mappers();
}
- if(doc.docstatus == 1 && in_list(["Stopped", "Closed", "Delivered"], doc.status)) {
+ if(doc.docstatus == 1 && in_list(["Closed", "Delivered"], doc.status)) {
if (this.frm.has_perm("submit")) {
- cur_frm.add_custom_button(__('Re-open'), this.unstop_purchase_order, __("Status"));
+ cur_frm.add_custom_button(__('Re-open'), this.unclose_purchase_order, __("Status"));
}
}
- if(doc.docstatus == 1 && !in_list(["Stopped", "Closed"], doc.status)) {
+ if(doc.docstatus == 1 && doc.status != "Closed") {
if(flt(doc.per_received, 2) < 100 && allow_receipt) {
cur_frm.add_custom_button(__('Receive'), this.make_purchase_receipt, __("Make"));
@@ -192,11 +192,7 @@
});
},
- stop_purchase_order: function(){
- cur_frm.cscript.update_status('Stop', 'Stopped')
- },
-
- unstop_purchase_order: function(){
+ unclose_purchase_order: function(){
cur_frm.cscript.update_status('Re-open', 'Submitted')
},
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.json b/erpnext/buying/doctype/purchase_order/purchase_order.json
index 70070cc..a3628be 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.json
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.json
@@ -1907,7 +1907,7 @@
"no_copy": 1,
"oldfieldname": "status",
"oldfieldtype": "Select",
- "options": "\nDraft\nTo Receive and Bill\nTo Bill\nTo Receive\nCompleted\nStopped\nCancelled\nClosed\nDelivered",
+ "options": "\nDraft\nTo Receive and Bill\nTo Bill\nTo Receive\nCompleted\nCancelled\nClosed\nDelivered",
"permlevel": 0,
"print_hide": 1,
"print_hide_if_no_value": 0,
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py
index 44fe7cf..06d3932 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.py
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.py
@@ -39,7 +39,7 @@
self.set_status()
pc_obj = frappe.get_doc('Purchase Common')
pc_obj.validate_for_items(self)
- self.check_for_stopped_or_closed_status(pc_obj)
+ self.check_for_closed_status(pc_obj)
self.validate_uom_is_integer("uom", "qty")
self.validate_uom_is_integer("stock_uom", ["qty", "required_qty"])
@@ -113,13 +113,13 @@
d.base_price_list_rate = d.base_rate = d.price_list_rate \
= d.rate = item_last_purchase_rate
- # Check for Stopped status
- def check_for_stopped_or_closed_status(self, pc_obj):
+ # Check for Closed status
+ def check_for_closed_status(self, pc_obj):
check_list =[]
for d in self.get('items'):
if d.meta.get_field('prevdoc_docname') and d.prevdoc_docname and d.prevdoc_docname not in check_list:
check_list.append(d.prevdoc_docname)
- pc_obj.check_for_stopped_or_closed_status( d.prevdoc_doctype, d.prevdoc_docname)
+ pc_obj.check_for_closed_status( d.prevdoc_doctype, d.prevdoc_docname)
def update_requested_qty(self):
material_request_map = {}
@@ -192,7 +192,7 @@
self.update_delivered_qty_in_sales_order()
pc_obj = frappe.get_doc('Purchase Common')
- self.check_for_stopped_or_closed_status(pc_obj)
+ self.check_for_closed_status(pc_obj)
# Check if Purchase Receipt has been submitted against current Purchase Order
pc_obj.check_docstatus(check = 'Next', doctype = 'Purchase Receipt', docname = self.name, detail_doctype = 'Purchase Receipt Item')
@@ -252,7 +252,7 @@
item.received_qty = item.qty
@frappe.whitelist()
-def stop_or_unstop_purchase_orders(names, status):
+def close_or_unclose_purchase_orders(names, status):
if not frappe.has_permission("Purchase Order", "write"):
frappe.throw(_("Not permitted"), frappe.PermissionError)
@@ -260,11 +260,11 @@
for name in names:
po = frappe.get_doc("Purchase Order", name)
if po.docstatus == 1:
- if status in ("Stopped", "Closed"):
- if po.status not in ("Stopped", "Cancelled", "Closed") and (po.per_received < 100 or po.per_billed < 100):
+ if status == "Closed":
+ if po.status not in ( "Cancelled", "Closed") and (po.per_received < 100 or po.per_billed < 100):
po.update_status(status)
else:
- if po.status in ("Stopped", "Closed"):
+ if po.status == "Closed":
po.update_status("Draft")
frappe.local.message_log = []
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order_list.js b/erpnext/buying/doctype/purchase_order/purchase_order_list.js
index 253eb4b..f6e7eeb 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order_list.js
+++ b/erpnext/buying/doctype/purchase_order/purchase_order_list.js
@@ -2,37 +2,31 @@
add_fields: ["base_grand_total", "company", "currency", "supplier",
"supplier_name", "per_received", "per_billed", "status"],
get_indicator: function(doc) {
- if(doc.status==="Stopped") {
- return [__("Stopped"), "darkgrey", "status,=,Stopped"];
- } else if(doc.status==="Closed"){
+ if(doc.status==="Closed"){
return [__("Closed"), "green", "status,=,Closed"];
} else if (doc.status==="Delivered") {
return [__("Delivered"), "green", "status,=,Closed"];
- }else if(flt(doc.per_received, 2) < 100 && doc.status!=="Stopped") {
+ }else if(flt(doc.per_received, 2) < 100 && doc.status!=="Closed") {
if(flt(doc.per_billed, 2) < 100) {
return [__("To Receive and Bill"), "orange",
- "per_received,<,100|per_billed,<,100|status,!=,Stopped"];
+ "per_received,<,100|per_billed,<,100|status,!=,Closed"];
} else {
return [__("To Receive"), "orange",
- "per_received,<,100|per_billed,=,100|status,!=,Stopped"];
+ "per_received,<,100|per_billed,=,100|status,!=,Closed"];
}
- } else if(flt(doc.per_received, 2) == 100 && flt(doc.per_billed, 2) < 100 && doc.status!=="Stopped") {
- return [__("To Bill"), "orange", "per_received,=,100|per_billed,<,100|status,!=,Stopped"];
- } else if(flt(doc.per_received, 2) == 100 && flt(doc.per_billed, 2) == 100 && doc.status!=="Stopped") {
- return [__("Completed"), "green", "per_received,=,100|per_billed,=,100|status,!=,Stopped"];
+ } else if(flt(doc.per_received, 2) == 100 && flt(doc.per_billed, 2) < 100 && doc.status!=="Closed") {
+ return [__("To Bill"), "orange", "per_received,=,100|per_billed,<,100|status,!=,Closed"];
+ } else if(flt(doc.per_received, 2) == 100 && flt(doc.per_billed, 2) == 100 && doc.status!=="Closed") {
+ return [__("Completed"), "green", "per_received,=,100|per_billed,=,100|status,!=,Closed"];
}
},
onload: function(listview) {
- var method = "erpnext.buying.doctype.purchase_order.purchase_order.stop_or_unstop_purchase_orders";
+ var method = "erpnext.buying.doctype.purchase_order.purchase_order.close_or_unclose_purchase_orders";
listview.page.add_menu_item(__("Close"), function() {
listview.call_for_selected_items(method, {"status": "Closed"});
});
- listview.page.add_menu_item(__("Stop"), function() {
- listview.call_for_selected_items(method, {"status": "Stopped"});
- });
-
listview.page.add_menu_item(__("Re-open"), function() {
listview.call_for_selected_items(method, {"status": "Submitted"});
});
diff --git a/erpnext/controllers/recurring_document.py b/erpnext/controllers/recurring_document.py
index 013a70e..3ecbe5f 100644
--- a/erpnext/controllers/recurring_document.py
+++ b/erpnext/controllers/recurring_document.py
@@ -34,7 +34,7 @@
date_field = date_field_map[doctype]
- condition = " and ifnull(status, '') != 'Stopped'" if doctype in ("Sales Order", "Purchase Order") else ""
+ condition = " and ifnull(status, '') != 'Closed'" if doctype in ("Sales Order", "Purchase Order") else ""
recurring_documents = frappe.db.sql("""select name, recurring_id
from `tab{0}` where is_recurring=1
diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py
index f340f91..09a8c94 100644
--- a/erpnext/controllers/selling_controller.py
+++ b/erpnext/controllers/selling_controller.py
@@ -219,11 +219,11 @@
so_warehouse = so_item and so_item[0]["warehouse"] or ""
return so_qty, so_warehouse
- def check_stop_or_close_sales_order(self, ref_fieldname):
+ def check_close_sales_order(self, ref_fieldname):
for d in self.get("items"):
if d.get(ref_fieldname):
status = frappe.db.get_value("Sales Order", d.get(ref_fieldname), "status")
- if status in ("Stopped", "Closed"):
+ if status == "Closed":
frappe.throw(_("Sales Order {0} is {1}").format(d.get(ref_fieldname), status))
def check_active_sales_items(obj):
diff --git a/erpnext/controllers/status_updater.py b/erpnext/controllers/status_updater.py
index 32724a9..5c5719e 100644
--- a/erpnext/controllers/status_updater.py
+++ b/erpnext/controllers/status_updater.py
@@ -35,7 +35,6 @@
["To Deliver", "eval:self.per_delivered < 100 and self.per_billed == 100 and self.docstatus == 1"],
["Completed", "eval:self.per_delivered == 100 and self.per_billed == 100 and self.docstatus == 1"],
["Completed", "eval:self.order_type == 'Maintenance' and self.per_billed == 100 and self.docstatus == 1"],
- ["Stopped", "eval:self.status=='Stopped'"],
["Cancelled", "eval:self.docstatus==2"],
["Closed", "eval:self.status=='Closed'"],
],
@@ -46,7 +45,6 @@
["To Receive", "eval:self.per_received < 100 and self.per_billed == 100 and self.docstatus == 1"],
["Completed", "eval:self.per_received == 100 and self.per_billed == 100 and self.docstatus == 1"],
["Delivered", "eval:self.status=='Delivered'"],
- ["Stopped", "eval:self.status=='Stopped'"],
["Cancelled", "eval:self.docstatus==2"],
["Closed", "eval:self.status=='Closed'"],
],
diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py
index 4c6a320..10bf2f2 100644
--- a/erpnext/controllers/stock_controller.py
+++ b/erpnext/controllers/stock_controller.py
@@ -243,8 +243,8 @@
if so and so_item_rows:
sales_order = frappe.get_doc("Sales Order", so)
- if sales_order.status in ["Stopped", "Cancelled"]:
- frappe.throw(_("{0} {1} is cancelled or stopped").format(_("Sales Order"), so),
+ if sales_order.status in ["Closed", "Cancelled"]:
+ frappe.throw(_("{0} {1} is cancelled or closed").format(_("Sales Order"), so),
frappe.InvalidStatusError)
sales_order.update_reserved_qty(so_item_rows)
diff --git a/erpnext/docs/user/manual/en/accounts/multi-currency-accounting.md b/erpnext/docs/user/manual/en/accounts/multi-currency-accounting.md
index 6080dcc..c5887bb 100644
--- a/erpnext/docs/user/manual/en/accounts/multi-currency-accounting.md
+++ b/erpnext/docs/user/manual/en/accounts/multi-currency-accounting.md
@@ -27,7 +27,7 @@
In Sales Invoice, transaction currency must be same as accounting currency of Customer if Customer's accounting currency is other than Company Currency. Otherwise, you can select any currency in Invoice. On selection of Customer, system will fetch Receivable account from Customer / Company. The currency of receivable account must be same as Customer's accounting currency.
-Now, in POS, Paid Amount will be enetered in transaction currency, instead of earlier Company Currency. Write Off Amount will also be entered in transaction currency.
+Now, in POS, Paid Amount will be entered in transaction currency, instead of earlier Company Currency. Write Off Amount will also be entered in transaction currency.
Outstanding Amount and Advance Amount will always be calculated and shown in Customer's Account Currency.
@@ -115,4 +115,4 @@
In Accounts Receivable / Payable report, system shows all the amounts in Party / Account Currency.
-<img class="screenshot" alt="Accounts Receivable Report" src="{{docs_base_url}}/assets/img/accounts/multi-currency/accounts-receivable.png">
\ No newline at end of file
+<img class="screenshot" alt="Accounts Receivable Report" src="{{docs_base_url}}/assets/img/accounts/multi-currency/accounts-receivable.png">
diff --git a/erpnext/docs/user/manual/en/accounts/opening-accounts.md b/erpnext/docs/user/manual/en/accounts/opening-accounts.md
index 214642d..28ba0c2 100644
--- a/erpnext/docs/user/manual/en/accounts/opening-accounts.md
+++ b/erpnext/docs/user/manual/en/accounts/opening-accounts.md
@@ -32,7 +32,7 @@
A nice way to simplify opening is to use a temporary account
just for opening. These accounts will become zero once all your old
invoices and opening balances of bank, debt stock etc are entered.
-In the standard chart of accounts, a **Temperory Opening** account is created under
+In the standard chart of accounts, a **Temporary Opening** account is created under
assets
#### The Opening Entry
@@ -63,8 +63,8 @@
You can make two Opening Journal Entrys:
- * For all assets (excluding Accounts Receivables): This entry will contain all your assets except the amounts you are expecting from your Customers against outstanding Sales Invoices. You will have to update your receivables by making an individual entry for each Invoice (this is because, the system will help you track the invoices which are yet to be paid). You can credit the sum of all these debits against the **Temperory Opening** account.
- * For all liabilities: Similarly you need to pass a Journal Entry for your Opening Liabilities (except for the bills you have to pay) against **Temperory Opening** account.
+ * For all assets (excluding Accounts Receivables): This entry will contain all your assets except the amounts you are expecting from your Customers against outstanding Sales Invoices. You will have to update your receivables by making an individual entry for each Invoice (this is because, the system will help you track the invoices which are yet to be paid). You can credit the sum of all these debits against the **Temporary Opening** account.
+ * For all liabilities: Similarly you need to pass a Journal Entry for your Opening Liabilities (except for the bills you have to pay) against **Temporary Opening** account.
* In this method you can update opening balance of specific balancesheet accounts and not for all.
* Opening entry is only for balance sheet accounts and not for expense or Income accounts.
@@ -89,6 +89,6 @@
in the Invoice. Item code in the Invoice is not necessary, so it should not be
such a problem.
-Once all your invoices are entered, your **Temperory Opening** account will have a balance of zero!
+Once all your invoices are entered, your **Temporary Opening** account will have a balance of zero!
{next}
diff --git a/erpnext/selling/doctype/quotation/quotation.js b/erpnext/selling/doctype/quotation/quotation.js
index 83cec04..3e90b97 100644
--- a/erpnext/selling/doctype/quotation/quotation.js
+++ b/erpnext/selling/doctype/quotation/quotation.js
@@ -47,6 +47,7 @@
}
this.toggle_reqd_lead_customer();
+
},
quotation_to: function() {
@@ -162,3 +163,9 @@
frappe.ui.form.on("Quotation Item", "items_on_form_rendered", function(frm, cdt, cdn) {
// enable tax_amount field if Actual
})
+
+frappe.ui.form.on("Quotation Item", "stock_balance", function(frm, cdt, cdn) {
+ var d = frappe.model.get_doc(cdt, cdn);
+ frappe.route_options = {"item_code": d.item_code};
+ frappe.set_route("query-report", "Stock Balance");
+})
\ No newline at end of file
diff --git a/erpnext/selling/doctype/quotation_item/quotation_item.json b/erpnext/selling/doctype/quotation_item/quotation_item.json
index 0146f38..b1bb6f7 100644
--- a/erpnext/selling/doctype/quotation_item/quotation_item.json
+++ b/erpnext/selling/doctype/quotation_item/quotation_item.json
@@ -696,6 +696,128 @@
{
"allow_on_submit": 0,
"bold": 0,
+ "collapsible": 1,
+ "collapsible_depends_on": "eval:doc.actual_qty",
+ "fieldname": "item_balance",
+ "fieldtype": "Section Break",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "in_filter": 0,
+ "in_list_view": 0,
+ "label": "Item Balance",
+ "length": 0,
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "fieldname": "warehouse",
+ "fieldtype": "Link",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "in_filter": 0,
+ "in_list_view": 0,
+ "label": "Warehouse",
+ "length": 0,
+ "no_copy": 0,
+ "options": "Warehouse",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 1,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "report_hide": 1,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "fieldname": "column_break_30",
+ "fieldtype": "Column Break",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "in_filter": 0,
+ "in_list_view": 0,
+ "length": 0,
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "description": "",
+ "fieldname": "actual_qty",
+ "fieldtype": "Float",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "in_filter": 0,
+ "in_list_view": 0,
+ "label": "Actual Qty",
+ "length": 0,
+ "no_copy": 1,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 1,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "report_hide": 1,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "fieldname": "stock_balance",
+ "fieldtype": "Button",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "in_filter": 0,
+ "in_list_view": 0,
+ "label": "Stock Balance",
+ "length": 0,
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_on_submit": 0,
+ "bold": 0,
"collapsible": 0,
"fieldname": "reference",
"fieldtype": "Section Break",
@@ -910,7 +1032,7 @@
"istable": 1,
"max_attachments": 0,
"menu_index": 0,
- "modified": "2016-02-08 08:02:06.257910",
+ "modified": "2016-02-23 18:12:49.939175",
"modified_by": "Administrator",
"module": "Selling",
"name": "Quotation Item",
diff --git a/erpnext/selling/doctype/sales_order/sales_order.js b/erpnext/selling/doctype/sales_order/sales_order.js
index 9dae2b9..b7dff77 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.js
+++ b/erpnext/selling/doctype/sales_order/sales_order.js
@@ -19,7 +19,7 @@
var allow_delivery = false;
if(doc.docstatus==1) {
- if(doc.status != 'Stopped' && doc.status != 'Closed') {
+ if(doc.status != 'Closed') {
for (var i in cur_frm.doc.items) {
var item = cur_frm.doc.items[i];
@@ -42,13 +42,10 @@
}
if (this.frm.has_perm("submit")) {
- // stop
+ // close
if(flt(doc.per_delivered, 2) < 100 || flt(doc.per_billed) < 100) {
- cur_frm.add_custom_button(__('Stop'), this.stop_sales_order, __("Status"))
+ cur_frm.add_custom_button(__('Close'), this.close_sales_order, __("Status"))
}
-
-
- cur_frm.add_custom_button(__('Close'), this.close_sales_order, __("Status"))
}
// delivery note
@@ -87,8 +84,8 @@
} else {
if (this.frm.has_perm("submit")) {
- // un-stop
- cur_frm.add_custom_button(__('Re-open'), cur_frm.cscript['Unstop Sales Order'], __("Status"));
+ // un-close
+ cur_frm.add_custom_button(__('Re-open'), cur_frm.cscript['Unclose Sales Order'], __("Status"));
}
}
}
@@ -220,9 +217,6 @@
});
dialog.show();
},
- stop_sales_order: function(){
- cur_frm.cscript.update_status("Stop", "Stopped")
- },
close_sales_order: function(){
cur_frm.cscript.update_status("Close", "Closed")
}
@@ -263,7 +257,7 @@
});
}
-cur_frm.cscript['Unstop Sales Order'] = function() {
+cur_frm.cscript['Unclose Sales Order'] = function() {
cur_frm.cscript.update_status('Re-open', 'Draft')
}
diff --git a/erpnext/selling/doctype/sales_order/sales_order.json b/erpnext/selling/doctype/sales_order/sales_order.json
index 8049a67..5c57f45 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.json
+++ b/erpnext/selling/doctype/sales_order/sales_order.json
@@ -2201,7 +2201,7 @@
"no_copy": 1,
"oldfieldname": "status",
"oldfieldtype": "Select",
- "options": "\nDraft\nTo Deliver and Bill\nTo Bill\nTo Deliver\nCompleted\nStopped\nCancelled\nClosed",
+ "options": "\nDraft\nTo Deliver and Bill\nTo Bill\nTo Deliver\nCompleted\nCancelled\nClosed",
"permlevel": 0,
"print_hide": 1,
"print_hide_if_no_value": 0,
diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py
index ac5e21e..590f749 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.py
+++ b/erpnext/selling/doctype/sales_order/sales_order.py
@@ -160,9 +160,9 @@
self.update_prevdoc_status('submit')
def on_cancel(self):
- # Cannot cancel stopped SO
- if self.status == 'Stopped':
- frappe.throw(_("Stopped order cannot be cancelled. Unstop to cancel."))
+ # Cannot cancel closed SO
+ if self.status == 'Closed':
+ frappe.throw(_("Closed order cannot be cancelled. Unclose to cancel."))
self.check_nextdoc_docstatus()
self.update_reserved_qty()
@@ -317,7 +317,7 @@
return list_context
@frappe.whitelist()
-def stop_or_unstop_sales_orders(names, status):
+def close_or_unclose_sales_orders(names, status):
if not frappe.has_permission("Sales Order", "write"):
frappe.throw(_("Not permitted"), frappe.PermissionError)
@@ -325,11 +325,11 @@
for name in names:
so = frappe.get_doc("Sales Order", name)
if so.docstatus == 1:
- if status in ("Stopped", "Closed"):
- if so.status not in ("Stopped", "Cancelled", "Closed") and (so.per_delivered < 100 or so.per_billed < 100):
+ if status == "Closed":
+ if so.status not in ("Cancelled", "Closed") and (so.per_delivered < 100 or so.per_billed < 100):
so.update_status(status)
else:
- if so.status in ("Stopped", "Closed"):
+ if so.status == "Closed":
so.update_status('Draft')
frappe.local.message_log = []
diff --git a/erpnext/selling/doctype/sales_order/sales_order_calendar.js b/erpnext/selling/doctype/sales_order/sales_order_calendar.js
index 8724daa..7a38f90 100644
--- a/erpnext/selling/doctype/sales_order/sales_order_calendar.js
+++ b/erpnext/selling/doctype/sales_order/sales_order_calendar.js
@@ -32,7 +32,7 @@
],
get_events_method: "erpnext.selling.doctype.sales_order.sales_order.get_events",
get_css_class: function(data) {
- if(data.status=="Stopped") {
+ if(data.status=="Closed") {
return "";
} if(data.delivery_status=="Not Delivered") {
return "danger";
diff --git a/erpnext/selling/doctype/sales_order/sales_order_list.js b/erpnext/selling/doctype/sales_order/sales_order_list.js
index ff9ff91..53b2818 100644
--- a/erpnext/selling/doctype/sales_order/sales_order_list.js
+++ b/erpnext/selling/doctype/sales_order/sales_order_list.js
@@ -2,58 +2,51 @@
add_fields: ["base_grand_total", "customer_name", "currency", "delivery_date", "per_delivered", "per_billed",
"status", "order_type"],
get_indicator: function(doc) {
- if(doc.status==="Stopped") {
- return [__("Stopped"), "darkgrey", "status,=,Stopped"];
-
- } else if(doc.status==="Closed"){
+ if(doc.status==="Closed"){
return [__("Closed"), "green", "status,=,Closed"];
} else if (doc.order_type !== "Maintenance"
&& flt(doc.per_delivered, 2) < 100 && frappe.datetime.get_diff(doc.delivery_date) < 0) {
// to bill & overdue
- return [__("Overdue"), "red", "per_delivered,<,100|delivery_date,<,Today|status,!=,Stopped"];
+ return [__("Overdue"), "red", "per_delivered,<,100|delivery_date,<,Today|status,!=,Closed"];
} else if (doc.order_type !== "Maintenance"
- && flt(doc.per_delivered, 2) < 100 && doc.status!=="Stopped") {
+ && flt(doc.per_delivered, 2) < 100 && doc.status!=="Closed") {
// not delivered
if(flt(doc.per_billed, 2) < 100) {
// not delivered & not billed
return [__("To Deliver and Bill"), "orange",
- "per_delivered,<,100|per_billed,<,100|status,!=,Stopped"];
+ "per_delivered,<,100|per_billed,<,100|status,!=,Closed"];
} else {
// not billed
return [__("To Deliver"), "orange",
- "per_delivered,<,100|per_billed,=,100|status,!=,Stopped"];
+ "per_delivered,<,100|per_billed,=,100|status,!=,Closed"];
}
} else if ((doc.order_type === "Maintenance" || flt(doc.per_delivered, 2) == 100)
- && flt(doc.per_billed, 2) < 100 && doc.status!=="Stopped") {
+ && flt(doc.per_billed, 2) < 100 && doc.status!=="Closed") {
// to bill
- return [__("To Bill"), "orange", "per_delivered,=,100|per_billed,<,100|status,!=,Stopped"];
+ return [__("To Bill"), "orange", "per_delivered,=,100|per_billed,<,100|status,!=,Closed"];
} else if((doc.order_type === "Maintenance" || flt(doc.per_delivered, 2) == 100)
- && flt(doc.per_billed, 2) == 100 && doc.status!=="Stopped") {
+ && flt(doc.per_billed, 2) == 100 && doc.status!=="Closed") {
- return [__("Completed"), "green", "per_delivered,=,100|per_billed,=,100|status,!=,Stopped"];
+ return [__("Completed"), "green", "per_delivered,=,100|per_billed,=,100|status,!=,Closed"];
}
},
onload: function(listview) {
- var method = "erpnext.selling.doctype.sales_order.sales_order.stop_or_unstop_sales_orders";
+ var method = "erpnext.selling.doctype.sales_order.sales_order.close_or_unclose_sales_orders";
listview.page.add_menu_item(__("Close"), function() {
listview.call_for_selected_items(method, {"status": "Closed"});
});
- listview.page.add_menu_item(__("Stop"), function() {
- listview.call_for_selected_items(method, {"status": "Stoped"});
- });
-
listview.page.add_menu_item(__("Re-open"), function() {
- listview.call_for_selected_items(method, {"status": "Unstop"});
+ listview.call_for_selected_items(method, {"status": "Submitted"});
});
}
diff --git a/erpnext/selling/doctype/sales_order/test_sales_order.py b/erpnext/selling/doctype/sales_order/test_sales_order.py
index c6ea618..edd7cdf 100644
--- a/erpnext/selling/doctype/sales_order/test_sales_order.py
+++ b/erpnext/selling/doctype/sales_order/test_sales_order.py
@@ -93,12 +93,12 @@
dn = create_dn_against_so(so.name)
self.assertEqual(get_reserved_qty(), existing_reserved_qty + 5)
- # stop so
+ # close so
so.load_from_db()
- so.update_status("Stopped")
+ so.update_status("Closed")
self.assertEqual(get_reserved_qty(), existing_reserved_qty)
- # unstop so
+ # unclose so
so.load_from_db()
so.update_status('Draft')
self.assertEqual(get_reserved_qty(), existing_reserved_qty + 5)
@@ -143,14 +143,14 @@
self.assertEqual(get_reserved_qty("_Test Item Home Desktop 100"),
existing_reserved_qty_item2 + 10)
- # stop so
+ # close so
so.load_from_db()
- so.update_status("Stopped")
+ so.update_status("Closed")
self.assertEqual(get_reserved_qty("_Test Item"), existing_reserved_qty_item1)
self.assertEqual(get_reserved_qty("_Test Item Home Desktop 100"), existing_reserved_qty_item2)
- # unstop so
+ # unclose so
so.load_from_db()
so.update_status('Draft')
diff --git a/erpnext/startup/notifications.py b/erpnext/startup/notifications.py
index 3acf63c..181a969 100644
--- a/erpnext/startup/notifications.py
+++ b/erpnext/startup/notifications.py
@@ -15,7 +15,7 @@
"Opportunity": {"status": "Open"},
"Quotation": {"docstatus": 0},
"Sales Order": {
- "status": ("not in", ("Stopped", "Completed", "Closed")),
+ "status": ("not in", ("Completed", "Closed")),
"docstatus": ("<", 2)
},
"Journal Entry": {"docstatus": 0},
@@ -29,7 +29,7 @@
"Stock Entry": {"docstatus": 0},
"Material Request": {"docstatus": 0},
"Purchase Order": {
- "status": ("not in", ("Stopped", "Completed", "Closed")),
+ "status": ("not in", ("Completed", "Closed")),
"docstatus": ("<", 2)
},
"Production Order": { "status": "In Process" },
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.js b/erpnext/stock/doctype/delivery_note/delivery_note.js
index 3365fa2..7407975 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.js
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.js
@@ -34,7 +34,7 @@
source_doctype: "Sales Order",
get_query_filters: {
docstatus: 1,
- status: ["not in", ["Stopped", "Closed"]],
+ status: ["!=", "Closed"],
per_delivered: ["<", 99.99],
project_name: cur_frm.doc.project_name || undefined,
customer: cur_frm.doc.customer || undefined,
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py
index 0dabfa1..2db3509 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.py
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.py
@@ -98,7 +98,7 @@
self.set_status()
self.so_required()
self.validate_proj_cust()
- self.check_stop_or_close_sales_order("against_sales_order")
+ self.check_close_sales_order("against_sales_order")
self.validate_for_items()
self.validate_warehouse()
self.validate_uom_is_integer("stock_uom", "qty")
@@ -195,7 +195,7 @@
self.make_gl_entries()
def on_cancel(self):
- self.check_stop_or_close_sales_order("against_sales_order")
+ self.check_close_sales_order("against_sales_order")
self.check_next_docstatus()
self.update_prevdoc_status()
diff --git a/erpnext/stock/doctype/material_request/material_request.js b/erpnext/stock/doctype/material_request/material_request.js
index 3f3eb99..a7ca867 100644
--- a/erpnext/stock/doctype/material_request/material_request.js
+++ b/erpnext/stock/doctype/material_request/material_request.js
@@ -74,7 +74,7 @@
source_doctype: "Sales Order",
get_query_filters: {
docstatus: 1,
- status: ["!=", "Stopped"],
+ status: ["!=", "Closed"],
per_delivered: ["<", 99.99],
company: cur_frm.doc.company
}
diff --git a/erpnext/stock/doctype/material_request/material_request.py b/erpnext/stock/doctype/material_request/material_request.py
index ff280fd..95b2dd1 100644
--- a/erpnext/stock/doctype/material_request/material_request.py
+++ b/erpnext/stock/doctype/material_request/material_request.py
@@ -100,7 +100,7 @@
def on_cancel(self):
pc_obj = frappe.get_doc('Purchase Common')
- pc_obj.check_for_stopped_or_closed_status(self.doctype, self.name)
+ pc_obj.check_for_closed_status(self.doctype, self.name)
pc_obj.check_docstatus(check = 'Next', doctype = 'Purchase Order', docname = self.name, detail_doctype = 'Purchase Order Item')
self.update_requested_qty()
diff --git a/erpnext/stock/doctype/packed_item/packed_item.py b/erpnext/stock/doctype/packed_item/packed_item.py
index 0b69d31..2078eeb 100644
--- a/erpnext/stock/doctype/packed_item/packed_item.py
+++ b/erpnext/stock/doctype/packed_item/packed_item.py
@@ -14,7 +14,7 @@
pass
def get_product_bundle_items(item_code):
- return frappe.db.sql("""select t1.item_code, t1.qty, t1.uom
+ return frappe.db.sql("""select t1.item_code, t1.qty, t1.uom, t1.description
from `tabProduct Bundle Item` t1, `tabProduct Bundle` t2
where t2.new_item_code=%s and t1.parent = t2.name""", item_code, as_dict=1)
@@ -27,14 +27,14 @@
where item_code = %s and warehouse = %s""", (item, warehouse), as_dict = 1)
return det and det[0] or frappe._dict()
-def update_packing_list_item(doc, packing_item_code, qty, main_item_row):
+def update_packing_list_item(doc, packing_item_code, qty, main_item_row, description):
bin = get_bin_qty(packing_item_code, main_item_row.warehouse)
item = get_packing_item_details(packing_item_code)
# check if exists
exists = 0
for d in doc.get("packed_items"):
- if d.parent_item == main_item_row.item_code and d.item_code == packing_item_code and d.parent_detail_docname == main_item_row.name:
+ if d.parent_item == main_item_row.item_code and d.item_code == packing_item_code and d.parent_detail_docname == main_item_row.name and d.description == description:
pi, exists = d, 1
break
@@ -50,6 +50,7 @@
pi.qty = flt(qty)
pi.actual_qty = flt(bin.get("actual_qty"))
pi.projected_qty = flt(bin.get("projected_qty"))
+ pi.description = description
if not pi.warehouse:
pi.warehouse = main_item_row.warehouse
if not pi.batch_no:
@@ -66,7 +67,7 @@
for d in doc.get("items"):
if frappe.db.get_value("Product Bundle", {"new_item_code": d.item_code}):
for i in get_product_bundle_items(d.item_code):
- update_packing_list_item(doc, i.item_code, flt(i.qty)*flt(d.qty), d)
+ update_packing_list_item(doc, i.item_code, flt(i.qty)*flt(d.qty), d, i.description)
if [d.item_code, d.name] not in parent_items:
parent_items.append([d.item_code, d.name])
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
index 7cf7ae9..a4df2d8 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
@@ -46,7 +46,7 @@
get_query_filters: {
supplier: cur_frm.doc.supplier || undefined,
docstatus: 1,
- status: ["not in", ["Stopped", "Closed"]],
+ status: ["!=", "Closed"],
per_received: ["<", 99.99],
company: cur_frm.doc.company
}
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
index 1d87238..454b386 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
@@ -61,7 +61,7 @@
pc_obj = frappe.get_doc('Purchase Common')
pc_obj.validate_for_items(self)
- self.check_for_stopped_or_closed_status(pc_obj)
+ self.check_for_closed_status(pc_obj)
# sub-contracting
self.validate_for_subcontracting()
@@ -177,8 +177,8 @@
if po and po_item_rows:
po_obj = frappe.get_doc("Purchase Order", po)
- if po_obj.status in ["Stopped", "Cancelled"]:
- frappe.throw(_("{0} {1} is cancelled or stopped").format(_("Purchase Order"), po),
+ if po_obj.status in ["Closed", "Cancelled"]:
+ frappe.throw(_("{0} {1} is cancelled or closed").format(_("Purchase Order"), po),
frappe.InvalidStatusError)
po_obj.update_ordered_qty(po_item_rows)
@@ -212,13 +212,13 @@
if self.docstatus==1:
raise frappe.ValidationError
- # Check for Stopped status
- def check_for_stopped_or_closed_status(self, pc_obj):
+ # Check for Closed status
+ def check_for_closed_status(self, pc_obj):
check_list =[]
for d in self.get('items'):
if d.meta.get_field('prevdoc_docname') and d.prevdoc_docname and d.prevdoc_docname not in check_list:
check_list.append(d.prevdoc_docname)
- pc_obj.check_for_stopped_or_closed_status(d.prevdoc_doctype, d.prevdoc_docname)
+ pc_obj.check_for_closed_status(d.prevdoc_doctype, d.prevdoc_docname)
# on submit
def on_submit(self):
@@ -256,7 +256,7 @@
def on_cancel(self):
pc_obj = frappe.get_doc('Purchase Common')
- self.check_for_stopped_or_closed_status(pc_obj)
+ self.check_for_closed_status(pc_obj)
# Check if Purchase Invoice has been submitted against current Purchase Order
submitted = frappe.db.sql("""select t1.name
from `tabPurchase Invoice` t1,`tabPurchase Invoice Item` t2
diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py
index 22dbe51..6860486 100644
--- a/erpnext/stock/get_item_details.py
+++ b/erpnext/stock/get_item_details.py
@@ -164,7 +164,7 @@
"net_amount": 0.0,
"discount_percentage": 0.0,
"supplier": item.default_supplier,
- "delivered_by_supplier": item.delivered_by_supplier,
+ "delivered_by_supplier": item.delivered_by_supplier
})
# if default specified in item is for another company, fetch from company
diff --git a/erpnext/stock/stock_balance.py b/erpnext/stock/stock_balance.py
index b9e3cd2..708552c 100644
--- a/erpnext/stock/stock_balance.py
+++ b/erpnext/stock/stock_balance.py
@@ -92,7 +92,7 @@
and parenttype="Sales Order"
and item_code != parent_item
and exists (select * from `tabSales Order` so
- where name = dnpi_in.parent and docstatus = 1 and status not in ('Stopped','Closed'))
+ where name = dnpi_in.parent and docstatus = 1 and status != 'Closed')
) dnpi)
union
(select qty as dnpi_qty, qty as so_item_qty,
@@ -102,7 +102,7 @@
and (so_item.delivered_by_supplier is null or so_item.delivered_by_supplier = 0)
and exists(select * from `tabSales Order` so
where so.name = so_item.parent and so.docstatus = 1
- and so.status not in ('Stopped','Closed')))
+ and so.status != 'Closed'))
) tab
where
so_item_qty >= so_item_delivered_qty
@@ -125,7 +125,7 @@
from `tabPurchase Order Item` po_item, `tabPurchase Order` po
where po_item.item_code=%s and po_item.warehouse=%s
and po_item.qty > po_item.received_qty and po_item.parent=po.name
- and po.status not in ('Stopped', 'Closed', 'Delivered') and po.docstatus=1
+ and po.status not in ('Closed', 'Delivered') and po.docstatus=1
and po_item.delivered_by_supplier = 0""", (item_code, warehouse))
return flt(ordered_qty[0][0]) if ordered_qty else 0