示例#1
0
    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)
示例#2
0
 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)
示例#3
0
    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)
示例#4
0
    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)
示例#5
0
    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)