Merge pull request #6018 from rohitwaghchaure/add_calendar_to_timesheets

Added a Calendar view for timesheet logs
This commit is contained in:
Nabin Hait 2016-08-08 14:46:18 +05:30 committed by GitHub
commit 4b231c2692
2 changed files with 56 additions and 0 deletions

View File

@ -6,6 +6,7 @@ from __future__ import unicode_literals
import frappe
from frappe import _
import json
from datetime import timedelta
from frappe.utils import flt, time_diff_in_hours, get_datetime, getdate, cint, get_datetime_str
from frappe.model.document import Document
@ -290,3 +291,31 @@ def get_activity_cost(employee=None, activity_type=None):
["costing_rate", "billing_rate"], as_dict=True)
return rate[0] if rate else {}
@frappe.whitelist()
def get_events(start, end, filters=None):
"""Returns events for Gantt / Calendar view rendering.
:param start: Start date-time.
:param end: End date-time.
:param filters: Filters (JSON).
"""
filters = json.loads(filters)
conditions = get_conditions(filters)
return frappe.db.sql("""select `tabTimesheet Detail`.name as name, `tabTimesheet Detail`.parent as parent,
from_time, hours, activity_type, project, to_time from `tabTimesheet Detail`,
`tabTimesheet` where `tabTimesheet Detail`.parent = `tabTimesheet`.name and
(from_time between %(start)s and %(end)s) {conditions}""".format(conditions=conditions),
{
"start": start,
"end": end
}, as_dict=True, update={"allDay": 0})
def get_conditions(filters):
conditions = []
abbr = {'employee': 'tabTimesheet', 'project': 'tabTimesheet Detail'}
for key in filters:
if filters.get(key):
conditions.append("`%s`.%s = '%s'"%(abbr.get(key), key, filters.get(key)))
return " and {}".format(" and ".join(conditions)) if conditions else ""

View File

@ -0,0 +1,27 @@
frappe.views.calendar["Timesheet"] = {
field_map: {
"start": "from_time",
"end": "to_time",
"name": "parent",
"id": "parent",
"title": "activity_type",
"allDay": "allDay",
"child_name": "name"
},
gantt: true,
filters: [
{
"fieldtype": "Link",
"fieldname": "project",
"options": "Project",
"label": __("Project")
},
{
"fieldtype": "Link",
"fieldname": "employee",
"options": "Employee",
"label": __("Employee")
}
],
get_events_method: "erpnext.projects.doctype.timesheet.timesheet.get_events"
}