Merge branch 'develop' of https://github.com/frappe/erpnext into wip_payrec
diff --git a/erpnext/config/buying.py b/erpnext/config/buying.py
index bc62519..1b9e5a2 100644
--- a/erpnext/config/buying.py
+++ b/erpnext/config/buying.py
@@ -150,7 +150,7 @@
{
"type": "report",
"is_query_report": True,
- "name": "Supplier Addresses And Contacts",
+ "name": "Supplier Addresses and Contacts",
"doctype": "Supplier"
},
{
diff --git a/erpnext/config/selling.py b/erpnext/config/selling.py
index 200ab6d..c95f15a 100644
--- a/erpnext/config/selling.py
+++ b/erpnext/config/selling.py
@@ -206,7 +206,7 @@
{
"type": "report",
"is_query_report": True,
- "name": "Customer Addresses And Contacts",
+ "name": "Customer Addresses and Contacts",
"doctype": "Contact"
},
{
diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py
index afccdfa..acb0024 100644
--- a/erpnext/controllers/buying_controller.py
+++ b/erpnext/controllers/buying_controller.py
@@ -17,6 +17,7 @@
self.supplier_name = frappe.db.get_value("Supplier",
self.supplier, "supplier_name")
self.is_item_table_empty()
+ self.set_qty_as_per_stock_uom()
self.validate_stock_or_nonstock_items()
self.validate_warehouse()
@@ -317,3 +318,10 @@
def is_item_table_empty(self):
if not len(self.get(self.fname)):
frappe.throw(_("Item table can not be blank"))
+
+ def set_qty_as_per_stock_uom(self):
+ for d in self.get(self.fname):
+ if d.meta.get_field("stock_qty") and not d.stock_qty:
+ if not d.conversion_factor:
+ frappe.throw(_("Row {0}: Conversion Factor is mandatory"))
+ d.stock_qty = flt(d.qty) * flt(d.conversion_factor)
\ No newline at end of file
diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py
index bb3ab69..27437a3 100644
--- a/erpnext/controllers/stock_controller.py
+++ b/erpnext/controllers/stock_controller.py
@@ -240,7 +240,7 @@
else:
is_expense_account = frappe.db.get_value("Account",
item.get("expense_account"), "report_type")=="Profit and Loss"
- if self.doctype != "Purchase Receipt" and not is_expense_account:
+ if self.doctype not in ("Purchase Receipt", "Stock Reconciliation") and not is_expense_account:
frappe.throw(_("Expense / Difference account ({0}) must be a 'Profit or Loss' account")
.format(item.get("expense_account")))
if is_expense_account and not item.get("cost_center"):
diff --git a/erpnext/public/js/queries.js b/erpnext/public/js/queries.js
index b57b765..4bb3302 100644
--- a/erpnext/public/js/queries.js
+++ b/erpnext/public/js/queries.js
@@ -71,7 +71,7 @@
warehouse: function(doc) {
return {
- filters: [["Warehouse", "company", "in", ["", doc.company]]]
+ filters: [["Warehouse", "company", "in", ["", cstr(doc.company)]]]
}
}
});
diff --git a/erpnext/selling/report/customer_addresses_and_contacts/customer_addresses_and_contacts.json b/erpnext/selling/report/customer_addresses_and_contacts/customer_addresses_and_contacts.json
index 9bde272..deb90b7 100644
--- a/erpnext/selling/report/customer_addresses_and_contacts/customer_addresses_and_contacts.json
+++ b/erpnext/selling/report/customer_addresses_and_contacts/customer_addresses_and_contacts.json
@@ -1,17 +1,17 @@
{
- "apply_user_permissions": 1,
- "creation": "2012-10-04 18:45:27",
- "docstatus": 0,
- "doctype": "Report",
- "idx": 1,
- "is_standard": "Yes",
- "modified": "2014-06-03 07:18:17.006732",
- "modified_by": "Administrator",
- "module": "Selling",
- "name": "Customer Addresses And Contacts",
- "owner": "Administrator",
- "query": "SELECT\n\t`tabCustomer`.name as customer_id,\n\t`tabCustomer`.customer_name,\n\t`tabCustomer`.customer_group,\n\t`tabAddress`.address_line1,\n\t`tabAddress`.address_line2,\n\t`tabAddress`.city,\n\t`tabAddress`.state,\n\t`tabAddress`.pincode,\n\t`tabAddress`.country,\n\t`tabAddress`.is_primary_address, \n\t`tabContact`.first_name,\n\t`tabContact`.last_name,\n\t`tabContact`.phone,\n\t`tabContact`.mobile_no,\n\t`tabContact`.email_id,\n\t`tabContact`.is_primary_contact\nFROM\n\t`tabCustomer`\n\tleft join `tabAddress` on (\n\t\t`tabAddress`.customer=`tabCustomer`.name\n\t)\n\tleft join `tabContact` on (\n\t\t`tabContact`.customer=`tabCustomer`.name\n\t)\nWHERE\n\t`tabCustomer`.docstatus<2\nORDER BY\n\t`tabCustomer`.name asc",
- "ref_doctype": "Customer",
- "report_name": "Customer Addresses And Contacts",
+ "apply_user_permissions": 1,
+ "creation": "2012-10-04 18:45:27",
+ "docstatus": 0,
+ "doctype": "Report",
+ "idx": 1,
+ "is_standard": "Yes",
+ "modified": "2014-07-14 07:18:17.006732",
+ "modified_by": "Administrator",
+ "module": "Selling",
+ "name": "Customer Addresses and Contacts",
+ "owner": "Administrator",
+ "query": "SELECT\n\t`tabCustomer`.name as customer_id,\n\t`tabCustomer`.customer_name,\n\t`tabCustomer`.customer_group,\n\t`tabAddress`.address_line1,\n\t`tabAddress`.address_line2,\n\t`tabAddress`.city,\n\t`tabAddress`.state,\n\t`tabAddress`.pincode,\n\t`tabAddress`.country,\n\t`tabAddress`.is_primary_address, \n\t`tabContact`.first_name,\n\t`tabContact`.last_name,\n\t`tabContact`.phone,\n\t`tabContact`.mobile_no,\n\t`tabContact`.email_id,\n\t`tabContact`.is_primary_contact\nFROM\n\t`tabCustomer`\n\tleft join `tabAddress` on (\n\t\t`tabAddress`.customer=`tabCustomer`.name\n\t)\n\tleft join `tabContact` on (\n\t\t`tabContact`.customer=`tabCustomer`.name\n\t)\nWHERE\n\t`tabCustomer`.docstatus<2\nORDER BY\n\t`tabCustomer`.name asc",
+ "ref_doctype": "Customer",
+ "report_name": "Customer Addresses And Contacts",
"report_type": "Query Report"
-}
\ No newline at end of file
+}
diff --git a/erpnext/setup/doctype/item_group/item_group.py b/erpnext/setup/doctype/item_group/item_group.py
index 745345e..c6f49a1 100644
--- a/erpnext/setup/doctype/item_group/item_group.py
+++ b/erpnext/setup/doctype/item_group/item_group.py
@@ -82,7 +82,7 @@
def get_item_for_list_in_html(context):
# add missing absolute link in files
# user may forget it during upload
- if context.get("website_image", "").startswith("files/"):
+ if (context.get("website_image") or "").startswith("files/"):
context["website_image"] = "/" + context["website_image"]
return frappe.get_template("templates/includes/product_in_grid.html").render(context)
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.js b/erpnext/stock/doctype/stock_entry/stock_entry.js
index 1024198..7274ece 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.js
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.js
@@ -92,7 +92,7 @@
set_default_account: function() {
var me = this;
- if(cint(frappe.defaults.get_default("auto_accounting_for_stock"))) {
+ if(cint(frappe.defaults.get_default("auto_accounting_for_stock")) && this.frm.doc.company) {
var account_for = "stock_adjustment_account";
if (this.frm.doc.purpose == "Purchase Return")
diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py
index f9a1d9f..82b396f 100644
--- a/erpnext/stock/get_item_details.py
+++ b/erpnext/stock/get_item_details.py
@@ -152,6 +152,7 @@
"min_order_qty": flt(item.min_order_qty) if args.parenttype == "Material Request" else "",
"conversion_factor": 1.0,
"qty": 1.0,
+ "stock_qty": 1.0,
"price_list_rate": 0.0,
"base_price_list_rate": 0.0,
"rate": 0.0,
diff --git a/erpnext/utilities/repost_stock.py b/erpnext/utilities/repost_stock.py
index e4028b6..159825a 100644
--- a/erpnext/utilities/repost_stock.py
+++ b/erpnext/utilities/repost_stock.py
@@ -190,3 +190,22 @@
"posting_date": posting_date,
"posting_time": posting_time
})
+
+def reset_serial_no_status_and_warehouse(serial_nos=None):
+ if not serial_nos:
+ serial_nos = frappe.db.sql_list("""select name from `tabSerial No` where status != 'Not in Use'
+ and docstatus = 0""")
+ for serial_no in serial_nos:
+ try:
+ sr = frappe.get_doc("Serial No", serial_no)
+ last_sle = sr.get_last_sle()
+ if flt(last_sle.actual_qty) > 0:
+ sr.warehouse = last_sle.warehouse
+
+ sr.via_stock_ledger = True
+ sr.save()
+ except:
+ pass
+
+ frappe.db.sql("""update `tabSerial No` set warehouse='' where status in ('Delivered', 'Purchase Returned')""")
+
\ No newline at end of file