Ejemplo n.º 1
0
    def get(self):

        try:
            user_id = verify_token(request.headers.get('Authorization'))['id']

            db_offer = db.session.query(Offer).filter(
                Offer.user_id == user_id).first()

            if db_offer is None:
                return errors.OFFER_NOT_FOUND
            registration = db.session.query(Registration).filter(
                Registration.offer_id == db_offer.id).first()

            if registration is None:
                return 'no Registration', 404
            registration_form = db.session.query(RegistrationForm).filter(RegistrationForm.id == registration.
                                                                          registration_form_id).first()

            if registration_form is None:
                return errors.REGISTRATION_FORM_NOT_FOUND
            db_answers = db.session.query(RegistrationAnswer).filter(RegistrationAnswer.registration_id ==
                                                                     registration.id).all()

            response = {
                'registration_id': registration.id,
                'offer_id': db_offer.id,
                'registration_form_id': registration_form.id,
                'answers': db_answers
            }

            return marshal(response, self.response_fields)

        except Exception as e:
            LOGGER.error("Database error encountered: {}".format(e))
            return errors.DB_NOT_AVAILABLE
Ejemplo n.º 2
0
    def put(self):
        # update existing offer
        args = self.req_parser.parse_args()
        offer_id = args['offer_id']
        candidate_response = args['candidate_response']
        accepted_accommodation_award = args['accepted_accommodation_award']
        accepted_travel_award = args['accepted_travel_award']
        rejected_reason = args['rejected_reason']
        offer = db.session.query(Offer).filter(Offer.id == offer_id).first()

        LOGGER.info('Updating offer {} with values: candidate response: {}, Accepted accommodation: {}, '
        'Accepted travel: {}, Rejected Reason: {}'.format(offer_id, candidate_response, accepted_accommodation_award,
        accepted_travel_award, rejected_reason))

        if not offer:
            return errors.OFFER_NOT_FOUND

        try:
            user_id = verify_token(request.headers.get('Authorization'))['id']

            if offer and offer.user_id != user_id:
                return errors.FORBIDDEN

            offer.responded_at = datetime.now()
            offer.candidate_response = candidate_response
            offer.accepted_accommodation_award = accepted_accommodation_award
            offer.accepted_travel_award = accepted_travel_award
            offer.rejected_reason = rejected_reason

            db.session.commit()

        except Exception as e:
            LOGGER.error("Failed to update offer with id {} due to {}".format(args['offer_id'], e))
            return errors.ADD_OFFER_FAILED
        return offer_update_info(offer), 201
Ejemplo n.º 3
0
def is_token_valid():
    incoming = request.get_json()
    is_valid = verify_token(incoming["token"])

    if is_valid:
        return jsonify(token_is_valid=True)
    else:
        return jsonify(token_is_valid=False), 403
Ejemplo n.º 4
0
    def put(self):
        # Update an existing response for the logged-in user.
        req_parser = reqparse.RequestParser()
        args = self.req_parser.parse_args()
        try:
            user_id = verify_token(request.headers.get('Authorization'))['id']

            registration = db.session.query(Registration).filter(
                Registration.id == args['registration_id']).one_or_none()
            if registration is None:
                return 'Registration not found', 404

            db_offer = db.session.query(Offer).filter(
                Offer.id == registration.offer_id).one_or_none()

            if db_offer is None:
                return errors.OFFER_NOT_FOUND

            if db_offer.user_id != user_id:
                return errors.FORBIDDEN

            registration.registration_form_id = args['registration_form_id']
            db.session.commit()

            for answer_args in args['answers']:
                answer = db.session.query(RegistrationAnswer).filter(
                    RegistrationAnswer.registration_question_id ==
                    answer_args['registration_question_id'],
                    RegistrationAnswer.registration_id ==
                    args['registration_id']).one_or_none()
                if answer is not None:
                    answer.value = answer_args['value']

                elif db.session.query(RegistrationQuestion).filter(
                        RegistrationQuestion.id ==
                        answer_args['registration_question_id']).one():

                    answer = RegistrationAnswer(
                        registration_id=registration.id,
                        registration_question_id=answer_args[
                            'registration_question_id'],
                        value=answer_args['value'])

                    db.session.add(answer)
            db.session.commit()
            return 200
        except Exception as e:
            return 'Could not access DB', 400
