def test_personal_number_usage(self): travel = self.prepare_travel() travel_agent_expense_type = PublicsTravelExpenseTypeFactory( title='Travel Agent', vendor_number='trav01') eur = PublicsCurrencyFactory(name='EUR', code='eur') # Add expenses Expense.objects.create(travel=travel, type=travel_agent_expense_type, currency=eur, amount=35) # Generate invoice self.make_invoices(travel) response = self.forced_auth_req('get', reverse('t2f:vision_invoice_export'), user=self.unicef_staff) xml_data = response.content.decode('utf-8') self.assertEqual(xml_data.count('<pernr />'), 1) self.assertEqual( xml_data.count('<pernr>{}</pernr>'.format( self.traveler.profile.staff_id)), 1)
def prepare_travel(self): # Currencies huf = PublicsCurrencyFactory(name='HUF', code='huf') # Add wbs/grant/fund wbs_1 = PublicsWBSFactory(name='WBS #1') grant_1 = PublicsGrantFactory(name='Grant #1') wbs_1.grants.add(grant_1) fund_1 = PublicsFundFactory(name='Fund #1') grant_1.funds.add(fund_1) dsa_region = PublicsDSARegionFactory() PublicsDSARateFactory(region=dsa_region) # Expense types et_t_food = PublicsTravelExpenseTypeFactory( title='Food', vendor_number=TravelExpenseType.USER_VENDOR_NUMBER_PLACEHOLDER) # Make a travel travel = Travel.objects.create(traveler=self.traveler, supervisor=self.unicef_staff, currency=huf) # Add expenses Expense.objects.create(travel=travel, type=et_t_food, currency=huf, amount=35) ItineraryItemFactory(travel=travel, departure_date=datetime(2017, 5, 10, tzinfo=UTC), arrival_date=datetime(2017, 5, 11, tzinfo=UTC), dsa_region=dsa_region) ItineraryItemFactory(travel=travel, departure_date=datetime(2017, 5, 20, tzinfo=UTC), arrival_date=datetime(2017, 5, 21, tzinfo=UTC), dsa_region=dsa_region) # Add cost assignments CostAssignment.objects.create(travel=travel, share=100, wbs=wbs_1, grant=grant_1, fund=fund_1) return travel
def test_travel_creation(self): dsa_region = PublicsDSARegionFactory() currency = PublicsCurrencyFactory() wbs = PublicsWBSFactory() grant = wbs.grants.first() fund = grant.funds.first() location = LocationFactory() purpose = 'Some purpose to check later' data = { 'deductions': [{ 'date': '2016-12-15', 'breakfast': False, 'lunch': False, 'dinner': False, 'accomodation': False, 'no_dsa': False }, { 'date': '2016-12-16', 'breakfast': False, 'lunch': False, 'dinner': False, 'accomodation': False, 'no_dsa': False }], 'itinerary': [{ 'origin': 'Berlin', 'destination': 'Budapest', 'departure_date': '2017-04-14T17:06:55.821490', 'arrival_date': '2017-04-15T17:06:55.821490', 'dsa_region': dsa_region.id, 'overnight_travel': False, 'mode_of_travel': ModeOfTravel.RAIL, 'airlines': [] }, { 'origin': 'Budapest', 'destination': 'Berlin', 'departure_date': '2017-05-20T12:06:55.821490', 'arrival_date': '2017-05-21T12:06:55.821490', 'dsa_region': dsa_region.id, 'overnight_travel': False, 'mode_of_travel': ModeOfTravel.RAIL, 'airlines': [] }], 'activities': [{ 'is_primary_traveler': True, 'locations': [location.id], 'travel_type': TravelType.ADVOCACY, 'date': '2016-12-15T15:02:13+01:00' }], 'cost_assignments': [{ 'wbs': wbs.id, 'grant': grant.id, 'fund': fund.id, 'share': '100' }], 'clearances': { 'medical_clearance': 'requested', 'security_clearance': 'requested', 'security_course': 'requested' }, 'ta_required': True, 'international_travel': False, 'mode_of_travel': [ModeOfTravel.BOAT], 'traveler': self.traveler.id, 'supervisor': self.unicef_staff.id, 'start_date': '2016-12-15T15:02:13+01:00', 'end_date': '2016-12-16T15:02:13+01:00', 'estimated_travel_cost': '123', 'currency': currency.id, 'purpose': purpose, 'additional_note': 'Notes', 'medical_clearance': 'requested', 'security_clearance': 'requested', 'security_course': 'requested' } response = self.forced_auth_req( 'post', reverse('t2f:travels:list:state_change', kwargs={'transition_name': 'save_and_submit'}), data=data, user=self.traveler) response_json = json.loads(response.rendered_content) self.assertEqual(response_json['purpose'], purpose) self.assertEqual(response_json['status'], Travel.SUBMITTED) travel_id = response_json['id'] response = self.forced_auth_req('post', reverse( 't2f:travels:details:state_change', kwargs={ 'travel_pk': travel_id, 'transition_name': 'approve' }), user=self.unicef_staff) response_json = json.loads(response.rendered_content) self.assertEqual(response_json['status'], Travel.APPROVED) data = {'purpose': 'Some totally different purpose than before'} response = self.forced_auth_req( 'patch', reverse('t2f:travels:details:index', kwargs={'travel_pk': response_json['id']}), data=data, user=self.traveler) response_json = json.loads(response.rendered_content) self.assertEqual(response_json['purpose'], purpose)
def setUp(self): super(InvoiceMaking, self).setUp() self.unicef_staff = UserFactory(is_staff=True) self.traveler = UserFactory() profile = self.traveler.profile profile.vendor_number = 'user0001' profile.save() country = profile.country country.business_area_code = '0060' country.save() dsa_region = PublicsDSARegionFactory() PublicsDSARateFactory(region=dsa_region) # Currencies self.huf = PublicsCurrencyFactory(name='HUF', code='huf') self.usd = PublicsCurrencyFactory(name='USD', code='usd') # Add wbs/grant/fund self.wbs_1 = PublicsWBSFactory(name='WBS #1') self.wbs_2 = PublicsWBSFactory(name='WBS #2') self.grant_1 = PublicsGrantFactory(name='Grant #1') self.grant_2 = PublicsGrantFactory(name='Grant #2') self.grant_3 = PublicsGrantFactory(name='Grant #3') self.wbs_1.grants.add(self.grant_1) self.wbs_2.grants.add(self.grant_2, self.grant_3) self.fund_1 = PublicsFundFactory(name='Fund #1') self.fund_2 = PublicsFundFactory(name='Fund #4') self.grant_1.funds.add(self.fund_1) self.grant_3.funds.add(self.fund_2) # Expense types self.et_t_food = PublicsTravelExpenseTypeFactory( title='Food', vendor_number=TravelExpenseType.USER_VENDOR_NUMBER_PLACEHOLDER) self.et_t_travel = PublicsTravelExpenseTypeFactory( title='Travel', vendor_number=TravelExpenseType.USER_VENDOR_NUMBER_PLACEHOLDER) self.et_t_other = PublicsTravelExpenseTypeFactory( title='Other', vendor_number=TravelExpenseType.USER_VENDOR_NUMBER_PLACEHOLDER) self.et_a_nico = PublicsTravelExpenseTypeFactory( title='Nico Travel', vendor_number='a_nico') self.et_a_torben = PublicsTravelExpenseTypeFactory( title='Torben Travel', vendor_number='a_torben') # Make a travel self.travel = Travel.objects.create(traveler=self.traveler, supervisor=self.unicef_staff, currency=self.huf) ItineraryItemFactory(travel=self.travel, departure_date=datetime(2017, 5, 10, tzinfo=UTC), arrival_date=datetime(2017, 5, 11, tzinfo=UTC), dsa_region=dsa_region) ItineraryItemFactory(travel=self.travel, departure_date=datetime(2017, 5, 20, tzinfo=UTC), arrival_date=datetime(2017, 5, 21, tzinfo=UTC), dsa_region=dsa_region)