def hired_candidates(request, job_post_id): job_post = get_object_or_404(JobPost, id=job_post_id) agency_resumes = job_post.get_hired_applicants() no_of_jobs = len(agency_resumes) items_per_page = 10 no_pages = int(math.ceil(float(len(agency_resumes)) / items_per_page)) try: if int(request.GET.get('page')) > (no_pages + 2): return HttpResponseRedirect(reverse('jobs:index')) else: page = int(request.GET.get('page')) except: page = 1 agency_resumes = agency_resumes[ (page - 1) * items_per_page:page * items_per_page] prev_page, previous_page, aft_page, after_page = get_prev_after_pages_count( page, no_pages) skills = Skill.objects.filter(status='Active') recruiters = User.objects.filter(company=request.user.company) years = YEARS return render(request, 'recruiter/company/jobs_hired_resumes.html', {'agency_resumes': agency_resumes, 'recruiters': recruiters, 'years': years, 'skills': skills, 'aft_page': aft_page, 'after_page': after_page, 'prev_page': prev_page, 'previous_page': previous_page, 'current_page': page, 'last_page': no_pages, 'no_of_jobs': no_of_jobs, })
def client_list(request): clients = AgencyCompany.objects.filter(company=request.user.company) if request.method == 'POST': if request.POST['search_text']: clients = clients.filter(Q(name__icontains=request.POST['search_text']) | Q( website__icontains=request.POST['search_text'])) if request.POST['location']: branches = AgencyCompanyBranch.objects.filter( location_id=request.POST['location']) clients = clients.filter(branch_details__in=branches) if "page" in request.GET and int(request.GET.get('page')) > 0: page = int(request.GET.get('page')) else: page = 1 items_per_page = 10 cities = City.objects.filter(status='Enabled') no_pages = int(math.ceil(float(clients.count()) / items_per_page)) clients = clients[(page - 1) * items_per_page:page * items_per_page] prev_page, previous_page, aft_page, after_page = get_prev_after_pages_count( page, no_pages) return render(request, 'recruiter/company/client_list.html', {'clients': clients, 'aft_page': aft_page, 'after_page': after_page, 'prev_page': prev_page, 'previous_page': previous_page, 'current_page': page, 'last_page': no_pages, 'search_value': request.GET['search'] if 'search' in request.GET.keys() else '', 'cities': cities})
def jobs_list(request): if request.user.agency_admin: active_jobs_list = (JobPost.objects.filter( user__company=request.user.company).exclude( status__in=["Disabled", "Expired"]).prefetch_related( "location", "agency_recruiters").annotate( responses=Count("appliedjobs")).order_by("-id")) elif request.user.is_agency_recruiter: active_jobs_list = (JobPost.objects.filter( Q(agency_recruiters__in=[request.user]) | Q(user=request.user)).exclude( status__in=["Disabled", "Expired"]).prefetch_related( "location", "agency_recruiters").annotate(responses=Count( "appliedjobs")).order_by("-id").distinct()) else: active_jobs_list = (JobPost.objects.filter(user=request.user).exclude( status__in=["Disabled", "Expired"]).prefetch_related( "location", "agency_recruiters").annotate( responses=Count("appliedjobs")).order_by("-id")) items_per_page = 10 if request.POST.get("search_value"): if request.POST.get("search_value") == "all": pass else: active_jobs_list = active_jobs_list.filter( job_type__iexact=request.POST.get("search_value")) if "page" in request.POST and int(request.POST.get("page")) > 0: page = int(request.POST.get("page")) else: page = 1 no_pages = int(math.ceil(float(active_jobs_list.count()) / items_per_page)) active_jobs_list = active_jobs_list[(page - 1) * items_per_page:page * items_per_page] prev_page, previous_page, aft_page, after_page = get_prev_after_pages_count( page, no_pages) response_data = { "jobs_list": JobPostSerializer(active_jobs_list, many=True).data, "aft_page": aft_page, "after_page": after_page, "prev_page": prev_page, "previous_page": previous_page, "current_page": page, "last_page": no_pages, "search_value": request.POST["search_value"] if "search_value" in request.POST else "All", } return JsonResponse(response_data, status=status.HTTP_200_OK)
def sitemap(request, **kwargs): locations = ( City.objects.annotate(num_posts=Count("locations")) .filter(status="Enabled", parent_city=None) .order_by("-num_posts") ) skills = ( Skill.objects.annotate(num_posts=Count("jobpost")) .filter(status="Active") .exclude(name="Fresher") .order_by("-num_posts") ) full_jobposts = JobPost.objects.filter(status="Live", job_type="full-time") internships = JobPost.objects.filter(status="Live", job_type="internship") walk_ins = JobPost.objects.filter(status="Live", job_type="walk-in") government_jobs = JobPost.objects.filter(status="Live", job_type="government") states = State.objects.filter(status="Enabled").exclude(state__name__in=F("name")) jobposts = list(chain(full_jobposts, internships, walk_ins, government_jobs)) no_pages = int(math.ceil(float(len(jobposts)) / 100)) page = 1 if kwargs: page = int(kwargs["page_num"]) page = page if (page - 7) < no_pages else 1 prev_page, previous_page, aft_page, after_page = get_prev_after_pages_count( page, no_pages ) if page > 7: jobposts = jobposts[(page - 8) * 100 : (page - 7) * 100] else: jobposts = jobposts[(page - 1) * 100 : page * 100] template = "mobile/sitemap.html" if request.is_mobile else "sitemap.html" return render( request, template, { "jobposts": jobposts, "aft_page": aft_page, "after_page": after_page, "prev_page": prev_page, "previous_page": previous_page, "current_page": page, "last_page": no_pages, "states": states, "locations": locations, "educations": Qualification.objects.filter(status="Active"), "skills": skills, }, )
def inactive_jobs(request): inactive_jobs_list = JobPost.objects.filter( Q(user=request.user.id) & Q(status__in=["Disabled", "Expired"])).order_by("-id") inactive_jobs_list = inactive_jobs_list.filter(user=request.user) items_per_page = 10 if request.POST.get("search_value"): if request.POST.get("search_value") == "all": pass else: inactive_jobs_list = inactive_jobs_list.filter( job_type__iexact=request.POST.get("search_value")) if "page" in request.POST and int(request.POST.get("page")) > 0: page = int(request.POST.get("page")) else: page = 1 no_pages = int( math.ceil(float(inactive_jobs_list.count()) / items_per_page)) inactive_jobs_list = inactive_jobs_list[(page - 1) * items_per_page:page * items_per_page] prev_page, previous_page, aft_page, after_page = get_prev_after_pages_count( page, no_pages) return JsonResponse( { "jobs_list": JobPostSerializer(inactive_jobs_list, many=True).data, "aft_page": aft_page, "after_page": after_page, "prev_page": prev_page, "previous_page": previous_page, "current_page": page, "last_page": no_pages, "search_value": request.POST["search_value"] if "search_value" in request.POST.keys() else "All", }, )
def sitemap(request, **kwargs): locations = City.objects.annotate(num_posts=Count('locations')).filter( status='Enabled', parent_city=None).order_by('-num_posts') skills = Skill.objects.annotate(num_posts=Count('jobpost')).filter( status='Active').exclude(name='Fresher').order_by('-num_posts') full_jobposts = JobPost.objects.filter(status='Live', job_type='full-time') internships = JobPost.objects.filter(status='Live', job_type='internship') walk_ins = JobPost.objects.filter(status='Live', job_type='walk-in') government_jobs = JobPost.objects.filter(status='Live', job_type='government') states = State.objects.filter(status='Enabled').exclude( state__name__in=F('name')) jobposts = list( chain(full_jobposts, internships, walk_ins, government_jobs)) no_pages = int(math.ceil(float(len(jobposts)) / 100)) page = 1 if kwargs: page = int(kwargs['page_num']) page = page if (page - 7) < no_pages else 1 prev_page, previous_page, aft_page, after_page = get_prev_after_pages_count( page, no_pages) if page > 7: jobposts = jobposts[(page - 8) * 100:(page - 7) * 100] else: jobposts = jobposts[(page - 1) * 100:page * 100] template = 'mobile/sitemap.html' if request.is_mobile else 'sitemap.html' return render( request, template, { 'jobposts': jobposts, 'aft_page': aft_page, 'after_page': after_page, 'prev_page': prev_page, 'previous_page': previous_page, 'current_page': page, 'last_page': no_pages, 'states': states, 'locations': locations, 'educations': Qualification.objects.filter(status='Active'), 'skills': skills })
def dashboard(request): if request.user.is_agency_admin: job_posts = JobPost.objects.filter(user__company=request.user.company) else: job_posts = JobPost.objects.filter( agency_recruiters__in=[request.user]) if request.user.is_agency_admin: agency_resumes = AgencyResume.objects.filter( uploaded_by__company=request.user.company) else: agency_resumes = AgencyResume.objects.filter(uploaded_by=request.user) no_of_jobs = len(job_posts) items_per_page = 10 no_pages = int(math.ceil(float(len(job_posts)) / items_per_page)) try: if int(request.GET.get('page')) > (no_pages + 2): page = 1 return HttpResponseRedirect(reverse('jobs:index')) else: page = int(request.GET.get('page')) except: page = 1 job_posts = job_posts[(page - 1) * items_per_page:page * items_per_page] prev_page, previous_page, aft_page, after_page = get_prev_after_pages_count( page, no_pages) return render(request, 'recruiter/company/dashboard.html', {'agency_resumes': agency_resumes, 'aft_page': aft_page, 'after_page': after_page, 'prev_page': prev_page, 'previous_page': previous_page, 'current_page': page, 'last_page': no_pages, 'no_of_jobs': no_of_jobs, 'job_posts': job_posts })
def custom_search(data, request): form = job_searchForm(data) searched_locations = searched_skills = searched_edu = searched_industry = searched_states = '' if request.POST.get('refine_search') == 'True': jobs_list, searched_skills, searched_locations, searched_industry, searched_edu, searched_states = refined_search( request.POST) else: jobs_list = form.search() jobs_list = JobPost.objects.filter(pk__in=[r.pk for r in jobs_list]) searched_locations = City.objects.filter(name__in=data.get('location')) searched_skills = Skill.objects.filter(name__in=data.get('q')) jobs_list = jobs_list.filter(status="Live") job_type = data.get('job_type') or request.POST.get( 'job_type') or request.GET.get('job_type') if job_type: jobs_list = jobs_list.filter(job_type=job_type) if data.get('walk-in'): jobs_list = jobs_list.filter(job_type="walk-in") no_of_jobs = len(jobs_list) items_per_page = 20 no_pages = int(math.ceil(float(jobs_list.count()) / items_per_page)) page = request.POST.get('page') or data.get('page') if page and bool(re.search(r"[0-9]", page)) and int(page) > 0: if int(page) > (no_pages + 2): page = 1 else: page = int(data.get('page')) else: page = 1 jobs_list = jobs_list.select_related('company', 'user').prefetch_related( 'location', 'skills', 'industry').distinct() jobs_list = jobs_list[(page - 1) * items_per_page:page * items_per_page] prev_page, previous_page, aft_page, after_page = get_prev_after_pages_count( page, no_pages) if form.is_valid(): context = { 'results': form.search(), 'query': form.query(), 'searchform': form, 'aft_page': aft_page, 'after_page': after_page, 'prev_page': prev_page, 'previous_page': previous_page, 'current_page': page, 'last_page': no_pages, 'no_of_jobs': no_of_jobs, 'job_list': jobs_list, 'skill': form.cleaned_data['q'], 'location': form.cleaned_data['location'], 'searched_skills': searched_skills, 'searched_locations': searched_locations, 'searched_industry': searched_industry, 'searched_edu': searched_edu, 'searched_experience': request.POST.get('experience'), 'searched_job_type': request.POST.get('job_type'), 'searched_functional_area': request.POST.get('functional_area'), } return context return {'job_list': []}
def custom_walkins(request, skill_name, city_name, **kwargs): current_url = reverse('custom_walkins', kwargs={ 'skill_name': skill_name, 'city_name': city_name }) if kwargs.get('page_num') == '1' or request.GET.get('page') == '1': return redirect(current_url, permanent=True) if 'page' in request.GET: url = current_url + request.GET.get('page') + '/' return redirect(url, permanent=True) final_skill = get_valid_skills_list(skill_name) final_location = get_valid_locations_list(city_name) if not final_location or not final_skill: if request.POST: save_search_results.delay(request.META['REMOTE_ADDR'], request.POST, 0, request.user.id) location = final_location or [city_name] skills = final_skill or [skill_name] template = 'mobile/404.html' if request.is_mobile else '404.html' meta_title = meta_description = '' return render( request, template, { 'message': 'Unfortunately, we are unable to locate the jobs you are looking for', 'searched_job_type': 'walk-in', 'reason': "Only Valid Skills/Cities names are accepted in search", 'searched_skills': skills, 'searched_locations': location, 'meta_title': meta_title, 'meta_description': meta_description, 'data_empty': True, 'job_search': True }, status=404) if request.POST.get('refine_search') == 'True': job_list, searched_skills, searched_locations, searched_industry, searched_edu, searched_states = refined_search( request.POST) else: search_dict = QueryDict('', mutable=True) search_dict.setlist('refine_skill', final_skill) search_dict.setlist('refine_location', final_location) search_dict.update({'job_type': 'walk-in'}) if request.POST.get('experience'): search_dict.update( {'refine_experience_min': request.POST.get('experience')}) job_list, searched_skills, searched_locations, searched_industry, searched_edu, searched_states = refined_search( search_dict) if job_list: no_of_jobs = job_list.count() items_per_page = 20 no_pages = int(math.ceil(float(no_of_jobs) / items_per_page)) page = get_page_number(request, kwargs, no_pages) if not page: return HttpResponseRedirect(current_url) prev_page, previous_page, aft_page, after_page = get_prev_after_pages_count( page, no_pages) job_list = job_list[(page - 1) * items_per_page:page * items_per_page] meta_title, meta_description, h1_tag = get_meta_data( 'skill_location_walkin_jobs', { 'skills': searched_skills, 'final_skill': final_skill, 'page': page, 'locations': searched_locations, 'final_location': final_location }) data = { 'job_list': job_list, 'aft_page': aft_page, 'after_page': after_page, 'prev_page': prev_page, 'previous_page': previous_page, 'current_page': page, 'last_page': no_pages, 'no_of_jobs': no_of_jobs, "is_job_list": False, 'current_url': current_url, 'searched_skills': searched_skills, 'searched_states': searched_states, 'searched_locations': searched_locations, 'searched_industry': searched_industry, 'searched_edu': searched_edu, 'searched_experience': request.POST.get('experience'), 'searched_job_type': 'walk-in', 'meta_title': meta_title, 'meta_description': meta_description, 'h1_tag': h1_tag, 'walkin': True } template = 'jobs/jobs_list.html' if request.is_mobile: data.update({ 'searched_industry': request.POST.get('industry'), 'searched_functional_area': request.POST.get('functional_area') }) template = 'mobile/jobs/list.html' return render(request, template, data) else: template = 'mobile/404.html' if request.is_mobile else '404.html' meta_title, meta_description = get_404_meta('skill_location_404', { 'skill': final_skill, 'city': final_location }) return render( request, template, { 'message': 'Unfortunately, we are unable to locate the jobs you are looking for', 'reason': "Only Valid Skills/Cities names are accepted in search", 'job_search': True, 'searched_skills': searched_skills, 'searched_locations': searched_locations, 'meta_title': meta_title, 'meta_description': meta_description })
def custom_search(data, request): form = job_searchForm(data) searched_locations = ( searched_skills ) = searched_edu = searched_industry = searched_states = "" if request.POST.get("refine_search") == "True": ( jobs_list, searched_skills, searched_locations, searched_industry, searched_edu, searched_states, ) = refined_search(request.POST) else: jobs_list = form.search() jobs_list = JobPost.objects.filter(pk__in=[r.pk for r in jobs_list]) searched_locations = City.objects.filter(name__in=data.get("location")) searched_skills = Skill.objects.filter(name__in=data.get("q")) jobs_list = jobs_list.filter(status="Live") job_type = (data.get("job_type") or request.POST.get("job_type") or request.GET.get("job_type")) if job_type: jobs_list = jobs_list.filter(job_type=job_type) if data.get("walk-in"): jobs_list = jobs_list.filter(job_type="walk-in") no_of_jobs = len(jobs_list) items_per_page = 20 no_pages = int(math.ceil(float(jobs_list.count()) / items_per_page)) page = request.POST.get("page") or data.get("page") if page and bool(re.search(r"[0-9]", page)) and int(page) > 0: if int(page) > (no_pages + 2): page = 1 else: page = int(data.get("page")) else: page = 1 jobs_list = (jobs_list.select_related("company", "user").prefetch_related( "location", "skills", "industry").distinct()) jobs_list = jobs_list[(page - 1) * items_per_page:page * items_per_page] prev_page, previous_page, aft_page, after_page = get_prev_after_pages_count( page, no_pages) if form.is_valid(): context = { "results": form.search(), "query": form.query(), "searchform": form, "aft_page": aft_page, "after_page": after_page, "prev_page": prev_page, "previous_page": previous_page, "current_page": page, "last_page": no_pages, "no_of_jobs": no_of_jobs, "job_list": jobs_list, "skill": form.cleaned_data["q"], "location": form.cleaned_data["location"], "searched_skills": searched_skills, "searched_locations": searched_locations, "searched_industry": searched_industry, "searched_edu": searched_edu, "searched_experience": request.POST.get("experience"), "searched_job_type": request.POST.get("job_type"), "searched_functional_area": request.POST.get("functional_area"), } return context return {"job_list": []}
def custom_walkins(request, skill_name, city_name, **kwargs): current_url = reverse("custom_walkins", kwargs={ "skill_name": skill_name, "city_name": city_name }) if kwargs.get("page_num") == "1" or request.GET.get("page") == "1": return redirect(current_url, permanent=True) if "page" in request.GET: url = current_url + request.GET.get("page") + "/" return redirect(url, permanent=True) final_skill = get_valid_skills_list(skill_name) final_location = get_valid_locations_list(city_name) if not final_location or not final_skill: if request.POST: save_search_results.delay(request.META["REMOTE_ADDR"], request.POST, 0, request.user.id) location = final_location or [city_name] skills = final_skill or [skill_name] template = "mobile/404.html" if request.is_mobile else "404.html" meta_title = meta_description = "" return render( request, template, { "message": "Unfortunately, we are unable to locate the jobs you are looking for", "searched_job_type": "walk-in", "reason": "Only Valid Skills/Cities names are accepted in search", "searched_skills": skills, "searched_locations": location, "meta_title": meta_title, "meta_description": meta_description, "data_empty": True, "job_search": True, }, status=404, ) if request.POST.get("refine_search") == "True": ( job_list, searched_skills, searched_locations, searched_industry, searched_edu, searched_states, ) = refined_search(request.POST) else: search_dict = QueryDict("", mutable=True) search_dict.setlist("refine_skill", final_skill) search_dict.setlist("refine_location", final_location) search_dict.update({"job_type": "walk-in"}) if request.POST.get("experience"): search_dict.update( {"refine_experience_min": request.POST.get("experience")}) ( job_list, searched_skills, searched_locations, searched_industry, searched_edu, searched_states, ) = refined_search(search_dict) if job_list: no_of_jobs = job_list.count() items_per_page = 20 no_pages = int(math.ceil(float(no_of_jobs) / items_per_page)) page = get_page_number(request, kwargs, no_pages) if not page: return HttpResponseRedirect(current_url) prev_page, previous_page, aft_page, after_page = get_prev_after_pages_count( page, no_pages) job_list = job_list[(page - 1) * items_per_page:page * items_per_page] meta_title, meta_description, h1_tag = get_meta_data( "skill_location_walkin_jobs", { "skills": searched_skills, "final_skill": final_skill, "page": page, "locations": searched_locations, "final_location": final_location, }, ) data = { "job_list": job_list, "aft_page": aft_page, "after_page": after_page, "prev_page": prev_page, "previous_page": previous_page, "current_page": page, "last_page": no_pages, "no_of_jobs": no_of_jobs, "is_job_list": False, "current_url": current_url, "searched_skills": searched_skills, "searched_states": searched_states, "searched_locations": searched_locations, "searched_industry": searched_industry, "searched_edu": searched_edu, "searched_experience": request.POST.get("experience"), "searched_job_type": "walk-in", "meta_title": meta_title, "meta_description": meta_description, "h1_tag": h1_tag, "walkin": True, } template = "jobs/jobs_list.html" if request.is_mobile: data.update({ "searched_industry": request.POST.get("industry"), "searched_functional_area": request.POST.get("functional_area"), }) template = "mobile/jobs/list.html" return render(request, template, data) else: template = "mobile/404.html" if request.is_mobile else "404.html" meta_title, meta_description = get_404_meta("skill_location_404", { "skill": final_skill, "city": final_location }) return render( request, template, { "message": "Unfortunately, we are unable to locate the jobs you are looking for", "reason": "Only Valid Skills/Cities names are accepted in search", "job_search": True, "searched_skills": searched_skills, "searched_locations": searched_locations, "meta_title": meta_title, "meta_description": meta_description, }, )
def view_resumes(request, job_post_id): job_post = get_object_or_404(JobPost, id=job_post_id) selected_skills = [] agency_resumes = AppliedJobs.objects.filter(job_post=job_post) if request.POST.get('recruiters'): agency_resumes = agency_resumes.filter( applicant__uploaded_by_id=request.POST.get('recruiters')) if request.POST.get('experience'): agency_resumes = agency_resumes.filter( applicant__experience=request.POST.get('experience')) if request.POST.getlist('skills'): skills = Skill.objects.filter(id__in=request.POST.getlist('skills')) agency_resumes = agency_resumes.filter(applicant__skill__in=skills) selected_skills = request.POST.getlist('skills') if request.POST.get('apply_job'): if request.POST.get('jobposts_type'): for each in request.POST.getlist('apply_job'): agency_applicant = AgencyApplicants.objects.get( id=each, job_post=job_post) agency_applicant.status = request.POST.get('jobposts_type') agency_applicant.save() agency_applicant.applicant.status = 'Pending' agency_applicant.applicant.save() if str(request.POST.get('jobposts_type')) == 'Hired': applicants = AgencyApplicants.objects.filter( id__in=request.POST.getlist('apply_job')).values_list('applicant', flat=True) applicant_agency_resumes = AgencyResume.objects.filter( id__in=applicants) applicant_agency_resumes.update( status=request.POST.get('jobposts_type')) no_of_jobs = len(agency_resumes) items_per_page = 10 no_pages = int(math.ceil(float(len(agency_resumes)) / items_per_page)) try: if int(request.GET.get('page')) > (no_pages + 2): page = 1 return HttpResponseRedirect(reverse('jobs:index')) else: page = int(request.GET.get('page')) except: page = 1 agency_resumes = agency_resumes[ (page - 1) * items_per_page:page * items_per_page] prev_page, previous_page, aft_page, after_page = get_prev_after_pages_count( page, no_pages) skills = Skill.objects.filter(status='Active') recruiters = User.objects.filter(company=request.user.company) return render(request, "recruiter/company/job_resume_view.html", {'job_post': job_post, 'agency_resumes': agency_resumes, 'recruiters': recruiters, 'years': YEARS, 'skills': skills, 'aft_page': aft_page, 'after_page': after_page, 'prev_page': prev_page, 'previous_page': previous_page, 'current_page': page, 'last_page': no_pages, 'no_of_jobs': no_of_jobs, 'status': POST, 'selected_skills': selected_skills })