Merge branch 'vjFaLk-holiday-list' into develop
This commit is contained in:
commit
a7aa2c70b5
@ -227,3 +227,16 @@ def get_employees_who_are_born_today():
|
||||
from tabEmployee where day(date_of_birth) = day(%(date)s)
|
||||
and month(date_of_birth) = month(%(date)s)
|
||||
and status = 'Active'""", {"date": today()}, as_dict=True)
|
||||
|
||||
def get_holiday_list_for_employee(employee, raise_exception=True):
|
||||
employee = frappe.db.get_value("Employee", employee, ["holiday_list", "company"], as_dict=True)
|
||||
holiday_list = employee.holiday_list
|
||||
|
||||
if not holiday_list:
|
||||
holiday_list = frappe.db.get_value("Company", employee.company, "default_holiday_list")
|
||||
|
||||
if not holiday_list and raise_exception:
|
||||
frappe.throw(_("Please set a Holiday List for either the Employee or the Company"))
|
||||
|
||||
return holiday_list
|
||||
|
||||
|
@ -6,32 +6,8 @@
|
||||
"custom": 0,
|
||||
"docstatus": 0,
|
||||
"doctype": "DocType",
|
||||
"document_type": "Setup",
|
||||
"fields": [
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"fieldname": "description",
|
||||
"fieldtype": "Text Editor",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 1,
|
||||
"label": "Description",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"print_width": "300px",
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0,
|
||||
"width": "300px"
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
@ -40,6 +16,7 @@
|
||||
"fieldtype": "Date",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 1,
|
||||
"label": "Date",
|
||||
@ -56,6 +33,32 @@
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
},
|
||||
{
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"fieldname": "description",
|
||||
"fieldtype": "Text Editor",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 1,
|
||||
"label": "Description",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"print_width": "300px",
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0,
|
||||
"width": "300px"
|
||||
}
|
||||
],
|
||||
"hide_heading": 0,
|
||||
@ -67,7 +70,7 @@
|
||||
"issingle": 0,
|
||||
"istable": 1,
|
||||
"max_attachments": 0,
|
||||
"modified": "2016-01-27 11:52:46.864792",
|
||||
"modified": "2016-03-11 06:39:10.913467",
|
||||
"modified_by": "Administrator",
|
||||
"module": "HR",
|
||||
"name": "Holiday",
|
||||
|
14
erpnext/hr/doctype/holiday_list/holiday_list.js
Normal file
14
erpnext/hr/doctype/holiday_list/holiday_list.js
Normal file
@ -0,0 +1,14 @@
|
||||
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
|
||||
// For license information, please see license.txt
|
||||
|
||||
frappe.ui.form.on('Holiday List', {
|
||||
refresh: function(frm) {
|
||||
|
||||
},
|
||||
from_date: function(frm) {
|
||||
if (frm.doc.from_date && !frm.doc.to_date) {
|
||||
var a_year_from_start = frappe.datetime.add_months(frm.doc.from_date, 12);
|
||||
frm.set_value("to_date", frappe.datetime.add_days(a_year_from_start, -1));
|
||||
}
|
||||
}
|
||||
});
|
@ -17,6 +17,7 @@
|
||||
"fieldtype": "Data",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 1,
|
||||
"label": "Holiday List Name",
|
||||
@ -26,6 +27,7 @@
|
||||
"oldfieldtype": "Data",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
@ -37,20 +39,23 @@
|
||||
"allow_on_submit": 0,
|
||||
"bold": 0,
|
||||
"collapsible": 0,
|
||||
"fieldname": "is_default",
|
||||
"fieldtype": "Check",
|
||||
"fieldname": "from_date",
|
||||
"fieldtype": "Date",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 1,
|
||||
"label": "Default",
|
||||
"in_list_view": 0,
|
||||
"label": "From Date",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
"reqd": 1,
|
||||
"search_index": 0,
|
||||
"set_only_once": 0,
|
||||
"unique": 0
|
||||
@ -59,20 +64,20 @@
|
||||
"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_list_view": 1,
|
||||
"label": "Fiscal Year",
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "To Date",
|
||||
"length": 0,
|
||||
"no_copy": 0,
|
||||
"oldfieldname": "fiscal_year",
|
||||
"oldfieldtype": "Link",
|
||||
"options": "Fiscal Year",
|
||||
"permlevel": 0,
|
||||
"precision": "",
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 1,
|
||||
@ -88,6 +93,7 @@
|
||||
"fieldtype": "Select",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 1,
|
||||
"label": "Weekly Off",
|
||||
@ -96,6 +102,7 @@
|
||||
"options": "\nSunday\nMonday\nTuesday\nWednesday\nThursday\nFriday\nSaturday",
|
||||
"permlevel": 0,
|
||||
"print_hide": 1,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 1,
|
||||
"reqd": 0,
|
||||
@ -111,6 +118,7 @@
|
||||
"fieldtype": "Button",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Get Weekly Off Dates",
|
||||
@ -119,6 +127,7 @@
|
||||
"options": "get_weekly_off_dates",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@ -134,6 +143,7 @@
|
||||
"fieldtype": "Table",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Holidays",
|
||||
@ -144,6 +154,7 @@
|
||||
"options": "Holiday",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@ -159,6 +170,7 @@
|
||||
"fieldtype": "Button",
|
||||
"hidden": 0,
|
||||
"ignore_user_permissions": 0,
|
||||
"ignore_xss_filter": 0,
|
||||
"in_filter": 0,
|
||||
"in_list_view": 0,
|
||||
"label": "Clear Table",
|
||||
@ -167,6 +179,7 @@
|
||||
"options": "clear_table",
|
||||
"permlevel": 0,
|
||||
"print_hide": 0,
|
||||
"print_hide_if_no_value": 0,
|
||||
"read_only": 0,
|
||||
"report_hide": 0,
|
||||
"reqd": 0,
|
||||
@ -185,7 +198,7 @@
|
||||
"issingle": 0,
|
||||
"istable": 0,
|
||||
"max_attachments": 0,
|
||||
"modified": "2015-11-16 06:29:47.519087",
|
||||
"modified": "2016-03-11 05:26:24.819829",
|
||||
"modified_by": "Administrator",
|
||||
"module": "HR",
|
||||
"name": "Holiday List",
|
||||
|
@ -3,22 +3,20 @@
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
|
||||
from frappe.utils import cint
|
||||
from frappe.model.naming import make_autoname
|
||||
import json
|
||||
from frappe.utils import cint, getdate, formatdate
|
||||
from frappe import throw, _
|
||||
|
||||
from frappe.model.document import Document
|
||||
|
||||
class OverlapError(frappe.ValidationError): pass
|
||||
|
||||
class HolidayList(Document):
|
||||
def validate(self):
|
||||
self.update_default_holiday_list()
|
||||
self.validate_days()
|
||||
|
||||
def get_weekly_off_dates(self):
|
||||
self.validate_values()
|
||||
self.validate_days()
|
||||
yr_start_date, yr_end_date = get_fy_start_end_dates(self.fiscal_year)
|
||||
date_list = self.get_weekly_off_date_list(yr_start_date, yr_end_date)
|
||||
date_list = self.get_weekly_off_date_list(self.from_date, self.to_date)
|
||||
last_idx = max([cint(d.idx) for d in self.get("holidays")] or [0,])
|
||||
for i, d in enumerate(date_list):
|
||||
ch = self.append('holidays', {})
|
||||
@ -27,29 +25,34 @@ class HolidayList(Document):
|
||||
ch.idx = last_idx + i + 1
|
||||
|
||||
def validate_values(self):
|
||||
if not self.fiscal_year:
|
||||
throw(_("Please select Fiscal Year"))
|
||||
if not self.weekly_off:
|
||||
throw(_("Please select weekly off day"))
|
||||
|
||||
def validate_days(self):
|
||||
for day in self.get("holidays"):
|
||||
if (self.weekly_off or "").upper() == (day.description or "").upper():
|
||||
frappe.throw("Records already exist for mentioned weekly off")
|
||||
|
||||
def get_weekly_off_date_list(self, year_start_date, year_end_date):
|
||||
from frappe.utils import getdate
|
||||
year_start_date, year_end_date = getdate(year_start_date), getdate(year_end_date)
|
||||
def validate_days(self):
|
||||
if self.from_date > self.to_date:
|
||||
throw(_("To Date cannot be before From Date"))
|
||||
|
||||
for day in self.get("holidays"):
|
||||
if not (self.from_date <= day.holiday_date <= self.to_date):
|
||||
frappe.throw(_("The holiday on {0} is not between From Date and To Date").format(formatdate(day.holiday_date)))
|
||||
|
||||
def get_weekly_off_date_list(self, start_date, end_date):
|
||||
start_date, end_date = getdate(start_date), getdate(end_date)
|
||||
|
||||
from dateutil import relativedelta
|
||||
from datetime import timedelta
|
||||
import calendar
|
||||
|
||||
date_list = []
|
||||
existing_date_list = []
|
||||
weekday = getattr(calendar, (self.weekly_off).upper())
|
||||
reference_date = year_start_date + relativedelta.relativedelta(weekday=weekday)
|
||||
reference_date = start_date + relativedelta.relativedelta(weekday=weekday)
|
||||
|
||||
while reference_date <= year_end_date:
|
||||
existing_date_list = [getdate(holiday.holiday_date) for holiday in self.get("holidays")]
|
||||
|
||||
while reference_date <= end_date:
|
||||
if reference_date not in existing_date_list:
|
||||
date_list.append(reference_date)
|
||||
reference_date += timedelta(days=7)
|
||||
|
||||
@ -58,42 +61,35 @@ class HolidayList(Document):
|
||||
def clear_table(self):
|
||||
self.set('holidays', [])
|
||||
|
||||
def update_default_holiday_list(self):
|
||||
frappe.db.sql("""update `tabHoliday List` set is_default = 0
|
||||
where is_default = 1 and fiscal_year = %s""", (self.fiscal_year,))
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_events(start, end, filters=None):
|
||||
import json
|
||||
"""Returns events for Gantt / Calendar view rendering.
|
||||
|
||||
:param start: Start date-time.
|
||||
:param end: End date-time.
|
||||
:param filters: Filters (JSON).
|
||||
"""
|
||||
from frappe.desk.calendar import get_event_conditions
|
||||
conditions = get_event_conditions("Holiday List", filters)
|
||||
condition = ''
|
||||
values = {
|
||||
"start_date": getdate(start),
|
||||
"end_date": getdate(end)
|
||||
}
|
||||
|
||||
fiscal_year = None
|
||||
if filters:
|
||||
fiscal_year = json.loads(filters).get("fiscal_year")
|
||||
if isinstance(filters, basestring):
|
||||
filters = json.loads(filters)
|
||||
|
||||
if not fiscal_year:
|
||||
fiscal_year = frappe.db.get_value("Global Defaults", None, "current_fiscal_year")
|
||||
if filters.get('holiday_list'):
|
||||
condition = 'and hlist.name=%(holiday_list)s'
|
||||
values['holiday_list'] = filters['holiday_list']
|
||||
|
||||
yr_start_date, yr_end_date = get_fy_start_end_dates(fiscal_year)
|
||||
|
||||
data = frappe.db.sql("""select hl.name, hld.holiday_date, hld.description
|
||||
from `tabHoliday List` hl, tabHoliday hld
|
||||
where hld.parent = hl.name
|
||||
and (ifnull(hld.holiday_date, "0000-00-00") != "0000-00-00"
|
||||
and hld.holiday_date between %(start)s and %(end)s)
|
||||
{conditions}""".format(conditions=conditions), {
|
||||
"start": yr_start_date,
|
||||
"end": yr_end_date
|
||||
}, as_dict=True, update={"allDay": 1})
|
||||
data = frappe.db.sql("""select hlist.name, h.holiday_date, h.description
|
||||
from `tabHoliday List` hlist, tabHoliday h
|
||||
where h.parent = hlist.name
|
||||
and h.holiday_date is not null
|
||||
and h.holiday_date >= %(start_date)s
|
||||
and h.holiday_date <= %(end_date)s
|
||||
{condition}""".format(condition=condition),
|
||||
values, as_dict=True, update={"allDay": 1})
|
||||
|
||||
return data
|
||||
|
||||
def get_fy_start_end_dates(fiscal_year):
|
||||
return frappe.db.get_value("Fiscal Year", fiscal_year, ["year_start_date", "year_end_date"])
|
||||
|
@ -9,14 +9,13 @@ frappe.views.calendar["Holiday List"] = {
|
||||
"title": "description",
|
||||
"allDay": "allDay"
|
||||
},
|
||||
get_events_method: "erpnext.hr.doctype.holiday_list.holiday_list.get_events",
|
||||
filters: [
|
||||
{
|
||||
"fieldtype": "Link",
|
||||
"fieldname": "fiscal_year",
|
||||
"options": "Fiscal Year",
|
||||
"label": __("Fiscal Year"),
|
||||
"default": frappe.defaults.get_user_default("fiscal_year")
|
||||
'fieldtype': 'Link',
|
||||
'fieldname': 'holiday_list',
|
||||
'options': 'Holiday List',
|
||||
'label': __('Holiday List')
|
||||
}
|
||||
],
|
||||
get_events_method: "erpnext.hr.doctype.holiday_list.holiday_list.get_events"
|
||||
]
|
||||
}
|
||||
|
@ -1,7 +1,8 @@
|
||||
[
|
||||
{
|
||||
"doctype": "Holiday List",
|
||||
"fiscal_year": "_Test Fiscal Year 2013",
|
||||
"from_date": "2013-01-01",
|
||||
"to_date":"2013-12-31",
|
||||
"holidays": [
|
||||
{
|
||||
"description": "New Year",
|
||||
@ -16,7 +17,6 @@
|
||||
"holiday_date": "2013-02-01"
|
||||
}
|
||||
],
|
||||
"holiday_list_name": "_Test Holiday List",
|
||||
"is_default": 1
|
||||
"holiday_list_name": "_Test Holiday List"
|
||||
}
|
||||
]
|
@ -8,6 +8,7 @@ from frappe.utils import cint, cstr, date_diff, flt, formatdate, getdate, get_li
|
||||
comma_or, get_fullname
|
||||
from erpnext.hr.utils import set_employee_name
|
||||
from erpnext.hr.doctype.leave_block_list.leave_block_list import get_applicable_block_dates
|
||||
from erpnext.hr.doctype.employee.employee import get_holiday_list_for_employee
|
||||
|
||||
|
||||
class LeaveDayBlockedError(frappe.ValidationError): pass
|
||||
@ -422,7 +423,7 @@ def add_block_dates(events, start, end, employee, company):
|
||||
cnt+=1
|
||||
|
||||
def add_holidays(events, start, end, employee, company):
|
||||
applicable_holiday_list = frappe.db.get_value("Employee", employee, "holiday_list")
|
||||
applicable_holiday_list = get_holiday_list_for_employee(employee, company)
|
||||
if not applicable_holiday_list:
|
||||
return
|
||||
|
||||
|
@ -11,7 +11,7 @@ from frappe import msgprint, _
|
||||
from erpnext.setup.utils import get_company_currency
|
||||
from erpnext.hr.utils import set_employee_name
|
||||
from erpnext.hr.doctype.process_payroll.process_payroll import get_month_details
|
||||
|
||||
from erpnext.hr.doctype.employee.employee import get_holiday_list_for_employee
|
||||
from erpnext.utilities.transaction_base import TransactionBase
|
||||
|
||||
class SalarySlip(TransactionBase):
|
||||
@ -108,21 +108,19 @@ class SalarySlip(TransactionBase):
|
||||
return payment_days
|
||||
|
||||
def get_holidays_for_employee(self, start_date, end_date):
|
||||
holidays = frappe.db.sql("""select t1.holiday_date
|
||||
from `tabHoliday` t1, tabEmployee t2
|
||||
where t1.parent = t2.holiday_list and t2.name = %s
|
||||
and t1.holiday_date between %s and %s""",
|
||||
(self.employee, start_date, end_date))
|
||||
holiday_list = get_holiday_list_for_employee(self.employee)
|
||||
holidays = frappe.db.sql_list('''select holiday_date from `tabHoliday`
|
||||
where
|
||||
parent=%(holiday_list)s
|
||||
and holiday_date >= %(start_date)s
|
||||
and holiday_date <= %(end_date)s''', {
|
||||
"holiday_list": holiday_list,
|
||||
"start_date": start_date,
|
||||
"end_date": end_date
|
||||
})
|
||||
|
||||
if not holidays:
|
||||
holidays = frappe.db.sql("""select t1.holiday_date
|
||||
from `tabHoliday` t1, `tabHoliday List` t2
|
||||
where t1.parent = t2.name and t2.is_default = 1
|
||||
and t2.fiscal_year = %s
|
||||
and t1.holiday_date between %s and %s""",
|
||||
(self.fiscal_year, start_date, end_date))
|
||||
holidays = [cstr(i) for i in holidays]
|
||||
|
||||
holidays = [cstr(i[0]) for i in holidays]
|
||||
return holidays
|
||||
|
||||
def calculate_lwp(self, holidays, m):
|
||||
|
@ -16,7 +16,7 @@ class TestSalarySlip(unittest.TestCase):
|
||||
|
||||
make_allocation_record(leave_type="_Test Leave Type LWP")
|
||||
|
||||
frappe.db.set_value("Holiday List", "_Test Holiday List", "is_default", 1)
|
||||
frappe.db.set_value("Company", "_Test Company", "default_holiday_list", "_Test Holiday List")
|
||||
|
||||
from erpnext.hr.doctype.leave_application.test_leave_application import _test_records as leave_applications
|
||||
la = frappe.copy_doc(leave_applications[2])
|
||||
|
@ -254,3 +254,4 @@ erpnext.patches.v6_24.repost_valuation_rate_for_serialized_items
|
||||
erpnext.patches.v6_24.set_recurring_id
|
||||
erpnext.patches.v6_20x.set_compact_print
|
||||
execute:frappe.delete_doc_if_exists("Web Form", "contact") #2016-03-10
|
||||
erpnext.patches.v6_20x.remove_fiscal_year_from_holiday_list
|
||||
|
@ -0,0 +1,17 @@
|
||||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
|
||||
def execute():
|
||||
default_holiday_list = frappe.db.get_value("Holiday List", {"is_default": 1})
|
||||
if default_holiday_list:
|
||||
for company in frappe.get_all("Company", fields=["name", "default_holiday_list"]):
|
||||
if not company.default_holiday_list:
|
||||
frappe.db.set_value("Company", company.name, "default_holiday_list", default_holiday_list)
|
||||
|
||||
|
||||
fiscal_years = frappe._dict((fy.name, fy) for fy in frappe.get_all("Fiscal Year", fields=["name", "year_start_date", "year_end_date"]))
|
||||
|
||||
for holiday_list in frappe.get_all("Holiday List", fields=["name", "fiscal_year"]):
|
||||
fy = fiscal_years[holiday_list.fiscal_year]
|
||||
frappe.db.set_value("Holiday List", holiday_list.name, "from_date", fy.year_start_date)
|
||||
frappe.db.set_value("Holiday List", holiday_list.name, "to_date", fy.year_end_date)
|
@ -6,7 +6,8 @@
|
||||
"default_currency": "INR",
|
||||
"doctype": "Company",
|
||||
"domain": "Manufacturing",
|
||||
"chart_of_accounts": "Standard"
|
||||
"chart_of_accounts": "Standard",
|
||||
"default_holiday_list": "_Test Holiday List"
|
||||
},
|
||||
{
|
||||
"abbr": "_TC1",
|
||||
@ -15,7 +16,8 @@
|
||||
"default_currency": "USD",
|
||||
"doctype": "Company",
|
||||
"domain": "Retail",
|
||||
"chart_of_accounts": "Standard"
|
||||
"chart_of_accounts": "Standard",
|
||||
"default_holiday_list": "_Test Holiday List"
|
||||
},
|
||||
{
|
||||
"abbr": "_TC2",
|
||||
@ -24,6 +26,7 @@
|
||||
"country": "Germany",
|
||||
"doctype": "Company",
|
||||
"domain": "Retail",
|
||||
"chart_of_accounts": "Standard"
|
||||
"chart_of_accounts": "Standard",
|
||||
"default_holiday_list": "_Test Holiday List"
|
||||
}
|
||||
]
|
||||
|
@ -9,6 +9,7 @@ from frappe.utils import add_days, getdate, cint, cstr
|
||||
from frappe import throw, _
|
||||
from erpnext.utilities.transaction_base import TransactionBase, delete_events
|
||||
from erpnext.stock.utils import get_valid_serial_nos
|
||||
from erpnext.hr.doctype.employee.employee import get_holiday_list_for_employee
|
||||
|
||||
class MaintenanceSchedule(TransactionBase):
|
||||
def generate_schedule(self):
|
||||
@ -90,35 +91,21 @@ class MaintenanceSchedule(TransactionBase):
|
||||
return schedule_list
|
||||
|
||||
def validate_schedule_date_for_holiday_list(self, schedule_date, sales_person):
|
||||
from erpnext.accounts.utils import get_fiscal_year
|
||||
validated = False
|
||||
fy_details = ""
|
||||
|
||||
try:
|
||||
fy_details = get_fiscal_year(date=schedule_date, verbose=0)
|
||||
except Exception:
|
||||
pass
|
||||
employee = frappe.db.get_value("Sales Person", sales_person, "employee")
|
||||
holiday_list = get_holiday_list_for_employee(employee)
|
||||
holidays = frappe.db.sql_list('''select holiday_date from `tabHoliday` where parent=%s''', holiday_list)
|
||||
|
||||
if fy_details and fy_details[0]:
|
||||
# check holiday list in employee master
|
||||
holiday_list = frappe.db.sql_list("""select h.holiday_date from `tabEmployee` emp,
|
||||
`tabSales Person` sp, `tabHoliday` h, `tabHoliday List` hl
|
||||
where sp.name=%s and emp.name=sp.employee
|
||||
and hl.name=emp.holiday_list and
|
||||
h.parent=hl.name and
|
||||
hl.fiscal_year=%s""", (sales_person, fy_details[0]))
|
||||
if not holiday_list:
|
||||
# check global holiday list
|
||||
holiday_list = frappe.db.sql("""select h.holiday_date from
|
||||
`tabHoliday` h, `tabHoliday List` hl
|
||||
where h.parent=hl.name and hl.is_default = 1
|
||||
and hl.fiscal_year=%s""", fy_details[0])
|
||||
if not validated and holidays:
|
||||
|
||||
if not validated and holiday_list:
|
||||
if schedule_date in holiday_list:
|
||||
# max iterations = len(holidays)
|
||||
for i in xrange(len(holidays)):
|
||||
if schedule_date in holidays:
|
||||
schedule_date = add_days(schedule_date, -1)
|
||||
else:
|
||||
validated = True
|
||||
break
|
||||
|
||||
return schedule_date
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user