Browse Source

Fix: HR and Payroll Dashboard (#22771)

* Fix: HR and Payroll Dashboard

* fix: requested changes
develop
Anurag Mishra 4 years ago
committed by GitHub
parent
commit
9aa0602065
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 27
      erpnext/hr/dashboard_chart/attendance_count/attendance_count.json
  2. 29
      erpnext/hr/dashboard_chart/department_wise_employee_count/department_wise_employee_count.json
  3. 29
      erpnext/hr/dashboard_chart/department_wise_openings/department_wise_openings.json
  4. 29
      erpnext/hr/dashboard_chart/designation_wise_employee_count/designation_wise_employee_count.json
  5. 30
      erpnext/hr/dashboard_chart/designation_wise_openings/designation_wise_openings.json
  6. 29
      erpnext/hr/dashboard_chart/gender_diversity_ratio/gender_diversity_ratio.json
  7. 29
      erpnext/hr/dashboard_chart/job_application_status/job_application_status.json
  8. 190
      erpnext/hr/dashboard_fixtures.py
  9. 58
      erpnext/hr/hr_dashboard/human_resource/human_resource.json
  10. 21
      erpnext/hr/number_card/employees_left_(last_year)/employees_left_(last_year).json
  11. 21
      erpnext/hr/number_card/new_joinees_(last_year)/new_joinees_(last_year).json
  12. 21
      erpnext/hr/number_card/total_applicants_(last_month)/total_applicants_(last_month).json
  13. 21
      erpnext/hr/number_card/total_employees/total_employees.json
  14. 21
      erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.js
  15. 5
      erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.py
  16. 30
      erpnext/payroll/dashboard_chart/department_wise_salary(last_month)/department_wise_salary(last_month).json
  17. 30
      erpnext/payroll/dashboard_chart/designation_wise_salary(last_month)/designation_wise_salary(last_month).json
  18. 29
      erpnext/payroll/dashboard_chart/outgoing_salary/outgoing_salary.json
  19. 100
      erpnext/payroll/dashboard_fixtures.py
  20. 238
      erpnext/payroll/doctype/salary_slip/salary_slip.json
  21. 21
      erpnext/payroll/number_card/total_declaration_submitted/total_declaration_submitted.json
  22. 22
      erpnext/payroll/number_card/total_incentive_given(last_month)/total_incentive_given(last_month).json
  23. 22
      erpnext/payroll/number_card/total_outgoing_salary(last_month)/total_outgoing_salary(last_month).json
  24. 21
      erpnext/payroll/number_card/total_salary_structure/total_salary_structure.json
  25. 42
      erpnext/payroll/payroll_dashboard/payroll/payroll.json

27
erpnext/hr/dashboard_chart/attendance_count/attendance_count.json

@ -0,0 +1,27 @@
{
"chart_name": "Attendance Count",
"chart_type": "Report",
"creation": "2020-07-22 11:56:32.730068",
"custom_options": "{\n\t\t\"type\": \"line\",\n\t\t\"axisOptions\": {\n\t\t\t\"shortenYAxisNumbers\": 1\n\t\t},\n\t\t\"tooltipOptions\": {}\n\t}",
"docstatus": 0,
"doctype": "Dashboard Chart",
"dynamic_filters_json": "{\"month\":\"frappe.datetime.str_to_obj(frappe.datetime.get_today()).getMonth() + 1\",\"year\":\"frappe.datetime.str_to_obj(frappe.datetime.get_today()).getFullYear();\",\"company\":\"frappe.defaults.get_user_default(\\\"Company\\\")\"}",
"filters_json": "{}",
"group_by_type": "Count",
"idx": 0,
"is_public": 1,
"is_standard": 1,
"modified": "2020-07-22 14:32:40.334424",
"modified_by": "Administrator",
"module": "HR",
"name": "Attendance Count",
"number_of_groups": 0,
"owner": "Administrator",
"report_name": "Monthly Attendance Sheet",
"time_interval": "Yearly",
"timeseries": 0,
"timespan": "Last Year",
"type": "Line",
"use_report_chart": 1,
"y_axis": []
}

29
erpnext/hr/dashboard_chart/department_wise_employee_count/department_wise_employee_count.json

@ -0,0 +1,29 @@
{
"chart_name": "Department Wise Employee Count",
"chart_type": "Group By",
"creation": "2020-07-22 11:56:32.760730",
"custom_options": "",
"docstatus": 0,
"doctype": "Dashboard Chart",
"document_type": "Employee",
"dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]",
"filters_json": "[[\"Employee\",\"status\",\"=\",\"Active\",false]]",
"group_by_based_on": "department",
"group_by_type": "Count",
"idx": 0,
"is_public": 1,
"is_standard": 1,
"last_synced_on": "2020-07-22 14:27:40.574194",
"modified": "2020-07-22 14:33:38.036794",
"modified_by": "Administrator",
"module": "HR",
"name": "Department Wise Employee Count",
"number_of_groups": 0,
"owner": "Administrator",
"time_interval": "Yearly",
"timeseries": 0,
"timespan": "Last Year",
"type": "Donut",
"use_report_chart": 0,
"y_axis": []
}

29
erpnext/hr/dashboard_chart/department_wise_openings/department_wise_openings.json

@ -0,0 +1,29 @@
{
"aggregate_function_based_on": "planned_vacancies",
"chart_name": "Department Wise Openings",
"chart_type": "Group By",
"creation": "2020-07-22 11:56:32.849775",
"custom_options": "",
"docstatus": 0,
"doctype": "Dashboard Chart",
"document_type": "Job Opening",
"filters_json": "[]",
"group_by_based_on": "department",
"group_by_type": "Sum",
"idx": 0,
"is_public": 1,
"is_standard": 1,
"last_synced_on": "2020-07-22 14:33:44.834801",
"modified": "2020-07-22 14:34:45.273591",
"modified_by": "Administrator",
"module": "HR",
"name": "Department Wise Openings",
"number_of_groups": 0,
"owner": "Administrator",
"time_interval": "Monthly",
"timeseries": 0,
"timespan": "Last Year",
"type": "Bar",
"use_report_chart": 0,
"y_axis": []
}

29
erpnext/hr/dashboard_chart/designation_wise_employee_count/designation_wise_employee_count.json

@ -0,0 +1,29 @@
{
"chart_name": "Designation Wise Employee Count",
"chart_type": "Group By",
"creation": "2020-07-22 11:56:32.790337",
"custom_options": "",
"docstatus": 0,
"doctype": "Dashboard Chart",
"document_type": "Employee",
"dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]",
"filters_json": "[[\"Employee\",\"status\",\"=\",\"Active\",false]]",
"group_by_based_on": "designation",
"group_by_type": "Count",
"idx": 0,
"is_public": 1,
"is_standard": 1,
"last_synced_on": "2020-07-22 14:27:40.602783",
"modified": "2020-07-22 14:31:49.665555",
"modified_by": "Administrator",
"module": "HR",
"name": "Designation Wise Employee Count",
"number_of_groups": 0,
"owner": "Administrator",
"time_interval": "Yearly",
"timeseries": 0,
"timespan": "Last Year",
"type": "Donut",
"use_report_chart": 0,
"y_axis": []
}

30
erpnext/hr/dashboard_chart/designation_wise_openings/designation_wise_openings.json

@ -0,0 +1,30 @@
{
"aggregate_function_based_on": "planned_vacancies",
"chart_name": "Designation Wise Openings",
"chart_type": "Group By",
"creation": "2020-07-22 11:56:32.820217",
"custom_options": "",
"docstatus": 0,
"doctype": "Dashboard Chart",
"document_type": "Job Opening",
"dynamic_filters_json": "",
"filters_json": "[]",
"group_by_based_on": "designation",
"group_by_type": "Sum",
"idx": 0,
"is_public": 1,
"is_standard": 1,
"last_synced_on": "2020-07-22 14:33:44.806626",
"modified": "2020-07-22 14:34:32.711881",
"modified_by": "Administrator",
"module": "HR",
"name": "Designation Wise Openings",
"number_of_groups": 0,
"owner": "Administrator",
"time_interval": "Monthly",
"timeseries": 0,
"timespan": "Last Year",
"type": "Bar",
"use_report_chart": 0,
"y_axis": []
}

29
erpnext/hr/dashboard_chart/gender_diversity_ratio/gender_diversity_ratio.json

@ -0,0 +1,29 @@
{
"chart_name": "Gender Diversity Ratio",
"chart_type": "Group By",
"creation": "2020-07-22 11:56:32.667291",
"custom_options": "",
"docstatus": 0,
"doctype": "Dashboard Chart",
"document_type": "Employee",
"dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]",
"filters_json": "[[\"Employee\",\"status\",\"=\",\"Active\",false]]",
"group_by_based_on": "gender",
"group_by_type": "Count",
"idx": 0,
"is_public": 1,
"is_standard": 1,
"last_synced_on": "2020-07-22 14:27:40.143783",
"modified": "2020-07-22 14:32:50.962459",
"modified_by": "Administrator",
"module": "HR",
"name": "Gender Diversity Ratio",
"number_of_groups": 0,
"owner": "Administrator",
"time_interval": "Yearly",
"timeseries": 0,
"timespan": "Last Year",
"type": "Pie",
"use_report_chart": 0,
"y_axis": []
}

29
erpnext/hr/dashboard_chart/job_application_status/job_application_status.json

@ -0,0 +1,29 @@
{
"chart_name": "Job Application Status",
"chart_type": "Group By",
"creation": "2020-07-22 11:56:32.699696",
"custom_options": "",
"docstatus": 0,
"doctype": "Dashboard Chart",
"document_type": "Job Applicant",
"dynamic_filters_json": "",
"filters_json": "[[\"Job Applicant\",\"creation\",\"Previous\",\"1 month\"]]",
"group_by_based_on": "status",
"group_by_type": "Count",
"idx": 0,
"is_public": 1,
"is_standard": 1,
"last_synced_on": "2020-07-22 14:27:40.118498",
"modified": "2020-07-22 14:33:00.404144",
"modified_by": "Administrator",
"module": "HR",
"name": "Job Application Status",
"number_of_groups": 0,
"owner": "Administrator",
"time_interval": "Yearly",
"timeseries": 0,
"timespan": "Last Year",
"type": "Pie",
"use_report_chart": 0,
"y_axis": []
}

190
erpnext/hr/dashboard_fixtures.py

@ -1,190 +0,0 @@
# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
import frappe
import erpnext
import json
from frappe import _
def get_data():
return frappe._dict({
"dashboards": get_dashboards(),
"charts": get_charts(),
"number_cards": get_number_cards(),
})
def get_dashboards():
dashboards = []
dashboards.append(get_human_resource_dashboard())
return dashboards
def get_human_resource_dashboard():
return {
"name": "Human Resource",
"dashboard_name": "Human Resource",
"is_default": 1,
"charts": [
{ "chart": "Attendance Count", "width": "Full"},
{ "chart": "Gender Diversity Ratio", "width": "Half"},
{ "chart": "Job Application Status", "width": "Half"},
{ "chart": 'Designation Wise Employee Count', "width": "Half"},
{ "chart": 'Department Wise Employee Count', "width": "Half"},
{ "chart": 'Designation Wise Openings', "width": "Half"},
{ "chart": 'Department Wise Openings', "width": "Half"}
],
"cards": [
{"card": "Total Employees"},
{"card": "New Joinees (Last year)"},
{'card': "Employees Left (Last year)"},
{'card': "Total Applicants (Last month)"},
]
}
def get_recruitment_dashboard():
pass
def get_charts():
company = erpnext.get_default_company()
date = frappe.utils.get_datetime()
month_map = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov","Dec"]
if not company:
company = frappe.db.get_value("Company", {"is_group": 0}, "name")
dashboard_charts = [
get_dashboards_chart_doc('Gender Diversity Ratio', "Group By", "Pie",
document_type = "Employee", group_by_type="Count", group_by_based_on="gender",
filters_json = json.dumps([["Employee", "status", "=", "Active"]]))
]
dashboard_charts.append(
get_dashboards_chart_doc('Job Application Status', "Group By", "Pie",
document_type = "Job Applicant", group_by_type="Count", group_by_based_on="status",
filters_json = json.dumps([["Job Applicant", "creation", "Previous", "1 month"]]))
)
custom_options = '''{
"type": "line",
"axisOptions": {
"shortenYAxisNumbers": 1
},
"tooltipOptions": {}
}'''
filters_json = json.dumps({
"month": month_map[date.month - 1],
"year": str(date.year),
"company":company
})
dashboard_charts.append(
get_dashboards_chart_doc('Attendance Count', "Report", "Line",
report_name = "Monthly Attendance Sheet", is_custom =1, group_by_type="Count",
filters_json = filters_json, custom_options=custom_options)
)
dashboard_charts.append(
get_dashboards_chart_doc('Department Wise Employee Count', "Group By", "Donut",
document_type = "Employee", group_by_type="Count", group_by_based_on="department",
filters_json = json.dumps([["Employee", "status", "=", "Active"]]))
)
dashboard_charts.append(
get_dashboards_chart_doc('Designation Wise Employee Count', "Group By", "Donut",
document_type = "Employee", group_by_type="Count", group_by_based_on="designation",
filters_json = json.dumps([["Employee", "status", "=", "Active"]]))
)
dashboard_charts.append(
get_dashboards_chart_doc('Designation Wise Openings', "Group By", "Bar",
document_type = "Job Opening", group_by_type="Sum", group_by_based_on="designation",
time_interval = "Monthly", aggregate_function_based_on = "planned_vacancies")
)
dashboard_charts.append(
get_dashboards_chart_doc('Department Wise Openings', "Group By", "Bar",
document_type = "Job Opening", group_by_type="Sum", group_by_based_on="department",
time_interval = "Monthly", aggregate_function_based_on = "planned_vacancies")
)
return dashboard_charts
def get_number_cards():
number_cards = []
number_cards = [
get_number_cards_doc("Employee", "Total Employees", filters_json = json.dumps([
["Employee","status","=","Active"]
])
)
]
number_cards.append(
get_number_cards_doc("Employee", "New Joinees (Last year)", filters_json = json.dumps([
["Employee","date_of_joining","Timespan","last year"],
["Employee","status","=","Active"]
])
)
)
number_cards.append(
get_number_cards_doc("Employee", "Employees Left (Last year)", filters_json = json.dumps([
["Employee", "relieving_date", "Timespan", "last year"],
["Employee", "status", "=", "Left"]
])
)
)
number_cards.append(
get_number_cards_doc("Job Applicant", "Total Applicants (Last month)", filters_json = json.dumps([
["Job Applicant", "creation", "Timespan", "last month"]
])
)
)
return number_cards
def get_number_cards_doc(document_type, label, **args):
args = frappe._dict(args)
return {
"doctype": "Number Card",
"document_type": document_type,
"function": args.func or "Count",
"is_public": args.is_public or 1,
"label": _(label),
"name": args.name or label,
"show_percentage_stats": args.show_percentage_stats or 1,
"stats_time_interval": args.stats_time_interval or 'Monthly',
"filters_json": args.filters_json or '[]',
"aggregate_function_based_on": args.aggregate_function_based_on or None
}
def get_dashboards_chart_doc(name, chart_type, graph_type, **args):
args = frappe._dict(args)
return {
"name": name,
"chart_name": _(args.chart_name or name),
"chart_type": chart_type,
"document_type": args.document_type or None,
"report_name": args.report_name or None,
"is_custom": args.is_custom or 0,
"group_by_type": args.group_by_type or None,
"group_by_based_on": args.group_by_based_on or None,
"based_on": args.based_on or None,
"value_based_on": args.value_based_on or None,
"number_of_groups": args.number_of_groups or 0,
"is_public": args.is_public or 1,
"timespan": args.timespan or "Last Year",
"time_interval": args.time_interval or "Yearly",
"timeseries": args.timeseries or 0,
"filters_json": args.filters_json or '[]',
"type": graph_type,
"custom_options": args.custom_options or '',
"doctype": "Dashboard Chart",
"aggregate_function_based_on": args.aggregate_function_based_on or None
}

58
erpnext/hr/hr_dashboard/human_resource/human_resource.json

@ -0,0 +1,58 @@
{
"cards": [
{
"card": "Total Employees"
},
{
"card": "New Joinees (Last year)"
},
{
"card": "Employees Left (Last year)"
},
{
"card": "Total Applicants (Last month)"
}
],
"charts": [
{
"chart": "Attendance Count",
"width": "Full"
},
{
"chart": "Gender Diversity Ratio",
"width": "Half"
},
{
"chart": "Job Application Status",
"width": "Half"
},
{
"chart": "Designation Wise Employee Count",
"width": "Half"
},
{
"chart": "Department Wise Employee Count",
"width": "Half"
},
{
"chart": "Designation Wise Openings",
"width": "Half"
},
{
"chart": "Department Wise Openings",
"width": "Half"
}
],
"creation": "2020-07-22 11:56:33.015888",
"dashboard_name": "Human Resource",
"docstatus": 0,
"doctype": "Dashboard",
"idx": 0,
"is_default": 0,
"is_standard": 1,
"modified": "2020-07-22 14:42:12.789249",
"modified_by": "Administrator",
"module": "HR",
"name": "Human Resource",
"owner": "Administrator"
}

21
erpnext/hr/number_card/employees_left_(last_year)/employees_left_(last_year).json

@ -0,0 +1,21 @@
{
"creation": "2020-07-22 11:56:32.947790",
"docstatus": 0,
"doctype": "Number Card",
"document_type": "Employee",
"dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]",
"filters_json": "[[\"Employee\",\"relieving_date\",\"Timespan\",\"last year\",false]]",
"function": "Count",
"idx": 0,
"is_public": 1,
"is_standard": 1,
"label": "Employees Left (Last year)",
"modified": "2020-07-23 12:03:26.747447",
"modified_by": "Administrator",
"module": "HR",
"name": "Employees Left (Last year)",
"owner": "Administrator",
"show_percentage_stats": 1,
"stats_time_interval": "Monthly",
"type": "Document Type"
}

21
erpnext/hr/number_card/new_joinees_(last_year)/new_joinees_(last_year).json

@ -0,0 +1,21 @@
{
"creation": "2020-07-22 11:56:32.914057",
"docstatus": 0,
"doctype": "Number Card",
"document_type": "Employee",
"dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]",
"filters_json": "[[\"Employee\",\"date_of_joining\",\"Timespan\",\"last year\",false],[\"Employee\",\"status\",\"=\",\"Active\",false]]",
"function": "Count",
"idx": 0,
"is_public": 1,
"is_standard": 1,
"label": "New Joinees (Last year)",
"modified": "2020-07-22 14:32:09.352301",
"modified_by": "Administrator",
"module": "HR",
"name": "New Joinees (Last year)",
"owner": "Administrator",
"show_percentage_stats": 1,
"stats_time_interval": "Monthly",
"type": "Document Type"
}

21
erpnext/hr/number_card/total_applicants_(last_month)/total_applicants_(last_month).json

@ -0,0 +1,21 @@
{
"creation": "2020-07-22 11:56:32.977716",
"docstatus": 0,
"doctype": "Number Card",
"document_type": "Job Applicant",
"dynamic_filters_json": "",
"filters_json": "[[\"Job Applicant\",\"creation\",\"Timespan\",\"last month\"]]",
"function": "Count",
"idx": 0,
"is_public": 1,
"is_standard": 1,
"label": "Total Applicants (Last month)",
"modified": "2020-07-22 14:32:27.656855",
"modified_by": "Administrator",
"module": "HR",
"name": "Total Applicants (Last month)",
"owner": "Administrator",
"show_percentage_stats": 1,
"stats_time_interval": "Monthly",
"type": "Document Type"
}

21
erpnext/hr/number_card/total_employees/total_employees.json

@ -0,0 +1,21 @@
{
"creation": "2020-07-22 11:56:32.874849",
"docstatus": 0,
"doctype": "Number Card",
"document_type": "Employee",
"dynamic_filters_json": "[[\"Employee\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]",
"filters_json": "[[\"Employee\",\"status\",\"=\",\"Active\",false]]",
"function": "Count",
"idx": 0,
"is_public": 1,
"is_standard": 1,
"label": "Total Employees",
"modified": "2020-07-22 14:31:59.118650",
"modified_by": "Administrator",
"module": "HR",
"name": "Total Employees",
"owner": "Administrator",
"show_percentage_stats": 1,
"stats_time_interval": "Monthly",
"type": "Document Type"
}

21
erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.js

@ -5,12 +5,25 @@
frappe.query_reports["Monthly Attendance Sheet"] = {
"filters": [
{
"fieldname":"month",
"fieldname": "month",
"label": __("Month"),
"fieldtype": "Select",
"options": "Jan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug\nSep\nOct\nNov\nDec",
"default": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov",
"Dec"][frappe.datetime.str_to_obj(frappe.datetime.get_today()).getMonth()],
"reqd": 1 ,
"options": [
{ "value": 1, "label": __("Jan") },
{ "value": 2, "label": __("Feb") },
{ "value": 3, "label": __("Mar") },
{ "value": 4, "label": __("Apr") },
{ "value": 5, "label": __("May") },
{ "value": 6, "label": __("June") },
{ "value": 7, "label": __("July") },
{ "value": 8, "label": __("Aug") },
{ "value": 9, "label": __("Sep") },
{ "value": 10, "label": __("Oct") },
{ "value": 11, "label": __("Nov") },
{ "value": 12, "label": __("Dec") },
],
"default": frappe.datetime.str_to_obj(frappe.datetime.get_today()).getMonth() + 1
},
{
"fieldname":"year",

5
erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.py

@ -248,10 +248,7 @@ def get_conditions(filters):
if not (filters.get("month") and filters.get("year")):
msgprint(_("Please select month and year"), raise_exception=1)
filters["month"] = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov",
"Dec"].index(filters.month) + 1
filters["total_days_in_month"] = monthrange(cint(filters.year), filters.month)[1]
filters["total_days_in_month"] = monthrange(cint(filters.year), cint(filters.month))[1]
conditions = " and month(attendance_date) = %(month)s and year(attendance_date) = %(year)s"

30
erpnext/payroll/dashboard_chart/department_wise_salary(last_month)/department_wise_salary(last_month).json

@ -0,0 +1,30 @@
{
"aggregate_function_based_on": "rounded_total",
"chart_name": "Department Wise Salary(Last Month)",
"chart_type": "Group By",
"creation": "2020-07-22 11:56:34.511940",
"custom_options": "",
"docstatus": 0,
"doctype": "Dashboard Chart",
"document_type": "Salary Slip",
"dynamic_filters_json": "[[\"Salary Slip\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]",
"filters_json": "[[\"Salary Slip\",\"docstatus\",\"=\",\"1\",false],[\"Salary Slip\",\"start_date\",\"Timespan\",\"last month\",false]]",
"group_by_based_on": "department",
"group_by_type": "Sum",
"idx": 0,
"is_public": 1,
"is_standard": 1,
"last_synced_on": "2020-07-22 12:46:05.272076",
"modified": "2020-07-22 12:48:12.080992",
"modified_by": "Administrator",
"module": "Payroll",
"name": "Department Wise Salary(Last Month)",
"number_of_groups": 0,
"owner": "Administrator",
"time_interval": "Monthly",
"timeseries": 0,
"timespan": "Last Year",
"type": "Bar",
"use_report_chart": 0,
"y_axis": []
}

30
erpnext/payroll/dashboard_chart/designation_wise_salary(last_month)/designation_wise_salary(last_month).json

@ -0,0 +1,30 @@
{
"aggregate_function_based_on": "rounded_total",
"chart_name": "Designation Wise Salary(Last Month)",
"chart_type": "Group By",
"creation": "2020-07-22 11:56:34.550339",
"custom_options": "",
"docstatus": 0,
"doctype": "Dashboard Chart",
"document_type": "Salary Slip",
"dynamic_filters_json": "[[\"Salary Slip\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]",
"filters_json": "[[\"Salary Slip\",\"docstatus\",\"=\",\"1\",false],[\"Salary Slip\",\"start_date\",\"Timespan\",\"last month\",false]]",
"group_by_based_on": "designation",
"group_by_type": "Sum",
"idx": 0,
"is_public": 1,
"is_standard": 1,
"last_synced_on": "2020-07-22 12:22:18.412822",
"modified": "2020-07-22 12:39:07.923382",
"modified_by": "Administrator",
"module": "Payroll",
"name": "Designation Wise Salary(Last Month)",
"number_of_groups": 0,
"owner": "Administrator",
"time_interval": "Monthly",
"timeseries": 0,
"timespan": "Last Year",
"type": "Bar",
"use_report_chart": 0,
"y_axis": []
}

29
erpnext/payroll/dashboard_chart/outgoing_salary/outgoing_salary.json

@ -0,0 +1,29 @@
{
"based_on": "end_date",
"chart_name": "Outgoing Salary",
"chart_type": "Sum",
"creation": "2020-07-22 11:56:34.478848",
"custom_options": "",
"docstatus": 0,
"doctype": "Dashboard Chart",
"document_type": "Salary Slip",
"dynamic_filters_json": "[[\"Salary Slip\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]",
"filters_json": "[[\"Salary Slip\",\"docstatus\",\"=\",\"1\",false]]",
"idx": 0,
"is_public": 1,
"is_standard": 1,
"last_synced_on": "2020-07-22 12:11:27.481231",
"modified": "2020-07-22 12:20:05.777715",
"modified_by": "Administrator",
"module": "Payroll",
"name": "Outgoing Salary",
"number_of_groups": 0,
"owner": "Administrator",
"time_interval": "Monthly",
"timeseries": 1,
"timespan": "Last Year",
"type": "Line",
"use_report_chart": 0,
"value_based_on": "rounded_total",
"y_axis": []
}

100
erpnext/payroll/dashboard_fixtures.py

@ -1,100 +0,0 @@
# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
import frappe
import erpnext
from erpnext.hr.dashboard_fixtures import get_dashboards_chart_doc, get_number_cards_doc
import json
from frappe import _
def get_data():
return frappe._dict({
"dashboards": get_dashboards(),
"charts": get_charts(),
"number_cards": get_number_cards(),
})
def get_dashboards():
dashboards = []
dashboards.append(get_payroll_dashboard())
return dashboards
def get_payroll_dashboard():
return {
"name": "Payroll",
"dashboard_name": "Payroll",
"is_default": 1,
"charts": [
{ "chart": "Outgoing Salary", "width": "Full"},
{ "chart": "Designation Wise Salary(Last Month)", "width": "Half"},
{ "chart": "Department Wise Salary(Last Month)", "width": "Half"},
],
"cards": [
{"card": "Total Declaration Submitted"},
{"card": "Total Salary Structure"},
{"card": "Total Incentive Given(Last month)"},
{"card": "Total Outgoing Salary(Last month)"},
]
}
def get_charts():
dashboard_charts= [
get_dashboards_chart_doc('Outgoing Salary', "Sum", "Line",
document_type = "Salary Slip", based_on="end_date",
value_based_on = "rounded_total", time_interval = "Monthly", timeseries = 1,
filters_json = json.dumps([["Salary Slip", "docstatus", "=", 1]]))
]
dashboard_charts.append(
get_dashboards_chart_doc('Department Wise Salary(Last Month)', "Group By", "Bar",
document_type = "Salary Slip", group_by_type="Sum", group_by_based_on="department",
time_interval = "Monthly", aggregate_function_based_on = "rounded_total",
filters_json = json.dumps([
["Salary Slip", "docstatus", "=", 1],
["Salary Slip", "start_date", "Previous","1 month"]
])
)
)
dashboard_charts.append(
get_dashboards_chart_doc('Designation Wise Salary(Last Month)', "Group By", "Bar",
document_type = "Salary Slip", group_by_type="Sum", group_by_based_on="designation",
time_interval = "Monthly", aggregate_function_based_on = "rounded_total",
filters_json = json.dumps([
["Salary Slip", "docstatus", "=", 1],
["Salary Slip", "start_date", "Previous","1 month"]
])
)
)
return dashboard_charts
def get_number_cards():
number_cards = [get_number_cards_doc("Employee Tax Exemption Declaration", "Total Declaration Submitted", filters_json = json.dumps([
["Employee Tax Exemption Declaration", "docstatus", "=","1"],
["Employee Tax Exemption Declaration","creation","Previous","1 year"]
])
)]
number_cards.append(get_number_cards_doc("Employee Incentive", "Total Incentive Given(Last month)",
time_interval = "Monthly", func = "Sum", aggregate_function_based_on = "incentive_amount",
filters_json = json.dumps([
["Employee Incentive", "docstatus", "=", 1],
["Employee Incentive","payroll_date","Previous","1 year"]
]))
)
number_cards.append(get_number_cards_doc("Salary Slip", "Total Outgoing Salary(Last month)",
time_interval = "Monthly", time_span= "Monthly", func = "Sum", aggregate_function_based_on = "rounded_total",
filters_json = json.dumps([
["Salary Slip", "docstatus", "=", 1],
["Salary Slip", "start_date","Previous","1 month"]
]))
)
number_cards.append(get_number_cards_doc("Salary Structure", "Total Salary Structure",
filters_json = json.dumps([
["Salary Structure", "docstatus", "=", 1]
]))
)
return number_cards

238
erpnext/payroll/doctype/salary_slip/salary_slip.json

@ -74,9 +74,7 @@
"fieldtype": "Date",
"in_list_view": 1,
"label": "Posting Date",
"reqd": 1,
"show_days": 1,
"show_seconds": 1
"reqd": 1
},
{
"fieldname": "employee",
@ -89,9 +87,7 @@
"oldfieldtype": "Link",
"options": "Employee",
"reqd": 1,
"search_index": 1,
"show_days": 1,
"show_seconds": 1
"search_index": 1
},
{
"fetch_from": "employee.employee_name",
@ -102,9 +98,7 @@
"label": "Employee Name",
"oldfieldname": "employee_name",
"oldfieldtype": "Data",
"reqd": 1,
"show_days": 1,
"show_seconds": 1
"reqd": 1
},
{
"fetch_from": "employee.department",
@ -115,20 +109,18 @@
"oldfieldname": "department",
"oldfieldtype": "Link",
"options": "Department",
"read_only": 1,
"show_days": 1,
"show_seconds": 1
"read_only": 1
},
{
"depends_on": "eval:doc.designation",
"fetch_from": "employee.designation",
"fieldname": "designation",
"fieldtype": "Read Only",
"fieldtype": "Link",
"label": "Designation",
"oldfieldname": "designation",
"oldfieldtype": "Link",
"show_days": 1,
"show_seconds": 1
"options": "Designation",
"read_only": 1
},
{
"fetch_from": "employee.branch",
@ -139,16 +131,12 @@
"oldfieldname": "branch",
"oldfieldtype": "Link",
"options": "Branch",
"read_only": 1,
"show_days": 1,
"show_seconds": 1
"read_only": 1
},
{
"fieldname": "column_break1",
"fieldtype": "Column Break",
"oldfieldtype": "Column Break",
"show_days": 1,
"show_seconds": 1,
"width": "50%"
},
{
@ -156,27 +144,21 @@
"fieldtype": "Select",
"label": "Status",
"options": "Draft\nSubmitted\nCancelled",
"read_only": 1,
"show_days": 1,
"show_seconds": 1
"read_only": 1
},
{
"fieldname": "journal_entry",
"fieldtype": "Link",
"label": "Journal Entry",
"options": "Journal Entry",
"read_only": 1,
"show_days": 1,
"show_seconds": 1
"read_only": 1
},
{
"fieldname": "payroll_entry",
"fieldtype": "Link",
"label": "Payroll Entry",
"options": "Payroll Entry",
"read_only": 1,
"show_days": 1,
"show_seconds": 1
"read_only": 1
},
{
"fieldname": "company",
@ -186,9 +168,7 @@
"label": "Company",
"options": "Company",
"remember_last_selected_value": 1,
"reqd": 1,
"show_days": 1,
"show_seconds": 1
"reqd": 1
},
{
"allow_on_submit": 1,
@ -197,62 +177,46 @@
"ignore_user_permissions": 1,
"label": "Letter Head",
"options": "Letter Head",
"print_hide": 1,
"show_days": 1,
"show_seconds": 1
"print_hide": 1
},
{
"fieldname": "section_break_10",
"fieldtype": "Section Break",
"show_days": 1,
"show_seconds": 1
"fieldtype": "Section Break"
},
{
"default": "0",
"fieldname": "salary_slip_based_on_timesheet",
"fieldtype": "Check",
"label": "Salary Slip Based on Timesheet",
"read_only": 1,
"show_days": 1,
"show_seconds": 1
"read_only": 1
},
{
"fieldname": "start_date",
"fieldtype": "Date",
"label": "Start Date",
"show_days": 1,
"show_seconds": 1
"label": "Start Date"
},
{
"fieldname": "end_date",
"fieldtype": "Date",
"label": "End Date",
"show_days": 1,
"show_seconds": 1
"label": "End Date"
},
{
"fieldname": "column_break_15",
"fieldtype": "Column Break",
"show_days": 1,
"show_seconds": 1
"fieldtype": "Column Break"
},
{
"fieldname": "salary_structure",
"fieldtype": "Link",
"label": "Salary Structure",
"options": "Salary Structure",
"read_only": 1,
"show_days": 1,
"show_seconds": 1
"read_only": 1
},
{
"depends_on": "eval:(!doc.salary_slip_based_on_timesheet)",
"fieldname": "payroll_frequency",
"fieldtype": "Select",
"label": "Payroll Frequency",
"options": "\nMonthly\nFortnightly\nBimonthly\nWeekly\nDaily",
"show_days": 1,
"show_seconds": 1
"options": "\nMonthly\nFortnightly\nBimonthly\nWeekly\nDaily"
},
{
"fieldname": "total_working_days",
@ -261,18 +225,14 @@
"oldfieldname": "total_days_in_month",
"oldfieldtype": "Int",
"read_only": 1,
"reqd": 1,
"show_days": 1,
"show_seconds": 1
"reqd": 1
},
{
"fieldname": "leave_without_pay",
"fieldtype": "Float",
"label": "Leave Without Pay",
"oldfieldname": "leave_without_pay",
"oldfieldtype": "Currency",
"show_days": 1,
"show_seconds": 1
"oldfieldtype": "Currency"
},
{
"fieldname": "payment_days",
@ -281,52 +241,38 @@
"oldfieldname": "payment_days",
"oldfieldtype": "Float",
"read_only": 1,
"reqd": 1,
"show_days": 1,
"show_seconds": 1
"reqd": 1
},
{
"fieldname": "hourly_wages",
"fieldtype": "Section Break",
"show_days": 1,
"show_seconds": 1
"fieldtype": "Section Break"
},
{
"fieldname": "timesheets",
"fieldtype": "Table",
"label": "Salary Slip Timesheet",
"options": "Salary Slip Timesheet",
"show_days": 1,
"show_seconds": 1
"options": "Salary Slip Timesheet"
},
{
"fieldname": "column_break_20",
"fieldtype": "Column Break",
"show_days": 1,
"show_seconds": 1
"fieldtype": "Column Break"
},
{
"fieldname": "total_working_hours",
"fieldtype": "Float",
"label": "Total Working Hours",
"print_hide_if_no_value": 1,
"show_days": 1,
"show_seconds": 1
"print_hide_if_no_value": 1
},
{
"fieldname": "hour_rate",
"fieldtype": "Currency",
"label": "Hour Rate",
"options": "Company:company:default_currency",
"print_hide_if_no_value": 1,
"show_days": 1,
"show_seconds": 1
"print_hide_if_no_value": 1
},
{
"fieldname": "section_break_26",
"fieldtype": "Section Break",
"show_days": 1,
"show_seconds": 1
"fieldtype": "Section Break"
},
{
"fieldname": "bank_name",
@ -334,9 +280,7 @@
"label": "Bank Name",
"oldfieldname": "bank_name",
"oldfieldtype": "Data",
"read_only": 1,
"show_days": 1,
"show_seconds": 1
"read_only": 1
},
{
"fieldname": "bank_account_no",
@ -344,46 +288,34 @@
"label": "Bank Account No.",
"oldfieldname": "bank_account_no",
"oldfieldtype": "Data",
"read_only": 1,
"show_days": 1,
"show_seconds": 1
"read_only": 1
},
{
"fieldname": "section_break_32",
"fieldtype": "Section Break",
"show_days": 1,
"show_seconds": 1
"fieldtype": "Section Break"
},
{
"default": "0",
"fieldname": "deduct_tax_for_unclaimed_employee_benefits",
"fieldtype": "Check",
"label": "Deduct Tax For Unclaimed Employee Benefits",
"show_days": 1,
"show_seconds": 1
"label": "Deduct Tax For Unclaimed Employee Benefits"
},
{
"default": "0",
"fieldname": "deduct_tax_for_unsubmitted_tax_exemption_proof",
"fieldtype": "Check",
"label": "Deduct Tax For Unsubmitted Tax Exemption Proof",
"show_days": 1,
"show_seconds": 1
"label": "Deduct Tax For Unsubmitted Tax Exemption Proof"
},
{
"fieldname": "earning_deduction",
"fieldtype": "Section Break",
"label": "Earning & Deduction",
"oldfieldtype": "Section Break",
"show_days": 1,
"show_seconds": 1
"oldfieldtype": "Section Break"
},
{
"fieldname": "earning",
"fieldtype": "Column Break",
"oldfieldtype": "Column Break",
"show_days": 1,
"show_seconds": 1,
"width": "50%"
},
{
@ -392,16 +324,12 @@
"label": "Earnings",
"oldfieldname": "earning_details",
"oldfieldtype": "Table",
"options": "Salary Detail",
"show_days": 1,
"show_seconds": 1
"options": "Salary Detail"
},
{
"fieldname": "deduction",
"fieldtype": "Column Break",
"oldfieldtype": "Column Break",
"show_days": 1,
"show_seconds": 1,
"width": "50%"
},
{
@ -410,16 +338,12 @@
"label": "Deductions",
"oldfieldname": "deduction_details",
"oldfieldtype": "Table",
"options": "Salary Detail",
"show_days": 1,
"show_seconds": 1
"options": "Salary Detail"
},
{
"fieldname": "totals",
"fieldtype": "Section Break",
"oldfieldtype": "Section Break",
"show_days": 1,
"show_seconds": 1
"oldfieldtype": "Section Break"
},
{
"fieldname": "gross_pay",
@ -428,15 +352,11 @@
"oldfieldname": "gross_pay",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"read_only": 1,
"show_days": 1,
"show_seconds": 1
"read_only": 1
},
{
"fieldname": "column_break_25",
"fieldtype": "Column Break",
"show_days": 1,
"show_seconds": 1
"fieldtype": "Column Break"
},
{
"fieldname": "total_deduction",
@ -445,32 +365,24 @@
"oldfieldname": "total_deduction",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"read_only": 1,
"show_days": 1,
"show_seconds": 1
"read_only": 1
},
{
"depends_on": "total_loan_repayment",
"fieldname": "loan_repayment",
"fieldtype": "Section Break",
"label": "Loan repayment",
"show_days": 1,
"show_seconds": 1
"label": "Loan repayment"
},
{
"fieldname": "loans",
"fieldtype": "Table",
"label": "Employee Loan",
"options": "Salary Slip Loan",
"print_hide": 1,
"show_days": 1,
"show_seconds": 1
"print_hide": 1
},
{
"fieldname": "section_break_43",
"fieldtype": "Section Break",
"show_days": 1,
"show_seconds": 1
"fieldtype": "Section Break"
},
{
"default": "0",
@ -478,9 +390,7 @@
"fieldtype": "Currency",
"label": "Total Principal Amount",
"options": "Company:company:default_currency",
"read_only": 1,
"show_days": 1,
"show_seconds": 1
"read_only": 1
},
{
"default": "0",
@ -488,15 +398,11 @@
"fieldtype": "Currency",
"label": "Total Interest Amount",
"options": "Company:company:default_currency",
"read_only": 1,
"show_days": 1,
"show_seconds": 1
"read_only": 1
},
{
"fieldname": "column_break_45",
"fieldtype": "Column Break",
"show_days": 1,
"show_seconds": 1
"fieldtype": "Column Break"
},
{
"default": "0",
@ -504,16 +410,12 @@
"fieldtype": "Currency",
"label": "Total Loan Repayment",
"options": "Company:company:default_currency",
"read_only": 1,
"show_days": 1,
"show_seconds": 1
"read_only": 1
},
{
"fieldname": "net_pay_info",
"fieldtype": "Section Break",
"label": "net pay info",
"show_days": 1,
"show_seconds": 1
"label": "net pay info"
},
{
"description": "Gross Pay - Total Deduction - Loan Repayment",
@ -523,15 +425,11 @@
"oldfieldname": "net_pay",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"read_only": 1,
"show_days": 1,
"show_seconds": 1
"read_only": 1
},
{
"fieldname": "column_break_53",
"fieldtype": "Column Break",
"show_days": 1,
"show_seconds": 1
"fieldtype": "Column Break"
},
{
"bold": 1,
@ -539,15 +437,11 @@
"fieldtype": "Currency",
"label": "Rounded Total",
"options": "Company:company:default_currency",
"read_only": 1,
"show_days": 1,
"show_seconds": 1
"read_only": 1
},
{
"fieldname": "section_break_55",
"fieldtype": "Section Break",
"show_days": 1,
"show_seconds": 1
"fieldtype": "Section Break"
},
{
"description": "Net Pay (in words) will be visible once you save the Salary Slip.",
@ -556,9 +450,7 @@
"label": "Total in words",
"oldfieldname": "net_pay_in_words",
"oldfieldtype": "Data",
"read_only": 1,
"show_days": 1,
"show_seconds": 1
"read_only": 1
},
{
"fieldname": "amended_from",
@ -570,9 +462,7 @@
"oldfieldtype": "Data",
"options": "Salary Slip",
"print_hide": 1,
"read_only": 1,
"show_days": 1,
"show_seconds": 1
"read_only": 1
},
{
"fetch_from": "employee.payroll_cost_center",
@ -581,40 +471,32 @@
"fieldtype": "Link",
"label": "Payroll Cost Center",
"options": "Cost Center",
"read_only": 1,
"show_days": 1,
"show_seconds": 1
"read_only": 1
},
{
"fieldname": "mode_of_payment",
"fieldtype": "Select",
"label": "Mode Of Payment",
"read_only": 1,
"show_days": 1,
"show_seconds": 1
"read_only": 1
},
{
"fieldname": "absent_days",
"fieldtype": "Float",
"label": "Absent Days",
"read_only": 1,
"show_days": 1,
"show_seconds": 1
"read_only": 1
},
{
"fieldname": "unmarked_days",
"fieldtype": "Float",
"hidden": 1,
"label": "Unmarked days",
"show_days": 1,
"show_seconds": 1
"label": "Unmarked days"
}
],
"icon": "fa fa-file-text",
"idx": 9,
"is_submittable": 1,
"links": [],
"modified": "2020-06-25 14:42:43.921828",
"modified": "2020-07-22 12:41:03.659422",
"modified_by": "Administrator",
"module": "Payroll",
"name": "Salary Slip",

