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 */ 016package edu.sampleu.travel.dataobject; 017 018import org.apache.commons.lang.StringUtils; 019import org.kuali.rice.krad.bo.DataObjectBase; 020import org.kuali.rice.krad.data.jpa.converters.BooleanYNConverter; 021import org.kuali.rice.krad.data.jpa.PortableSequenceGenerator; 022import org.kuali.rice.krad.data.provider.annotation.Description; 023import org.kuali.rice.krad.data.provider.annotation.InheritProperties; 024import org.kuali.rice.krad.data.provider.annotation.InheritProperty; 025import org.kuali.rice.krad.data.provider.annotation.Label; 026import org.kuali.rice.krad.data.provider.annotation.Relationship; 027import org.kuali.rice.krad.data.provider.annotation.UifAutoCreateViewType; 028import org.kuali.rice.krad.data.provider.annotation.UifAutoCreateViews; 029import org.kuali.rice.krad.data.provider.annotation.UifDisplayHint; 030import org.kuali.rice.krad.data.provider.annotation.UifDisplayHintType; 031import org.kuali.rice.krad.data.provider.annotation.UifDisplayHints; 032import org.kuali.rice.krad.data.provider.annotation.UifValidCharactersConstraintBeanName; 033 034import javax.persistence.CascadeType; 035import javax.persistence.Column; 036import javax.persistence.Convert; 037import javax.persistence.Entity; 038import javax.persistence.FetchType; 039import javax.persistence.GeneratedValue; 040import javax.persistence.Id; 041import javax.persistence.JoinColumn; 042import javax.persistence.ManyToOne; 043import javax.persistence.Table; 044import javax.persistence.Temporal; 045import javax.persistence.TemporalType; 046import java.io.Serializable; 047import java.math.BigDecimal; 048import java.util.Date; 049 050/** 051 * This class provides the expense items. 052 * 053 * @author Kuali Rice Team (rice.collab@kuali.org) 054 */ 055@Entity 056@Table(name = "TRVL_EXP_ITM_T") 057@UifAutoCreateViews({UifAutoCreateViewType.INQUIRY, UifAutoCreateViewType.LOOKUP}) 058public class TravelExpenseItem extends DataObjectBase implements Serializable { 059 060 private static final long serialVersionUID = -4092206384418712220L; 061 062 @Id @Column(name = "EXP_ITM_ID", length = 10) 063 @GeneratedValue(generator = "TRVL_EXP_ITM_ID_S") 064 @PortableSequenceGenerator(name = "TRVL_EXP_ITM_ID_S") 065 @Label("Id") 066 @Description("Unique identifier for item") 067 @UifValidCharactersConstraintBeanName("AlphaNumericPatternConstraint") 068 private String travelExpenseItemId; 069 070 @Column(name="TRVL_AUTH_DOC_ID", length=40) 071 @Label("Travel Authorization Document Id") 072 @UifDisplayHints({ 073 @UifDisplayHint(UifDisplayHintType.NO_LOOKUP_RESULT), 074 @UifDisplayHint(UifDisplayHintType.NO_INQUIRY)}) 075 private String travelAuthorizationDocumentId; 076 077 @Relationship(foreignKeyFields="travelAuthorizationDocumentId") 078 @ManyToOne(fetch=FetchType.LAZY, cascade={CascadeType.REFRESH}) 079 @JoinColumn(name = "TRVL_AUTH_DOC_ID", referencedColumnName = "TRVL_AUTH_DOC_ID", insertable = false, updatable = false) 080 @InheritProperties({ 081 @InheritProperty(name="documentNumber", 082 label=@Label("Travel Authorization Document"), 083 displayHints=@UifDisplayHints(@UifDisplayHint(UifDisplayHintType.NO_LOOKUP_CRITERIA)))}) 084 private TravelAuthorizationDocument travelAuthorizationDocument; 085 086 @Column(name = "TRVL_CO_NM") 087 private String travelCompanyName; 088 089 @Column(name = "EXP_TYP_CD", length = 10) 090 @Label("Expense Type") 091 @Description("Type of expense") 092 private String travelExpenseTypeCd; 093 094 @Column(name = "EXP_DESC", length = 10) 095 @Label("Expense Description") 096 @Description("Description of expense") 097 private String expenseDesc; 098 099 @Temporal(TemporalType.TIMESTAMP) 100 @Column(name = "EXP_DT") 101 @Label("Expense Date") 102 @Description("Date of expense") 103 private Date expenseDate; 104 105 @Column(name = "EXP_AMT", length = 10) 106 @Label("Expense Amount") 107 @Description("Amount of expense") 108 private BigDecimal expenseAmount; 109 110 @Column(name = "EXP_REIMB", nullable = false, length = 1) 111 @Convert(converter = BooleanYNConverter.class) 112 @Label("Reimbursable") 113 @Description("Whether expense is reimbursed to traveler") 114 private boolean reimbursable; 115 116 @Column(name = "EXP_TXBL", nullable = false, length = 1) 117 @Convert(converter = BooleanYNConverter.class) 118 @Label("Taxable") 119 @Description("Whether expense is taxed") 120 private boolean taxable; 121 122 public String getTravelExpenseItemId() { 123 return travelExpenseItemId; 124 } 125 126 public void setTravelExpenseItemId(String travelExpenseItemId) { 127 this.travelExpenseItemId = travelExpenseItemId; 128 } 129 130 public String getTravelAuthorizationDocumentId() { 131 if (StringUtils.isBlank(travelAuthorizationDocumentId) 132 && this.travelAuthorizationDocument != null) { 133 return this.travelAuthorizationDocument.getDocumentNumber(); 134 } 135 136 return travelAuthorizationDocumentId; 137 } 138 139 public void setTravelAuthorizationDocumentId(String travelAuthorizationDocumentId) { 140 this.travelAuthorizationDocumentId = travelAuthorizationDocumentId; 141 } 142 143 public TravelAuthorizationDocument getTravelAuthorizationDocument() { 144 return travelAuthorizationDocument; 145 } 146 147 public void setTravelAuthorizationDocument(TravelAuthorizationDocument travelAuthorizationDocument) { 148 this.travelAuthorizationDocument = travelAuthorizationDocument; 149 } 150 151 public String getTravelCompanyName() { 152 return travelCompanyName; 153 } 154 155 public void setTravelCompanyName(String travelCompanyName) { 156 this.travelCompanyName = travelCompanyName; 157 } 158 159 public String getTravelExpenseTypeCd() { 160 return travelExpenseTypeCd; 161 } 162 163 public void setTravelExpenseTypeCd(String travelExpenseTypeCd) { 164 this.travelExpenseTypeCd = travelExpenseTypeCd; 165 } 166 167 public String getExpenseDesc() { 168 return expenseDesc; 169 } 170 171 public void setExpenseDesc(String expenseDesc) { 172 this.expenseDesc = expenseDesc; 173 } 174 175 public Date getExpenseDate() { 176 return expenseDate; 177 } 178 179 public void setExpenseDate(Date expenseDate) { 180 this.expenseDate = expenseDate; 181 } 182 183 public BigDecimal getExpenseAmount() { 184 return expenseAmount; 185 } 186 187 public void setExpenseAmount(BigDecimal expenseAmount) { 188 this.expenseAmount = expenseAmount; 189 } 190 191 public boolean isReimbursable() { 192 return reimbursable; 193 } 194 195 public void setReimbursable(boolean reimbursable) { 196 this.reimbursable = reimbursable; 197 } 198 199 public boolean isTaxable() { 200 return taxable; 201 } 202 203 public void setTaxable(boolean taxable) { 204 this.taxable = taxable; 205 } 206}