Ejemplo n.º 5
0
 def process_request(self, req, res):
     req.context['auth_user'] = verify_token(req.auth) if req.auth else None
Ejemplo n.º 6
0
    def post(self):
        # Save a new response for the logged-in user.
        req_parser = reqparse.RequestParser()
        args = self.req_parser.parse_args()
        offer_id = args['offer_id']

        try:
            offer = db.session.query(Offer).filter(
                Offer.id == offer_id).first()

            if not offer:
                return errors.OFFER_NOT_FOUND

            user_id = verify_token(request.headers.get('Authorization'))['id']
            if not user_id:
                return errors.USER_NOT_FOUND
            current_user = db.session.query(AppUser).filter(
                AppUser.id == user_id).first()

            registration_form = db.session.query(RegistrationForm).filter(
                RegistrationForm.id == args['registration_form_id']).first()

            if not registration_form:
                return errors.REGISTRATION_FORM_NOT_FOUND

            registration = Registration(
                offer_id=args['offer_id'],
                registration_form_id=args['registration_form_id'],
                confirmed=True if (not offer.payment_required) else False,
                confirmation_email_sent_at=date.today())

            db.session.add(registration)
            db.session.commit()

            event = event_repository.get_by_id(registration_form.event_id)

            for answer_args in args['answers']:
                if db.session.query(RegistrationQuestion).filter(
                        RegistrationQuestion.id ==
                        answer_args['registration_question_id']).first():

                    answer = RegistrationAnswer(
                        registration_id=registration.id,
                        registration_question_id=answer_args[
                            'registration_question_id'],
                        value=answer_args['value'])

                    db.session.add(answer)
            db.session.commit()

            registration_answers = db.session.query(RegistrationAnswer).filter(
                RegistrationAnswer.registration_id == registration.id).all()
            registration_questions = db.session.query(
                RegistrationQuestion).filter(
                    RegistrationQuestion.registration_form_id ==
                    args['registration_form_id']).all()

            self.send_confirmation(current_user, registration_questions,
                                   registration_answers,
                                   registration.confirmed, event)

            # 201 is 'CREATED' status code
            return marshal(registration, self.registration_fields), 201

        except SQLAlchemyError as e:
            LOGGER.error("Database error encountered: {}".format(e))
            return errors.DB_NOT_AVAILABLE
        except Exception as e:
            LOGGER.error("Encountered unknown error: {}".format(
                traceback.format_exc()))
            return errors.DB_NOT_AVAILABLE
Ejemplo n.º 7
0
    def get(self):
        args = self.req_parser.parse_args()
        event_id = args['event_id']
        offer_id = args['offer_id']
        try:
            offer = db.session.query(Offer).filter(
                Offer.id == offer_id).first()

            user_id = verify_token(request.headers.get('Authorization'))['id']

            if offer and (not offer.user_id == user_id):
                return errors.FORBIDDEN
            
            if not offer.candidate_response:
                return errors.OFFER_NOT_ACCEPTED

            registration_form = db.session.query(RegistrationForm).filter(
                RegistrationForm.event_id == event_id).first()

            if not registration_form:
                return errors.REGISTRATION_FORM_NOT_FOUND

            sections = db.session.query(RegistrationSection).filter(
                RegistrationSection.registration_form_id == registration_form.id).all()

            if not sections:
                LOGGER.warn(
                    'Sections not found for event_id: {}'.format(args['event_id']))
                return errors.SECTION_NOT_FOUND

            included_sections = []

            for section in sections:

                if (section.show_for_travel_award is None) and (section.show_for_accommodation_award is None) and  \
                        (section.show_for_payment_required is None):
                    included_sections.append(section)

                elif (section.show_for_travel_award and offer.travel_award and offer.accepted_travel_award) or \
                        (section.show_for_accommodation_award and offer.accommodation_award and offer.accepted_accommodation_award) or \
                        (section.show_for_payment_required and offer.payment_required):
                    included_sections.append(section)

            registration_form.registration_sections = included_sections

            questions = db.session.query(RegistrationQuestion).filter(
                RegistrationQuestion.registration_form_id == registration_form.id).all()

            if not questions:
                LOGGER.warn(
                    'Questions not found for  event_id: {}'.format(args['event_id']))
                return errors.QUESTION_NOT_FOUND

            for s in registration_form.registration_sections:
                s.registration_questions = []
                for q in questions:
                    if q.section_id == s.id:
                        s.registration_questions.append(q)

            return marshal(registration_form, self.registration_form_fields), 201

        except SQLAlchemyError as e:
            LOGGER.error("Database error encountered: {}".format(e))
            return errors.DB_NOT_AVAILABLE
        except:
            LOGGER.error("Encountered unknown error: {}".format(
                traceback.format_exc()))
            return errors.DB_NOT_AVAILABLE
