001 /**
002 * Copyright 2005-2014 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package edu.sampleu.travel.dataobject;
017
018 import edu.sampleu.travel.options.MileageRateKeyValues;
019 import edu.sampleu.travel.options.TravelDestinationKeyValues;
020 import org.apache.commons.lang.StringUtils;
021 import org.kuali.rice.krad.bo.DataObjectBase;
022 import org.kuali.rice.krad.data.jpa.PortableSequenceGenerator;
023 import org.kuali.rice.krad.data.provider.annotation.Description;
024 import org.kuali.rice.krad.data.provider.annotation.InheritProperties;
025 import org.kuali.rice.krad.data.provider.annotation.InheritProperty;
026 import org.kuali.rice.krad.data.provider.annotation.KeyValuesFinderClass;
027 import org.kuali.rice.krad.data.provider.annotation.Label;
028 import org.kuali.rice.krad.data.provider.annotation.Relationship;
029 import org.kuali.rice.krad.data.provider.annotation.UifAutoCreateViewType;
030 import org.kuali.rice.krad.data.provider.annotation.UifAutoCreateViews;
031 import org.kuali.rice.krad.data.provider.annotation.UifDisplayHint;
032 import org.kuali.rice.krad.data.provider.annotation.UifDisplayHintType;
033 import org.kuali.rice.krad.data.provider.annotation.UifDisplayHints;
034 import org.kuali.rice.krad.data.provider.annotation.UifValidCharactersConstraintBeanName;
035
036 import javax.persistence.CascadeType;
037 import javax.persistence.Column;
038 import javax.persistence.Entity;
039 import javax.persistence.FetchType;
040 import javax.persistence.GeneratedValue;
041 import javax.persistence.Id;
042 import javax.persistence.JoinColumn;
043 import javax.persistence.ManyToOne;
044 import javax.persistence.Table;
045 import javax.persistence.Temporal;
046 import javax.persistence.TemporalType;
047 import java.io.Serializable;
048 import java.math.BigDecimal;
049 import java.util.Date;
050
051 /**
052 * This class provides the per diem expenses.
053 *
054 * @author Kuali Rice Team (rice.collab@kuali.org)
055 */
056 @Entity
057 @Table(name = "TRVL_PD_EXP_T")
058 @UifAutoCreateViews({UifAutoCreateViewType.INQUIRY, UifAutoCreateViewType.LOOKUP})
059 public class TravelPerDiemExpense extends DataObjectBase implements Serializable {
060
061 private static final long serialVersionUID = 6269893036439679855L;
062
063 @Id
064 @Column(name = "PD_EXP_ID", length = 10)
065 @GeneratedValue(generator = "TRVL_PD_EXP_ID_S")
066 @PortableSequenceGenerator(name = "TRVL_PD_EXP_ID_S")
067 @Label("Id")
068 @Description("Unique identifier for per diem expense item")
069 @UifValidCharactersConstraintBeanName("AlphaNumericPatternConstraint")
070 private String travelPerDiemExpenseId;
071
072 @Column(name="TRVL_AUTH_DOC_ID", length=40)
073 @Label("Travel Authorization Document Id")
074 @UifDisplayHints({
075 @UifDisplayHint(UifDisplayHintType.NO_LOOKUP_RESULT),
076 @UifDisplayHint(UifDisplayHintType.NO_INQUIRY)})
077 private String travelAuthorizationDocumentId;
078
079 @Relationship(foreignKeyFields="travelAuthorizationDocumentId")
080 @ManyToOne(fetch=FetchType.LAZY, cascade={CascadeType.REFRESH})
081 @JoinColumn(name = "TRVL_AUTH_DOC_ID", referencedColumnName = "TRVL_AUTH_DOC_ID", insertable = false, updatable = false)
082 @InheritProperties({
083 @InheritProperty(name="documentNumber",
084 label=@Label("Travel Authorization Document"),
085 displayHints=@UifDisplayHints(@UifDisplayHint(UifDisplayHintType.NO_LOOKUP_CRITERIA)))})
086 private TravelAuthorizationDocument travelAuthorizationDocument;
087
088 @Column(name="TRVL_DEST_ID", length=40)
089 @Label("Primary Destination")
090 @Description("Primary Destination related to per diem expense")
091 @KeyValuesFinderClass(TravelDestinationKeyValues.class)
092 @UifDisplayHints({
093 @UifDisplayHint(UifDisplayHintType.NONE),
094 @UifDisplayHint(UifDisplayHintType.NO_LOOKUP_RESULT),
095 @UifDisplayHint(UifDisplayHintType.NO_INQUIRY)})
096 private String travelDestinationId;
097
098 @Relationship(foreignKeyFields="travelDestinationId")
099 @ManyToOne(fetch=FetchType.LAZY, cascade={CascadeType.REFRESH})
100 @JoinColumn(name="TRVL_DEST_ID", insertable=false, updatable=false)
101 @InheritProperties({
102 @InheritProperty(name="travelDestinationId",
103 label=@Label("Primary Destination"),
104 displayHints=@UifDisplayHints(@UifDisplayHint(UifDisplayHintType.NO_LOOKUP_CRITERIA)))})
105 @UifDisplayHint(UifDisplayHintType.NO_LOOKUP_CRITERIA)
106 private TravelDestination travelDestination;
107
108 @Temporal(TemporalType.TIMESTAMP)
109 @Column(name = "PD_DT")
110 @Label("Date of Use")
111 private Date perDiemDate;
112
113 @Column(name = "BKFST_VAL")
114 @Label("Breakfast Value")
115 private BigDecimal breakfastValue;
116
117 @Column(name = "LNCH_VAL")
118 @Label("Lunch Value")
119 private BigDecimal lunchValue;
120
121 @Column(name = "DNNR_VAL")
122 @Label("Dinner Value")
123 private BigDecimal dinnerValue;
124
125 @Column(name = "INCD_VAL")
126 @Label("Amount estimated for incidentals")
127 private BigDecimal incidentalsValue;
128
129 @Column(name="MLG_RT_ID", length=40)
130 @Label("Mileage Rate")
131 @Description("Mileage Rate Code Used")
132 @KeyValuesFinderClass(MileageRateKeyValues.class)
133 @UifDisplayHints({
134 @UifDisplayHint(UifDisplayHintType.NONE),
135 @UifDisplayHint(UifDisplayHintType.NO_LOOKUP_RESULT),
136 @UifDisplayHint(UifDisplayHintType.NO_INQUIRY)})
137 private String mileageRateId;
138
139 @Relationship(foreignKeyFields="mileageRateId")
140 @ManyToOne(fetch=FetchType.LAZY, cascade={CascadeType.REFRESH})
141 @JoinColumn(name="MLG_RT_ID", insertable=false, updatable=false)
142 @InheritProperties({
143 @InheritProperty(name="mileageRateCd",
144 label=@Label("Mileage rate"),
145 displayHints=@UifDisplayHints(@UifDisplayHint(UifDisplayHintType.NO_LOOKUP_CRITERIA)))})
146 private TravelMileageRate mileageRate;
147
148 @Column(name = "MLG_EST")
149 @Label("Number of estimated miles")
150 private BigDecimal estimatedMileage;
151
152 public String getTravelPerDiemExpenseId() {
153 return travelPerDiemExpenseId;
154 }
155
156 public void setTravelPerDiemExpenseId(String travelPerDiemExpenseId) {
157 this.travelPerDiemExpenseId = travelPerDiemExpenseId;
158 }
159
160 public String getTravelAuthorizationDocumentId() {
161 if (StringUtils.isBlank(travelAuthorizationDocumentId)
162 && this.travelAuthorizationDocument != null) {
163 return this.travelAuthorizationDocument.getDocumentNumber();
164 }
165
166 return travelAuthorizationDocumentId;
167 }
168
169 public void setTravelAuthorizationDocumentId(String travelAuthorizationDocumentId) {
170 this.travelAuthorizationDocumentId = travelAuthorizationDocumentId;
171 }
172
173 public TravelAuthorizationDocument getTravelAuthorizationDocument() {
174 return travelAuthorizationDocument;
175 }
176
177 public void setTravelAuthorizationDocument(TravelAuthorizationDocument travelAuthorizationDocument) {
178 this.travelAuthorizationDocument = travelAuthorizationDocument;
179 }
180
181 public Date getPerDiemDate() {
182 return perDiemDate;
183 }
184
185 public void setPerDiemDate(Date perDiemDate) {
186 this.perDiemDate = perDiemDate;
187 }
188
189 public BigDecimal getBreakfastValue() {
190 return breakfastValue;
191 }
192
193 public void setBreakfastValue(BigDecimal breakfastValue) {
194 this.breakfastValue = breakfastValue;
195 }
196
197 public BigDecimal getLunchValue() {
198 return lunchValue;
199 }
200
201 public void setLunchValue(BigDecimal lunchValue) {
202 this.lunchValue = lunchValue;
203 }
204
205 public BigDecimal getDinnerValue() {
206 return dinnerValue;
207 }
208
209 public void setDinnerValue(BigDecimal dinnerValue) {
210 this.dinnerValue = dinnerValue;
211 }
212
213 public BigDecimal getIncidentalsValue() {
214 return incidentalsValue;
215 }
216
217 public void setIncidentalsValue(BigDecimal incidentalsValue) {
218 this.incidentalsValue = incidentalsValue;
219 }
220
221 public String getTravelDestinationId() {
222 return travelDestinationId;
223 }
224
225 public void setTravelDestinationId(String travelDestinationId) {
226 this.travelDestinationId = travelDestinationId;
227 }
228
229 public TravelDestination getTravelDestination() {
230 return travelDestination;
231 }
232
233 public void setTravelDestination(TravelDestination travelDestination) {
234 this.travelDestination = travelDestination;
235 }
236
237 public String getMileageRateId() {
238 return mileageRateId;
239 }
240
241 public void setMileageRateId(String mileageRateId) {
242 this.mileageRateId = mileageRateId;
243 }
244
245 public TravelMileageRate getMileageRate() {
246 return mileageRate;
247 }
248
249 public void setMileageRate(TravelMileageRate mileageRate) {
250 this.mileageRate = mileageRate;
251 }
252
253 public BigDecimal getEstimatedMileage() {
254 return estimatedMileage;
255 }
256
257 public void setEstimatedMileage(BigDecimal estimatedMileage) {
258 this.estimatedMileage = estimatedMileage;
259 }
260 }