Merge pull request #4255 from anandpdoshi/slovene-language
added Slovene and updated translations
diff --git a/erpnext/hr/doctype/leave_allocation/leave_allocation.json b/erpnext/hr/doctype/leave_allocation/leave_allocation.json
index 19e8001..070e518 100644
--- a/erpnext/hr/doctype/leave_allocation/leave_allocation.json
+++ b/erpnext/hr/doctype/leave_allocation/leave_allocation.json
@@ -147,20 +147,18 @@
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
- "default": "Today",
- "fieldname": "posting_date",
+ "fieldname": "from_date",
"fieldtype": "Date",
"hidden": 0,
"ignore_user_permissions": 0,
"in_filter": 0,
- "in_list_view": 1,
- "label": "Posting Date",
- "no_copy": 1,
- "oldfieldname": "date",
- "oldfieldtype": "Date",
+ "in_list_view": 0,
+ "label": "From Date",
+ "no_copy": 0,
"permlevel": 0,
+ "precision": "",
"print_hide": 0,
- "read_only": 1,
+ "read_only": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
@@ -171,23 +169,21 @@
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
- "fieldname": "fiscal_year",
- "fieldtype": "Link",
+ "fieldname": "to_date",
+ "fieldtype": "Date",
"hidden": 0,
"ignore_user_permissions": 0,
- "in_filter": 1,
+ "in_filter": 0,
"in_list_view": 0,
- "label": "Fiscal Year",
+ "label": "To Date",
"no_copy": 0,
- "oldfieldname": "fiscal_year",
- "oldfieldtype": "Data",
- "options": "Fiscal Year",
"permlevel": 0,
+ "precision": "",
"print_hide": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 1,
- "search_index": 1,
+ "search_index": 0,
"set_only_once": 0,
"unique": 0
},
@@ -310,7 +306,7 @@
"is_submittable": 1,
"issingle": 0,
"istable": 0,
- "modified": "2015-10-02 07:38:55.314632",
+ "modified": "2015-10-28 18:18:29.137427",
"modified_by": "Administrator",
"module": "HR",
"name": "Leave Allocation",
@@ -359,7 +355,7 @@
],
"read_only": 0,
"read_only_onload": 0,
- "search_fields": "employee,employee_name,leave_type,total_leaves_allocated,fiscal_year",
+ "search_fields": "employee,employee_name,leave_type,total_leaves_allocated",
"sort_field": "modified",
"sort_order": "DESC"
}
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_allocation/leave_allocation.py b/erpnext/hr/doctype/leave_allocation/leave_allocation.py
index 4e74b28..146c3fa 100755
--- a/erpnext/hr/doctype/leave_allocation/leave_allocation.py
+++ b/erpnext/hr/doctype/leave_allocation/leave_allocation.py
@@ -3,13 +3,14 @@
from __future__ import unicode_literals
import frappe
-from frappe.utils import cint, flt
+from frappe.utils import cint, flt, date_diff
from frappe import _
from frappe.model.document import Document
from erpnext.hr.utils import set_employee_name
class LeaveAllocation(Document):
def validate(self):
+ self.validate_period()
self.validate_new_leaves_allocated_value()
self.check_existing_leave_allocation()
if not self.total_leaves_allocated:
@@ -22,7 +23,11 @@
def on_update(self):
self.get_total_allocated_leaves()
-
+
+ def validate_period(self):
+ if date_diff(self.to_date, self.from_date) <= 0:
+ frappe.throw(_("Invalid period"))
+
def validate_new_leaves_allocated_value(self):
"""validate that leave allocation is in multiples of 0.5"""
if flt(self.new_leaves_allocated) % 0.5:
@@ -30,29 +35,30 @@
def check_existing_leave_allocation(self):
"""check whether leave for same type is already allocated or not"""
- leave_allocation = frappe.db.sql("""select name from `tabLeave Allocation`
- where employee=%s and leave_type=%s and fiscal_year=%s and docstatus=1""",
- (self.employee, self.leave_type, self.fiscal_year))
+ leave_allocation = frappe.db.sql("""select name from `tabLeave Allocation`
+ where employee='%s' and leave_type='%s' and to_date >= '%s' and from_date <= '%s' and docstatus=1
+ """%(self.employee, self.leave_type, self.from_date, self.to_date))
+
if leave_allocation:
- frappe.msgprint(_("Leaves for type {0} already allocated for Employee {1} for Fiscal Year {0}").format(self.leave_type,
- self.employee, self.fiscal_year))
+ frappe.msgprint(_("Leaves for type {0} already allocated for Employee {1} for period {2} - {3}").format(self.leave_type,
+ self.employee, self.from_date, self.to_date))
frappe.throw('<a href="#Form/Leave Allocation/{0}">{0}</a>'.format(leave_allocation[0][0]))
- def get_leave_bal(self, prev_fyear):
- return self.get_leaves_allocated(prev_fyear) - self.get_leaves_applied(prev_fyear)
+ def get_leave_bal(self):
+ return self.get_leaves_allocated() - self.get_leaves_applied()
- def get_leaves_applied(self, fiscal_year):
+ def get_leaves_applied(self):
leaves_applied = frappe.db.sql("""select SUM(ifnull(total_leave_days, 0))
from `tabLeave Application` where employee=%s and leave_type=%s
- and fiscal_year=%s and docstatus=1""",
- (self.employee, self.leave_type, fiscal_year))
+ and to_date<=%s and docstatus=1""",
+ (self.employee, self.leave_type, self.from_date))
return leaves_applied and flt(leaves_applied[0][0]) or 0
- def get_leaves_allocated(self, fiscal_year):
+ def get_leaves_allocated(self):
leaves_allocated = frappe.db.sql("""select SUM(ifnull(total_leaves_allocated, 0))
from `tabLeave Allocation` where employee=%s and leave_type=%s
- and fiscal_year=%s and docstatus=1 and name!=%s""",
- (self.employee, self.leave_type, fiscal_year, self.name))
+ and to_date<=%s and docstatus=1 and name!=%s""",
+ (self.employee, self.leave_type, self.from_date, self.name))
return leaves_allocated and flt(leaves_allocated[0][0]) or 0
def allow_carry_forward(self):
@@ -67,14 +73,11 @@
def get_carry_forwarded_leaves(self):
if self.carry_forward:
self.allow_carry_forward()
- prev_fiscal_year = frappe.db.sql("""select name from `tabFiscal Year`
- where year_start_date = (select date_add(year_start_date, interval -1 year)
- from `tabFiscal Year` where name=%s)
- order by name desc limit 1""", self.fiscal_year)
- prev_fiscal_year = prev_fiscal_year and prev_fiscal_year[0][0] or ''
+
prev_bal = 0
- if prev_fiscal_year and cint(self.carry_forward) == 1:
- prev_bal = self.get_leave_bal(prev_fiscal_year)
+ if cint(self.carry_forward) == 1:
+ prev_bal = self.get_leave_bal()
+
ret = {
'carry_forwarded_leaves': prev_bal,
'total_leaves_allocated': flt(prev_bal) + flt(self.new_leaves_allocated)
@@ -83,6 +86,11 @@
def get_total_allocated_leaves(self):
leave_det = self.get_carry_forwarded_leaves()
+ self.validate_total_leaves_allocated(leave_det)
frappe.db.set(self,'carry_forwarded_leaves',flt(leave_det['carry_forwarded_leaves']))
frappe.db.set(self,'total_leaves_allocated',flt(leave_det['total_leaves_allocated']))
+ def validate_total_leaves_allocated(self, leave_det):
+ if date_diff(self.to_date, self.from_date) <= leave_det['total_leaves_allocated']:
+ frappe.throw(_("Total allocated leaves are more than period"))
+
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_allocation/test_leave_allocation.py b/erpnext/hr/doctype/leave_allocation/test_leave_allocation.py
index fe4f01b..d36fb2c 100644
--- a/erpnext/hr/doctype/leave_allocation/test_leave_allocation.py
+++ b/erpnext/hr/doctype/leave_allocation/test_leave_allocation.py
@@ -1,4 +1,69 @@
from __future__ import unicode_literals
import frappe
+import unittest
+from frappe.utils import getdate
-test_records = frappe.get_test_records('Leave Allocation')
+class TestLeaveAllocation(unittest.TestCase):
+ def test_overlapping_allocation(self):
+ employee = frappe.get_doc("Employee", frappe.db.sql_list("select name from tabEmployee limit 1")[0])
+ leaves = [
+ {
+ "doctype": "Leave Allocation",
+ "__islocal": 1,
+ "employee": employee.name,
+ "employee_name": employee.employee_name,
+ "leave_type": "_Test Leave Type",
+ "from_date": getdate("2015-10-1"),
+ "to_date": getdate("2015-10-31"),
+ "new_leaves_allocated": 5,
+ "docstatus": 1
+ },
+ {
+ "doctype": "Leave Allocation",
+ "__islocal": 1,
+ "employee": employee.name,
+ "employee_name": employee.employee_name,
+ "leave_type": "_Test Leave Type",
+ "from_date": getdate("2015-09-1"),
+ "to_date": getdate("2015-11-30"),
+ "new_leaves_allocated": 5
+ }
+ ]
+
+ frappe.get_doc(leaves[0]).save()
+ self.assertRaises(frappe.ValidationError, frappe.get_doc(leaves[1]).save)
+
+ def test_invalid_period(self):
+ employee = frappe.get_doc("Employee", frappe.db.sql_list("select name from tabEmployee limit 1")[0])
+
+ d = frappe.get_doc({
+ "doctype": "Leave Allocation",
+ "__islocal": 1,
+ "employee": employee.name,
+ "employee_name": employee.employee_name,
+ "leave_type": "_Test Leave Type",
+ "from_date": getdate("2015-09-30"),
+ "to_date": getdate("2015-09-1"),
+ "new_leaves_allocated": 5
+ })
+
+ #invalid period
+ self.assertRaises(frappe.ValidationError, d.save)
+
+ def test_allocated_leave_days_over_period(self):
+ employee = frappe.get_doc("Employee", frappe.db.sql_list("select name from tabEmployee limit 1")[0])
+ d = frappe.get_doc({
+ "doctype": "Leave Allocation",
+ "__islocal": 1,
+ "employee": employee.name,
+ "employee_name": employee.employee_name,
+ "leave_type": "_Test Leave Type",
+ "from_date": getdate("2015-09-1"),
+ "to_date": getdate("2015-09-30"),
+ "new_leaves_allocated": 35
+ })
+
+ #allocated leave more than period
+ self.assertRaises(frappe.ValidationError, d.save)
+
+test_dependencies = ["Employee", "Leave Type"]
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_allocation/test_records.json b/erpnext/hr/doctype/leave_allocation/test_records.json
index 036dc49..106ed0e 100644
--- a/erpnext/hr/doctype/leave_allocation/test_records.json
+++ b/erpnext/hr/doctype/leave_allocation/test_records.json
@@ -1,18 +1,20 @@
[
- {
- "docstatus": 1,
- "doctype": "Leave Allocation",
- "employee": "_T-Employee-0001",
- "fiscal_year": "_Test Fiscal Year 2013",
- "leave_type": "_Test Leave Type",
- "new_leaves_allocated": 15
- },
- {
- "docstatus": 1,
- "doctype": "Leave Allocation",
- "employee": "_T-Employee-0002",
- "fiscal_year": "_Test Fiscal Year 2013",
- "leave_type": "_Test Leave Type",
- "new_leaves_allocated": 15
- }
-]
+ {
+ "docstatus": 1,
+ "doctype": "Leave Allocation",
+ "employee": "_T-Employee-0001",
+ "from_date": "2013-01-01",
+ "to_date": "2013-12-31",
+ "leave_type": "_Test Leave Type",
+ "new_leaves_allocated": 15
+ },
+ {
+ "docstatus": 1,
+ "doctype": "Leave Allocation",
+ "employee": "_T-Employee-0002",
+ "from_date": "2013-01-01",
+ "to_date": "2013-12-31",
+ "leave_type": "_Test Leave Type",
+ "new_leaves_allocated": 15
+ }
+]
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_application/leave_application.js b/erpnext/hr/doctype/leave_application/leave_application.js
index 5b5bf8f..c8bd753 100755
--- a/erpnext/hr/doctype/leave_application/leave_application.js
+++ b/erpnext/hr/doctype/leave_application/leave_application.js
@@ -53,10 +53,6 @@
frm.trigger("get_leave_balance");
},
- fiscal_year: function(frm) {
- frm.trigger("get_leave_balance");
- },
-
leave_type: function(frm) {
frm.trigger("get_leave_balance");
},
@@ -85,12 +81,13 @@
},
get_leave_balance: function(frm) {
- if(frm.doc.docstatus==0 && frm.doc.employee && frm.doc.leave_type && frm.doc.fiscal_year) {
+ if(frm.doc.docstatus==0 && frm.doc.employee && frm.doc.leave_type && frm.doc.from_date && frm.doc.to_date) {
return frm.call({
method: "get_leave_balance",
args: {
employee: frm.doc.employee,
- fiscal_year: frm.doc.fiscal_year,
+ from_date: frm.doc.from_date,
+ to_date: frm.doc.to_date,
leave_type: frm.doc.leave_type
}
});
@@ -109,6 +106,7 @@
callback: function(response) {
if (response && response.message) {
frm.set_value('total_leave_days', response.message.total_leave_days);
+ frm.trigger("get_leave_balance");
}
}
});
diff --git a/erpnext/hr/doctype/leave_application/leave_application.json b/erpnext/hr/doctype/leave_application/leave_application.json
index f51c220..62e4cd8 100644
--- a/erpnext/hr/doctype/leave_application/leave_application.json
+++ b/erpnext/hr/doctype/leave_application/leave_application.json
@@ -21,7 +21,7 @@
"ignore_user_permissions": 0,
"in_filter": 0,
"in_list_view": 0,
- "label": "Status",
+ "label": "Status",
"no_copy": 1,
"options": "Open\nApproved\nRejected",
"permlevel": 1,
@@ -559,7 +559,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 3,
- "modified": "2015-10-02 07:38:55.471712",
+ "modified": "2015-10-28 16:14:25.640730",
"modified_by": "Administrator",
"module": "HR",
"name": "Leave Application",
diff --git a/erpnext/hr/doctype/leave_application/leave_application.py b/erpnext/hr/doctype/leave_application/leave_application.py
index 054117b..8c91173 100755
--- a/erpnext/hr/doctype/leave_application/leave_application.py
+++ b/erpnext/hr/doctype/leave_application/leave_application.py
@@ -100,7 +100,7 @@
if not is_lwp(self.leave_type):
self.leave_balance = get_leave_balance(self.employee,
- self.leave_type, self.fiscal_year)["leave_balance"]
+ self.leave_type, self.from_date, self.to_date)["leave_balance"]
if self.status != "Rejected" \
and self.leave_balance - self.total_leave_days < 0:
@@ -122,9 +122,8 @@
employee = %(employee)s
and docstatus < 2
and status in ("Open", "Approved")
- and (from_date between %(from_date)s and %(to_date)s
- or to_date between %(from_date)s and %(to_date)s
- or %(from_date)s between from_date and to_date)
+ and to_date >= %(from_date)s
+ and from_date <= %(to_date)s
and name != %(name)s""", {
"employee": self.employee,
"from_date": self.from_date,
@@ -251,18 +250,18 @@
return ret
@frappe.whitelist()
-def get_leave_balance(employee, leave_type, fiscal_year):
+def get_leave_balance(employee, leave_type, from_date, to_date):
leave_all = frappe.db.sql("""select total_leaves_allocated
from `tabLeave Allocation` where employee = %s and leave_type = %s
- and fiscal_year = %s and docstatus = 1""", (employee,
- leave_type, fiscal_year))
+ and from_date<=%s and to_date>=%s and docstatus = 1""", (employee,
+ leave_type, from_date, to_date))
leave_all = leave_all and flt(leave_all[0][0]) or 0
leave_app = frappe.db.sql("""select SUM(total_leave_days)
from `tabLeave Application`
- where employee = %s and leave_type = %s and fiscal_year = %s
- and status="Approved" and docstatus = 1""", (employee, leave_type, fiscal_year))
+ where employee = %s and leave_type = %s and to_date>=%s and from_date<=%s
+ and status="Approved" and docstatus = 1""", (employee, leave_type, from_date, to_date))
leave_app = leave_app and flt(leave_app[0][0]) or 0
ret = {'leave_balance': leave_all - leave_app}
diff --git a/erpnext/hr/doctype/leave_control_panel/leave_control_panel.json b/erpnext/hr/doctype/leave_control_panel/leave_control_panel.json
index 0db0410..c92fbb8 100644
--- a/erpnext/hr/doctype/leave_control_panel/leave_control_panel.json
+++ b/erpnext/hr/doctype/leave_control_panel/leave_control_panel.json
@@ -145,16 +145,38 @@
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
- "fieldname": "fiscal_year",
- "fieldtype": "Link",
+ "fieldname": "from_date",
+ "fieldtype": "Date",
"hidden": 0,
"ignore_user_permissions": 0,
- "in_filter": 1,
+ "in_filter": 0,
"in_list_view": 0,
- "label": "Fiscal Year",
+ "label": "From Date",
"no_copy": 0,
- "options": "Fiscal Year",
"permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "read_only": 0,
+ "report_hide": 0,
+ "reqd": 1,
+ "search_index": 0,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "fieldname": "to_date",
+ "fieldtype": "Date",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "in_filter": 0,
+ "in_list_view": 0,
+ "label": "To Date",
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
"print_hide": 0,
"read_only": 0,
"report_hide": 0,
@@ -260,7 +282,7 @@
"is_submittable": 0,
"issingle": 1,
"istable": 0,
- "modified": "2015-06-05 11:38:19.994852",
+ "modified": "2015-10-28 16:23:57.733900",
"modified_by": "Administrator",
"module": "HR",
"name": "Leave Control Panel",
diff --git a/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py b/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py
index 706f995..77c7ad9 100644
--- a/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py
+++ b/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py
@@ -4,7 +4,7 @@
from __future__ import unicode_literals
import frappe
-from frappe.utils import cint, cstr, flt, nowdate, comma_and
+from frappe.utils import cint, cstr, flt, nowdate, comma_and, date_diff
from frappe import msgprint, _
from frappe.model.document import Document
@@ -27,9 +27,13 @@
return e
def validate_values(self):
- for f in ["fiscal_year", "leave_type", "no_of_days"]:
+ for f in ["from_date", "to_date", "leave_type", "no_of_days"]:
if not self.get(f):
frappe.throw(_("{0} is required").format(self.meta.get_label(f)))
+
+ def to_date_validation(self):
+ if date_diff(self.to_date, self.from_date) <= 0:
+ return "Invalid period"
def allocate_leave(self):
self.validate_values()
@@ -45,8 +49,8 @@
la.employee = cstr(d[0])
la.employee_name = frappe.db.get_value('Employee',cstr(d[0]),'employee_name')
la.leave_type = self.leave_type
- la.fiscal_year = self.fiscal_year
- la.posting_date = nowdate()
+ la.from_date = self.from_date
+ la.to_date = self.to_date
la.carry_forward = cint(self.carry_forward)
la.new_leaves_allocated = flt(self.no_of_days)
la.docstatus = 1
diff --git a/erpnext/hr/report/employee_leave_balance/employee_leave_balance.js b/erpnext/hr/report/employee_leave_balance/employee_leave_balance.js
index 4f97c43..41b1421 100644
--- a/erpnext/hr/report/employee_leave_balance/employee_leave_balance.js
+++ b/erpnext/hr/report/employee_leave_balance/employee_leave_balance.js
@@ -4,11 +4,16 @@
frappe.query_reports["Employee Leave Balance"] = {
"filters": [
{
- "fieldname":"fiscal_year",
- "label": __("Fiscal Year"),
- "fieldtype": "Link",
- "options": "Fiscal Year",
- "default": frappe.defaults.get_user_default("fiscal_year")
+ "fieldname":"from_date",
+ "label": __("From Date"),
+ "fieldtype": "Date",
+ "default": frappe.datetime.year_start()
+ },
+ {
+ "fieldname":"to_date",
+ "label": __("To Date"),
+ "fieldtype": "Date",
+ "default": frappe.datetime.year_end()
},
{
"fieldname":"company",
diff --git a/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py b/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py
index d6f865b..0aa88a8 100644
--- a/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py
+++ b/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py
@@ -24,52 +24,47 @@
leave_types = frappe.db.sql_list("select name from `tabLeave Type`")
- if filters.get("fiscal_year"):
- fiscal_years = [filters["fiscal_year"]]
- else:
- fiscal_years = frappe.db.sql_list("select name from `tabFiscal Year` order by name desc")
-
employee_names = [d.name for d in employees]
- allocations = frappe.db.sql("""select employee, fiscal_year, leave_type, total_leaves_allocated
+ allocations = frappe.db.sql("""select employee, leave_type, sum(new_leaves_allocated) as leaves_allocated
from `tabLeave Allocation`
- where docstatus=1 and employee in (%s)""" %
- ','.join(['%s']*len(employee_names)), employee_names, as_dict=True)
-
- applications = frappe.db.sql("""select employee, fiscal_year, leave_type,
+ where docstatus=1 and employee in (%s) and from_date >= '%s' and to_date <= '%s'""" %
+ (','.join(['%s']*len(employee_names)), filters.get("from_date"),
+ filters.get("to_date")), employee_names, as_dict=True)
+
+ applications = frappe.db.sql("""select employee, leave_type,
SUM(total_leave_days) as leaves
from `tabLeave Application`
where status="Approved" and docstatus = 1 and employee in (%s)
- group by employee, fiscal_year, leave_type""" %
- ','.join(['%s']*len(employee_names)), employee_names, as_dict=True)
+ and from_date >= '%s' and to_date <= '%s'
+ group by employee, leave_type""" %
+ (','.join(['%s']*len(employee_names)), filters.get("from_date"),
+ filters.get("to_date")), employee_names, as_dict=True)
columns = [
- _("Fiscal Year"), _("Employee") + ":Link/Employee:150", _("Employee Name") + "::200", _("Department") +"::150"
+ _("Employee") + ":Link/Employee:150", _("Employee Name") + "::200", _("Department") +"::150"
]
for leave_type in leave_types:
- columns.append(_(leave_type) + " " + _("Allocated") + ":Float")
+ columns.append(_(leave_type) + " " + _("Opening") + ":Float")
columns.append(_(leave_type) + " " + _("Taken") + ":Float")
columns.append(_(leave_type) + " " + _("Balance") + ":Float")
data = {}
for d in allocations:
- data.setdefault((d.fiscal_year, d.employee,
- d.leave_type), frappe._dict()).allocation = d.total_leaves_allocated
+ data.setdefault((d.employee,d.leave_type), frappe._dict()).allocation = d.leaves_allocated
for d in applications:
- data.setdefault((d.fiscal_year, d.employee,
- d.leave_type), frappe._dict()).leaves = d.leaves
+ data.setdefault((d.employee, d.leave_type), frappe._dict()).leaves = d.leaves
result = []
- for fiscal_year in fiscal_years:
- for employee in employees:
- row = [fiscal_year, employee.name, employee.employee_name, employee.department]
- result.append(row)
- for leave_type in leave_types:
- tmp = data.get((fiscal_year, employee.name, leave_type), frappe._dict())
- row.append(tmp.allocation or 0)
- row.append(tmp.leaves or 0)
- row.append((tmp.allocation or 0) - (tmp.leaves or 0))
+ for employee in employees:
+ row = [employee.name, employee.employee_name, employee.department]
+ result.append(row)
+ for leave_type in leave_types:
+ tmp = data.get((employee.name, leave_type), frappe._dict())
+ row.append(tmp.allocation or 0)
+ row.append(tmp.leaves or 0)
+ row.append((tmp.allocation or 0) - (tmp.leaves or 0))
return columns, result
diff --git a/erpnext/patches/v6_6/remove_fiscal_year_from_leave_allocation.py b/erpnext/patches/v6_6/remove_fiscal_year_from_leave_allocation.py
new file mode 100644
index 0000000..1b24841
--- /dev/null
+++ b/erpnext/patches/v6_6/remove_fiscal_year_from_leave_allocation.py
@@ -0,0 +1,15 @@
+from __future__ import unicode_literals
+import frappe
+
+def execute():
+ for leave_allocation in frappe.db.sql("select name, fiscal_year from `tabLeave Allocation`", as_dict=True):
+ year_start_date, year_end_date = frappe.db.get_value("Fiscal Year", leave_allocation["fiscal_year"],
+ ["year_start_date", "year_end_date"])
+
+ frappe.db.sql("""update `tabLeave Allocation`
+ set from_date=%s, to_date=%s where name=%s""",
+ (year_start_date, year_end_date, leave_allocation["name"]))
+
+ frappe.db.commit()
+
+
\ No newline at end of file
diff --git a/erpnext/templates/includes/product_page.js b/erpnext/templates/includes/product_page.js
index f7a2360..cec4f2a 100644
--- a/erpnext/templates/includes/product_page.js
+++ b/erpnext/templates/includes/product_page.js
@@ -67,16 +67,17 @@
$("[itemscope] .item-view-attribute .form-control").on("change", function() {
try {
var item_code = encodeURIComponent(get_item_code());
+
} catch(e) {
// unable to find variant
// then chose the closest available one
var attribute = $(this).attr("data-attribute");
var attribute_value = $(this).val()
- var item_code = update_attribute_selectors(attribute, attribute_value);
+ var item_code = find_closest_match(attribute, attribute_value);
if (!item_code) {
- msgprint(__("Please select some other value for {0}", [attribute]))
+ msgprint(__("Cannot find a matching Item. Please select some other value for {0}.", [attribute]))
throw e;
}
}
@@ -99,9 +100,16 @@
function get_item_code() {
if(window.variant_info) {
var attributes = get_selected_attributes();
+ var no_of_attributes = Object.keys(attributes).length;
for(var i in variant_info) {
var variant = variant_info[i];
+
+ if (variant.attributes.length < no_of_attributes) {
+ // the case when variant has less attributes than template
+ continue;
+ }
+
var match = true;
for(var j in variant.attributes) {
if(attributes[variant.attributes[j].attribute]
@@ -120,13 +128,15 @@
}
}
-function update_attribute_selectors(selected_attribute, selected_attribute_value) {
+function find_closest_match(selected_attribute, selected_attribute_value) {
// find the closest match keeping the selected attribute in focus and get the item code
var attributes = get_selected_attributes();
var previous_match_score = 0;
+ var previous_no_of_attributes = 0;
var matched;
+
for(var i in variant_info) {
var variant = variant_info[i];
var match_score = 0;
@@ -142,9 +152,13 @@
}
}
- if (has_selected_attribute && (match_score > previous_match_score)) {
+ if (has_selected_attribute
+ && ((match_score > previous_match_score) || (match_score==previous_match_score && previous_no_of_attributes < variant.attributes.length))) {
previous_match_score = match_score;
matched = variant;
+ previous_no_of_attributes = variant.attributes.length;
+
+
}
}