Merge branch 'develop' of https://github.com/frappe/erpnext into wip_payrec

This commit is contained in:
ankitjavalkarwork
2014-07-15 18:02:08 +05:30
10 changed files with 49 additions and 21 deletions

View File

@@ -150,7 +150,7 @@ def get_data():
{ {
"type": "report", "type": "report",
"is_query_report": True, "is_query_report": True,
"name": "Supplier Addresses And Contacts", "name": "Supplier Addresses and Contacts",
"doctype": "Supplier" "doctype": "Supplier"
}, },
{ {

View File

@@ -206,7 +206,7 @@ def get_data():
{ {
"type": "report", "type": "report",
"is_query_report": True, "is_query_report": True,
"name": "Customer Addresses And Contacts", "name": "Customer Addresses and Contacts",
"doctype": "Contact" "doctype": "Contact"
}, },
{ {

View File

@@ -17,6 +17,7 @@ class BuyingController(StockController):
self.supplier_name = frappe.db.get_value("Supplier", self.supplier_name = frappe.db.get_value("Supplier",
self.supplier, "supplier_name") self.supplier, "supplier_name")
self.is_item_table_empty() self.is_item_table_empty()
self.set_qty_as_per_stock_uom()
self.validate_stock_or_nonstock_items() self.validate_stock_or_nonstock_items()
self.validate_warehouse() self.validate_warehouse()
@@ -317,3 +318,10 @@ class BuyingController(StockController):
def is_item_table_empty(self): def is_item_table_empty(self):
if not len(self.get(self.fname)): if not len(self.get(self.fname)):
frappe.throw(_("Item table can not be blank")) 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)

View File

@@ -240,7 +240,7 @@ class StockController(AccountsController):
else: else:
is_expense_account = frappe.db.get_value("Account", is_expense_account = frappe.db.get_value("Account",
item.get("expense_account"), "report_type")=="Profit and Loss" 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") frappe.throw(_("Expense / Difference account ({0}) must be a 'Profit or Loss' account")
.format(item.get("expense_account"))) .format(item.get("expense_account")))
if is_expense_account and not item.get("cost_center"): if is_expense_account and not item.get("cost_center"):

View File

@@ -71,7 +71,7 @@ $.extend(erpnext.queries, {
warehouse: function(doc) { warehouse: function(doc) {
return { return {
filters: [["Warehouse", "company", "in", ["", doc.company]]] filters: [["Warehouse", "company", "in", ["", cstr(doc.company)]]]
} }
} }
}); });

View File

@@ -1,17 +1,17 @@
{ {
"apply_user_permissions": 1, "apply_user_permissions": 1,
"creation": "2012-10-04 18:45:27", "creation": "2012-10-04 18:45:27",
"docstatus": 0, "docstatus": 0,
"doctype": "Report", "doctype": "Report",
"idx": 1, "idx": 1,
"is_standard": "Yes", "is_standard": "Yes",
"modified": "2014-06-03 07:18:17.006732", "modified": "2014-07-14 07:18:17.006732",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Selling", "module": "Selling",
"name": "Customer Addresses And Contacts", "name": "Customer Addresses and Contacts",
"owner": "Administrator", "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", "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", "ref_doctype": "Customer",
"report_name": "Customer Addresses And Contacts", "report_name": "Customer Addresses And Contacts",
"report_type": "Query Report" "report_type": "Query Report"
} }

View File

@@ -82,7 +82,7 @@ def get_child_groups(item_group_name):
def get_item_for_list_in_html(context): def get_item_for_list_in_html(context):
# add missing absolute link in files # add missing absolute link in files
# user may forget it during upload # 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"] context["website_image"] = "/" + context["website_image"]
return frappe.get_template("templates/includes/product_in_grid.html").render(context) return frappe.get_template("templates/includes/product_in_grid.html").render(context)

View File

@@ -92,7 +92,7 @@ erpnext.stock.StockEntry = erpnext.stock.StockController.extend({
set_default_account: function() { set_default_account: function() {
var me = this; 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"; var account_for = "stock_adjustment_account";
if (this.frm.doc.purpose == "Purchase Return") if (this.frm.doc.purpose == "Purchase Return")

View File

@@ -152,6 +152,7 @@ def get_basic_details(args, item_doc):
"min_order_qty": flt(item.min_order_qty) if args.parenttype == "Material Request" else "", "min_order_qty": flt(item.min_order_qty) if args.parenttype == "Material Request" else "",
"conversion_factor": 1.0, "conversion_factor": 1.0,
"qty": 1.0, "qty": 1.0,
"stock_qty": 1.0,
"price_list_rate": 0.0, "price_list_rate": 0.0,
"base_price_list_rate": 0.0, "base_price_list_rate": 0.0,
"rate": 0.0, "rate": 0.0,

View File

@@ -190,3 +190,22 @@ def set_stock_balance_as_per_serial_no(item_code=None, posting_date=None, postin
"posting_date": posting_date, "posting_date": posting_date,
"posting_time": posting_time "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')""")