You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

360 lines
14 KiB

from django.contrib import messages
from django.contrib.auth import authenticate, login as auth_login, logout
from django.shortcuts import render, redirect, get_object_or_404
from .models import skyonnAdmin, ClientDetails, SubcompanyDetails, Contact
from django.contrib.auth.hashers import make_password
from django.http import HttpResponse
import random
import string
from django.http import JsonResponse
import json
from django.core.serializers.json import DjangoJSONEncoder
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_http_methods
def home(request):
return render(request, 'skyonnadmin/home.html')
def create_admin(request):
if request.method == 'POST':
# Retrieve data from the form
first_name = request.POST['first_name']
last_name = request.POST['last_name']
phone_number = request.POST['phone']
phone_number_2 = request.POST.get('phone_number_2')
company_email = request.POST['company_email']
personal_email = request.POST.get('personal_email')
address = request.POST['address']
work_location = request.POST['work_location']
role = 'admin'
password = request.POST['password'] # Assuming there's a password field in the form
hashed_password = make_password(password)
# Generate admin ID based on the last ID in the database
last_admin = skyonnAdmin.objects.order_by('-id').first()
if last_admin:
last_id = int(last_admin.admin_id[4:]) # Extract the serial number part and convert to int
new_id = last_id + 1
else:
new_id = 1
admin_id = f'SKYA{new_id:03d}' # Construct the new admin ID
# Create the admin user
admin = skyonnAdmin.objects.create(
first_name=first_name,
last_name=last_name,
phone=phone_number,
phone_number_2=phone_number_2,
company_email=company_email,
personal_email=personal_email,
address=address,
work_location=work_location,
role=role,
admin_id=admin_id,
password=hashed_password
)
admin.backend = 'user.backend.PhoneAuthenticationBackend'
auth_login(request, admin)
return redirect('dashboard', admin_id=admin.admin_id)
else:
return render(request, 'skyonnadmin/home.html')
# # Redirect to the admin signup page
# return redirect('home')
#
# return render(request, 'skyonnadmin/home.html')
def login(request):
if request.method == 'POST':
phone = request.POST.get('phone')
password = request.POST.get('password')
print("Phone:", phone)
# Retrieve the admin object based on the provided phone number
admin = skyonnAdmin.objects.filter(phone=phone).first()
print(admin)
if admin is not None:
# Check if the provided password matches the stored password
if admin.check_password(password):
# Password is correct, login successful
# You can implement your login logic here
print("Admin ID:", admin.admin_id)
return redirect('dashboard', admin_id=admin.admin_id)
else:
# Password is incorrect
messages.error(request, 'Invalid password.')
else:
# Admin with the provided phone number does not exist
messages.error(request, 'No admin found for the provided phone number.')
return render(request, 'skyonnadmin/home.html')
def admin_dashboard(request, admin_id):
admin = get_object_or_404(skyonnAdmin, admin_id=admin_id)
# Get the manager's first name
first_name = admin.first_name.capitalize()
full_name = f"{first_name}"
print(full_name)
return render(request, 'skyonnadmin/admin_dashboard.html', {'first_name': full_name, 'admin_id': admin_id})
# Admin dashboard logic goes here
def logout_view(request):
logout(request)
return redirect('admin_home')
def client_details(request):
return render(request, 'skyonnadmin/client_details.html')
def add_subclient(request):
admin_id = request.GET.get('admin_id', None)
clients = ClientDetails.objects.all()
return render(request, 'skyonnadmin/add_subclient.html', {'clients': clients,'admin_id': admin_id})
def add_client(request):
admin_id = request.GET.get('admin_id', None)
print(admin_id)
clients = ClientDetails.objects.all()
return render(request, 'skyonnadmin/add_client.html', {'clients': clients,'admin_id': admin_id})
def existing_client(request):
return render(request, 'skyonnadmin/existing_client.html')
def save_details(request):
if request.method == 'POST':
# Extract data from the first form
parent_company = request.POST.get('ParentCompany', '')
location = request.POST.get('Location', '')
department = request.POST.get('Department', '')
gst_no = request.POST.get('GSTNo', '')
address = request.POST.get('Address', '')
# Extract data from the second form
first_name = request.POST.get('Admin_FirstName', '')
last_name = request.POST.get('Admin_LastName', '')
phone_no1 = request.POST.get('Admin_PhoneNo1', '')
phone_no2 = request.POST.get('Admin_PhoneNo2', '')
company_email = request.POST.get('Admin_CompanyEmail', '')
designation = request.POST.get('Admin_Designation', '')
admin_department = request.POST.get('Admin_Department', '')
admin_location = request.POST.get('Admin_Location', '')
print(admin_location)
client_id = generate_client_id(parent_company)
# Save data into the database
job_details = ClientDetails(
parent_company=parent_company,
location=location,
department=department,
gst_no=gst_no,
address=address,
client_id=client_id,
admin_first_name=first_name,
admin_last_name=last_name,
admin_phone_no1=phone_no1,
admin_phone_no2=phone_no2,
admin_company_email=company_email,
admin_designation=designation,
admin_department=admin_department,
admin_location=admin_location
)
job_details.save()
admin_id = request.GET.get('admin_id', None)
print(admin_id)
return JsonResponse({'status': 'success', 'message': 'Client saved successfully.'})
else:
return HttpResponse('Invalid request method')
@csrf_exempt
def save_details_subcompany(request):
print("00came")
if request.method == 'POST':
# Extract data from the first form
parent_company = request.POST.get('ParentCompany', '')
location = request.POST.get('Location', '')
department = request.POST.get('Department', '')
gst_no = request.POST.get('GSTNo', '')
address = request.POST.get('Address', '')
sub_company = request.POST.get('SubCompany', '')
# Extract data from the second form
first_name = request.POST.get('Admin_FirstName', '')
last_name = request.POST.get('Admin_LastName', '')
phone_no1 = request.POST.get('Admin_PhoneNo1', '')
phone_no2 = request.POST.get('Admin_PhoneNo2', '')
company_email = request.POST.get('Admin_CompanyEmail', '')
designation = request.POST.get('Admin_Designation', '')
admin_department = request.POST.get('Admin_Department', '')
admin_location = request.POST.get('Admin_Location', '')
print(admin_location)
client_id = generate_client_id(parent_company)
# Save data into the database
job_details = SubcompanyDetails(
parent_company=parent_company,
sub_company=sub_company,
location=location,
department=department,
gst_no=gst_no,
address=address,
client_id=client_id,
admin_first_name=first_name,
admin_last_name=last_name,
admin_phone_no1=phone_no1,
admin_phone_no2=phone_no2,
admin_company_email=company_email,
admin_designation=designation,
admin_department=admin_department,
admin_location=admin_location
)
job_details.save()
admin_id = request.GET.get('admin_id', None)
return JsonResponse({'status': 'success', 'message': 'subclient saved successfully.'})
else:
return JsonResponse({'status': 'error', 'message': 'Invalid request method'}, status=400)
def get_combined_details(request):
parent_company = request.GET.get('parent_company')
location = request.GET.get('location')
# Fetch data from ClientDetails and SubcompanyDetails tables based on filters
client_details = ClientDetails.objects.filter(parent_company=parent_company, location=location)
subcompany_details = SubcompanyDetails.objects.filter(parent_company=parent_company, location=location)
# Combine data from both tables
combined_data = []
# Add client details to combined_data
for detail in client_details:
combined_data.append({
'parent_company': detail.parent_company,
'location': detail.location,
'department': detail.department,
'gst_no': detail.gst_no,
'address': detail.address,
'client_id': detail.client_id,
'admin_first_name': detail.admin_first_name,
'admin_last_name': detail.admin_last_name,
'admin_phone_no1': detail.admin_phone_no1,
'admin_phone_no2': detail.admin_phone_no2,
'admin_company_email': detail.admin_company_email,
'admin_designation': detail.admin_designation,
'admin_department': detail.admin_department,
'admin_location': detail.admin_location,
# Add contacts data if needed
})
# Add subcompany details to combined_data
for detail in subcompany_details:
combined_data.append({
'parent_company': detail.parent_company,
'sub_company': detail.sub_company,
'location': detail.location,
'department': detail.department,
'gst_no': detail.gst_no,
'address': detail.address,
'client_id': detail.client_id,
'admin_first_name': detail.admin_first_name,
'admin_last_name': detail.admin_last_name,
'admin_phone_no1': detail.admin_phone_no1,
'admin_phone_no2': detail.admin_phone_no2,
'admin_company_email': detail.admin_company_email,
'admin_designation': detail.admin_designation,
'admin_department': detail.admin_department,
'admin_location': detail.admin_location,
# Add contacts data if needed
})
print(combined_data)
return JsonResponse(combined_data, safe=False)
def get_locations(request):
print(0)
if request.method == 'GET' and 'parent_company' in request.GET:
print(1)
parent_company = request.GET.get('parent_company')
locations = SubcompanyDetails.objects.filter(parent_company=parent_company).values_list('location', flat=True)
serialized_data = json.dumps(list(locations), cls=DjangoJSONEncoder)
return JsonResponse(serialized_data, safe=False)
else:
return JsonResponse({'error': 'Invalid request'})
def generate_client_id(parent_company):
# Extract first 4 letters from parent_company and convert to uppercase
prefix = parent_company[:4].upper()
# Generate 4 random integers
suffix = ''.join(random.choices(string.digits, k=4))
# Concatenate prefix and suffix to form the client_id
client_id = prefix + suffix
return client_id
def get_contacts(request):
client_id = request.GET.get('client_id')
department = request.GET.get('department')
client_details = ClientDetails.objects.filter(client_id=client_id).first()
if department == 'hiring_managers':
contacts = client_details.hiring_manager_contacts.all()
elif department == 'accounts':
contacts = client_details.accounts_contacts.all()
elif department == 'human_resources':
contacts = client_details.hr_contacts.all()
elif department == 'administration':
contacts = client_details.admin_contacts.all()
else:
contacts = []
contacts_data = [{
"name": f"{contact.first_name} {contact.last_name}",
"designation": contact.designation,
"department": contact.department,
"phone": contact.phone_no1,
"email": contact.company_email,
"location": contact.client_id.location, # Adjust based on your model relationships
} for contact in contacts]
return JsonResponse({"contacts": contacts_data})
@csrf_exempt
@require_http_methods(["POST"])
def add_contact(request):
print("hii")
# Extract information from the request
department = request.POST.get('department')
# Assume 'sub_company_id' is passed to identify which SubcompanyDetails to update
sub_company_id = request.POST.get('sub_company_id')
# Create the Contact instance (simplified, add validation and error handling)
contact = Contact(
first_name=request.POST.get('first_name'),
last_name=request.POST.get('last_name'),
# Add other fields as necessary
)
contact.save()
# Add the contact to the appropriate department of the SubcompanyDetails instance
sub_company = SubcompanyDetails.objects.get(id=sub_company_id)
if department == 'HR':
sub_company.hr_contacts.add(contact)
elif department == 'Accounts':
sub_company.accounts_contacts.add(contact)
# Add conditions for other departments as needed
return JsonResponse({"success": True, "message": "Contact added successfully."})