refactor: Shift Request
This commit is contained in:
parent
a6ec7e31d2
commit
b3e00de0ae
@ -17,10 +17,10 @@
|
|||||||
"payroll_cost_center",
|
"payroll_cost_center",
|
||||||
"column_break_9",
|
"column_break_9",
|
||||||
"leave_block_list",
|
"leave_block_list",
|
||||||
"leave_section",
|
"approvers",
|
||||||
"leave_approvers",
|
"leave_approvers",
|
||||||
"expense_section",
|
|
||||||
"expense_approvers",
|
"expense_approvers",
|
||||||
|
"shift_request_approver",
|
||||||
"lft",
|
"lft",
|
||||||
"rgt",
|
"rgt",
|
||||||
"old_parent"
|
"old_parent"
|
||||||
@ -33,14 +33,18 @@
|
|||||||
"label": "Department",
|
"label": "Department",
|
||||||
"oldfieldname": "department_name",
|
"oldfieldname": "department_name",
|
||||||
"oldfieldtype": "Data",
|
"oldfieldtype": "Data",
|
||||||
"reqd": 1
|
"reqd": 1,
|
||||||
|
"show_days": 1,
|
||||||
|
"show_seconds": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "parent_department",
|
"fieldname": "parent_department",
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
"in_list_view": 1,
|
"in_list_view": 1,
|
||||||
"label": "Parent Department",
|
"label": "Parent Department",
|
||||||
"options": "Department"
|
"options": "Department",
|
||||||
|
"show_days": 1,
|
||||||
|
"show_seconds": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "company",
|
"fieldname": "company",
|
||||||
@ -48,7 +52,9 @@
|
|||||||
"in_standard_filter": 1,
|
"in_standard_filter": 1,
|
||||||
"label": "Company",
|
"label": "Company",
|
||||||
"options": "Company",
|
"options": "Company",
|
||||||
"reqd": 1
|
"reqd": 1,
|
||||||
|
"show_days": 1,
|
||||||
|
"show_seconds": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bold": 1,
|
"bold": 1,
|
||||||
@ -56,17 +62,23 @@
|
|||||||
"fieldname": "is_group",
|
"fieldname": "is_group",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"in_list_view": 1,
|
"in_list_view": 1,
|
||||||
"label": "Is Group"
|
"label": "Is Group",
|
||||||
|
"show_days": 1,
|
||||||
|
"show_seconds": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"default": "0",
|
"default": "0",
|
||||||
"fieldname": "disabled",
|
"fieldname": "disabled",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"label": "Disabled"
|
"label": "Disabled",
|
||||||
|
"show_days": 1,
|
||||||
|
"show_seconds": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "section_break_4",
|
"fieldname": "section_break_4",
|
||||||
"fieldtype": "Section Break"
|
"fieldtype": "Section Break",
|
||||||
|
"show_days": 1,
|
||||||
|
"show_seconds": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"description": "Days for which Holidays are blocked for this department.",
|
"description": "Days for which Holidays are blocked for this department.",
|
||||||
@ -74,31 +86,25 @@
|
|||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
"in_list_view": 1,
|
"in_list_view": 1,
|
||||||
"label": "Leave Block List",
|
"label": "Leave Block List",
|
||||||
"options": "Leave Block List"
|
"options": "Leave Block List",
|
||||||
|
"show_days": 1,
|
||||||
|
"show_seconds": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "leave_section",
|
|
||||||
"fieldtype": "Section Break",
|
|
||||||
"label": "Leave Approvers"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "The first Leave Approver in the list will be set as the default Leave Approver.",
|
|
||||||
"fieldname": "leave_approvers",
|
"fieldname": "leave_approvers",
|
||||||
"fieldtype": "Table",
|
"fieldtype": "Table",
|
||||||
"label": "Leave Approver",
|
"label": "Leave Approver",
|
||||||
"options": "Department Approver"
|
"options": "Department Approver",
|
||||||
|
"show_days": 1,
|
||||||
|
"show_seconds": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "expense_section",
|
|
||||||
"fieldtype": "Section Break",
|
|
||||||
"label": "Expense Approvers"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"description": "The first Expense Approver in the list will be set as the default Expense Approver.",
|
|
||||||
"fieldname": "expense_approvers",
|
"fieldname": "expense_approvers",
|
||||||
"fieldtype": "Table",
|
"fieldtype": "Table",
|
||||||
"label": "Expense Approver",
|
"label": "Expense Approver",
|
||||||
"options": "Department Approver"
|
"options": "Department Approver",
|
||||||
|
"show_days": 1,
|
||||||
|
"show_seconds": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "lft",
|
"fieldname": "lft",
|
||||||
@ -106,7 +112,9 @@
|
|||||||
"hidden": 1,
|
"hidden": 1,
|
||||||
"label": "lft",
|
"label": "lft",
|
||||||
"print_hide": 1,
|
"print_hide": 1,
|
||||||
"read_only": 1
|
"read_only": 1,
|
||||||
|
"show_days": 1,
|
||||||
|
"show_seconds": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "rgt",
|
"fieldname": "rgt",
|
||||||
@ -114,7 +122,9 @@
|
|||||||
"hidden": 1,
|
"hidden": 1,
|
||||||
"label": "rgt",
|
"label": "rgt",
|
||||||
"print_hide": 1,
|
"print_hide": 1,
|
||||||
"read_only": 1
|
"read_only": 1,
|
||||||
|
"show_days": 1,
|
||||||
|
"show_seconds": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "old_parent",
|
"fieldname": "old_parent",
|
||||||
@ -122,28 +132,52 @@
|
|||||||
"hidden": 1,
|
"hidden": 1,
|
||||||
"ignore_user_permissions": 1,
|
"ignore_user_permissions": 1,
|
||||||
"label": "Old Parent",
|
"label": "Old Parent",
|
||||||
"print_hide": 1
|
"print_hide": 1,
|
||||||
|
"show_days": 1,
|
||||||
|
"show_seconds": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "column_break_3",
|
"fieldname": "column_break_3",
|
||||||
"fieldtype": "Column Break"
|
"fieldtype": "Column Break",
|
||||||
|
"show_days": 1,
|
||||||
|
"show_seconds": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "payroll_cost_center",
|
"fieldname": "payroll_cost_center",
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
"label": "Payroll Cost Center",
|
"label": "Payroll Cost Center",
|
||||||
"options": "Cost Center"
|
"options": "Cost Center",
|
||||||
|
"show_days": 1,
|
||||||
|
"show_seconds": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "column_break_9",
|
"fieldname": "column_break_9",
|
||||||
"fieldtype": "Column Break"
|
"fieldtype": "Column Break",
|
||||||
|
"show_days": 1,
|
||||||
|
"show_seconds": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "The first Approver in the list will be set as the default Approver.",
|
||||||
|
"fieldname": "approvers",
|
||||||
|
"fieldtype": "Section Break",
|
||||||
|
"label": "Approvers",
|
||||||
|
"show_days": 1,
|
||||||
|
"show_seconds": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "shift_request_approver",
|
||||||
|
"fieldtype": "Table",
|
||||||
|
"label": "Shift Request Approver",
|
||||||
|
"options": "Department Approver",
|
||||||
|
"show_days": 1,
|
||||||
|
"show_seconds": 1
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"icon": "fa fa-sitemap",
|
"icon": "fa fa-sitemap",
|
||||||
"idx": 1,
|
"idx": 1,
|
||||||
"is_tree": 1,
|
"is_tree": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2020-05-05 18:49:28.503931",
|
"modified": "2020-06-23 15:42:00.563272",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "HR",
|
"module": "HR",
|
||||||
"name": "Department",
|
"name": "Department",
|
||||||
|
|||||||
@ -15,7 +15,7 @@ class DepartmentApprover(Document):
|
|||||||
def get_approvers(doctype, txt, searchfield, start, page_len, filters):
|
def get_approvers(doctype, txt, searchfield, start, page_len, filters):
|
||||||
|
|
||||||
if not filters.get("employee"):
|
if not filters.get("employee"):
|
||||||
frappe.throw(_("Please select Employee Record first."))
|
frappe.throw(_("Please select Employee first."))
|
||||||
|
|
||||||
approvers = []
|
approvers = []
|
||||||
department_details = {}
|
department_details = {}
|
||||||
@ -41,9 +41,12 @@ def get_approvers(doctype, txt, searchfield, start, page_len, filters):
|
|||||||
if filters.get("doctype") == "Leave Application":
|
if filters.get("doctype") == "Leave Application":
|
||||||
parentfield = "leave_approvers"
|
parentfield = "leave_approvers"
|
||||||
field_name = "Leave Approver"
|
field_name = "Leave Approver"
|
||||||
else:
|
elif filters.get("doctype") == "Leave Application":
|
||||||
parentfield = "expense_approvers"
|
parentfield = "expense_approvers"
|
||||||
field_name = "Expense Approver"
|
field_name = "Expense Approver"
|
||||||
|
else:
|
||||||
|
parentfield = "shift_request_approver"
|
||||||
|
field_name = "Approver"
|
||||||
if department_list:
|
if department_list:
|
||||||
for d in department_list:
|
for d in department_list:
|
||||||
approvers += frappe.db.sql("""select user.name, user.first_name, user.last_name from
|
approvers += frappe.db.sql("""select user.name, user.first_name, user.last_name from
|
||||||
|
|||||||
@ -2,7 +2,16 @@
|
|||||||
// For license information, please see license.txt
|
// For license information, please see license.txt
|
||||||
|
|
||||||
frappe.ui.form.on('Shift Request', {
|
frappe.ui.form.on('Shift Request', {
|
||||||
refresh: function(frm) {
|
setup: function(frm) {
|
||||||
|
frm.set_query("approver", function() {
|
||||||
}
|
return {
|
||||||
|
query: "erpnext.hr.doctype.department_approver.department_approver.get_approvers",
|
||||||
|
filters: {
|
||||||
|
employee: frm.doc.employee,
|
||||||
|
doctype: frm.doc.doctype
|
||||||
|
}
|
||||||
|
};
|
||||||
|
});
|
||||||
|
frm.set_query("employee", erpnext.queries.employee);
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,396 +1,175 @@
|
|||||||
{
|
{
|
||||||
"allow_copy": 0,
|
"actions": [],
|
||||||
"allow_guest_to_view": 0,
|
"allow_import": 1,
|
||||||
"allow_import": 1,
|
"autoname": "HR-SHR-.YY.-.MM.-.#####",
|
||||||
"allow_rename": 0,
|
"creation": "2018-04-13 16:32:27.974273",
|
||||||
"autoname": "HR-SHR-.YY.-.MM.-.#####",
|
"doctype": "DocType",
|
||||||
"beta": 0,
|
"editable_grid": 1,
|
||||||
"creation": "2018-04-13 16:32:27.974273",
|
"engine": "InnoDB",
|
||||||
"custom": 0,
|
"field_order": [
|
||||||
"docstatus": 0,
|
"shift_type",
|
||||||
"doctype": "DocType",
|
"employee",
|
||||||
"document_type": "",
|
"employee_name",
|
||||||
"editable_grid": 1,
|
"department",
|
||||||
"engine": "InnoDB",
|
"status",
|
||||||
|
"column_break_4",
|
||||||
|
"company",
|
||||||
|
"approver",
|
||||||
|
"from_date",
|
||||||
|
"to_date",
|
||||||
|
"amended_from"
|
||||||
|
],
|
||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"fieldname": "shift_type",
|
||||||
"allow_in_quick_entry": 0,
|
"fieldtype": "Link",
|
||||||
"allow_on_submit": 0,
|
"in_list_view": 1,
|
||||||
"bold": 0,
|
"label": "Shift Type",
|
||||||
"collapsible": 0,
|
"options": "Shift Type",
|
||||||
"columns": 0,
|
"reqd": 1,
|
||||||
"fieldname": "shift_type",
|
"show_days": 1,
|
||||||
"fieldtype": "Link",
|
"show_seconds": 1
|
||||||
"hidden": 0,
|
},
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 1,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"label": "Shift Type",
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"options": "Shift Type",
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 1,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"fieldname": "employee",
|
||||||
"allow_in_quick_entry": 0,
|
"fieldtype": "Link",
|
||||||
"allow_on_submit": 0,
|
"in_list_view": 1,
|
||||||
"bold": 0,
|
"label": "Employee",
|
||||||
"collapsible": 0,
|
"options": "Employee",
|
||||||
"columns": 0,
|
"reqd": 1,
|
||||||
"fieldname": "employee",
|
"show_days": 1,
|
||||||
"fieldtype": "Link",
|
"show_seconds": 1
|
||||||
"hidden": 0,
|
},
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 1,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"label": "Employee",
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"options": "Employee",
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 1,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"fetch_from": "employee.employee_name",
|
||||||
"allow_in_quick_entry": 0,
|
"fieldname": "employee_name",
|
||||||
"allow_on_submit": 0,
|
"fieldtype": "Data",
|
||||||
"bold": 0,
|
"label": "Employee Name",
|
||||||
"collapsible": 0,
|
"read_only": 1,
|
||||||
"columns": 0,
|
"show_days": 1,
|
||||||
"fetch_from": "employee.employee_name",
|
"show_seconds": 1
|
||||||
"fieldname": "employee_name",
|
},
|
||||||
"fieldtype": "Data",
|
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"label": "Employee Name",
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"options": "",
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 1,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"fetch_from": "employee.department",
|
||||||
"allow_in_quick_entry": 0,
|
"fieldname": "department",
|
||||||
"allow_on_submit": 0,
|
"fieldtype": "Link",
|
||||||
"bold": 0,
|
"label": "Department",
|
||||||
"collapsible": 0,
|
"options": "Department",
|
||||||
"columns": 0,
|
"read_only": 1,
|
||||||
"fetch_from": "employee.department",
|
"show_days": 1,
|
||||||
"fieldname": "department",
|
"show_seconds": 1
|
||||||
"fieldtype": "Link",
|
},
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"label": "Department",
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"options": "Department",
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 1,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"fieldname": "column_break_4",
|
||||||
"allow_in_quick_entry": 0,
|
"fieldtype": "Column Break",
|
||||||
"allow_on_submit": 0,
|
"show_days": 1,
|
||||||
"bold": 0,
|
"show_seconds": 1
|
||||||
"collapsible": 0,
|
},
|
||||||
"columns": 0,
|
|
||||||
"fieldname": "column_break_4",
|
|
||||||
"fieldtype": "Column Break",
|
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"fieldname": "company",
|
||||||
"allow_in_quick_entry": 0,
|
"fieldtype": "Link",
|
||||||
"allow_on_submit": 0,
|
"in_list_view": 1,
|
||||||
"bold": 0,
|
"label": "Company",
|
||||||
"collapsible": 0,
|
"options": "Company",
|
||||||
"columns": 0,
|
"reqd": 1,
|
||||||
"fieldname": "company",
|
"show_days": 1,
|
||||||
"fieldtype": "Link",
|
"show_seconds": 1
|
||||||
"hidden": 0,
|
},
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 1,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"label": "Company",
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"options": "Company",
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 1,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"fieldname": "from_date",
|
||||||
"allow_in_quick_entry": 0,
|
"fieldtype": "Date",
|
||||||
"allow_on_submit": 0,
|
"label": "From Date",
|
||||||
"bold": 0,
|
"reqd": 1,
|
||||||
"collapsible": 0,
|
"show_days": 1,
|
||||||
"columns": 0,
|
"show_seconds": 1
|
||||||
"fieldname": "from_date",
|
},
|
||||||
"fieldtype": "Date",
|
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"label": "From Date",
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"fieldname": "to_date",
|
||||||
"allow_in_quick_entry": 0,
|
"fieldtype": "Date",
|
||||||
"allow_on_submit": 0,
|
"label": "To Date",
|
||||||
"bold": 0,
|
"show_days": 1,
|
||||||
"collapsible": 0,
|
"show_seconds": 1
|
||||||
"columns": 0,
|
},
|
||||||
"fieldname": "to_date",
|
|
||||||
"fieldtype": "Date",
|
|
||||||
"hidden": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"label": "To Date",
|
|
||||||
"length": 0,
|
|
||||||
"no_copy": 0,
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"remember_last_selected_value": 0,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"fieldname": "amended_from",
|
||||||
"allow_in_quick_entry": 0,
|
"fieldtype": "Link",
|
||||||
"allow_on_submit": 0,
|
"label": "Amended From",
|
||||||
"bold": 0,
|
"no_copy": 1,
|
||||||
"collapsible": 0,
|
"options": "Shift Request",
|
||||||
"columns": 0,
|
"print_hide": 1,
|
||||||
"fieldname": "amended_from",
|
"read_only": 1,
|
||||||
"fieldtype": "Link",
|
"show_days": 1,
|
||||||
"hidden": 0,
|
"show_seconds": 1
|
||||||
"ignore_user_permissions": 0,
|
},
|
||||||
"ignore_xss_filter": 0,
|
{
|
||||||
"in_filter": 0,
|
"default": "Draft",
|
||||||
"in_global_search": 0,
|
"fieldname": "status",
|
||||||
"in_list_view": 0,
|
"fieldtype": "Select",
|
||||||
"in_standard_filter": 0,
|
"label": "Status",
|
||||||
"label": "Amended From",
|
"options": "Draft\nApproved\nRejected",
|
||||||
"length": 0,
|
"reqd": 1,
|
||||||
"no_copy": 1,
|
"show_days": 1,
|
||||||
"options": "Shift Request",
|
"show_seconds": 1
|
||||||
"permlevel": 0,
|
},
|
||||||
"print_hide": 1,
|
{
|
||||||
"print_hide_if_no_value": 0,
|
"fieldname": "approver",
|
||||||
"read_only": 1,
|
"fieldtype": "Link",
|
||||||
"remember_last_selected_value": 0,
|
"label": "Approver",
|
||||||
"report_hide": 0,
|
"options": "User",
|
||||||
"reqd": 0,
|
"reqd": 1,
|
||||||
"search_index": 0,
|
"show_days": 1,
|
||||||
"set_only_once": 0,
|
"show_seconds": 1
|
||||||
"translatable": 0,
|
|
||||||
"unique": 0
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"has_web_view": 0,
|
"is_submittable": 1,
|
||||||
"hide_heading": 0,
|
"links": [],
|
||||||
"hide_toolbar": 0,
|
"modified": "2020-06-23 15:56:44.536207",
|
||||||
"idx": 0,
|
"modified_by": "Administrator",
|
||||||
"image_view": 0,
|
"module": "HR",
|
||||||
"in_create": 0,
|
"name": "Shift Request",
|
||||||
"is_submittable": 1,
|
"owner": "Administrator",
|
||||||
"issingle": 0,
|
|
||||||
"istable": 0,
|
|
||||||
"max_attachments": 0,
|
|
||||||
"modified": "2018-08-21 16:15:36.577448",
|
|
||||||
"modified_by": "Administrator",
|
|
||||||
"module": "HR",
|
|
||||||
"name": "Shift Request",
|
|
||||||
"name_case": "",
|
|
||||||
"owner": "Administrator",
|
|
||||||
"permissions": [
|
"permissions": [
|
||||||
{
|
{
|
||||||
"amend": 0,
|
"create": 1,
|
||||||
"cancel": 0,
|
"email": 1,
|
||||||
"create": 1,
|
"export": 1,
|
||||||
"delete": 0,
|
"print": 1,
|
||||||
"email": 1,
|
"read": 1,
|
||||||
"export": 1,
|
"report": 1,
|
||||||
"if_owner": 0,
|
"role": "Employee",
|
||||||
"import": 0,
|
"share": 1,
|
||||||
"permlevel": 0,
|
|
||||||
"print": 1,
|
|
||||||
"read": 1,
|
|
||||||
"report": 1,
|
|
||||||
"role": "Employee",
|
|
||||||
"set_user_permissions": 0,
|
|
||||||
"share": 1,
|
|
||||||
"submit": 1,
|
|
||||||
"write": 1
|
"write": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"amend": 1,
|
"amend": 1,
|
||||||
"cancel": 1,
|
"cancel": 1,
|
||||||
"create": 1,
|
"create": 1,
|
||||||
"delete": 1,
|
"delete": 1,
|
||||||
"email": 1,
|
"email": 1,
|
||||||
"export": 1,
|
"export": 1,
|
||||||
"if_owner": 0,
|
"print": 1,
|
||||||
"import": 0,
|
"read": 1,
|
||||||
"permlevel": 0,
|
"report": 1,
|
||||||
"print": 1,
|
"role": "HR Manager",
|
||||||
"read": 1,
|
"share": 1,
|
||||||
"report": 1,
|
"submit": 1,
|
||||||
"role": "HR Manager",
|
|
||||||
"set_user_permissions": 0,
|
|
||||||
"share": 1,
|
|
||||||
"submit": 1,
|
|
||||||
"write": 1
|
"write": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"amend": 0,
|
"create": 1,
|
||||||
"cancel": 0,
|
"email": 1,
|
||||||
"create": 1,
|
"export": 1,
|
||||||
"delete": 0,
|
"print": 1,
|
||||||
"email": 1,
|
"read": 1,
|
||||||
"export": 1,
|
"report": 1,
|
||||||
"if_owner": 0,
|
"role": "HR User",
|
||||||
"import": 0,
|
"share": 1,
|
||||||
"permlevel": 0,
|
"submit": 1,
|
||||||
"print": 1,
|
|
||||||
"read": 1,
|
|
||||||
"report": 1,
|
|
||||||
"role": "HR User",
|
|
||||||
"set_user_permissions": 0,
|
|
||||||
"share": 1,
|
|
||||||
"submit": 1,
|
|
||||||
"write": 1
|
"write": 1
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"quick_entry": 0,
|
"sort_field": "modified",
|
||||||
"read_only": 0,
|
"sort_order": "DESC",
|
||||||
"read_only_onload": 0,
|
"title_field": "employee_name",
|
||||||
"show_name_in_global_search": 0,
|
"track_changes": 1
|
||||||
"sort_field": "modified",
|
|
||||||
"sort_order": "DESC",
|
|
||||||
"title_field": "employee_name",
|
|
||||||
"track_changes": 1,
|
|
||||||
"track_seen": 0,
|
|
||||||
"track_views": 0
|
|
||||||
}
|
}
|
||||||
@ -7,6 +7,7 @@ import frappe
|
|||||||
from frappe import _
|
from frappe import _
|
||||||
from frappe.model.document import Document
|
from frappe.model.document import Document
|
||||||
from frappe.utils import formatdate, getdate
|
from frappe.utils import formatdate, getdate
|
||||||
|
from erpnext.hr.doctype.department_approver.department_approver import get_approvers
|
||||||
|
|
||||||
class OverlapError(frappe.ValidationError): pass
|
class OverlapError(frappe.ValidationError): pass
|
||||||
|
|
||||||
@ -14,15 +15,19 @@ class ShiftRequest(Document):
|
|||||||
def validate(self):
|
def validate(self):
|
||||||
self.validate_dates()
|
self.validate_dates()
|
||||||
self.validate_shift_request_overlap_dates()
|
self.validate_shift_request_overlap_dates()
|
||||||
|
self.validate_approver()
|
||||||
|
|
||||||
def on_submit(self):
|
def on_submit(self):
|
||||||
date_list = self.get_working_days(self.from_date, self.to_date)
|
if self.status not in ["Approved", "Rejected"]:
|
||||||
for date in date_list:
|
frappe.throw(_("Only Shift Request with status 'Approved' and 'Rejected' can be submitted"))
|
||||||
|
if self.status == "Approved":
|
||||||
assignment_doc = frappe.new_doc("Shift Assignment")
|
assignment_doc = frappe.new_doc("Shift Assignment")
|
||||||
assignment_doc.company = self.company
|
assignment_doc.company = self.company
|
||||||
assignment_doc.shift_type = self.shift_type
|
assignment_doc.shift_type = self.shift_type
|
||||||
assignment_doc.employee = self.employee
|
assignment_doc.employee = self.employee
|
||||||
assignment_doc.date = date
|
assignment_doc.start_date = self.from_date
|
||||||
|
if self.to_date:
|
||||||
|
assignment_doc.end_date = self.to_date
|
||||||
assignment_doc.shift_request = self.name
|
assignment_doc.shift_request = self.name
|
||||||
assignment_doc.insert()
|
assignment_doc.insert()
|
||||||
assignment_doc.submit()
|
assignment_doc.submit()
|
||||||
@ -34,6 +39,13 @@ class ShiftRequest(Document):
|
|||||||
shift_assignment_doc = frappe.get_doc("Shift Assignment", shift['name'])
|
shift_assignment_doc = frappe.get_doc("Shift Assignment", shift['name'])
|
||||||
shift_assignment_doc.cancel()
|
shift_assignment_doc.cancel()
|
||||||
|
|
||||||
|
def validate_approver(self):
|
||||||
|
department = frappe.get_value("Employee", self.employee, "department")
|
||||||
|
# shift_approver = frappe.get_value("Employee", self.employee, "shift_request_approver")
|
||||||
|
approvers = frappe.db.sql("""select approver from `tabDepartment Approver` where parent= %s and parentfield = 'shift_request_approver'""", (department))
|
||||||
|
approvers = [approver[0] for approver in approvers]
|
||||||
|
if self.approver not in approvers:
|
||||||
|
frappe.throw(__("Only Approvers can Approve this Request."))
|
||||||
|
|
||||||
def validate_dates(self):
|
def validate_dates(self):
|
||||||
if self.from_date and self.to_date and (getdate(self.to_date) < getdate(self.from_date)):
|
if self.from_date and self.to_date and (getdate(self.to_date) < getdate(self.from_date)):
|
||||||
@ -68,28 +80,4 @@ class ShiftRequest(Document):
|
|||||||
msg = _("Employee {0} has already applied for {1} between {2} and {3} : ").format(self.employee,
|
msg = _("Employee {0} has already applied for {1} between {2} and {3} : ").format(self.employee,
|
||||||
d['shift_type'], formatdate(d['from_date']), formatdate(d['to_date'])) \
|
d['shift_type'], formatdate(d['from_date']), formatdate(d['to_date'])) \
|
||||||
+ """ <b><a href="#Form/Shift Request/{0}">{0}</a></b>""".format(d["name"])
|
+ """ <b><a href="#Form/Shift Request/{0}">{0}</a></b>""".format(d["name"])
|
||||||
frappe.throw(msg, OverlapError)
|
frappe.throw(msg, OverlapError)
|
||||||
|
|
||||||
def get_working_days(self, start_date, end_date):
|
|
||||||
start_date, end_date = getdate(start_date), getdate(end_date)
|
|
||||||
|
|
||||||
from datetime import timedelta
|
|
||||||
|
|
||||||
date_list = []
|
|
||||||
employee_holiday_list = []
|
|
||||||
|
|
||||||
employee_holidays = frappe.db.sql("""select holiday_date from `tabHoliday`
|
|
||||||
where parent in (select holiday_list from `tabEmployee`
|
|
||||||
where name = %s)""",self.employee,as_dict=1)
|
|
||||||
|
|
||||||
for d in employee_holidays:
|
|
||||||
employee_holiday_list.append(d.holiday_date)
|
|
||||||
|
|
||||||
reference_date = start_date
|
|
||||||
|
|
||||||
while reference_date <= end_date:
|
|
||||||
if reference_date not in employee_holiday_list:
|
|
||||||
date_list.append(reference_date)
|
|
||||||
reference_date += timedelta(days=1)
|
|
||||||
|
|
||||||
return date_list
|
|
||||||
@ -5,7 +5,7 @@ from __future__ import unicode_literals
|
|||||||
|
|
||||||
import frappe
|
import frappe
|
||||||
import unittest
|
import unittest
|
||||||
from frappe.utils import nowdate
|
from frappe.utils import nowdate, add_days
|
||||||
|
|
||||||
class TestShiftRequest(unittest.TestCase):
|
class TestShiftRequest(unittest.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
@ -13,14 +13,20 @@ class TestShiftRequest(unittest.TestCase):
|
|||||||
frappe.db.sql("delete from `tab{doctype}`".format(doctype=doctype))
|
frappe.db.sql("delete from `tab{doctype}`".format(doctype=doctype))
|
||||||
|
|
||||||
def test_make_shift_request(self):
|
def test_make_shift_request(self):
|
||||||
|
department = frappe.get_value("Employee", "_T-Employee-00001", 'department')
|
||||||
|
set_shift_approver(department)
|
||||||
|
approver = frappe.db.sql("""select approver from `tabDepartment Approver` where parent= %s and parentfield = 'shift_request_approver'""", (department))[0][0]
|
||||||
|
|
||||||
shift_request = frappe.get_doc({
|
shift_request = frappe.get_doc({
|
||||||
"doctype": "Shift Request",
|
"doctype": "Shift Request",
|
||||||
"shift_type": "Day Shift",
|
"shift_type": "Day Shift",
|
||||||
"company": "_Test Company",
|
"company": "_Test Company",
|
||||||
"employee": "_T-Employee-00001",
|
"employee": "_T-Employee-00001",
|
||||||
"employee_name": "_Test Employee",
|
"employee_name": "_Test Employee",
|
||||||
"start_date": nowdate(),
|
"from_date": nowdate(),
|
||||||
"end_date": nowdate()
|
"to_date": add_days(nowdate(), 10),
|
||||||
|
"approver": approver,
|
||||||
|
"status": "Approved"
|
||||||
})
|
})
|
||||||
shift_request.insert()
|
shift_request.insert()
|
||||||
shift_request.submit()
|
shift_request.submit()
|
||||||
@ -34,4 +40,10 @@ class TestShiftRequest(unittest.TestCase):
|
|||||||
self.assertEqual(shift_request.employee, employee)
|
self.assertEqual(shift_request.employee, employee)
|
||||||
shift_request.cancel()
|
shift_request.cancel()
|
||||||
shift_assignment_doc = frappe.get_doc("Shift Assignment", {"shift_request": d.get('shift_request')})
|
shift_assignment_doc = frappe.get_doc("Shift Assignment", {"shift_request": d.get('shift_request')})
|
||||||
self.assertEqual(shift_assignment_doc.docstatus, 2)
|
self.assertEqual(shift_assignment_doc.docstatus, 2)
|
||||||
|
|
||||||
|
def set_shift_approver(department):
|
||||||
|
department_doc = frappe.get_doc("Department", department)
|
||||||
|
department_doc.append('shift_request_approver',{'approver': "test1@example.com"})
|
||||||
|
department_doc.save()
|
||||||
|
department_doc.reload()
|
||||||
Loading…
x
Reference in New Issue
Block a user