from django.shortcuts import render, get_object_or_404, redirect from hrm.models import * from custom_user.models import User from django.contrib.auth.decorators import login_required import json from django.http import HttpResponseRedirect, HttpResponse, JsonResponse from django.urls import reverse from datetime import datetime from api.views import sendMail @login_required def add_employee(request): if request.method == 'GET': context = { "companies": company.objects.all(), "department": department.objects.all(), "pay_structure": pay_choices, "managers": employee.objects.filter(groups__name='Manager'), "segment": "add_employee" } return render(request, 'manager/add_employee.html', context) @login_required def select_employee(request): employees = employee.objects.all() context = { 'employees': employees, "segment": "edit_employee" } return render(request, 'manager/select_employee.html', context) @login_required def edit_employee(request): if request.method == 'GET': employee_id = request.GET.get('employee_id') user = User.objects.get(email='josh@themainframe.co.uk') employee_object = get_object_or_404(employee, id=employee_id) context = { "employee": employee_object, "companies": company.objects.all(), "department": department.objects.all(), "pay_structure": pay_choices, "managers": employee.objects.filter(groups__name='Manager'), "segment": "edit_employee" } return render(request, 'manager/edit_employee.html', context) elif (request.method == 'POST' and request.user.is_staff): try: data = json.loads(request.POST.get('data', '')) formData = data['formData'] employee_object = employee.objects.get(id=formData['employee_id']) u = User.objects.get(id=employee_object.employee.id) for key,value in formData.items(): if key == 'employee_id': pass elif (not key.startswith('User') and 'date' not in key): setattr(employee_object, key, value) elif 'date' in key: print(value) if value != "None": date = datetime.strptime(value, "%d %b %Y").strftime("%Y-%m-%d") setattr(employee_object, key, date) elif key.startswith('User'): key = key.split('__')[1] setattr(u, key, value) employee_object.save() u.save() message = f"{employee_object.employee.first_name} {employee_object.employee.last_name} has been saved." messageTitle = "Success!" messageStatus = 'text-bg-success' response = JsonResponse({'messageTitle':messageTitle, 'message': message, 'messageStatus':messageStatus}) return response except Exception as e: #logger.error(repr(e)) print(repr(e)) messageTitle = "Oops!" messageStatus = 'text-bg-danger' message = str(repr(e)) response = JsonResponse({'messageTitle':messageTitle, 'message': message, 'messageStatus':messageStatus}) return response @login_required def select_department(request): departments = department.objects.all() context = { 'departments': departments, "segment": "departments" } return render(request, 'manager/select_departments.html', context) @login_required def edit_department(request): if request.method == 'GET': d = department.objects.get(id=request.GET.get('department_id')) emp = employee.objects.filter(company__id=d.company_set.first().id) empl = [] for e in emp: empl.append(f"{e.id}") context = { "department": d, "employees": employee.objects.all(), "emp": empl, "managers": employee.objects.filter(groups__name='Manager'), "segment": "department" } return render(request, 'manager/edit_department.html', context) elif request.method == 'POST': try: data = json.loads(request.POST.get('data', '')) dept = department.objects.get(id=data['department_id']) dept.name=data['departmentName'] dept.line_manager = employee.objects.get(id=data['lineManager']).employee dept.save() message = f"{data['departmentName']} has been saved." messageTitle = "Success!" messageStatus = 'text-bg-success' response = JsonResponse({'messageTitle':messageTitle, 'message': message, 'messageStatus':messageStatus, 'department_id': dept.id}) return response except Exception as e: #logger.error(repr(e)) print(repr(e)) messageTitle = "Oops!" messageStatus = 'text-bg-danger' message = str(repr(e)) response = JsonResponse({'messageTitle':messageTitle, 'message': message, 'messageStatus':messageStatus}) return response @login_required def add_department(request): try: user = employee.objects.get(employee__id=request.user.id) print(user) if request.method == 'POST': data = json.loads(request.POST.get('data', '')) department.objects.create(name=data['departmentName'], manager=employee.objects.get(id=data['lineManager']).employee) dept = department.objects.get(name=data['departmentName'], manager=employee.objects.get(id=data['lineManager']).employee) message = f"{data['departmentName']} has been added." messageTitle = "Success!" messageStatus = 'text-bg-success' response = JsonResponse({'messageTitle':messageTitle, 'message': message, 'messageStatus':messageStatus, 'department_id': dept.id}) return response except Exception as e: #logger.error(repr(e)) print(repr(e)) messageTitle = "Oops!" messageStatus = 'text-bg-danger' message = str(repr(e)) response = JsonResponse({'messageTitle':messageTitle, 'message': message, 'messageStatus':messageStatus}) return response # approve holidays # def company_editor(request): context = { 'segment': 'company', "companies": company.objects.all() } return render(request, "manager/company.html", context) def add_company(request): if request.method == 'GET': context = { 'segment': 'company', "departments": department.objects.all(), "managers": employee.objects.filter(groups__name='Manager'), } return render(request, 'manager/add_company.html', context) if request.method == 'POST': def check_exists(name): try: test = company.objects.get(name = name) return True except: return False try: data = json.loads(request.POST.get('data', '')) formData = data['formData'] if check_exists(formData['name']) == False: comp = company.objects.create( name = formData['name'], address_street = formData['address_street'], address_city = formData['address_city'], address_country = formData['address_country'], address_postcode = formData['address_postcode'] ) if 'vat_number' in formData: comp.vat_number = formData['vat_number'] if 'contact_number' in formData: comp.contact_number = formData['contact_number'] if formData['departments'] != []: for value in formData['departments']: dept = department.objects.get(id = value) comp.departments.add(dept) comp.save() message = f"{formData['name']} has been added." messageTitle = "Success!" messageStatus = 'text-bg-success' response = JsonResponse({'messageTitle':messageTitle, 'message': message, 'messageStatus':messageStatus}) return response else: raise Exception(f"A company with the name: {formData['name']}
Already exists") except Exception as e: #logger.error(repr(e)) print(repr(e)) messageTitle = "Oops!" messageStatus = 'text-bg-danger' message = str(e) response = JsonResponse({'messageTitle':messageTitle, 'message': message, 'messageStatus':messageStatus}) return response def edit_company(request): if request.method == 'GET': comp = company.objects.get(id=request.GET.get('company_id')) d = comp.departments.all() departments = [] for dep in d: departments.append(f"{dep.id}") context = { 'segment': 'company', 'company': comp, "depts": departments, "departments": department.objects.all(), "managers": employee.objects.filter(groups__name='Manager'), } return render(request, 'manager/edit_company.html', context) if request.method == 'POST': try: data = json.loads(request.POST.get('data', '')) formData = data['formData'] comp = company.objects.get(id=request.get('company_id')) for key,value in formData.items(): if 'department' in key: pass else: setattr(comp, key, value) if formData['departments'] != []: for value in formData['departments']: dept = department.objects.get(id = value) comp.departments.add(dept) comp.save() message = f"{formData['name']} has been added." messageTitle = "Success!" messageStatus = 'text-bg-success' response = JsonResponse({'messageTitle':messageTitle, 'message': message, 'messageStatus':messageStatus}) return response except Exception as e: #logger.error(repr(e)) print(repr(e)) messageTitle = "Oops!" messageStatus = 'text-bg-danger' message = str(e) response = JsonResponse({'messageTitle':messageTitle, 'message': message, 'messageStatus':messageStatus}) return response