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."})