Exemplo n.º 1
0
    def put(self, contact_id):
        contact = Contact.query.get(contact_id)
        if not contact:
            return {'message': 'Contact does not exist'}, 404
        if not is_authorized_write(contact.id):
            return unauthorized()
        json_data = request.get_json(force=True)
        try:
            data = contact_schema.load(json_data, partial=True)
        except ValidationError as e:
            return e.messages, 422
        if not data:
            return {'message': 'No input data provided'}, 400
        email = data.pop('email_primary', None)
        email_list = data.pop('emails', None)
        skills = data.pop('skills', None)

        contact.update(**data)

        if email:
            del contact.emails[:]
            contact.email_primary = Email(**email)

        if skills:
            sync_skills(skills, contact)

        db.session.commit()
        result = contact_schema.dump(contact)
        return {"status": 'success', 'data': result}, 200
Exemplo n.º 2
0
    def put(self, contact_id, opportunity_id):
        if not is_authorized_write(contact_id):
            return unauthorized()

        json_data = request.get_json(force=True)
        try:
            data = opportunity_app_schema.load(json_data, partial=True)
        except ValidationError as e:
            return e.messages, 422
        if not data:
            return {'message': 'No data provided to update'}, 400

        opportunity_app = (OpportunityApp.query
            .filter_by(contact_id=contact_id, opportunity_id=opportunity_id)
            .first())

        if not opportunity_app:
            return {'message': 'Application does not exist'}, 404

        if data.get('resume') is not None:
            if opportunity_app.resume is None:
                opportunity_app.resume = ResumeSnapshot(
                    **data['resume']
                )
            else:
                opportunity_app.resume.resume = data['resume']['resume']
            del data['resume']

        opportunity_app.update(**data)

        db.session.commit()
        result = opportunity_app_schema.dump(opportunity_app)
        return {'status': 'success', 'data': result}, 200
Exemplo n.º 3
0
    def post(self, contact_id, capability_id):
        if not is_authorized_write(contact_id):
            return unauthorized()

        json_data = request.get_json(force=True)
        try:
            data = skill_schema.load(json_data)
        except ValidationError as e:
            return e.messages, 422

        contact = Contact.query.get(contact_id)
        if not contact:
            return {'message': 'Contact does not exist'}, 404

        capability = Capability.query.get(capability_id)
        if not capability:
            return {'message': 'Capability does not exist'}, 404

        skill = get_or_make_skill(data['name'])
        if skill not in contact.skills:
            contact.add_skill(skill)

        suggestion = CapabilitySkillSuggestion(
            skill_id=skill.id,
            contact_id=contact_id,
            capability_id=capability_id)
        db.session.add(suggestion)
        db.session.commit()

        result = dump_skill_with_capabilities(skill, contact_id)

        return {'status': 'success', 'data': result}, 201
Exemplo n.º 4
0
    def put(self, resume_id, section_id):
        res = Resume.query.get(resume_id)
        if not res:
            return {'message': 'Resume does not exist'}, 404
        if not is_authorized_write(res.contact.id): 
            return unauthorized()

        section = ResumeSection.query.get(section_id)
        if not section:
            return {'message': 'Resume section does not exist'}, 404
        json_data = request.get_json(force=True)
        try:
            data = resume_section_schema.load(json_data, partial=True)
        except ValidationError as e:
            return e.messages, 422
        if not data:
            return {'message': 'No input data provided'}, 400
        items = data.pop('items', None)
        for k,v in data.items():
            setattr(section, k, v)
        del section.items[:]
        if items:
            for item in items:
                i = ResumeItem(**item)
                i.resume_id = section.resume_id
                section.items.append(i)
        db.session.commit()
        result = resume_section_schema.dump(section)
        return {'status': 'success', 'data': result}, 200
Exemplo n.º 5
0
    def post(self, contact_id):
        if not is_authorized_write(contact_id):
            return unauthorized()

        json_data = request.get_json(force=True)
        try:
            data = skill_schema.load(json_data)
        except ValidationError as e:
            return e.messages, 422

        if not data:
            return {'message': 'No input data provided'}, 400

        contact = Contact.query.get(contact_id)
        if not contact:
            return {'message': 'Contact not found'}, 404

        name = data['name']
        skill = get_or_make_skill(name)
        contact_skill_names = {s.name for s in contact.skills}
        status_code = 200
        if name not in contact_skill_names:
            status_code = 201
            contact.add_skill(skill)
            db.session.commit()

        result = dump_skill_with_capabilities(skill, contact_id)
        return {'status': 'success', 'data': result}, status_code
Exemplo n.º 6
0
    def put(self, contact_id):
        if not is_authorized_write(contact_id):
            return unauthorized()

        json_data = request.get_json(force=True)

        contact = Contact.query.get(contact_id)
        if not contact:
            return {'message': 'Contact does not exist'}, 404

        try:
            data = profile_schema.load(json_data)
        except ValidationError as e:
            return e.messages, 422

        profile_data = data.pop('profile', None)
        contact.update(**data)
        contact.profile.update(**profile_data)
        email = data.get('email', None)
        if email:
            contact.email_primary.email = email
        db.session.commit()

        result = profile_schema.dump(contact)

        return {'status': 'success', 'data': result}, 200
