def post(self, request, *args, **kwargs): if request.user.is_authenticated and is_professional(request.user): current_user_id = request.user.id pro_id = Professional.objects.get(user_id=current_user_id).id else: resp = profile_create_with_user_create(request._request) if resp.data["code"] == 500: return resp current_user_id = resp.data["result"]['user']['user_id'] user = User.objects.get(id=current_user_id) user.is_active = True user.save() pro_id = resp.data["result"]['user']['professional_id'] request.user.id = current_user_id req_data = request.data.copy() req_data['pro'] = pro_id populate_user_info_querydict(request, req_data, False, False) job_application_serializer = JobApplySerializer(data=req_data) if job_application_serializer.is_valid(): job_application_serializer.save() # TODO # save_recent_activity(request.user.id, 'apply', 'Job applied') job = Job.objects.select_related('company__user').get(job_id=request.data["job"]) applied_job_counter(job) save_recent_activity(request.user.id, 'apply_pro', ) if job.company.user_id: save_recent_activity(job.company.user_id, 'apply_com') return Response(job_application_serializer.data, status=status.HTTP_201_CREATED) else: return Response(job_application_serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def put(self, request, *args, **kwargs): req_data = {'status': 'POSTED'} populate_user_info_querydict(request, req_data, False, False) instance = self.get_object() serializer = self.get_serializer(instance, data=req_data, partial=True) serializer.is_valid(raise_exception=True) self.perform_update(serializer) return Response(HTTP_200_OK)
def put(self, request, *args, **kwargs): req_data = request.data.copy() populate_user_info_querydict(request, req_data, False, False) if 'title' not in req_data or not req_data['title']: raise serializers.ValidationError('Title is required.') if 'vacancy' not in req_data or not req_data['vacancy']: raise serializers.ValidationError('Vacancy is required.') if 'address' not in req_data or not req_data['address']: raise serializers.ValidationError('Address is required.') if 'job_site' not in req_data or not req_data['job_site']: raise serializers.ValidationError('Job site is required.') if 'job_nature' not in req_data or not req_data['job_nature']: raise serializers.ValidationError('Job nature is required.') if 'job_type' not in req_data or not req_data['job_type']: raise serializers.ValidationError('Job type is required.') if 'status' in req_data: if req_data['status'] != 'DRAFT' and req_data[ 'status'] != 'POSTED' and req_data['status'] != '': raise serializers.ValidationError('Invalid status.') if 'salary_min' in req_data and req_data[ 'salary_min'] and 'salary_max' in req_data and req_data[ 'salary_max']: if int(req_data['salary_min']) > int(req_data['salary_max']): raise serializers.ValidationError( 'Minimum salary cannot be greater than maximum salary') try: skills = req_data['skills'] del req_data['skills'] except KeyError: skills = None instance = self.get_object() job_skill_list = [] if skills: skill_list = skills.split(',') for skill in skill_list: try: skill_obj = Skill.objects.get(name=skill) except Skill.DoesNotExist: skill_obj = None if skill_obj: job_skill_list.append(skill_obj.id) req_data['job_skills'] = job_skill_list serializer = self.get_serializer(instance, data=req_data, partial=True) serializer.is_valid(raise_exception=True) self.perform_update(serializer) return Response(HTTP_200_OK)
def put(self, request, *args, **kwargs): if 'image' in request.data: img_base64 = request.data['image'] if img_base64: format, imgstr = img_base64.split(';base64,') ext = format.split('/')[-1] filename = str(uuid.uuid4()) + '-company.' + ext data = ContentFile(base64.b64decode(imgstr), name=filename) request.data['profile_picture'] = data req_data = request.data.copy() populate_user_info_querydict(request, req_data, False, False) instance = self.get_object() serializer = self.get_serializer(instance, data=req_data, partial=True) serializer.is_valid(raise_exception=True) self.perform_update(serializer) return Response(serializer.data)
def post(self, request, *args, **kwargs): if request.user.is_authenticated and is_professional(request.user): current_user_id = request.user.id else: current_user_id = None pro_obj = Professional.objects.get(user_id=current_user_id) resp = profile_completeness(request._request) user_profile_completeness = resp.data['percent_of_profile_completeness'] settings_minimum_profile_completeness = Settings.objects.values('minimum_profile_completeness')[0][ 'minimum_profile_completeness'] if user_profile_completeness < settings_minimum_profile_completeness: return Response({'details': 'Please complete your profile with necessary and authentic information.'},status=status.HTTP_400_BAD_REQUEST) if JobApplication.objects.filter(job=request.data['job'], pro=pro_obj): return Response({'details': 'Already applied for this job'}, status=status.HTTP_400_BAD_REQUEST) queryset = Professional.objects.filter(user_id=current_user_id).prefetch_related( Prefetch('educations', queryset=ProfessionalEducation.objects.filter(is_archived=False).order_by('-enrolled_date')), Prefetch('skills', queryset=ProfessionalSkill.objects.filter(is_archived=False).order_by('skill_name')), Prefetch('work_experiences', queryset=WorkExperience.objects.filter(is_archived=False).order_by('-start_date')), Prefetch('portfolios', queryset=Portfolio.objects.filter(is_archived=False).order_by('created_at')), Prefetch('memberships', queryset=Membership.objects.filter(is_archived=False).order_by('created_at')), Prefetch('certifications', queryset=Certification.objects.filter(is_archived=False).order_by('-issue_date')), Prefetch('references', queryset=Reference.objects.filter(is_archived=False).order_by('created_at')) ) html = self.template.render({'data': queryset, 'SITE_URL': SITE_URL}) options = { 'page-size': "A4", 'encoding': "UTF-8", "enable-local-file-access": None, "viewport-size": "1024x768", } resume = pdfkit.from_string(html, False, options=options) filename = 'resume-' + str(uuid.uuid4()) + '.pdf' req_data = request.data.copy() company = Job.objects.get(job_id=req_data['job']).company req_data['pro'] = pro_obj.id req_data['resume'] = ContentFile(resume, name=filename) populate_user_info_querydict(request, req_data, False, False) job_application_serializer = JobApplySerializer(data=req_data) if job_application_serializer.is_valid(): job_application_obj = job_application_serializer.save() # TODO # save_recent_activity(request.user.id, 'apply', 'Job applied') job = Job.objects.select_related('company__user').get(job_id=request.data["job"]) # applied_job_counter(job) ##Create notification # if (company.user): # notification = Notification() # notification.title = 'job notification' # notification.message = job_application_obj.id # notification.recipient = company.user.id # notification.is_read = False # populate_user_info(request, notification, False, False) # notification.save() save_recent_activity(request.user.id, 'apply_pro', ) if job.company.user_id: save_recent_activity(job.company.user_id, 'apply_com') return Response(job_application_serializer.data, status=status.HTTP_201_CREATED) else: return Response(job_application_serializer.errors, status=status.HTTP_400_BAD_REQUEST)