21
erpnext/payroll/number_card/total_declaration_submitted/total_declaration_submitted.json

@ -0,0 +1,21 @@
{
"creation": "2020-07-22 11:56:34.575627",
"docstatus": 0,
"doctype": "Number Card",
"document_type": "Employee Tax Exemption Declaration",
"dynamic_filters_json": "[[\"Employee Tax Exemption Declaration\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]",
"filters_json": "[[\"Employee Tax Exemption Declaration\",\"creation\",\"Timespan\",\"last year\",false],[\"Employee Tax Exemption Declaration\",\"docstatus\",\"=\",\"1\",false]]",
"function": "Count",
"idx": 0,
"is_public": 1,
"is_standard": 1,
"label": "Total Declaration Submitted",
"modified": "2020-07-22 13:22:46.001099",
"modified_by": "Administrator",
"module": "Payroll",
"name": "Total Declaration Submitted",
"owner": "Administrator",
"show_percentage_stats": 1,
"stats_time_interval": "Monthly",
"type": "Document Type"
}

22
erpnext/payroll/number_card/total_incentive_given(last_month)/total_incentive_given(last_month).json

@ -0,0 +1,22 @@
{
"aggregate_function_based_on": "incentive_amount",
"creation": "2020-07-22 11:56:34.599047",
"docstatus": 0,
"doctype": "Number Card",
"document_type": "Employee Incentive",
"dynamic_filters_json": "",
"filters_json": "[[\"Employee Incentive\",\"docstatus\",\"=\",\"1\",false],[\"Employee Incentive\",\"payroll_date\",\"Timespan\",\"last year\",false]]",
"function": "Sum",
"idx": 0,
"is_public": 1,
"is_standard": 1,
"label": "Total Incentive Given(Last month)",
"modified": "2020-07-23 12:05:26.963616",
"modified_by": "Administrator",
"module": "Payroll",
"name": "Total Incentive Given(Last month)",
"owner": "Administrator",
"show_percentage_stats": 1,
"stats_time_interval": "Monthly",
"type": "Document Type"
}

