Exemple #1
0
 def get(self):
     opportunities = Opportunity.query.all()
     if not is_authorized_with_permission('view:opportunity-internal'):
         return unauthorized()
     opp_list = opportunities_internal_schema.dump(opportunities)
     return {'status': 'success', 'data': opp_list}, 200
     return {'status': 'success', 'data': 'Hello World'}, 200
    def post(self):
        if not is_authorized_with_permission('write:all-users'):
            return unauthorized()

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

        # Check that all of the contacts are in the db
        contact_ids = [c['id'] for c in data]
        contacts = Contact.query.filter(Contact.id.in_(contact_ids)).all()
        if len(data) != len(contacts):
            return {
                'message': ("Payload contained contacts "
                            "that couldn't be found")
            }, 404

        # Update the stage of each contact
        for contact in contacts:
            contact.stage = ContactStage.approved.value
        db.session.commit()

        # Format and return the contacts
        result = contacts_short_schema.dump(contacts)
        return {'status': 'success', 'data': result}, 201
Exemple #3
0
    def get(self):
        if not is_authorized_with_permission('view:all-users'):
            return unauthorized()

        contacts = Contact.query.all()

        contacts = contacts_schema.dump(contacts)
        return {'status': 'success', 'data': contacts}, 200
 def delete(self, contact_id):
     if not is_authorized_with_permission('delete:all-users'):
         return unauthorized()
     contact = Contact.query.get(contact_id)
     if not contact:
         return {'message': 'Contact does not exist'}, 404
     db.session.delete(contact)
     db.session.commit()
     return {"status": 'success'}, 200
Exemple #5
0
    def delete(self, opportunity_id):
        opportunity = Opportunity.query.get(opportunity_id)
        if not opportunity:
            return {'message': 'Opportunity does not exist'}, 404

        if not is_authorized_with_permission('write:opportunity'):
            return unauthorized()

        db.session.delete(opportunity)
        db.session.commit()
        result = opportunity_schema.dump(opportunity)
        return {"status": 'success'}, 200
Exemple #6
0
    def post(self, opportunity_id):
        opportunity = Opportunity.query.get(opportunity_id)
        if not opportunity:
            return {'message': 'Opportunity does not exist'}, 404

        if not is_authorized_with_permission('write:opportunity'):
            return unauthorized()

        opportunity.is_active = True
        db.session.commit()

        result = opportunity_schema.dump(opportunity)
        return {'status': 'success', 'data': result}, 200
Exemple #7
0
    def get(self):
        if not is_authorized_with_permission('view:all-users'):
            return unauthorized()

        approved_arg = request.args.get('is_approved')
        if not approved_arg:
            contacts = Contact.query.all()
        else:
            if approved_arg == 'true':
                contacts = Contact.query.filter(Contact.stage >= 3)
            elif approved_arg == 'false':
                contacts = Contact.query.filter(Contact.stage < 3)
        contacts = program_app_many_schema.dump(contacts)
        return {'status': 'success', 'data': contacts}, 200
    def get(self):
        if not is_authorized_with_permission('view:app-internal'):
            return unauthorized()

        program_id = request.args.get('program_id')
        if program_id:
            program = Program.query.get(program_id)
            if not program:
                return {'message': 'Program does not exist'}, 404
            program_contacts = [c for c in program.contacts if c.is_approved]
        else:
            program_contacts = ProgramContact.query.filter_by(is_approved=True)

        result = program_contacts_short_schema.dump(program_contacts)
        return {'status': 'success', 'data': result}, 200
Exemple #9
0
    def post(self):
        json_data = request.get_json(force=True)

        if not is_authorized_with_permission('write:opportunity'):
            return unauthorized()

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

        # Make a new random id
        opportunity = create_new_opportunity(data)
        result = opportunity_schema.dump(opportunity)
        return {"status": 'success', 'data': result}, 201
Exemple #10
0
    def post(self, contact_id, opportunity_id):
        if not is_authorized_with_permission("write:app"):
            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.draft.value:
            return {'message': 'Application is already open for editing'}, 400

        opportunity_app.stage = ApplicationStage.draft.value
        db.session.commit()
        result = opportunity_app_schema.dump(opportunity_app)
        return {'status': 'success', 'data': result}, 200
    def get(self):
        if not is_authorized_with_permission('view:all-users'):
            return unauthorized()

        status = request.args.get('status')
        status_list = ContactStage.__members__
        if not status:
            contacts = Contact.query.all()
        elif status not in status_list:
            return {
                'message':
                f'{status} is not a valid stage '
                f'choose an option from this list: {status_list}'
            }, 400
        else:
            contacts = (Contact.query.filter_by(
                stage=ContactStage[status].value))

        contacts = contacts_short_schema.dump(contacts)
        return {'status': 'success', 'data': contacts}, 200
