def test_generator(self): self.seed_static_data() self.assertEqual( generate( template_path='Indaba 2019 - Invitation Letter - General.docx', event_id=self.event.id, work_address='19 Melle Steet\nRetro Rabbit\nSouth Africa\n1000', addressed_to='Man with the Visa Power', residential_address='123 Magic Street\nDance\nMore Dance\n1000', passport_name='Jeff Jeffdejeff', passport_no='09876512344', passport_issued_by='RSA', invitation_letter_sent_at=datetime(1984, 12, 12).strftime('%Y-%m-%d'), to_date=datetime(1984, 12, 12).strftime('%Y-%m-%d'), from_date=datetime(1984, 12, 12).strftime('%Y-%m-%d'), country_of_residence='South Africa', nationality='South African', date_of_birth=datetime(1984, 12, 12).strftime('%Y-%m-%d'), email='*****@*****.**', user_title='Mr', firstname='Jeff', lastname='Jeffdejeff', bringing_poster='', expiry_date=datetime(1984, 12, 12).strftime('%Y-%m-%d')), True)
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