feat: timesheet Employee Summary Report
diff --git a/erpnext/projects/report/employee_billing_summary/__init__.py b/erpnext/projects/report/employee_billing_summary/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/projects/report/employee_billing_summary/__init__.py
diff --git a/erpnext/projects/report/employee_billing_summary/employee_billing_summary.js b/erpnext/projects/report/employee_billing_summary/employee_billing_summary.js
new file mode 100644
index 0000000..e6e6746
--- /dev/null
+++ b/erpnext/projects/report/employee_billing_summary/employee_billing_summary.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
+// For license information, please see license.txt
+/* eslint-disable */
+
+frappe.query_reports["Employee Billing Summary"] = {
+ "filters": [
+ {
+ fieldname: "employee",
+ label: __("Employee"),
+ fieldtype: "Link",
+ options: "Employee",
+ },
+ {
+ fieldname:"from_date",
+ label: __("From Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.get_today()
+ },
+ {
+ fieldname:"to_date",
+ label: __("To Date"),
+ fieldtype: "Date",
+ default: frappe.datetime.add_days(frappe.datetime.get_today(), 30)
+ },
+
+ ]
+}
diff --git a/erpnext/projects/report/employee_billing_summary/employee_billing_summary.json b/erpnext/projects/report/employee_billing_summary/employee_billing_summary.json
new file mode 100644
index 0000000..433ebac
--- /dev/null
+++ b/erpnext/projects/report/employee_billing_summary/employee_billing_summary.json
@@ -0,0 +1,36 @@
+{
+ "add_total_row": 0,
+ "creation": "2019-03-08 15:08:19.929728",
+ "disable_prepared_report": 0,
+ "disabled": 0,
+ "docstatus": 0,
+ "doctype": "Report",
+ "idx": 0,
+ "is_standard": "Yes",
+ "modified": "2019-03-08 15:08:19.929728",
+ "modified_by": "Administrator",
+ "module": "Projects",
+ "name": "Employee Billing Summary",
+ "owner": "Administrator",
+ "prepared_report": 0,
+ "ref_doctype": "Timesheet",
+ "report_name": "Employee Billing Summary",
+ "report_type": "Script Report",
+ "roles": [
+ {
+ "role": "Projects User"
+ },
+ {
+ "role": "HR User"
+ },
+ {
+ "role": "Manufacturing User"
+ },
+ {
+ "role": "Employee"
+ },
+ {
+ "role": "Accounts User"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/erpnext/projects/report/employee_billing_summary/employee_billing_summary.py b/erpnext/projects/report/employee_billing_summary/employee_billing_summary.py
new file mode 100644
index 0000000..47323ef
--- /dev/null
+++ b/erpnext/projects/report/employee_billing_summary/employee_billing_summary.py
@@ -0,0 +1,119 @@
+# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
+# For license information, please see license.txt
+
+from __future__ import unicode_literals
+import frappe
+from frappe import _
+from frappe.utils import time_diff_in_hours
+
+def execute(filters=None):
+ filters = frappe._dict(filters or {})
+ print(filters)
+
+ columns = get_columns()
+
+ data = get_data(filters)
+ return columns, data
+
+def get_columns():
+ return [
+ {
+ "label": _("Employee ID"),
+ "fieldtype": "Link",
+ "fieldname": "employee",
+ "options": "Employee",
+ "width": 300
+ },
+ {
+ "label": _("Employee Name"),
+ "fieldtype": "data",
+ "fieldname": "employee_name",
+ "hidden": 1,
+ "width": 200
+ },
+ {
+ "label": _("Timesheet"),
+ "fieldtype": "Link",
+ "fieldname": "timesheet",
+ "options": "Timesheet",
+ "width": 150
+ },
+ {
+ "label": _("Date"),
+ "fieldtype": "Date",
+ "fieldname": "date",
+ "width": 150
+ },
+ {
+ "label": _("Total Billable Hours"),
+ "fieldtype": "Int",
+ "fieldname": "total_billable_hours",
+ "width": 50
+ },
+ {
+ "label": _("Total Hours"),
+ "fieldtype": "Int",
+ "fieldname": "total_hours",
+ "width": 50
+ },
+ {
+ "label": _("Amount"),
+ "fieldtype": "Int",
+ "fieldname": "amount",
+ "width": 50
+ }
+ ]
+
+def get_data(filters):
+ data = []
+ if "employee" in filters:
+ record= frappe.db.sql('''SELECT
+ employee, employee_name, name, total_billable_hours, total_hours, total_billable_amount
+ FROM
+ `tabTimesheet`
+ WHERE
+ employee = %s and (start_date <= %s and end_date >= %s)''',(filters.employee, filters.to_date, filters.from_date),
+ as_dict=1
+ )
+ for entries in record:
+
+ timesheet_details = frappe.get_all(
+ "Timesheet Detail",
+ filters={"parent": entries.name},
+ fields=["*"]
+ )
+
+ total_hours = 0
+ total_billable_hours = 0
+ print("-------------------------------------------->>>>>>>")
+ for time in timesheet_details:
+ time_start = time.from_time
+ time_end = frappe.utils.add_to_date(time.from_time, hours=time.hours)
+
+ from_date = frappe.utils.get_datetime(filters.from_date)
+ to_date = frappe.utils.get_datetime(filters.to_date)
+
+ if time_start <= from_date and time_end <= to_date:
+ total_hours += abs(time_diff_in_hours(time_end, from_date))
+ print(from_date, time_end)
+ print("case 1", entries.name,time_diff_in_hours(time_end, from_date))
+ elif time_start >= from_date and time_end >= to_date:
+ total_hours += abs(time_diff_in_hours(to_date, time_start))
+ print(time_start, to_date)
+ print("case 2", entries.name,time_diff_in_hours(to_date, time_start))
+ elif time_start >= from_date and time_end <= to_date:
+ total_hours = entries.total_hours
+ print("case 3 all set", entries.name)
+
+ print(total_hours)
+ print("-------------------------------------------->>>>>>>")
+ row = {
+ "employee": entries.employee,
+ "employee_name": entries.employee_name,
+ "timesheet": entries.name,
+ "total_billable_hours": entries.total_billable_hours,
+ "total_hours": entries.total_hours,
+ "amount": 1
+ }
+ data.append(row)
+ return data
\ No newline at end of file
diff --git a/erpnext/public/node_modules b/erpnext/public/node_modules
new file mode 120000
index 0000000..229573e
--- /dev/null
+++ b/erpnext/public/node_modules
@@ -0,0 +1 @@
+/Users/anuragmishra/test/apps/erpnext/node_modules
\ No newline at end of file