diff --git a/erpnext/__init__.py b/erpnext/__init__.py
index 8177c2998c..6018a4ca1f 100644
--- a/erpnext/__init__.py
+++ b/erpnext/__init__.py
@@ -2,7 +2,7 @@
from __future__ import unicode_literals
import frappe
-__version__ = '7.0.38'
+__version__ = '7.0.39'
def get_default_company(user=None):
'''Get default company for user'''
diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.js b/erpnext/accounts/doctype/payment_entry/payment_entry.js
index 4578f308b3..695a721553 100644
--- a/erpnext/accounts/doctype/payment_entry/payment_entry.js
+++ b/erpnext/accounts/doctype/payment_entry/payment_entry.js
@@ -226,6 +226,12 @@ frappe.ui.form.on('Payment Entry', {
party: function(frm) {
if(frm.doc.payment_type && frm.doc.party_type && frm.doc.party) {
+ if(!frm.doc.posting_date) {
+ frappe.msgprint(__("Please select Posting Date before selecting Party"))
+ frm.set_value("party", "");
+ return ;
+ }
+
frm.set_party_account_based_on_party = true;
return frappe.call({
diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.json b/erpnext/accounts/doctype/payment_entry/payment_entry.json
index 43d43ca9d7..2057d07d83 100644
--- a/erpnext/accounts/doctype/payment_entry/payment_entry.json
+++ b/erpnext/accounts/doctype/payment_entry/payment_entry.json
@@ -75,7 +75,7 @@
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
- "in_list_view": 0,
+ "in_list_view": 1,
"label": "Payment Type",
"length": 0,
"no_copy": 0,
@@ -1426,7 +1426,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
- "modified": "2016-09-02 11:34:14.817383",
+ "modified": "2016-09-05 11:06:18.183458",
"modified_by": "Administrator",
"module": "Accounts",
"name": "Payment Entry",
diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry_list.js b/erpnext/accounts/doctype/payment_entry/payment_entry_list.js
deleted file mode 100644
index 81230d0820..0000000000
--- a/erpnext/accounts/doctype/payment_entry/payment_entry_list.js
+++ /dev/null
@@ -1,6 +0,0 @@
-frappe.listview_settings['Payment Entry'] = {
- add_fields: ["payment_type"],
- get_indicator: function(doc) {
- return [__(doc.payment_type), (doc.docstatus==0 ? 'red' : 'blue'), 'status=' + doc.payment_type]
- }
-}
diff --git a/erpnext/controllers/queries.py b/erpnext/controllers/queries.py
index 0debe4aced..6da496ba17 100644
--- a/erpnext/controllers/queries.py
+++ b/erpnext/controllers/queries.py
@@ -17,7 +17,8 @@ def get_filters_cond(doctype, filters, conditions):
if isinstance(f[1], basestring) and f[1][0] == '!':
flt.append([doctype, f[0], '!=', f[1][1:]])
else:
- flt.append([doctype, f[0], '=', f[1]])
+ value = frappe.db.escape(f[1]) if isinstance(f[1], basestring) else f[1]
+ flt.append([doctype, f[0], '=', value])
query = DatabaseQuery(doctype)
query.filters = flt
diff --git a/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py b/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py
index 4cbccafb15..5f8296753d 100644
--- a/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py
+++ b/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.py
@@ -58,7 +58,7 @@ class MaintenanceSchedule(TransactionBase):
if no_email_sp:
frappe.msgprint(
frappe._("Setting Events to {0}, since the Employee attached to the below Sales Persons does not have a User ID{1}").format(
- self.owner, "
"+no_email_sp.join("
")
+ self.owner, "
" + "
".join(no_email_sp)
))
scheduled_date = frappe.db.sql("""select scheduled_date from
@@ -187,14 +187,17 @@ class MaintenanceSchedule(TransactionBase):
if not sr_details:
frappe.throw(_("Serial No {0} not found").format(serial_no))
- if sr_details.warranty_expiry_date and sr_details.warranty_expiry_date>=amc_start_date:
- throw(_("Serial No {0} is under warranty upto {1}").format(serial_no, sr_details.warranty_expiry_date))
+ if sr_details.warranty_expiry_date \
+ and getdate(sr_details.warranty_expiry_date) >= getdate(amc_start_date):
+ throw(_("Serial No {0} is under warranty upto {1}")
+ .format(serial_no, sr_details.warranty_expiry_date))
- if sr_details.amc_expiry_date and sr_details.amc_expiry_date >= amc_start_date:
- throw(_("Serial No {0} is under maintenance contract upto {1}").format(serial_no, sr_details.amc_start_date))
+ if sr_details.amc_expiry_date and getdate(sr_details.amc_expiry_date) >= getdate(amc_start_date):
+ throw(_("Serial No {0} is under maintenance contract upto {1}")
+ .format(serial_no, sr_details.amc_start_date))
if not sr_details.warehouse and sr_details.delivery_date and \
- sr_details.delivery_date >= amc_start_date:
+ getdate(sr_details.delivery_date) >= getdate(amc_start_date):
throw(_("Maintenance start date can not be before delivery date for Serial No {0}")
.format(serial_no))
diff --git a/erpnext/projects/report/daily_timesheet_summary/daily_timesheet_summary.py b/erpnext/projects/report/daily_timesheet_summary/daily_timesheet_summary.py
index ab0b4a12e7..cc854a4ac7 100644
--- a/erpnext/projects/report/daily_timesheet_summary/daily_timesheet_summary.py
+++ b/erpnext/projects/report/daily_timesheet_summary/daily_timesheet_summary.py
@@ -12,8 +12,9 @@ def execute(filters=None):
filters["from_time"] = "00:00:00"
filters["to_time"] = "24:00:00"
- columns = [_("Timesheet") + ":Link/Timesheet:120", _("Employee") + "::150", _("From Datetime") + "::140",
- _("To Datetime") + "::140", _("Hours") + "::70", _("Activity Type") + "::120", _("Task") + ":Link/Task:150",
+ columns = [_("Timesheet") + ":Link/Timesheet:120", _("Employee") + "::150", _("Employee Name") + "::150",
+ _("From Datetime") + "::140", _("To Datetime") + "::140", _("Hours") + "::70",
+ _("Activity Type") + "::120", _("Task") + ":Link/Task:150",
_("Project") + ":Link/Project:120", _("Status") + "::70"]
conditions = "ts.docstatus = 1"
@@ -27,7 +28,8 @@ def execute(filters=None):
return columns, data
def get_data(conditions, filters):
- time_sheet = frappe.db.sql(""" select ts.name, ts.employee, tsd.from_time, tsd.to_time, tsd.hours,
+ time_sheet = frappe.db.sql(""" select ts.name, ts.employee, ts.employee_name,
+ tsd.from_time, tsd.to_time, tsd.hours,
tsd.activity_type, tsd.task, tsd.project, ts.status from `tabTimesheet Detail` tsd,
`tabTimesheet` ts where ts.name = tsd.parent and %s order by ts.name"""%(conditions), filters, as_list=1)
diff --git a/erpnext/startup/notifications.py b/erpnext/startup/notifications.py
index 991114d516..58a2c79e9f 100644
--- a/erpnext/startup/notifications.py
+++ b/erpnext/startup/notifications.py
@@ -22,12 +22,21 @@ def get_notification_config():
"docstatus": ("<", 2)
},
"Journal Entry": {"docstatus": 0},
- "Sales Invoice": { "outstanding_amount": (">", 0), "docstatus": ("<", 2) },
- "Purchase Invoice": {"docstatus": 0},
+ "Sales Invoice": {
+ "outstanding_amount": (">", 0),
+ "docstatus": ("<", 2)
+ },
+ "Purchase Invoice": {
+ "outstanding_amount": (">", 0),
+ "docstatus": ("<", 2)
+ },
"Leave Application": {"status": "Open"},
"Expense Claim": {"approval_status": "Draft"},
"Job Applicant": {"status": "Open"},
- "Delivery Note": {"docstatus": 0},
+ "Delivery Note": {
+ "status": ("not in", ("Completed", "Closed")),
+ "docstatus": ("<", 2)
+ },
"Stock Entry": {"docstatus": 0},
"Material Request": {
"docstatus": ("<", 2),
@@ -40,7 +49,10 @@ def get_notification_config():
"status": ("not in", ("Completed", "Closed")),
"docstatus": ("<", 2)
},
- "Purchase Receipt": {"docstatus": 0},
+ "Purchase Receipt": {
+ "status": ("not in", ("Completed", "Closed")),
+ "docstatus": ("<", 2)
+ },
"Production Order": { "status": ("in", ("Draft", "Not Started", "In Process")) },
"BOM": {"docstatus": 0},
"Timesheet": {"status": "Draft"}