Ejemplo n.º 8
0
    def post(self):
        # Save a new response for the logged-in user.
        req_parser = reqparse.RequestParser()
        args = self.req_parser.parse_args()

        try:

            user_id = verify_token(request.headers.get('Authorization'))['id']
            if not user_id:
                return errors.USER_NOT_FOUND
            current_user = db.session.query(AppUser).filter(
                AppUser.id == user_id).first()

            registration_form = db.session.query(RegistrationForm).filter(
                RegistrationForm.id == args['registration_form_id']).first()

            if not registration_form:
                return errors.REGISTRATION_FORM_NOT_FOUND

            registration = GuestRegistration(
                registration_form_id=args['registration_form_id'],
                user_id=user_id,
                confirmed=True,
                created_at=date.today(),
                confirmation_email_sent_at=date.today()  #None
            )

            db.session.add(registration)
            db.session.commit()

            event_name = db.session.query(Event).filter(
                Event.id == registration_form.event_id).first().name
            for answer_args in args['answers']:
                if db.session.query(RegistrationQuestion).filter(
                        RegistrationQuestion.id ==
                        answer_args['registration_question_id']).first():
                    answer = GuestRegistrationAnswer(
                        guest_registration_id=registration.id,
                        registration_question_id=answer_args[
                            'registration_question_id'],
                        value=answer_args['value'])
                    db.session.add(answer)
            db.session.commit()

            registration_answers = db.session.query(
                GuestRegistrationAnswer).filter(
                    GuestRegistrationAnswer.guest_registration_id ==
                    registration.id).all()
            registration_questions = db.session.query(
                RegistrationQuestion).filter(
                    RegistrationQuestion.registration_form_id ==
                    args['registration_form_id']).all()

            email_sent = self.send_confirmation(current_user,
                                                registration_questions,
                                                registration_answers,
                                                event_name)
            if email_sent:
                registration.confirmation_email_sent_at = date.today()
                db.session.commit()

            return registration, 201  # 201 is 'CREATED' status code
        except SQLAlchemyError as e:
            LOGGER.error("Database error encountered: {}".format(e))
            return errors.DB_NOT_AVAILABLE
        except Exception as e:
            LOGGER.error("Encountered unknown error: {}".format(
                traceback.format_exc()))
            return errors.DB_NOT_AVAILABLE
