View Javadoc
1   /*
2    * The Kuali Financial System, a comprehensive financial management system for higher education.
3    * 
4    * Copyright 2005-2014 The Kuali Foundation
5    * 
6    * This program is free software: you can redistribute it and/or modify
7    * it under the terms of the GNU Affero General Public License as
8    * published by the Free Software Foundation, either version 3 of the
9    * License, or (at your option) any later version.
10   * 
11   * This program is distributed in the hope that it will be useful,
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   * GNU Affero General Public License for more details.
15   * 
16   * You should have received a copy of the GNU Affero General Public License
17   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
18   */
19  package org.kuali.kfs.module.tem.service;
20  
21  import java.util.List;
22  
23  import org.kuali.kfs.integration.ar.AccountsReceivableCustomer;
24  import org.kuali.kfs.integration.ar.AccountsReceivableCustomerAddress;
25  import org.kuali.kfs.module.tem.businessobject.TemProfile;
26  import org.kuali.kfs.module.tem.businessobject.TemProfileAddress;
27  import org.kuali.kfs.module.tem.businessobject.TemProfileFromCustomer;
28  import org.kuali.kfs.module.tem.businessobject.TemProfileFromKimPerson;
29  import org.kuali.kfs.module.tem.businessobject.TravelerDetail;
30  import org.kuali.kfs.module.tem.businessobject.TravelerDetailEmergencyContact;
31  import org.kuali.rice.kim.api.identity.Person;
32  import org.kuali.rice.kim.api.identity.address.EntityAddressContract;
33  import org.kuali.rice.kim.api.identity.entity.Entity;
34  
35  public interface TravelerService {
36  
37      /**
38       * Creates a {@link TravelerDetail} from a {@link Person} instance
39       *
40       * @param person to create {@link TravelerDetail} instance from
41       * @return a new {@link Traveler} detail instance
42       */
43      TravelerDetail convertToTraveler(final Person person);
44  
45      /**
46       * Creates a {@link TravelerDetail} from a {@link Person} instance
47       *
48       * @param person to create {@link TravelerDetail} instance from
49       * @return a new {@link Traveler} detail instance
50       */
51      TravelerDetail convertToTraveler(final AccountsReceivableCustomer person);
52  
53      /**
54       * Determines if the given {@link TravelerDetail} instance is an employee by comparing
55       * what we know about employee traveler types. This is really up to the implementation.
56       *
57       * @param traveler a {@link TravelerDetail} instance to check
58       * @return whether our institution regards the {@link TravelerDetail} instance to be an
59       * employee or not
60       */
61      boolean isEmployee(final TravelerDetail traveler);
62  
63      /**
64       *
65       * @param profile
66       * @param docType
67       * @param user
68       * @param isProfileAdmin
69       * @param isAssignedArranger
70       * @param isOrgArranger
71       * @param isArrangerDoc
72       * @param isRiskManagement
73       * @return
74       */
75      public boolean canIncludeProfileInSearch(TemProfile profile, String docType, Person user, boolean isProfileAdmin, boolean isAssignedArranger, boolean isOrgArranger, boolean isArrangerDoc, boolean isRiskManagement);
76  
77      /**
78       *
79       * @param profile
80       * @param customer
81       */
82      public void copyTemProfileToCustomer(TemProfile profile, AccountsReceivableCustomer customer);
83  
84      /**
85       *
86       * @param profile
87       * @param customer
88       */
89      public void copyCustomerToTemProfile(TemProfile profile, AccountsReceivableCustomer customer);
90  
91      /**
92       *
93       * @param profile
94       * @param principal
95       * @param kimEntityInfo
96       */
97      public void copyKimDataToTemProfile(TemProfile profile, Person principal, Entity kimEntityInfo);
98  
99      /**
100      *
101      * This method converts a KIM Person to a TemProfileFromKim object so that we can then use it to
102      * actually create a TemProfile from it
103      * @param personDetail
104      * @return the TemProfileFromKimPerson object populated from the search
105      */
106     TemProfileFromKimPerson convertToTemProfileFromKim(Person personDetail);
107 
108     /**
109      *
110      * This method converts a Customer to a TemProfileFromCustomer object so that we can then use it to
111      * actually create a TemProfile from it
112      * @param person to create {@link TemProfileFromCustomer} instance from
113      * @return a new {@link TemProfileFromCustomer} instance
114      */
115     TemProfileFromCustomer convertToTemProfileFromCustomer(AccountsReceivableCustomer person);
116 
117 
118     public void convertTemProfileToTravelerDetail(TemProfile profile, TravelerDetail detail);
119 
120     /**
121      *
122      * This method copies the fromTraveler to a new TravelerDetail.
123      *
124      * Document Number is set in the copied emergency contacts and the TravelerDetail
125      *
126      * @param fromTraveler
127      * @param documentNumber
128      * @return
129      */
130     public TravelerDetail copyTravelerDetail(TravelerDetail fromTraveler, String documentNumber);
131 
132     /**
133      * Copies traveler detail emergency contacts and sets new document number
134      */
135     public List<TravelerDetailEmergencyContact> copyTravelerDetailEmergencyContact(List<TravelerDetailEmergencyContact> emergencyContacts, String documentNumber);
136 
137     /**
138      *
139      * @param profile
140      */
141     public void populateTemProfile(TemProfile profile);
142 
143     /**
144      *
145      * @param person
146      * @return
147      */
148     public boolean isCustomerEmployee(AccountsReceivableCustomer person);
149 
150     /**
151      *
152      * @param principal
153      * @return
154      */
155     public boolean isKimPersonEmployee(Person principal);
156 
157     /**
158      *
159      * This method converts a CustomerAddress to a TemProfileAddress object so that we can then use it to
160      * actually create a TemProfile from it
161      * @param person to create {@link CustomerAddress} instance from
162      * @return a new {@link TemProfileAddress} instance
163      */
164 	TemProfileAddress convertToTemProfileAddressFromCustomer(AccountsReceivableCustomerAddress customerAddress);
165 
166 	/**
167      *
168      * This method converts a KimEntityAddressImpl to a TemProfileAddress object so that we can then use it to
169      * actually create a TemProfile from it
170      * @param person to create {@link KimEntityAddressImpl} instance from
171      * @return a new {@link TemProfileAddress} instance
172      */
173 	TemProfileAddress convertToTemProfileAddressFromKimAddress(EntityAddressContract address);
174 
175 	/**
176 	 *
177 	 * @param chartCode
178 	 * @param orgCode
179 	 * @param roleChartCode
180 	 * @param roleOrgCode
181 	 * @param descendHierarchy
182 	 * @return
183 	 */
184 	public boolean isParentOrg(String chartCode, String orgCode, String roleChartCode, String roleOrgCode, boolean descendHierarchy);
185 
186 	/**
187      * Checks both the organization approver and profile admin roles to see if the given principal can arrange for the role
188      * @param principalId the principal id to check
189      * @param profile the profile to see if the principal can be their arranger
190      * @return true if the principal can be an arranger for the profile, false otherwise
191      */
192     public boolean isArrangeeByOrganization(String principalId, TemProfile profile);
193 }