Merge pull request #7732 from neilLasrado/student-left
Added ability to send newsletter to Student batch Guardians and Student Group Guardians
diff --git a/erpnext/__init__.py b/erpnext/__init__.py
index dcc072d..6a7922a 100644
--- a/erpnext/__init__.py
+++ b/erpnext/__init__.py
@@ -2,7 +2,7 @@
from __future__ import unicode_literals
import frappe
-__version__ = '7.2.19'
+__version__ = '7.2.20'
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 6528c8f..0130366 100644
--- a/erpnext/accounts/doctype/payment_entry/payment_entry.js
+++ b/erpnext/accounts/doctype/payment_entry/payment_entry.js
@@ -85,8 +85,13 @@
frm.events.show_general_ledger(frm);
},
+ company: function(frm) {
+ frm.events.hide_unhide_fields(frm);
+ frm.events.set_dynamic_labels(frm);
+ },
+
hide_unhide_fields: function(frm) {
- var company_currency = frappe.get_doc(":Company", frm.doc.company).default_currency;
+ var company_currency = frm.doc.company? frappe.get_doc(":Company", frm.doc.company).default_currency: "";
frm.toggle_display("source_exchange_rate",
(frm.doc.paid_amount && frm.doc.paid_from_account_currency != company_currency));
@@ -124,7 +129,7 @@
},
set_dynamic_labels: function(frm) {
- var company_currency = frappe.get_doc(":Company", frm.doc.company).default_currency;
+ var company_currency = frm.doc.company? frappe.get_doc(":Company", frm.doc.company).default_currency: "";
frm.set_currency_labels(["base_paid_amount", "base_received_amount", "base_total_allocated_amount",
"difference_amount"], company_currency);
@@ -137,6 +142,10 @@
frm.set_currency_labels(["total_allocated_amount", "unallocated_amount"], party_account_currency);
+ var currency_field = (frm.doc.payment_type=="Receive") ? "paid_from_account_currency" : "paid_to_account_currency"
+ frm.set_df_property("total_allocated_amount", "options", currency_field);
+ frm.set_df_property("unallocated_amount", "options", currency_field);
+
frm.set_currency_labels(["total_amount", "outstanding_amount", "allocated_amount"],
party_account_currency, "references");
@@ -747,4 +756,4 @@
deductions_remove: function(frm) {
frm.events.set_difference_amount(frm);
}
-})
\ No newline at end of file
+})
diff --git a/erpnext/hr/doctype/leave_application/leave_application.py b/erpnext/hr/doctype/leave_application/leave_application.py
index 5b565fa..84c14c9 100755
--- a/erpnext/hr/doctype/leave_application/leave_application.py
+++ b/erpnext/hr/doctype/leave_application/leave_application.py
@@ -25,7 +25,7 @@
def validate(self):
if not getattr(self, "__islocal", None) and frappe.db.exists(self.doctype, self.name):
- self.previous_doc = frappe.db.get_value(self.doctype, self.name, "*", as_dict=True)
+ self.previous_doc = frappe.get_value(self.doctype, self.name, "leave_approver", as_dict=True)
else:
self.previous_doc = None
@@ -46,14 +46,10 @@
self.status == "Open" and self.previous_doc.leave_approver != self.leave_approver):
# notify leave approver about creation
self.notify_leave_approver()
- elif self.previous_doc and \
- self.previous_doc.status == "Open" and self.status == "Rejected":
- # notify employee about rejection
- self.notify_employee(self.status)
def on_submit(self):
- if self.status != "Approved":
- frappe.throw(_("Only Leave Applications with status 'Approved' can be submitted"))
+ if self.status == "Open":
+ frappe.throw(_("Only Leave Applications with status 'Approved' and 'Rejected' can be submitted"))
self.validate_back_dated_application()
@@ -234,13 +230,18 @@
else:
name = self.name
- return (_("Leave Application") + ": %s - %s") % (name, _(status))
+ message = "Leave Application: {name}".format(name=name)+"<br>"
+ message += "Leave Type: {leave_type}".format(leave_type=self.leave_type)+"<br>"
+ message += "From Date: {from_date}".format(from_date=self.from_date)+"<br>"
+ message += "To Date: {to_date}".format(to_date=self.to_date)+"<br>"
+ message += "Status: {status}".format(status=_(status))
+ return message
self.notify({
# for post in messages
"message": _get_message(url=True),
"message_to": employee.user_id,
- "subject": _get_message(),
+ "subject": (_("Leave Application") + ": %s - %s") % (self.name, _(status))
})
def notify_leave_approver(self):
@@ -252,8 +253,12 @@
if url:
name = get_link_to_form(self.doctype, self.name)
employee_name = get_link_to_form("Employee", self.employee, label=employee_name)
-
- return (_("New Leave Application") + ": %s - " + _("Employee") + ": %s") % (name, employee_name)
+ message = (_("Leave Application") + ": %s") % (name)+"<br>"
+ message += (_("Employee") + ": %s") % (employee_name)+"<br>"
+ message += (_("Leave Type") + ": %s") % (self.leave_type)+"<br>"
+ message += (_("From Date") + ": %s") % (self.from_date)+"<br>"
+ message += (_("To Date") + ": %s") % (self.to_date)
+ return message
self.notify({
# for post in messages
@@ -261,7 +266,7 @@
"message_to": self.leave_approver,
# for email
- "subject": _get_message()
+ "subject": (_("New Leave Application") + ": %s - " + _("Employee") + ": %s") % (self.name, cstr(employee.employee_name))
})
def notify(self, args):
diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.py b/erpnext/hr/doctype/salary_slip/salary_slip.py
index 5ff1248..9d57a5d 100644
--- a/erpnext/hr/doctype/salary_slip/salary_slip.py
+++ b/erpnext/hr/doctype/salary_slip/salary_slip.py
@@ -283,6 +283,7 @@
where t2.name = t1.leave_type
and t2.is_lwp = 1
and t1.docstatus = 1
+ and t1.status = 'Approved'
and t1.employee = %(employee)s
and CASE WHEN t2.include_holiday != 1 THEN %(dt)s not in ('{0}') and %(dt)s between from_date and to_date
WHEN t2.include_holiday THEN %(dt)s between from_date and to_date
diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py
index 53faa43..d20ba49 100644
--- a/erpnext/stock/doctype/item/item.py
+++ b/erpnext/stock/doctype/item/item.py
@@ -451,24 +451,32 @@
"valuation_method", "has_batch_no", "is_fixed_asset")
vals = frappe.db.get_value("Item", self.name, to_check, as_dict=True)
+ if not vals.get('valuation_method') and self.get('valuation_method'):
+ vals['valuation_method'] = frappe.db.get_single_value("Stock Settings", "valuation_method") or "FIFO"
if vals:
for key in to_check:
- if self.get(key) != vals.get(key):
- if not self.check_if_linked_document_exists():
+ if cstr(self.get(key)) != cstr(vals.get(key)):
+ if not self.check_if_linked_document_exists(key):
break # no linked document, allowed
else:
- frappe.throw(_("As there are existing transactions for this item, you can not change the value of {0}").format(frappe.bold(self.meta.get_label(key))))
+ frappe.throw(_("As there are existing transactions against item {0}, you can not change the value of {1}").format(self.name, frappe.bold(self.meta.get_label(key))))
if vals and not self.is_fixed_asset and self.is_fixed_asset != vals.is_fixed_asset:
asset = frappe.db.get_all("Asset", filters={"item_code": self.name, "docstatus": 1}, limit=1)
if asset:
frappe.throw(_('"Is Fixed Asset" cannot be unchecked, as Asset record exists against the item'))
- def check_if_linked_document_exists(self):
- for doctype in ("Sales Order Item", "Delivery Note Item", "Sales Invoice Item",
- "Material Request Item", "Purchase Order Item", "Purchase Receipt Item",
- "Purchase Invoice Item", "Stock Entry Detail", "Stock Reconciliation Item"):
+ def check_if_linked_document_exists(self, key):
+ linked_doctypes = ["Delivery Note Item", "Sales Invoice Item", "Purchase Receipt Item",
+ "Purchase Invoice Item", "Stock Entry Detail", "Stock Reconciliation Item"]
+
+ # For "Is Stock Item", following doctypes is important
+ # because reserved_qty, ordered_qty and requested_qty updated from these doctypes
+ if key == "is_stock_item":
+ linked_doctypes += ["Sales Order Item", "Purchase Order Item", "Material Request Item"]
+
+ for doctype in linked_doctypes:
if frappe.db.get_value(doctype, filters={"item_code": self.name, "docstatus": 1}) or \
frappe.db.get_value("Production Order",
filters={"production_item": self.name, "docstatus": 1}):
diff --git a/erpnext/templates/generators/job_opening.html b/erpnext/templates/generators/job_opening.html
index 5998e3f..f92e72e 100644
--- a/erpnext/templates/generators/job_opening.html
+++ b/erpnext/templates/generators/job_opening.html
@@ -15,7 +15,7 @@
{% endif %}
<p style='margin-top: 30px'>
<a class='btn btn-primary'
- href='/job_application?job_title={{ doc.name }}'>
+ href='/job_application?new=1&job_title={{ doc.name }}'>
{{ _("Apply Now") }}</a>
</p>