mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-24 15:39:20 +00:00
fix: Move filter setup to doctype controllers
This commit is contained in:
@@ -56,7 +56,7 @@ class Employee(NestedSet):
|
||||
if existing_user_id:
|
||||
remove_user_permission(
|
||||
"Employee", self.name, existing_user_id)
|
||||
|
||||
|
||||
def after_rename(self, old, new, merge):
|
||||
self.db_set("employee", new)
|
||||
|
||||
@@ -181,8 +181,11 @@ class Employee(NestedSet):
|
||||
)
|
||||
if reports_to:
|
||||
link_to_employees = [frappe.utils.get_link_to_form('Employee', employee.name, label=employee.employee_name) for employee in reports_to]
|
||||
throw(_("Employee status cannot be set to 'Left' as following employees are currently reporting to this employee: ")
|
||||
+ ', '.join(link_to_employees), EmployeeLeftValidationError)
|
||||
message = _("The following employees are currently still reporting to {0}:").format(frappe.bold(self.employee_name))
|
||||
message += "<br><br><ul><li>" + "</li><li>".join(link_to_employees)
|
||||
message += "</li></ul><br>"
|
||||
message += _("Please make sure the employees above report to another Active employee.")
|
||||
throw(message, EmployeeLeftValidationError, _("Cannot Relieve Employee"))
|
||||
if not self.relieving_date:
|
||||
throw(_("Please enter relieving date."))
|
||||
|
||||
@@ -215,7 +218,7 @@ class Employee(NestedSet):
|
||||
|
||||
def validate_preferred_email(self):
|
||||
if self.prefered_contact_email and not self.get(scrub(self.prefered_contact_email)):
|
||||
frappe.msgprint(_("Please enter " + self.prefered_contact_email))
|
||||
frappe.msgprint(_("Please enter {0}").format(self.prefered_contact_email))
|
||||
|
||||
def validate_onboarding_process(self):
|
||||
employee_onboarding = frappe.get_all("Employee Onboarding",
|
||||
@@ -417,9 +420,9 @@ def get_employee_emails(employee_list):
|
||||
@frappe.whitelist()
|
||||
def get_children(doctype, parent=None, company=None, is_root=False, is_tree=False):
|
||||
|
||||
filters = []
|
||||
filters = [['status', '!=', 'Left']]
|
||||
if company and company != 'All Companies':
|
||||
filters = [['company', '=', company]]
|
||||
filters.append(['company', '=', company])
|
||||
|
||||
fields = ['name as value', 'employee_name as title']
|
||||
|
||||
|
||||
@@ -28,144 +28,110 @@
|
||||
{
|
||||
"fieldname": "employee_settings",
|
||||
"fieldtype": "Section Break",
|
||||
"label": "Employee Settings",
|
||||
"show_days": 1,
|
||||
"show_seconds": 1
|
||||
"label": "Employee Settings"
|
||||
},
|
||||
{
|
||||
"description": "Enter retirement age in years",
|
||||
"fieldname": "retirement_age",
|
||||
"fieldtype": "Data",
|
||||
"label": "Retirement Age",
|
||||
"show_days": 1,
|
||||
"show_seconds": 1
|
||||
"label": "Retirement Age"
|
||||
},
|
||||
{
|
||||
"default": "Naming Series",
|
||||
"description": "Employee record is created using selected field. ",
|
||||
"description": "Employee records are created using the selected field",
|
||||
"fieldname": "emp_created_by",
|
||||
"fieldtype": "Select",
|
||||
"label": "Employee Records to be created by",
|
||||
"options": "Naming Series\nEmployee Number\nFull Name",
|
||||
"show_days": 1,
|
||||
"show_seconds": 1
|
||||
"label": "Employee Records to Be Created By",
|
||||
"options": "Naming Series\nEmployee Number\nFull Name"
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break_4",
|
||||
"fieldtype": "Column Break",
|
||||
"show_days": 1,
|
||||
"show_seconds": 1
|
||||
"fieldtype": "Column Break"
|
||||
},
|
||||
{
|
||||
"default": "0",
|
||||
"description": "Don't send Employee Birthday Reminders",
|
||||
"description": "Don't send employee birthday reminders",
|
||||
"fieldname": "stop_birthday_reminders",
|
||||
"fieldtype": "Check",
|
||||
"label": "Stop Birthday Reminders",
|
||||
"show_days": 1,
|
||||
"show_seconds": 1
|
||||
"label": "Stop Birthday Reminders"
|
||||
},
|
||||
{
|
||||
"default": "1",
|
||||
"fieldname": "expense_approver_mandatory_in_expense_claim",
|
||||
"fieldtype": "Check",
|
||||
"label": "Expense Approver Mandatory In Expense Claim",
|
||||
"show_days": 1,
|
||||
"show_seconds": 1
|
||||
"label": "Expense Approver Mandatory In Expense Claim"
|
||||
},
|
||||
{
|
||||
"collapsible": 1,
|
||||
"fieldname": "leave_settings",
|
||||
"fieldtype": "Section Break",
|
||||
"label": "Leave Settings",
|
||||
"show_days": 1,
|
||||
"show_seconds": 1
|
||||
"label": "Leave Settings"
|
||||
},
|
||||
{
|
||||
"fieldname": "leave_approval_notification_template",
|
||||
"fieldtype": "Link",
|
||||
"label": "Leave Approval Notification Template",
|
||||
"options": "Email Template",
|
||||
"show_days": 1,
|
||||
"show_seconds": 1
|
||||
"options": "Email Template"
|
||||
},
|
||||
{
|
||||
"fieldname": "leave_status_notification_template",
|
||||
"fieldtype": "Link",
|
||||
"label": "Leave Status Notification Template",
|
||||
"options": "Email Template",
|
||||
"show_days": 1,
|
||||
"show_seconds": 1
|
||||
"options": "Email Template"
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break_18",
|
||||
"fieldtype": "Column Break",
|
||||
"show_days": 1,
|
||||
"show_seconds": 1
|
||||
"fieldtype": "Column Break"
|
||||
},
|
||||
{
|
||||
"default": "1",
|
||||
"fieldname": "leave_approver_mandatory_in_leave_application",
|
||||
"fieldtype": "Check",
|
||||
"label": "Leave Approver Mandatory In Leave Application",
|
||||
"show_days": 1,
|
||||
"show_seconds": 1
|
||||
"label": "Leave Approver Mandatory In Leave Application"
|
||||
},
|
||||
{
|
||||
"default": "0",
|
||||
"fieldname": "show_leaves_of_all_department_members_in_calendar",
|
||||
"fieldtype": "Check",
|
||||
"label": "Show Leaves Of All Department Members In Calendar",
|
||||
"show_days": 1,
|
||||
"show_seconds": 1
|
||||
"label": "Show Leaves Of All Department Members In Calendar"
|
||||
},
|
||||
{
|
||||
"collapsible": 1,
|
||||
"fieldname": "hiring_settings",
|
||||
"fieldtype": "Section Break",
|
||||
"label": "Hiring Settings",
|
||||
"show_days": 1,
|
||||
"show_seconds": 1
|
||||
"label": "Hiring Settings"
|
||||
},
|
||||
{
|
||||
"default": "0",
|
||||
"fieldname": "check_vacancies",
|
||||
"fieldtype": "Check",
|
||||
"label": "Check Vacancies On Job Offer Creation",
|
||||
"show_days": 1,
|
||||
"show_seconds": 1
|
||||
"label": "Check Vacancies On Job Offer Creation"
|
||||
},
|
||||
{
|
||||
"default": "0",
|
||||
"fieldname": "auto_leave_encashment",
|
||||
"fieldtype": "Check",
|
||||
"label": "Auto Leave Encashment",
|
||||
"show_days": 1,
|
||||
"show_seconds": 1
|
||||
"label": "Auto Leave Encashment"
|
||||
},
|
||||
{
|
||||
"default": "0",
|
||||
"fieldname": "restrict_backdated_leave_application",
|
||||
"fieldtype": "Check",
|
||||
"label": "Restrict Backdated Leave Application",
|
||||
"show_days": 1,
|
||||
"show_seconds": 1
|
||||
"label": "Restrict Backdated Leave Applications"
|
||||
},
|
||||
{
|
||||
"depends_on": "eval:doc.restrict_backdated_leave_application == 1",
|
||||
"fieldname": "role_allowed_to_create_backdated_leave_application",
|
||||
"fieldtype": "Link",
|
||||
"label": "Role Allowed to Create Backdated Leave Application",
|
||||
"options": "Role",
|
||||
"show_days": 1,
|
||||
"show_seconds": 1
|
||||
"options": "Role"
|
||||
}
|
||||
],
|
||||
"icon": "fa fa-cog",
|
||||
"idx": 1,
|
||||
"issingle": 1,
|
||||
"links": [],
|
||||
"modified": "2020-06-04 15:15:09.865476",
|
||||
"modified": "2020-10-13 11:49:46.168027",
|
||||
"modified_by": "Administrator",
|
||||
"module": "HR",
|
||||
"name": "HR Settings",
|
||||
@@ -183,4 +149,4 @@
|
||||
],
|
||||
"sort_field": "modified",
|
||||
"sort_order": "ASC"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,18 +6,28 @@ from __future__ import unicode_literals
|
||||
import frappe
|
||||
import unittest
|
||||
from frappe.utils import nowdate,flt, cstr,random_string
|
||||
from erpnext.hr.doctype.employee.test_employee import make_employee
|
||||
from erpnext.hr.doctype.vehicle_log.vehicle_log import make_expense_claim
|
||||
|
||||
class TestVehicleLog(unittest.TestCase):
|
||||
def setUp(self):
|
||||
employee_id = frappe.db.sql("""select name from `tabEmployee` where name='testdriver@example.com'""")
|
||||
self.employee_id = employee_id[0][0] if employee_id else None
|
||||
|
||||
if not self.employee_id:
|
||||
self.employee_id = make_employee("testdriver@example.com", company="_Test Company")
|
||||
|
||||
self.license_plate = get_vehicle(self.employee_id)
|
||||
|
||||
def tearDown(self):
|
||||
frappe.delete_doc("Vehicle", self.license_plate, force=1)
|
||||
frappe.delete_doc("Employee", self.employee_id, force=1)
|
||||
|
||||
def test_make_vehicle_log_and_syncing_of_odometer_value(self):
|
||||
employee_id = frappe.db.sql("""select name from `tabEmployee` where status='Active' order by modified desc limit 1""")
|
||||
employee_id = employee_id[0][0] if employee_id else None
|
||||
|
||||
license_plate = get_vehicle(employee_id)
|
||||
|
||||
vehicle_log = frappe.get_doc({
|
||||
"doctype": "Vehicle Log",
|
||||
"license_plate": cstr(license_plate),
|
||||
"employee":employee_id,
|
||||
"license_plate": cstr(self.license_plate),
|
||||
"employee": self.employee_id,
|
||||
"date":frappe.utils.nowdate(),
|
||||
"odometer":5010,
|
||||
"fuel_qty":frappe.utils.flt(50),
|
||||
@@ -27,7 +37,7 @@ class TestVehicleLog(unittest.TestCase):
|
||||
vehicle_log.submit()
|
||||
|
||||
#checking value of vehicle odometer value on submit.
|
||||
vehicle = frappe.get_doc("Vehicle", license_plate)
|
||||
vehicle = frappe.get_doc("Vehicle", self.license_plate)
|
||||
self.assertEqual(vehicle.last_odometer, vehicle_log.odometer)
|
||||
|
||||
#checking value vehicle odometer on vehicle log cancellation.
|
||||
@@ -40,6 +50,28 @@ class TestVehicleLog(unittest.TestCase):
|
||||
|
||||
self.assertEqual(vehicle.last_odometer, current_odometer - distance_travelled)
|
||||
|
||||
vehicle_log.delete()
|
||||
|
||||
def test_vehicle_log_fuel_expense(self):
|
||||
vehicle_log = frappe.get_doc({
|
||||
"doctype": "Vehicle Log",
|
||||
"license_plate": cstr(self.license_plate),
|
||||
"employee": self.employee_id,
|
||||
"date": frappe.utils.nowdate(),
|
||||
"odometer":5010,
|
||||
"fuel_qty":frappe.utils.flt(50),
|
||||
"price": frappe.utils.flt(500)
|
||||
})
|
||||
vehicle_log.save()
|
||||
vehicle_log.submit()
|
||||
|
||||
expense_claim = make_expense_claim(vehicle_log.name)
|
||||
fuel_expense = expense_claim.expenses[0].amount
|
||||
self.assertEqual(fuel_expense, 50*500)
|
||||
|
||||
vehicle_log.cancel()
|
||||
frappe.delete_doc("Expense Claim", expense_claim.name)
|
||||
frappe.delete_doc("Vehicle Log", vehicle_log.name)
|
||||
|
||||
def get_vehicle(employee_id):
|
||||
license_plate=random_string(10).upper()
|
||||
|
||||
@@ -32,7 +32,7 @@ def make_expense_claim(docname):
|
||||
vehicle_log = frappe.get_doc("Vehicle Log", docname)
|
||||
service_expense = sum([flt(d.expense_amount) for d in vehicle_log.service_detail])
|
||||
|
||||
claim_amount = service_expense + flt(vehicle_log.price)
|
||||
claim_amount = service_expense + (flt(vehicle_log.price) * flt(vehicle_log.fuel_qty) or 1)
|
||||
if not claim_amount:
|
||||
frappe.throw(_("No additional expenses has been added"))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user