85 lines
2.6 KiB
Python
85 lines
2.6 KiB
Python
from __future__ import unicode_literals
|
|
|
|
import webnotes
|
|
from webnotes import _
|
|
|
|
@webnotes.whitelist()
|
|
def get_events(start, end, employee=None, company=None):
|
|
roles = webnotes.get_roles()
|
|
events = webnotes.conn.sql("""select name as `id`, subject as title,
|
|
starts_on as `start`, ends_on as `end`, "Event" as doctype, owner,
|
|
all_day as allDay, event_type
|
|
from tabEvent where (
|
|
(starts_on between %s and %s)
|
|
or (ends_on between %s and %s)
|
|
)
|
|
and (event_type='Public' or owner=%s
|
|
or exists(select * from `tabEvent User` where
|
|
`tabEvent User`.parent=tabEvent.name and person=%s)
|
|
or exists(select * from `tabEvent Role` where
|
|
`tabEvent Role`.parent=tabEvent.name
|
|
and `tabEvent Role`.role in ('%s')))""" % ('%s', '%s', '%s', '%s', '%s', '%s',
|
|
"', '".join(roles)), (start, end, start, end,
|
|
webnotes.session.user, webnotes.session.user), as_dict=1)
|
|
|
|
|
|
if employee:
|
|
add_block_dates(events, start, end, employee, company)
|
|
add_department_leaves(events, start, end, employee, company)
|
|
|
|
return events
|
|
|
|
def add_department_leaves(events, start, end, employee, company):
|
|
department = webnotes.conn.get_value("Employee", employee, "department")
|
|
|
|
if not department:
|
|
return
|
|
|
|
# department leaves
|
|
department_employees = webnotes.conn.sql_list("select name from tabEmployee where department=%s",
|
|
department)
|
|
|
|
for d in webnotes.conn.sql("""select name, from_date, to_date, employee_name, half_day,
|
|
status, employee
|
|
from `tabLeave Application` where
|
|
(from_date between %s and %s or to_date between %s and %s)
|
|
and docstatus < 2
|
|
and status!="Rejected"
|
|
and employee in ('%s')""" % ("%s", "%s", "%s", "%s", "', '".join(department_employees)),
|
|
(start, end, start, end), as_dict=True):
|
|
events.append({
|
|
"id": d.name,
|
|
"employee": d.employee,
|
|
"doctype": "Leave Application",
|
|
"start": d.from_date,
|
|
"end": d.to_date,
|
|
"allDay": True,
|
|
"status": d.status,
|
|
"title": _("Leave by") + " " + d.employee_name + \
|
|
(d.half_day and _(" (Half Day)") or "")
|
|
})
|
|
|
|
|
|
def add_block_dates(events, start, end, employee, company):
|
|
# block days
|
|
from hr.doctype.leave_block_list.leave_block_list import get_applicable_block_dates
|
|
|
|
cnt = 0
|
|
block_dates = get_applicable_block_dates(start, end, employee, company, all_lists=True)
|
|
|
|
for block_date in block_dates:
|
|
events.append({
|
|
"doctype": "Leave Block List Date",
|
|
"start": block_date.block_date,
|
|
"title": _("Leave Blocked") + ": " + block_date.reason,
|
|
"id": "_" + str(cnt),
|
|
"allDay": True
|
|
})
|
|
cnt+=1
|
|
|
|
|
|
@webnotes.whitelist()
|
|
def update_event(name, start, end):
|
|
webnotes.conn.sql("""update tabEvent set starts_on=%s, ends_on=%s where
|
|
name=%s""", (start, end, name))
|
|
|