Exemplo n.º 7
0
    def post(self, contact_id):
        if not is_authorized_write(contact_id): 
            return unauthorized()

        #load the input data
        input_data = request.get_json(force=True)
        try:
            data = resume_generate_schema.load(input_data)
        except ValidationError as e:
            return e.messages, 422
        if not data:
            return {'message': 'No input data provided'}, 400

        #pop off the ids for the data in each of the sections
        relevant_exp = data.pop('relevant_exp', None)
        other_exp = data.pop('other_exp', None)
        relevant_edu = data.pop('relevant_edu', None)
        other_edu = data.pop('other_edu', None)
        relevant_achieve = data.pop('relevant_achieve', None)
        other_achieve = data.pop('other_achieve', None)
        relevant_skills = data.pop('relevant_skills', None)
        other_skills = data.pop('other_skills', None)

        #query and add contact info to input data
        data['contact'] = Contact.query.get(contact_id)

        #query subset of resume items using lists of ids then
        #add those items to the input data with their section name
        def query_by_ids(table, id_list, contact_id, section_name):
            result = table.query.filter(table.id.in_(id_list),
                                        table.contact_id==contact_id)
            data[section_name] = result

        query_by_ids(Experience, relevant_exp, contact_id, 'relevant_exp_dump')
        query_by_ids(Experience, other_exp, contact_id, 'other_exp_dump')
        query_by_ids(Experience, relevant_edu, contact_id, 'relevant_edu_dump')
        query_by_ids(Experience, other_edu, contact_id, 'other_edu_dump')
        query_by_ids(Experience, relevant_achieve, contact_id, 'relevant_achieve_dump')
        query_by_ids(Experience, other_achieve, contact_id, 'other_achieve_dump')
        query_by_ids(TagItem, relevant_skills, contact_id, 'relevant_skills_dump')
        query_by_ids(TagItem, other_skills, contact_id, 'other_skills_dump')

        #dumps the throughput data and pass to generate resume script
        throughput_data = resume_generate_schema.dump(data)
        pprint(throughput_data)
        gdoc_id = generate(throughput_data)

        #creates dictionary to insert new resume record
        output_data = {
            'name': data['name'],
            'date_created': dt.datetime.today(),
            'contact_id': contact_id,
            'gdoc_id': gdoc_id,
        }
        resume = Resume(**output_data)
        db.session.add(resume)
        db.session.commit()
        result = resume_output_schema.dump(resume)
        return {'status': 'success', 'data': result}, 201
Exemplo n.º 8
0
    def delete(self, resume_id):
        res = Resume.query.get(resume_id)
        if not res:
            return {'message': 'Resume does not exist'}, 404
        if not is_authorized_write(res.contact.id): 
            return unauthorized()

        db.session.delete(res)
        db.session.commit()
        return {'status': 'success'}, 200
Exemplo n.º 9
0
    def delete(self, contact_id, program_id):
        if not is_authorized_write(contact_id):
            return unauthorized()

        program_contact = query_one_program_contact(contact_id, program_id)
        if not program_contact:
            return {'message': 'Program contact does not exist'}, 404
        db.session.delete(program_contact)
        db.session.commit()
        return {"status": 'success'}, 200
Exemplo n.º 10
0
    def delete(self, contact_id, tag_id):
        if not is_authorized_write(contact_id):
            return unauthorized()

        tag = TagItem.query.filter_by(contact_id=contact_id,
                                      tag_id=tag_id).first()
        if not tag:
            return {'message': 'TagItem does not exist'}, 404
        db.session.delete(tag)
        db.session.commit()
        return {'status': 'success'}, 201
Exemplo n.º 11
0
    def delete(self, contact_id, capability_id, skill_id):
        if not is_authorized_write(contact_id):
            return unauthorized()

        (result, status_code) = delete_skill(contact_id, skill_id)
        if status_code != 200:
            return result, status_code

        suggestion = CapabilitySkillSuggestion.query.get(
            (contact_id, capability_id, skill_id))
        if suggestion is not None:
            db.session.delete(suggestion)
            db.session.commit()

        return {'status': 'success'}, 200
Exemplo n.º 12
0
    def post(self, contact_id):
        if not is_authorized_write(contact_id): 
            return unauthorized()

        json_data = request.get_json(force=True)
        try:
            data = resume_schema.load(json_data)
        except ValidationError as e:
            return e.messages, 422
        if not data:
            return {'message': 'No input data provided'}, 400
        res = Resume(**data)
        db.session.add(res)
        db.session.commit()
        result = resume_schema.dump(res)
        return {'status': 'success', 'data': result}, 201
