105 lines
3.7 KiB
Python
Executable File
105 lines
3.7 KiB
Python
Executable File
from django.shortcuts import render, get_object_or_404, redirect
|
|
from django.http import HttpResponseRedirect, HttpResponse, JsonResponse
|
|
from django.urls import reverse
|
|
from hrm.models import *
|
|
from custom_user.models import User
|
|
from django.contrib.auth.decorators import login_required
|
|
import json
|
|
import calendar
|
|
from datetime import datetime, timedelta
|
|
|
|
from api.views import sendMail
|
|
|
|
#@login_required
|
|
def index(request):
|
|
try:
|
|
user = User.objects.get(id=request.user.id)
|
|
employee_object = employee.objects.get(employee=user)
|
|
context = {
|
|
"employee": employee_object,#
|
|
"links": homepage_links.objects.all(),
|
|
"segment": "index"
|
|
}
|
|
return render(request, 'hrm/index.html', context)
|
|
except Exception as e:
|
|
print(repr(e))
|
|
context = {
|
|
"segment": "index"
|
|
}
|
|
return redirect(reverse('404'))
|
|
|
|
|
|
#@login_required
|
|
def profile(request):
|
|
user = User.objects.get(id=request.user.id)
|
|
try:
|
|
employee_object = employee.objects.get(employee=user)
|
|
print(f"employee = {employee_object}")
|
|
context = {
|
|
"employee": employee_object,
|
|
"segment": "profile"
|
|
}
|
|
return render( request, 'hrm/profile.html', context)
|
|
except Exception as e:
|
|
print(repr(e))
|
|
return redirect(reverse('404'))
|
|
|
|
|
|
|
|
|
|
workdays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
|
|
def weekday_count(start, end):
|
|
start_date = datetime.strptime(start, '%Y-%m-%d')
|
|
end_date = datetime.strptime(end, '%Y-%m-%d')
|
|
days = 0
|
|
for i in range((end_date - start_date).days):
|
|
day = calendar.day_name[(start_date + timedelta(days=i+1)).weekday()]
|
|
if day in workdays:
|
|
days += 1
|
|
return days
|
|
|
|
def request_holiday(request):
|
|
if request.method == 'GET':
|
|
emp = employee.objects.get(employee=User.objects.get(id=request.user.id))
|
|
today = datetime.today().strftime('%Y-%m-%d')
|
|
context ={
|
|
"segment": "holiday",
|
|
"today": today,
|
|
"employee": emp,
|
|
}
|
|
return render(request, 'hrm/holiday_request.html', context)
|
|
elif request.method == 'POST':
|
|
try:
|
|
data = json.loads(request.POST.get('data' , ''))
|
|
days = weekday_count(data['from'], data['to'])
|
|
emp = employee.objects.get(id=data['employee.id'])
|
|
requested_days = absence_days.objects.create(
|
|
days_taken = days,
|
|
date_from = data['from'],
|
|
date_to = data['to'],
|
|
reason = 'hol',
|
|
is_request=True,
|
|
taken_by = emp
|
|
)
|
|
email_message = """
|
|
Hello, {{ employee.employee.first_name }}, <br><br>
|
|
{{ absence_days.requested_by.employee.first_name }} has submitted a new holiday request. <br>
|
|
Click here to manage this request. <br><br>
|
|
Thanks,
|
|
"""
|
|
sendMail('Holiday Request', email_message, emp.line_manager.email, emp.to_dict(), requested_days.to_dict(), None)
|
|
message = f"Holiday dates: {data['from']}-{data['to']} <br> has been sent to {emp.line_manager.first_name} {emp.line_manager.last_name} for approval."
|
|
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
|
|
|