Exemple #12
0
    def put(self, opportunity_id):
        opportunity = Opportunity.query.get(opportunity_id)
        if not opportunity:
            return {'message': 'Opportunity does not exist'}, 404

        if not is_authorized_with_permission('write:opportunity'):
            return unauthorized()

        json_data = request.get_json(force=True)
        try:
            data = opportunity_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(opportunity, k, v)

        db.session.commit()
        result = opportunity_schema.dump(opportunity)
        return {'status': 'success', 'data': result}, 200
Exemple #13
0
    def get(self):
        if not is_authorized_with_permission('view:all-users'):
            return unauthorized()

        approved_arg = request.args.get('is_approved')
        if not approved_arg:
            contacts = Contact.query.all()
        else:
            if approved_arg == 'true':
                contacts = (
                    Contact.query
                    .join(Contact.programs, aliased=True)
                    .filter(ProgramContact.is_approved==True)
                )
            elif approved_arg == 'false':
                contacts = (
                    Contact.query
                    .join(Contact.programs, aliased=True)
                    .filter(~Contact.programs
                            .any(ProgramContact.is_approved==True))
                )
        contacts = contact_program_schema.dump(contacts)
        return {'status': 'success', 'data': contacts}, 200
    def post(self, program_id):
        if not is_authorized_with_permission('write:all-users'):
            return unauthorized()

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

        contact_ids = [c['id'] for c in data]
        contacts = Contact.query.filter(Contact.id.in_(contact_ids)).all()
        if len(data) != len(contacts):
            return {
                'message': ("Payload contained contacts "
                            "that couldn't be found")
            }, 404
        program_contacts = []
        for contact in contacts:
            program_contact = contact.query_program_contact(program_id)
            if not program_contact:
                insert_data = {
                    'contact_id': contact.id,
                    'program_id': program_id,
                    'is_approved': True
                }
                program_contact = create_program_contact(**insert_data)
                program_contact.contact = contact
            else:
                program_contact.is_approved = True
            program_contacts.append(program_contact)
        db.session.commit()
        result = program_contacts_short_schema.dump(program_contacts)
        return {'status': 'success', 'data': result}, 200
Exemple #15
0
    def post(self):

        if not is_authorized_with_permission('view:all-users'):
            return unauthorized()

        json_data = request.get_json(force=True)
        query = input_schema.load(json_data)

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

        q = (db.session
                .query(Contact)
                .join(Contact.profile)
                .join(Contact.race)
                .join(Contact.address_primary)
                .with_entities(
                    Contact.id,
                    Contact.first_name,
                    Contact.last_name,
                    Contact.email,
                    Contact.phone_primary,
                    Contact.stage,
                    Profile.years_exp,
                    Profile.job_search_status,
                    Profile.gender,
                    ContactAddress.city,
                    ContactAddress.state,
                    Race.race_all,
                ))

        if not query:
            q = q.filter(Contact.stage > 1)
        else:
            # pops out stage and updates query with stage
            status_list = query.pop('status', None)
            if status_list == ['submitted']:
                q = q.filter(Contact.stage == 2)
            elif status_list == ['approved']:
                q = q.filter(Contact.stage == 3)
            else:
                q = q.filter(Contact.stage > 1)

            # pops out roles and adds them to the filter
            roles = query.pop('roles', None)
            if roles:
                q = q.join(Profile.roles)
                for r in roles:
                    q = q.filter(getattr(RoleChoice, r)==roles[r])

            # pops out programs_completed and adds them to the filter
            p_complete = query.pop('programs_completed', None)
            if p_complete:
                q = q.join(Profile.programs_completed)
                for p in p_complete:
                    q = q.filter(getattr(ProgramsCompleted, p)==p_complete[p])

            # pops out program_apps and adds them to the filter
            app_params = query.pop('program_apps', None)
            if app_params:
                programs = [app['program']['id'] for app in app_params]
                # uses subquery to prevent duplicate contacts
                # from being returned
                subq = (db.session
                          .query(ProgramApp.contact_id)
                          .filter(ProgramApp.program_id.in_(programs))
                          .filter(ProgramApp.is_interested==True)
                          .subquery())
                q = q.filter(Contact.id.in_(subq))

            # pops out skills and adds them to the filter
            skill_params = query.pop('skills', None)
            if skill_params:
                skills = [get_skill_id(skill) for skill in skill_params]
                # uses subquery to prevent duplicate contacts
                # from being returned
                subq = (db.session
                          .query(ContactSkill.contact_id)
                          .filter(ContactSkill.skill_id.in_(skills))
                          .filter(ContactSkill.deleted==False)
                          .subquery())
                q = q.filter(Contact.id.in_(subq))

            # iteratively adds query parameters to query for Profile
            for param in query:
                q = q.filter(getattr(Profile, param).in_(query[param]))

        result = [format_row(row) for row in q.all()]

        return {'status': 'success', 'data': result}, 201