Exemplo n.º 13
0
    def post(self, contact_id, opportunity_id):
        if not is_authorized_write(contact_id):
            return unauthorized()

        opportunity_app = (OpportunityApp.query
            .filter_by(contact_id=contact_id, opportunity_id=opportunity_id)
            .first())

        if not opportunity_app:
            return {'message': 'Application does not exist'}, 404
        if opportunity_app.stage >= ApplicationStage.submitted.value:
            return {'message': 'Application is already submitted'}, 400

        opportunity_app.stage = ApplicationStage.submitted.value
        db.session.commit()
        result = opportunity_app_schema.dump(opportunity_app)
        return {'status': 'success', 'data': result}, 200
Exemplo n.º 14
0
    def put(self, resume_id):
        res = Resume.query.get(resume_id)
        if not res:
            return {'message': 'Resume does not exist'}, 404
        if not is_authorized_write(res.contact.id): 
            return unauthorized()

        json_data = request.get_json(force=True)
        try:
            data = resume_schema.load(json_data, partial=True)
        except ValidationError as e:
            return e.messages, 422
        if not data:
            return {'message': 'No data provided to update'}, 400
        for k,v in data.items():
            setattr(res, k, v)
        db.session.commit()
        result = resume_schema.dump(res)
        return {'status': 'success', 'data': result}, 200
Exemplo n.º 15
0
    def put(self, contact_id, tag_id):
        if not is_authorized_write(contact_id):
            return unauthorized()

        tag = (TagItem.query.filter_by(contact_id=contact_id,
                                       tag_id=tag_id).first())
        if not tag:
            return {'message': 'TagItem does not exist'}, 404
        json_data = request.get_json(force=True)
        try:
            data = tag_item_schema.load(json_data, partial=True)
        except ValidationError as e:
            return e.messages, 422
        if not data:
            return {'message': 'No data provided to update'}, 400
        for k, v in data.items():
            setattr(tag, k, v)
        db.session.commit()
        result = tag_item_schema.dump(tag)
        return {'status': 'success', 'data': result}, 200
Exemplo n.º 16
0
    def post(self, contact_id):
        if not is_authorized_write(contact_id):
            return unauthorized()

        #retrieve and parse request data
        json_data = request.get_json(force=True)
        try:
            data = program_contact_schema.load(json_data)
        except ValidationError as e:
            return e.messages, 422
        if not data:
            return {'message': 'No data provided to update'}, 400

        # checks to see if there's an existing program_contact record
        program = data.pop('program_id')
        contact = data.pop('contact_id')
        program_contact = create_program_contact(contact_id,
                                                 program_id=program,
                                                 **data)
        db.session.commit()
        result = program_contact_schema.dump(program_contact)
        return {"status": 'success', 'data': result}, 201
Exemplo n.º 17
0
    def post(self, contact_id, opportunity_id):
        if not is_authorized_write(contact_id):
            return unauthorized()

        opportunity_app = (OpportunityApp.query
            .filter_by(contact_id=contact_id, opportunity_id=opportunity_id)
            .first())

        if opportunity_app:
            return {'message': 'Application already exists!'}, 400

        opportunity_app = OpportunityApp(
            id=str(uuid.uuid4()),
            contact_id=contact_id,
            opportunity_id=opportunity_id,
            interest_statement=''
        )
        db.session.add(opportunity_app)
        db.session.commit()

        data = opportunity_app_schema.dump(opportunity_app)
        return {'status': 'success', 'data': data}, 201
Exemplo n.º 18
0
    def put(self, contact_id):
        if not is_authorized_write(contact_id):
            return unauthorized()

        json_data = request.get_json(force=True)

        contact = Contact.query.get(contact_id)
        if not contact:
            return {'message': 'Contact does not exist'}, 404

        try:
            data_raw = program_app_schema.load(json_data)
        except ValidationError as e:
            return e.messages, 422

        data = data_raw.pop('program_apps', None)

        if not data:
            return {'message': 'No program data provided'}, 404

        for item in data:
            app = (ProgramApp.query.filter_by(
                contact_id=contact_id,
                program_id=item['program']['id']).first())

            if app:
                item.pop('is_approved', None)
                app.update(**item)
            else:
                new_app = ProgramApp(contact_id=contact_id,
                                     program_id=item['program']['id'],
                                     is_interested=item['is_interested'])
                contact.program_apps.append(new_app)

        db.session.add(contact)
        db.session.commit()
        result = program_app_schema.dump(contact)
        return {'status': 'success', 'data': result}, 200
Exemplo n.º 19
0
    def put(self, contact_id, program_id):
        if not is_authorized_write(contact_id):
            return unauthorized()

        #retreives and parses request data
        json = request.get_json(force=True)
        try:
            data = program_contact_schema.load(json, partial=True)
        except ValidationError as e:
            return e.messages, 422
        if not data:
            return {'message': 'No data provided to update'}, 400

        # checks to make sure the record exists
        program_contact = query_one_program_contact(contact_id, program_id)
        if not program_contact:
            return {'message': 'Record does not exist'}, 404

        # updates program_contact record
        program_contact.update(**data)
        db.session.commit()
        result = program_contact_schema.dump(program_contact)
        return {"status": 'success', 'data': result}, 200
Exemplo n.º 20
0
    def delete(self, contact_id, skill_id):
        if not is_authorized_write(contact_id):
            return unauthorized()

        return delete_skill(contact_id, skill_id)