Ejemplo n.º 9
0
    def post(self):
        # Process arguments
        args = self.req_parser.parse_args()
        event_id = args['event_id']
        work_address = args['work_address'] if args[
            'work_address'] is not None else ' '
        addressed_to = args['addressed_to'] or 'Whom it May Concern'
        residential_address = args['residential_address']
        passport_name = args['passport_name']
        passport_no = args['passport_no']
        passport_issued_by = args['passport_issued_by']
        passport_expiry_date = datetime.strptime(
            (args['passport_expiry_date']), '%Y-%m-%d')

        registration_event = EventRepository.get_by_id(event_id)
        if (registration_event is not None):
            to_date = registration_event.end_date
            from_date = registration_event.start_date
        else:
            return errors.EVENT_ID_NOT_FOUND

        # Finding registation_id for this user at this event
        user_id = verify_token(request.headers.get('Authorization'))['id']
        offer = db.session.query(Offer).filter(
            Offer.user_id == user_id).filter(
                Offer.event_id == event_id).first()
        registration_form = db.session.query(RegistrationForm).filter(
            RegistrationForm.event_id == event_id).first()

        if not registration_form:
            return errors.REGISTRATION_FORM_NOT_FOUND

        # Check if Guest Registration
        registration = None

        registration = db.session.query(GuestRegistration).filter(
            GuestRegistration.user_id == user_id).filter(
                GuestRegistration.registration_form_id ==
                registration_form.id).first()
        if registration:
            is_guest_registration = True
        else:
            is_guest_registration = False

        # Normal Registration
        if (not registration) and offer:
            registration = db.session.query(Registration).filter(
                Registration.offer_id == offer.id).first()

        if not registration:
            return errors.REGISTRATION_NOT_FOUND

        try:
            if (is_guest_registration):
                invitation_letter_request = InvitationLetterRequest(
                    guest_registration_id=registration.id,
                    event_id=event_id,
                    work_address=work_address,
                    addressed_to=addressed_to,
                    residential_address=residential_address,
                    passport_name=passport_name,
                    passport_no=passport_no,
                    passport_issued_by=passport_issued_by,
                    passport_expiry_date=passport_expiry_date,
                    to_date=to_date,
                    from_date=from_date)
            else:
                invitation_letter_request = InvitationLetterRequest(
                    registration_id=registration.id,
                    event_id=event_id,
                    work_address=work_address,
                    addressed_to=addressed_to,
                    residential_address=residential_address,
                    passport_name=passport_name,
                    passport_no=passport_no,
                    passport_issued_by=passport_issued_by,
                    passport_expiry_date=passport_expiry_date,
                    to_date=to_date,
                    from_date=from_date)
            db.session.add(invitation_letter_request)
            db.session.commit()
        except Exception as e:
            LOGGER.error(
                'Failed to add invitation letter request for user id {} due to: {}'
                .format(user_id, e))
            return errors.ADD_INVITATION_REQUEST_FAILED

        invitation_template = None
        if (is_guest_registration):
            invitation_template = (db.session.query(InvitationTemplate).filter(
                InvitationTemplate.send_for_both_travel_accommodation == False
            ).filter(
                InvitationTemplate.send_for_travel_award_only == False).filter(
                    InvitationTemplate.send_for_accommodation_award_only ==
                    False).first())
        elif (offer.accommodation_award and offer.accepted_accommodation_award
              and offer.travel_award and offer.accepted_travel_award):
            invitation_template = db.session.query(InvitationTemplate).filter(
                InvitationTemplate.event_id == offer.event_id).filter(
                    InvitationTemplate.send_for_both_travel_accommodation ==
                    True).first()

        elif (offer.travel_award and offer.accepted_travel_award):
            invitation_template = db.session.query(InvitationTemplate).filter(
                InvitationTemplate.event_id == offer.event_id).filter(
                    InvitationTemplate.send_for_travel_award_only ==
                    True).first()

        elif (offer.accommodation_award
              and offer.accepted_accommodation_award):
            invitation_template = db.session.query(InvitationTemplate).filter(
                InvitationTemplate.event_id == offer.event_id).filter(
                    InvitationTemplate.send_for_accommodation_award_only ==
                    True).first()

        else:
            invitation_template = (db.session.query(InvitationTemplate).filter(
                InvitationTemplate.send_for_both_travel_accommodation == False
            ).filter(
                InvitationTemplate.send_for_travel_award_only == False).filter(
                    InvitationTemplate.send_for_accommodation_award_only ==
                    False).first())

        template_url = invitation_template.template_path

        user = db.session.query(AppUser).filter(AppUser.id == user_id).first()
        country_of_residence = db.session.query(Country).filter(
            Country.id == user.residence_country_id).first()
        nationality = db.session.query(Country).filter(
            Country.id == user.nationality_country_id).first()

        if user.user_dateOfBirth is not None:
            date_of_birth = user.user_dateOfBirth.strftime("%Y-%m-%d")
        else:
            return errors.MISSING_DATE_OF_BIRTH

        # Poster registration
        bringing_poster = ""
        poster_registration_question = db.session.query(
            RegistrationQuestion).filter(
                RegistrationQuestion.headline ==
                "Will you be bringing a poster?").first()
        if poster_registration_question is not None:
            poster_answer = (db.session.query(RegistrationAnswer).join(
                Registration,
                RegistrationAnswer.registration_id == Registration.id).join(
                    Offer, Offer.id == Registration.offer_id).filter(
                        Offer.user_id == user_id).filter(
                            RegistrationAnswer.registration_question_id ==
                            poster_registration_question.id).first())
            if poster_answer is not None and poster_answer.value == 'yes':
                bringing_poster = "The participant will be presenting a poster of their research."

        # Handling fields
        invitation_letter_request.invitation_letter_sent_at = datetime.now()
        is_sent = generate(
            template_path=template_url,
            event_id=event_id,
            work_address=work_address,
            addressed_to=addressed_to,
            residential_address=residential_address,
            passport_name=passport_name,
            passport_no=passport_no,
            passport_issued_by=passport_issued_by,
            invitation_letter_sent_at=invitation_letter_request.
            invitation_letter_sent_at.strftime("%Y-%m-%d"),
            expiry_date=passport_expiry_date.strftime("%Y-%m-%d"),
            to_date=to_date.strftime("%Y-%m-%d"),
            from_date=from_date.strftime("%Y-%m-%d"),
            country_of_residence=country_of_residence.name,
            nationality=nationality.name,
            date_of_birth=date_of_birth,
            email=user.email,
            user_title=user.user_title,
            firstname=user.firstname,
            lastname=user.lastname,
            bringing_poster=bringing_poster,
            user=user)
        if not is_sent:
            return errors.SENDING_INVITATION_FAILED

        try:
            db.session.commit()
            return invitation_info(invitation_letter_request), 201

        except Exception as e:
            LOGGER.error(
                "Failed to add invitation request for user with email: {} due to {}"
                .format(user.email, e))
            return errors.ADD_INVITATION_REQUEST_FAILED