22
erpnext/payroll/number_card/total_outgoing_salary(last_month)/total_outgoing_salary(last_month).json

@ -0,0 +1,22 @@
{
"aggregate_function_based_on": "rounded_total",
"creation": "2020-07-22 11:56:34.626019",
"docstatus": 0,
"doctype": "Number Card",
"document_type": "Salary Slip",
"dynamic_filters_json": "[[\"Salary Slip\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]",
"filters_json": "[[\"Salary Slip\",\"docstatus\",\"=\",\"1\",false],[\"Salary Slip\",\"start_date\",\"Timespan\",\"last month\",false]]",
"function": "Sum",
"idx": 0,
"is_public": 1,
"is_standard": 1,
"label": "Total Outgoing Salary(Last month)",
"modified": "2020-07-22 13:54:14.678954",
"modified_by": "Administrator",
"module": "Payroll",
"name": "Total Outgoing Salary(Last month)",
"owner": "Administrator",
"show_percentage_stats": 1,
"stats_time_interval": "Monthly",
"type": "Document Type"
}

21
erpnext/payroll/number_card/total_salary_structure/total_salary_structure.json

@ -0,0 +1,21 @@
{
"creation": "2020-07-22 11:56:34.688843",
"docstatus": 0,
"doctype": "Number Card",
"document_type": "Salary Structure",
"dynamic_filters_json": "[[\"Salary Structure\",\"company\",\"=\",\"frappe.defaults.get_user_default(\\\"Company\\\")\"]]",
"filters_json": "[[\"Salary Structure\",\"docstatus\",\"=\",\"1\",false]]",
"function": "Count",
"idx": 0,
"is_public": 1,
"is_standard": 1,
"label": "Total Salary Structure",
"modified": "2020-07-22 13:24:03.938846",
"modified_by": "Administrator",
"module": "Payroll",
"name": "Total Salary Structure",
"owner": "Administrator",
"show_percentage_stats": 1,
"stats_time_interval": "Monthly",
"type": "Document Type"
}

42
erpnext/payroll/payroll_dashboard/payroll/payroll.json

@ -0,0 +1,42 @@
{
"cards": [
{
"card": "Total Declaration Submitted"
},
{
"card": "Total Salary Structure"
},
{
"card": "Total Incentive Given(Last month)"
},
{
"card": "Total Outgoing Salary(Last month)"
}
],
"charts": [
{
"chart": "Outgoing Salary",
"width": "Full"
},
{
"chart": "Designation Wise Salary(Last Month)",
"width": "Half"
},
{
"chart": "Department Wise Salary(Last Month)",
"width": "Half"
}
],
"creation": "2020-07-22 11:56:34.727185",
"dashboard_name": "Payroll",
"docstatus": 0,
"doctype": "Dashboard",
"idx": 0,
"is_default": 1,
"is_standard": 1,
"modified": "2020-07-22 13:20:18.608969",
"modified_by": "Administrator",
"module": "Payroll",
"name": "Payroll",
"owner": "Administrator"
}
Loading…
Cancel
Save