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.

1287 lines
52 KiB

10 months ago
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
2 weeks ago
from .models import skyonnAdmin, ClientDetails, SubcompanyDetails, Contact, Locations, AddContact, SublocationDetails,InternalTeam
10 months ago
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
10 months ago
from django.views.decorators.http import require_http_methods
2 weeks ago
from django.core.exceptions import ObjectDoesNotExist
from .serializers import DetailsSerializer
from django.core.validators import validate_email
from django.core.exceptions import ValidationError
import re
from django.http import JsonResponse
from django.db.models import Q
from django.core.mail import send_mail
import threading
import pandas as pd
10 months ago
def home(request):
return render(request, 'skyonnadmin/home.html')
def create_admin(request):
if request.method == 'POST':
first_name = request.POST['first_name']
last_name = request.POST['last_name']
phone_number = request.POST['phone']
2 weeks ago
phone_number_2 = request.POST.get('phone_2')
10 months ago
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)
2 weeks ago
picture = request.FILES.get('picture')
10 months ago
# 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,
2 weeks ago
password=hashed_password,
picture= picture
10 months ago
)
2 weeks ago
print((admin.first_name, admin.last_name))
10 months ago
admin.backend = 'user.backend.PhoneAuthenticationBackend'
auth_login(request, admin)
2 weeks ago
return JsonResponse(
{'success': 'Login successful', 'redirect_url': f'/skyonnadmin/admin/dashboard/{admin.admin_id}'})
10 months ago
else:
return render(request, 'skyonnadmin/home.html')
2 weeks ago
def validate_admin(request):
if request.method == 'GET':
email1 = request.GET.get('company_email')
email2 = request.GET.get('personal_email')
phone_number1 = request.GET.get('phone')
phone_number2 = request.GET.get('phone_2')
response = {
'exists': False
}
if email1 and (skyonnAdmin.objects.filter(company_email=email1).exists() or
skyonnAdmin.objects.filter(personal_email=email1).exists()):
response['exists'] = True
if email2 and (skyonnAdmin.objects.filter(company_email=email2).exists() or
skyonnAdmin.objects.filter(personal_email=email2).exists()):
response['exists'] = True
if phone_number1 and (skyonnAdmin.objects.filter(phone=phone_number1).exists() or
skyonnAdmin.objects.filter(phone_number_2=phone_number1).exists()):
response['exists'] = True
if phone_number2 and (skyonnAdmin.objects.filter(phone=phone_number2).exists() or
skyonnAdmin.objects.filter(phone_number_2=phone_number2).exists()):
response['exists'] = True
return JsonResponse(response)
10 months ago
2 weeks ago
def admin_login(request):
10 months ago
if request.method == 'POST':
phone = request.POST.get('phone')
password = request.POST.get('password')
2 weeks ago
if not phone and 'phone' in request.POST:
return JsonResponse({'error': 'Please fill the phone number field.'}, status=400)
if not password and 'password' in request.POST: # Validate password if it's present
return JsonResponse({'error': 'Please fill the password field.'}, status=400)
10 months ago
admin = skyonnAdmin.objects.filter(phone=phone).first()
2 weeks ago
if admin is None:
return JsonResponse({'error': 'Incorrect phone number.'}, status=404)
10 months ago
2 weeks ago
if password:
if not admin.check_password(password):
return JsonResponse({'error': 'Incorrect password.'}, status=401)
return JsonResponse(
{'success': 'Login successful', 'redirect_url': f'/skyonnadmin/admin/dashboard/{admin.admin_id}'})
return JsonResponse({'success': 'Phone number is valid.'}, status=200)
return JsonResponse({'error': 'Invalid request method.'}, status=405)
10 months ago
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)
2 weeks ago
return render(request, 'skyonnadmin/admin_dashboard.html', {'first_name': full_name, 'admin_id': admin_id,'picture': admin.picture})
10 months ago
# Admin dashboard logic goes here
def logout_view(request):
logout(request)
return redirect('admin_home')
2 weeks ago
def get_admin_details(request):
admin_id = request.GET.get('admin_id', None)
print(admin_id)
admin = get_object_or_404(skyonnAdmin, admin_id=admin_id)
print('admin:', admin)
admin_picture = admin.picture.url
admin_data = {
'first_name': admin.first_name,
'last_name': admin.last_name,
'phone': admin.phone,
'phone_number_2': admin.phone_number_2,
'company_email': admin.company_email,
'personal_email': admin.personal_email,
'address': admin.address,
'work_location': admin.work_location,
'admin_picture': admin_picture
}
return JsonResponse({'admin_data': admin_data})
10 months ago
2 weeks ago
def client_details(request):
10 months ago
return render(request, 'skyonnadmin/client_details.html')
def add_subclient(request):
admin_id = request.GET.get('admin_id', None)
clients = ClientDetails.objects.all()
2 weeks ago
return render(request, 'skyonnadmin/add_subclient.html', {'clients': clients, 'admin_id': admin_id})
10 months ago
def add_client(request):
admin_id = request.GET.get('admin_id', None)
print(admin_id)
clients = ClientDetails.objects.all()
2 weeks ago
return render(request, 'skyonnadmin/add_client.html', {'clients': clients, 'admin_id': admin_id})
10 months ago
def existing_client(request):
2 weeks ago
clients = ClientDetails.objects.all()
return render(request, 'skyonnadmin/existing_client.html', {'clients': clients})
def new_job_posting(request):
admin_id = request.GET.get('admin_id', None)
return render(request, 'skyonnadmin/new_job_posting.html', {'admin_id': admin_id})
def add_new_contact(request):
clients = ClientDetails.objects.all()
sub_clients = SubcompanyDetails.objects.all()
return render(request, 'skyonnadmin/add_new_contact.html',{'clients': clients,'sub_clients': sub_clients})
10 months ago
2 weeks ago
@csrf_exempt
10 months ago
def save_details(request):
if request.method == 'POST':
2 weeks ago
10 months ago
# Extract data from the first form
parent_company = request.POST.get('ParentCompany', '')
2 weeks ago
locationId = request.POST.get('Location_Id', '')
GST_No = request.POST.get('GSTNo', '')
address_1 = request.POST.get('Address_1', '')
state = request.POST.get('State', '')
# Street = request.POST.get('Street', '')
City = request.POST.get('City', '')
country = request.POST.get('country', '')
address_2 = request.POST.get('Address_2', '')
Pincode = request.POST.get('Pincode', '')
10 months ago
client_id = generate_client_id(parent_company)
2 weeks ago
print(client_id)
if not parent_company or not locationId or not GST_No or not address_1 or not state or not City or not country or not Pincode:
return JsonResponse({'status': 'error','message': 'Error while saving client.Please fill required fields'},
status=400)
# if ClientDetails.objects.filter(parent_company=parent_company.upper()).exists():
# return JsonResponse({'status': 'error','field': 'ParentCompany', 'message': 'Parent Company already exists'}, status=400)
# # Save data into the database
parent_company_proper = parent_company.title()
# Check for duplicate ParentCompany
if ClientDetails.objects.filter(parent_company=parent_company_proper).exists():
return JsonResponse(
{'status': 'error', 'field': 'ParentCompany', 'message': 'Parent Company already exists'}, status=400)
10 months ago
job_details = ClientDetails(
2 weeks ago
parent_company=parent_company_proper,
location_Id=locationId,
GST_No=GST_No,
address_1=address_1,
state=state,
# Street= Street,
City=City,
country=country,
address_2=address_2,
Pincode=Pincode,
10 months ago
client_id=client_id,
)
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')
2 weeks ago
def check_parent_company(request):
if request.method == 'GET':
parent_company = request.GET.get('ParentCompany', '').strip().upper()
print(parent_company)
exists = ClientDetails.objects.filter(parent_company=parent_company).exists()
return JsonResponse({'exists': exists})
return JsonResponse({'error': 'Invalid request method'}, status=400)
def get_parentCompany(request):
clients = ClientDetails.objects.values('parent_company')
print(clients)
return JsonResponse(list(clients), safe=False)
def save_sublocation(request):
if request.method == 'POST':
parent_company = request.POST.get('ParentCompany', '')
department = request.POST.get('Department', '')
Location = request.POST.get('Location', '')
GST_No = request.POST.get('GSTNo', '')
address_1 = request.POST.get('Address_1', '')
address_2 = request.POST.get('Address_2', '')
# Street = request.POST.get('Street', '')
City = request.POST.get('City', '')
State = request.POST.get('State', '')
Pincode = request.POST.get('Pincode', '')
country = request.POST.get('country', '')
if not parent_company or not department or not Location or not GST_No or not address_1 or not State or not City or not country or not Pincode:
return JsonResponse({'status': 'error', 'message': 'Error while saving Sub_Location.Please fill required fields'},
status=400)
# Save data into the database
job_details = SublocationDetails(
parent_company=parent_company,
department= department,
Location=Location,
GST_No=GST_No,
address_1=address_1,
address_2=address_2,
# Street = Street,
City=City,
State=State,
Pincode=Pincode,
country=country, )
job_details.save()
admin_id = request.GET.get('admin_id', None)
print(admin_id)
return JsonResponse({'status': 'success', 'message': 'sublocation saved successfully.'})
else:
return JsonResponse({'status': 'error', 'message': 'Invalid request method'}, status=400)
def get_GSTNo(request):
if request.method == 'GET':
parent_company = request.GET.get('ParentCompany')
gst_no = ClientDetails.objects.filter(parent_company=parent_company).values('GST_No')
gst = list(gst_no)
print(gst)
return JsonResponse(gst[0],safe=False)
else:
return JsonResponse({'error': 'Invalid request'})
10 months ago
@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', '')
sub_company = request.POST.get('SubCompany', '')
2 weeks ago
location_id = request.POST.get('Location_Id', '')
GST_No = request.POST.get('GSTNo', '')
address_1 = request.POST.get('Address_1', '')
address_2 = request.POST.get('Address_2', '')
# Street = request.POST.get('Street', '')
City = request.POST.get('City', '')
State = request.POST.get('State', '')
Pincode = request.POST.get('Pincode', '')
country = request.POST.get('country', '')
10 months ago
2 weeks ago
sub_client_id = generate_client_id(parent_company)
print(sub_client_id)
if not parent_company or not sub_company or not location_id or not address_1 or not State or not City or not country or not Pincode:
return JsonResponse({'status': 'error', 'message': 'Error while saving Sub_client.Please fill required fields'},
status=400)
if SubcompanyDetails.objects.filter(sub_company=sub_company.title()).exists():
return JsonResponse({'status': 'error','field': 'SubCompany', 'message': 'Sub_Company already exists'}, status=400)
10 months ago
# Save data into the database
job_details = SubcompanyDetails(
parent_company=parent_company,
2 weeks ago
sub_company=sub_company.title(),
location_id=location_id,
GST_No=GST_No ,
address_1=address_1,
address_2=address_2,
# Street = Street,
City = City,
State = State,
Pincode = Pincode,
country= country,
sub_client_id=sub_client_id,
10 months ago
)
job_details.save()
admin_id = request.GET.get('admin_id', None)
2 weeks ago
print(admin_id)
10 months ago
return JsonResponse({'status': 'success', 'message': 'subclient saved successfully.'})
else:
return JsonResponse({'status': 'error', 'message': 'Invalid request method'}, status=400)
2 weeks ago
def check_sub_company(request):
if request.method == 'GET':
sub_company = request.GET.get('SubCompany', '').strip().upper()
print(sub_company)
exists = SubcompanyDetails.objects.filter(sub_company=sub_company).exists()
return JsonResponse({'exists': exists})
return JsonResponse({'error': 'Invalid request method'}, status=400)
10 months ago
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,
2 weeks ago
10 months ago
})
# 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,
2 weeks ago
# 'department': detail.department,
10 months ago
'gst_no': detail.gst_no,
'address': detail.address,
'client_id': detail.client_id,
2 weeks ago
10 months ago
})
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
2 weeks ago
# def get_contacts(request):
# if request.method == 'GET':
# client = request.GET.get('Client')
# print(client)
# SPOC_Details = AddContact.objects.filter(Company=client).values('FirstName','Department')
#
# SPOC_Details_list = list(SPOC_Details)
# return JsonResponse(SPOC_Details_list, safe=False)
# else:
# return JsonResponse({'error': 'Invalid request'})
def add_locations(request):
locations_list = ['Hyderabad', 'Pune', 'Chennai', 'Mumbai', 'Cochin', 'Ahmedabad', 'Bangalore']
for location in locations_list:
try:
Locations.objects.get(location=location)
print(f"Location '{location}' already exists.")
except ObjectDoesNotExist:
Locations.objects.create(location=location)
print(f"Added location '{location}' to the database.")
def get_subclients(request):
if request.method == 'GET' and 'parent_company' in request.GET:
parent_company = request.GET['parent_company']
# Query SubcompanyDetails table to filter sub-clients by parent company
sub_clients = SubcompanyDetails.objects.filter(parent_company=parent_company).values_list('sub_company',
flat=True)
# Convert queryset to list
sub_clients_list = list(sub_clients)
return JsonResponse(sub_clients_list, safe=False)
else:
return JsonResponse({'error': 'Invalid request'})
def get_filtered_data(request):
if request.method == 'GET':
client = request.GET.get('client')
sub_client = request.GET.get('subClient')
client_details = ClientDetails.objects.filter(parent_company=client)
client_id = [data.client_id for data in client_details]
print(client_id)
# Filter SubcompanyDetails based on client and sub-client
if sub_client == 'All Sub Clients':
sub_company_details = SubcompanyDetails.objects.filter(parent_company=client)
else:
sub_company_details = SubcompanyDetails.objects.filter(parent_company=client, sub_company=sub_client)
sub_client_id=[data.sub_client_id for data in sub_company_details]
print(sub_client_id)
10 months ago
2 weeks ago
filtered_data = {
'client_details':list(client_details.values()),
'sub_company_details': list(sub_company_details.values())
}
# # Serialize the filtered data
serializer = DetailsSerializer(filtered_data)
print(serializer.data)
return JsonResponse(serializer.data, safe=False)
10 months ago
else:
2 weeks ago
return JsonResponse({'error': 'Invalid request method'}, status=400)
10 months ago
2 weeks ago
def save_new_entry(request):
if request.method == 'POST':
data = json.loads(request.body)
rowData = data.get('rowData')
department = data.get('department')
10 months ago
2 weeks ago
# Retrieve the SubcompanyDetails instance based on the department
subcompany_instance = get_object_or_404(SubcompanyDetails, department=department)
# Save the new contact data to the appropriate contact field
if subcompany_instance:
new_contact = Contact.objects.create(**rowData)
getattr(subcompany_instance, 'admin_contacts').add(new_contact)
return JsonResponse({'message': 'New entry saved successfully.'}, status=200)
else:
return JsonResponse({'message': f'No SubcompanyDetails instance found for department: {department}'}, status=404)
else:
return JsonResponse({'message': 'Invalid request method.'}, status=400)
10 months ago
def add_contact(request):
2 weeks ago
print("00came")
if request.method == 'POST':
# Extract data from the form
Company = request.POST.get('Company', '')
Sub_company = request.POST.get('Sub_Company') or Company
LastName = request.POST.get('LastName', '')
FirstName = request.POST.get('FirstName', '')
Department = request.POST.get('Department', '')
Designation = request.POST.get('Designation', '')
Phone_number = request.POST.get('Phone_number', '')
Email = request.POST.get('Email', '')
contact_id = generate_client_id(Company)
print(contact_id)
if not Company or not FirstName or not Department or not Designation or not Phone_number or not Email:
return JsonResponse({'status': 'error', 'message': 'Error while saving Sub_client.Please fill required fields'},
status=400)
# Save data into the database
add_contact = AddContact(
Company=Company,
Sub_company=Sub_company,
FirstName=FirstName,
LastName=LastName,
Department=Department,
Designation=Designation,
Phone_number=Phone_number,
Email=Email,
Contact_id=contact_id
)
add_contact.save()
admin_id = request.GET.get('admin_id', None)
print(admin_id)
return JsonResponse({'status': 'success', 'message': 'Contact saved successfully.'})
else:
return JsonResponse({'status': 'error', 'message': 'Invalid request method'}, status=400)
def validate_field(request):
if request.method == 'GET':
email = request.GET.get('Email')
phone_number = request.GET.get('Phone_number')
response = {
'exists': False
}
if email and AddContact.objects.filter(Email=email).exists():
response['exists'] = True
elif phone_number and AddContact.objects.filter(Phone_number=phone_number).exists():
response['exists'] = True
return JsonResponse(response)
def validate_cell_field(request):
if request.method == 'GET':
email = request.GET.get('Email')
phone_number = request.GET.get('Phone_number')
contact_id = request.GET.get('Contact_id')
print('contact_id:',contact_id)
response = {
'email_exists': False,
'phone_exists': False
}
if email:
existing_email_contact = AddContact.objects.filter(Email=email).first()
if existing_email_contact and existing_email_contact.Contact_id != contact_id:
response['email_exists'] = True
# Check for existing phone number but ignore if it's the same contact
if phone_number:
existing_phone_contact = AddContact.objects.filter(Phone_number=phone_number).first()
if existing_phone_contact and existing_phone_contact.Contact_id != contact_id:
response['phone_exists'] = True
return JsonResponse(response)
# def save_job_posting(request):
# if request.method == 'POST':
# # Extract data from the form
# Client = request.POST.get('Client', '')
# JobID = request.POST.get('JobID', '')
# Location = request.POST.get('Location', '')
# SPOC = request.POST.get('SPOC', '')
# SPOC2 = request.POST.get('SPOC2', '')
# StartDate = request.POST.get('StartDate', '')
# CloseDate = request.POST.get('CloseDate', '')
# BudgetMin = request.POST.get('BudgetMin', '')
# BudgetMax = request.POST.get('BudgetMax', '')
# Header = request.POST.get('Header', '')
# JobDescription = request.POST.get('JobDescription', '')
# Experience_in_Yrs = request.POST.get('Experience_in_Yrs', '')
# NoOfPosting = request.POST.get('NoOfPosting', '')
# Type = request.POST.get('Type', '')
# SpecialInstructions = request.POST.get('SpecialInstructions', '')
# JD = request.POST.get('JD', '' )
#
# jobposting = JobPosting(
# Client=Client,
# JobID=JobID,
# Location=Location,
# SPOC=SPOC,
# SPOC2=SPOC2,
# StartDate=StartDate,
# CloseDate=CloseDate,
# BudgetMin=BudgetMin,
# BudgetMax=BudgetMax,
# Header=Header,
# JobDescription=JobDescription,
# Experience_in_Yrs=Experience_in_Yrs,
# NoOfPosting=NoOfPosting,
# Type=Type,
# SpecialInstructions=SpecialInstructions,
# JD=JD,
# )
# jobposting.save()
# print(jobposting)
#
# admin_id = request.GET.get('admin_id', None)
# print(admin_id)
#
# return JsonResponse({'status': 'success', 'message': 'Job_posting saved successfully.'})
#
# else:
# return JsonResponse({'status': 'error', 'message': 'Invalid request method'}, status=400)
def get_team_details(request):
if request.method == 'GET':
client = request.GET.get('client')
sub_client = request.GET.get('subClient')
if not sub_client:
contacts = AddContact.objects.filter(Company=client, Sub_company='')
elif sub_client == 'All Sub Clients':
contacts = AddContact.objects.filter(Company=client)
else:
contacts = AddContact.objects.filter(Company=client, Sub_company=sub_client)
filtered_data = {
'contacts': list(contacts.values()),
}
# Return serialized data as JSON response
return JsonResponse(filtered_data, safe=False)
# return JsonResponse({"success": True, "message": "Contact added successfully."})
else:
return JsonResponse({'error': 'Invalid request method'}, status=400)
def get_department(request):
if request.method == 'GET':
department = request.GET.get('Department')
client = request.GET.get('client')
sub_client = request.GET.get('subClient')
if not sub_client:
departments = AddContact.objects.filter(Department=department, Company=client, Sub_company='').distinct()
elif sub_client == 'All Sub Clients':
departments = AddContact.objects.filter(Department=department, Company=client).distinct()
else:
departments = AddContact.objects.filter(Department=department, Company=client,
Sub_company=sub_client).distinct()
# Convert queryset to list
department_list = list(departments.values())
return JsonResponse(department_list, safe=False)
# return JsonResponse({"success": True, "message": "Contact added successfully."})
else:
return JsonResponse({'error': 'Invalid request method'}, status=400)
def get_SearchData(request):
if request.method == 'GET':
client = request.GET.get('client')
sub_client = request.GET.get('subClient')
searchKeyword = request.GET.get('searchKeyword')
query1 = Q()
query2 = Q()
query3 = Q()
if client:
query1 &= Q(Company__icontains=client)
query2 &= Q(parent_company__icontains=client)
query3 &= Q(parent_company__icontains=client)
if sub_client and sub_client != 'All Sub Clients':
query1 &= Q(Sub_company__icontains=sub_client)
query2 &= Q(parent_company__icontains=sub_client)
query3 &= Q(sub_company__icontains=sub_client)
if searchKeyword:
keywords = searchKeyword.split()
search_query1 = Q()
search_query1 |= (
Q(Sub_company__icontains=searchKeyword) |
Q(Company__icontains=searchKeyword) |
Q(FirstName__icontains=searchKeyword) |
Q(LastName__icontains=searchKeyword) |
Q(Designation__icontains=searchKeyword) |
Q(Department__icontains=searchKeyword) |
Q(Phone_number__icontains=searchKeyword) |
Q(Email__icontains=searchKeyword)
)
# Handle case for multiple words in keyword (e.g., "account department")
for word in keywords:
search_query1 |= (
Q(Sub_company__icontains=word) |
Q(Company__icontains=word) |
Q(FirstName__icontains=word) |
Q(LastName__icontains=word) |
Q(Designation__icontains=word) |
Q(Department__icontains=word) |
Q(Phone_number__icontains=word) |
Q(Email__icontains=word)
)
# Handle concatenated names (e.g., "JohnDoe")
if len(keywords) == 1: # Check for single-word input
for i in range(1, len(searchKeyword)):
possible_first_name = searchKeyword[:i]
possible_last_name = searchKeyword[i:]
search_query1 |= (
Q(FirstName__icontains=possible_first_name) &
Q(LastName__icontains=possible_last_name)
)
elif len(keywords) == 2: # If two parts exist, treat as FirstName and LastName
first_name, last_name = keywords
search_query1 |= (
Q(FirstName__icontains=first_name) & Q(LastName__icontains=last_name)
)
query1 &= search_query1
search_query2 = (
Q(parent_company__icontains=searchKeyword) | Q(GST_No__icontains=searchKeyword) |
Q(location_Id__icontains=searchKeyword))
query2 &= search_query2
search_query3 = (
Q(sub_company__icontains=searchKeyword) | Q(parent_company__icontains=searchKeyword) |
Q(GST_No__icontains=searchKeyword) | Q(location_id__icontains=searchKeyword))
query3 &= search_query3
contacts = AddContact.objects.filter(query1).values()
client_details = ClientDetails.objects.filter(query2).values()
sub_company_details = SubcompanyDetails.objects.filter(query3).values()
filtered_data = {
'contacts': list(contacts),
'client_details': list(client_details),
'sub_company_details': list(sub_company_details)
}
return JsonResponse(filtered_data, safe=False)
else:
return JsonResponse({'error': 'Invalid request method'}, status=400)
def edit_CompanyDetails(request):
if request.method == 'POST':
try:
data = json.loads(request.body)
id = data.get('client_id') or data.get('sub_client_id')
print(id)
if not id:
return JsonResponse({'error': 'ID parameter missing'}, status=400)
if 'client_id' in data:
client = ClientDetails.objects.filter(client_id=id).first()
if client:
client.parent_company = data.get('parent_company', client.parent_company)
client.GST_No = data.get('GST_No', client.GST_No)
client.location_Id = data.get('location_Id', client.location_Id)
client.address_1 = data.get('address_1', client.address_1)
client.address_2 = data.get('address_2', client.address_2)
client.City = data.get('City', client.City)
client.state = data.get('state', client.state)
client.Pincode = data.get('Pincode', client.Pincode)
client.country = data.get('country', client.country)
client.save()
print(client)
return JsonResponse({'message': 'Client details updated successfully.'}, status=200)
if 'sub_client_id' in data:
sub_client = SubcompanyDetails.objects.filter(sub_client_id=id).first()
if sub_client:
sub_client.parent_company = data.get('parent_company', sub_client.parent_company)
sub_client.sub_company = data.get('sub_company', sub_client.sub_company)
sub_client.GST_No = data.get('GST_No', sub_client.GST_No)
sub_client.location_id = data.get('location_id', sub_client.location_id)
sub_client.address_1 = data.get('address_1', sub_client.address_1)
sub_client.address_2 = data.get('address_2', sub_client.address_2)
sub_client.City = data.get('City', sub_client.City)
sub_client.State = data.get('State', sub_client.State)
sub_client.Pincode = data.get('Pincode', sub_client.Pincode)
sub_client.country = data.get('country', sub_client.country)
sub_client.save()
print(sub_client)
return JsonResponse({'message': 'Sub-client details updated successfully.'}, status=200)
return JsonResponse({'error': 'Company details not found.'}, status=404)
except json.JSONDecodeError:
return JsonResponse({'error': 'Invalid JSON'}, status=400)
except Exception as e:
return JsonResponse({'error': str(e)}, status=500)
return JsonResponse({'error': 'Invalid request method'}, status=405)
def delete_CompanyDetails(request):
if request.method != 'DELETE':
return JsonResponse({'error': 'Invalid HTTP method. Only DELETE is allowed.'}, status=405)
try:
data = json.loads(request.body)
client_id = data.get('client_id')
sub_client_id = data.get('sub_client_id')
parent_company = data.get('parent_company')
if sub_client_id:
# Delete only the specific subclient
sub_clients_deleted, _ = SubcompanyDetails.objects.filter(sub_client_id=sub_client_id).delete()
response = {
'message': 'Subclient deleted successfully.',
'sub_clients_deleted': sub_clients_deleted
}
return JsonResponse(response, status=200)
if client_id and parent_company:
# Delete related sub-clients and contacts
sub_clients_deleted, _ = SubcompanyDetails.objects.filter(parent_company=parent_company).delete()
contacts_deleted, _ = AddContact.objects.filter(Company=parent_company).delete()
# Delete the main client
client = ClientDetails.objects.get(client_id=client_id, parent_company=parent_company)
client.delete()
response = {
'message': 'Client and related data deleted successfully.',
'client_deleted': 1,
'sub_clients_deleted': sub_clients_deleted,
'contacts_deleted': contacts_deleted
}
return JsonResponse(response, status=200)
return JsonResponse({'error': 'Insufficient data provided to delete any record.'}, status=400)
except ClientDetails.DoesNotExist:
return JsonResponse({'error': 'Client with the given ID and Parent Company does not exist'}, status=404)
except Exception as e:
return JsonResponse({'error': f'An error occurred: {str(e)}'}, status=500)
@csrf_exempt
def edit_teamDetails(request):
if request.method == 'POST':
data = json.loads(request.body)
id = data.get('Contact_id', None)
print(id)
if id:
try:
contact = AddContact.objects.get(Contact_id=id)
print(contact)
contact.Company = data.get('Company', contact.Company)
contact.Sub_company = data.get('Sub_company', contact.Sub_company)
contact.FirstName = data.get('FirstName', contact.FirstName)
contact.LastName = data.get('LastName', contact.LastName)
contact.Department = data.get('Department', contact.Department)
contact.Designation = data.get('Designation', contact.Designation)
contact.Phone_number = data.get('Phone_number', contact.Phone_number)
contact.Email = data.get('Email', contact.Email)
contact.save()
print(contact)
return JsonResponse({'message': 'Contact updated successfully.'}, status=200)
except AddContact.DoesNotExist:
return JsonResponse({'error': 'Contact not found.'}, status=404)
except Exception as e:
return JsonResponse({'error': str(e)}, status=500)
else:
return JsonResponse({'error': 'Email not provided.'}, status=400)
else:
return JsonResponse({'error': 'Invalid request method.'}, status=405)
def delete_teamDetails(request):
try:
# Get the contact_id from the query parameters instead of the request body
contact_id = request.GET.get('Contact_id')
print('contact_id:', contact_id)
if contact_id is None:
return JsonResponse({'error': 'Contact ID not provided'}, status=400)
# Try to get the contact and delete it
contact = AddContact.objects.get(Contact_id=contact_id)
contact.delete()
return JsonResponse({'success': f'Contact with id {contact_id} deleted successfully'})
except AddContact.DoesNotExist:
return JsonResponse({'error': 'Contact does not exist'}, status=404)
except Exception as e:
# Log the error and return a 500 status
print(f'Error deleting contact: {e}')
return JsonResponse({'error': str(e)}, status=500)
def edit_internalTeam(request):
if request.method == 'POST':
data = json.loads(request.body)
email = data.get('Email1', None)
print(email)
if email:
try:
employee = InternalTeam.objects.get(Email1=email)
employee.FirstName = data.get('FirstName', employee.FirstName)
employee.LastName = data.get('LastName', employee.LastName)
employee.Designation = data.get('Designation', employee.Designation)
employee.Department = data.get('Department', employee.Department)
employee.PhoneNo1 = data.get('PhoneNo1', employee.PhoneNo1)
employee.LandNumber = data.get('LandNumber', employee.LandNumber)
employee.Email2 = data.get('Email2', employee.Email2)
employee.Level = data.get('Level', employee.Level)
employee.save()
print(employee)
return JsonResponse({'message': 'Internal Team updated successfully.'}, status=200)
except AddContact.DoesNotExist:
return JsonResponse({'error': 'Contact not found.'}, status=404)
except Exception as e:
return JsonResponse({'error': str(e)}, status=500)
else:
return JsonResponse({'error': 'Email not provided.'}, status=400)
else:
return JsonResponse({'error': 'Invalid request method.'}, status=405)
def delete_internalTeam(request):
try:
email = request.GET.get('Email1')
print(email)
employee = InternalTeam.objects.get(Email1=email)
print(employee)
employee.delete()
return JsonResponse({'success':f'Data with Email {email} deleted successfully'})
except InternalTeam.DoesNotExist:
return JsonResponse({'error': 'Employee does not exist'}, status=404)
except Exception as e:
# Log the error and return a 500 status
print(f'Error deleting Internal Team Details: {e}')
return JsonResponse({'error': str(e)}, status=500)
def print_internalTeam(request):
email = request.GET.get('Email1')
print(email)
if email:
try:
employee = InternalTeam.objects.get(Email1=email)
data = {
'FirstName': employee.FirstName,
'LastName': employee.LastName,
'Designation': employee.Designation,
'Department': employee.Department,
'PhoneNo1': employee.PhoneNo1,
'LandNumber': employee.LandNumber,
'Email1': employee.Email1,
'Email2': employee.Email2,
'Level': employee.Level
}
print(employee)
return JsonResponse(data, status=200)
except AddContact.DoesNotExist:
return JsonResponse({'error': 'Contact not found.'}, status=404)
except Exception as e:
return JsonResponse({'error': str(e)}, status=500)
else:
return JsonResponse({'error': 'Email not provided.'}, status=400)
def validate_existingEmployee(request):
if request.method == 'GET':
email1 = request.GET.get('Email1')
email2 = request.GET.get('Email2')
phone_number1 = request.GET.get('PhoneNo1')
phone_number2 = request.GET.get('PhoneNo2')
response = {
'email_exists': False,
'phone_exists': False,
}
if email2:
existing_phone_contact1 = InternalTeam.objects.filter(Email1=email2).first()
existing_phone_contact2 = InternalTeam.objects.filter(Email2=email2).first()
if (existing_phone_contact1 and existing_phone_contact1.Email1 != email1) or \
(existing_phone_contact2 and existing_phone_contact2.Email1 != email1):
response['email_exists'] = True
# Check for existing phone number but ignore if it's the same contact
if phone_number1:
existing_phone_contact1 = InternalTeam.objects.filter(PhoneNo1=phone_number1).first()
existing_phone_contact2 = InternalTeam.objects.filter(LandNumber=phone_number1).first()
if (existing_phone_contact1 and existing_phone_contact1.Email1 != email1) or \
(existing_phone_contact2 and existing_phone_contact2.Email1 != email1):
response['phone_exists'] = True
if phone_number2:
existing_phone_contact1 = InternalTeam.objects.filter(PhoneNo1=phone_number2).first()
existing_phone_contact2 = InternalTeam.objects.filter(LandNumber=phone_number2).first()
if (existing_phone_contact1 and existing_phone_contact1.Email1 != email1) or \
(existing_phone_contact2 and existing_phone_contact2.Email1 != email1):
response['phone_exists'] = True
return JsonResponse(response)
def Internal_team_details(request):
admin_id = request.GET.get('admin_id', None)
print(admin_id)
return render(request, 'skyonnadmin/Internal_team_details.html',{'admin_id': admin_id})
def save_Internal_team_Details(request):
if request.method == 'POST':
FirstName = request.POST.get('FirstName').strip()
LastName = request.POST.get('LastName')
Designation = request.POST.get('Designation')
Department = request.POST.get('Department')
Address_1 = request.POST.get('Address_1')
Address_2 = request.POST.get('Address_2')
City = request.POST.get('City')
State = request.POST.get('State')
Country = request.POST.get('Country')
Pincode = request.POST.get('Pincode')
PhoneNo1 = request.POST.get('PhoneNo1')
LandNumber = request.POST.get('LandNumber')
Email1 = request.POST.get('Email1')
Email2 = request.POST.get('Email2')
Level = request.POST.get('Level')
Login = Email1
Password = FirstName + '@123'
user_id = FirstName.upper()[:3] + PhoneNo1[:4]
internal_team = InternalTeam(
FirstName=FirstName,
LastName=LastName,
Designation=Designation,
Department=Department,
Address_1=Address_1,
Address_2=Address_2,
City=City,
State=State,
Pincode=Pincode,
Country=Country,
PhoneNo1=PhoneNo1,
LandNumber=LandNumber,
Email1=Email1,
Email2=Email2,
Level=Level,
Login=Login,
Password=Password,
user_id=user_id
)
internal_team.save()
# email_thread= threading.Thread(target=send_login_credentials, args=(FirstName, Login, Password, Email1))
# email_thread.start()
# Return JSON response
return JsonResponse({'status': 'success', 'message': 'Internal team details saved successfully.'})
else:
return HttpResponse('Invalid request method', status=405)
# def send_login_credentials(FirstName, Login, Password, Email1):
# subject = 'Your Login Credentials'
# message = f'Hi {FirstName}, \n\n Your Login Credentials are: \n Login_id : {Login} \n Password : {Password}'
# from_email = 'subramanyajithendra@gmail.com'
# recipient_list = [Email1]
# send_mail(subject, message, from_email, recipient_list)
def validate_internal_team(request):
if request.method == 'GET':
email1 = request.GET.get('Email1')
email2 = request.GET.get('Email2')
phone_number1 = request.GET.get('PhoneNo1')
phone_number2 = request.GET.get('LandNumber')
response = {
'exists': False
}
if email1 and (InternalTeam.objects.filter(Email1=email1).exists() or InternalTeam.objects.filter(Email2=email1).exists()):
response['exists'] = True
if email2 and (InternalTeam.objects.filter(Email1=email2).exists() or InternalTeam.objects.filter(Email2=email2).exists()):
response['exists'] = True
if phone_number1 and (InternalTeam.objects.filter(PhoneNo1=phone_number1).exists() or InternalTeam.objects.filter(LandNumber=phone_number1).exists()):
response['exists'] = True
elif phone_number2 and (InternalTeam.objects.filter(PhoneNo1=phone_number2).exists() or InternalTeam.objects.filter(LandNumber=phone_number2).exists()):
response['exists'] = True
return JsonResponse(response)
# def existing_employee(request):
# employees = InternalTeam.objects.all()
#
# employees_data = []
# for employee in employees:
# employees_data.append({
# 'FirstName': employee.FirstName,
# 'LastName': employee.LastName,
# 'Designation': employee.Designation,
# 'Department': employee.Department,
# 'Address_1': employee.Address_1,
# 'Address_2': employee.Address_2,
# 'City': employee.City,
# 'State': employee.State,
# 'Pincode': employee.Pincode,
# 'Country': employee.Country,
# 'PhoneNo1': employee.PhoneNo1,
# 'PhoneNo2': employee.PhoneNo2,
# 'Email1': employee.Email1,
# 'Email2': employee.Email2,
# 'Band': employee.Band
# })
#
# return JsonResponse({'employees': employees_data})
def get_row_count(request):
if request.method == 'POST' and request.FILES['excelFile']:
try:
excel_file = request.FILES['excelFile']
df = pd.read_excel(excel_file) # Requires pandas and openpyxl
row_count = len(df.index) # Count the rows in the DataFrame
return JsonResponse({'row_count': row_count})
except Exception as e:
return JsonResponse({'error': str(e)}, status=400)
return JsonResponse({'error': 'Invalid request'}, status=400)
def load_excel_data(request):
if request.method == 'POST' and request.FILES.get('excelFile'):
excel_file = request.FILES['excelFile']
data = pd.read_excel(excel_file)
required_columns = ['FirstName', 'LastName', 'Designation', 'Department', 'Address_1', 'City',
'State', 'Pincode', 'Country', 'PhoneNo1','LandNumber', 'Email1', 'Level']
data[['PhoneNo1', 'LandNumber']] = data[['PhoneNo1', 'LandNumber']].fillna('')
empty_fields = {}
for column in required_columns:
if column not in ['PhoneNo1','LandNumber'] and data[column].isnull().any():
empty_fields[column] = data[data[column].isnull()].index.tolist()
missing_contact = data[(data['PhoneNo1'] == '') & (data['LandNumber'] == '')].index.tolist()
if missing_contact:
empty_fields['Contact'] = missing_contact
if empty_fields:
return JsonResponse({'error': True,
'message': 'Some fields are empty in the provided Excel sheet.','empty_fields': empty_fields}, status=400)
valid_data = data[(data['PhoneNo1'] != '') | (data['LandNumber'] != '')]
print(valid_data)
return JsonResponse({'error': False,'data': valid_data.to_dict(orient='records')}, safe=False)
return JsonResponse({'error': True,'message': "No file uploaded"}, status=400)
def process_row(request):
if request.method == 'POST':
try:
row_data = json.load(request.body)
print(row_data)
FirstName = row_data.get('FirstName')
LastName = row_data.get('LastName')
Designation = row_data.get('Designation')
Department = row_data.get('Department')
Address_1 = row_data.get('Address_1')
Address_2 = row_data.get('Address_2')
City = row_data.get('City')
State = row_data.get('State')
Pincode = row_data.get('Pincode')
PhoneNo1 = row_data.get('PhoneNo1')
LandNumber = row_data.get('LandNumber')
Email1 = row_data.get('Email1')
Email2 = row_data.get('Email2')
Level = row_data.get('Level')
return JsonResponse({"message": "Row processed successfully", "data": row_data}, status=200)
except Exception as e:
return JsonResponse({"error": f"Failed to process row: {str(e)}"}, status=400)
return JsonResponse({"error": "Invalid request method"}, status=400)
def existing_employee(request):
employees = InternalTeam.objects.all()
employees_data = []
for employee in employees:
employees_data.append({
'FirstName': employee.FirstName,
'LastName': employee.LastName,
'Designation': employee.Designation,
'Department': employee.Department,
'PhoneNo1': employee.PhoneNo1,
'LandNumber': employee.LandNumber,
'Email1': employee.Email1,
'Email2': employee.Email2,
'Level': employee.Level
})
return JsonResponse({'employees': employees_data})
def get_employee(request):
if request.method == 'GET':
firstName = request.GET.get('firstName')
lastName = request.GET.get('lastName')
email = request.GET.get('Email1')
print('email:',email)
try:
emp_obj = InternalTeam.objects.filter((Q(FirstName=firstName) | Q(LastName=lastName)) & Q(Email1=email)).first()
emp_data = {
'FirstName': emp_obj.FirstName,
'LastName': emp_obj.LastName,
'Designation': emp_obj.Designation,
'Department': emp_obj.Department,
'Address_1': emp_obj.Address_1,
'Address_2': emp_obj.Address_2,
'City': emp_obj.City,
'State': emp_obj.State,
'Pincode': emp_obj.Pincode,
'Country': emp_obj.Country,
'PhoneNo1': emp_obj.PhoneNo1,
'LandNumber': emp_obj.LandNumber,
'Email1': emp_obj.Email1,
'Email2': emp_obj.Email2,
'Level': emp_obj.Level,
}
return JsonResponse(emp_data)
except InternalTeam.DoesNotExist:
return JsonResponse({'error': 'Client not found'}, status=404)
else:
return JsonResponse({'error': 'Invalid request method'}, status=400)