Ejemplo n.º 10
0
    def put(self):
        # Update an existing response for the logged-in user.
        args = self.req_parser.parse_args()
        try:
            user_id = verify_token(request.headers.get('Authorization'))['id']
            registration = db.session.query(GuestRegistration).filter(
                GuestRegistration.id ==
                args['guest_registration_id']).one_or_none()
            if registration is None:
                return 'Registration not found', 404
            registration.registration_form_id = args['registration_form_id']
            db.session.commit()

            for answer_args in args['answers']:
                answer = db.session.query(GuestRegistrationAnswer).filter(
                    GuestRegistrationAnswer.registration_question_id ==
                    answer_args['registration_question_id'],
                    GuestRegistrationAnswer.guest_registration_id ==
                    args['guest_registration_id']).one_or_none()
                if answer is not None:
                    answer.value = answer_args['value']

                elif db.session.query(RegistrationQuestion).filter(
                        RegistrationQuestion.id ==
                        answer_args['registration_question_id']).one():

                    answer = GuestRegistrationAnswer(
                        guest_registration_id=registration.id,
                        registration_question_id=answer_args[
                            'registration_question_id'],
                        value=answer_args['value'])

                    db.session.add(answer)
            db.session.commit()

            current_user = user_repository.get_by_id(user_id)

            registration_answers = db.session.query(
                GuestRegistrationAnswer).filter(
                    GuestRegistrationAnswer.guest_registration_id ==
                    registration.id).all()

            registration_questions = db.session.query(
                RegistrationQuestion).filter(
                    RegistrationQuestion.registration_form_id ==
                    args['registration_form_id']).all()

            registration_form = db.session.query(RegistrationForm).filter(
                RegistrationForm.id == args['registration_form_id']).first()

            event = event_repository.get_by_id(registration_form.event_id)

            email_sent = self.send_confirmation(current_user,
                                                registration_questions,
                                                registration_answers, event)
            if email_sent:
                registration.confirmation_email_sent_at = date.today()
                db.session.commit()

            return 200
        except Exception as e:
            return 'Could not access DB', 400