/*
* The Kuali Financial System, a comprehensive financial management system for higher education.
*
* Copyright 2005-2014 The Kuali Foundation
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.kuali.kfs.module.tem.document;
import java.sql.Date;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import org.kuali.kfs.module.tem.TemConstants;
import org.kuali.kfs.module.tem.TemWorkflowConstants;
import org.kuali.kfs.module.tem.batch.TaxableRamificationNotificationStep;
import org.kuali.kfs.module.tem.businessobject.TemSourceAccountingLine;
import org.kuali.kfs.module.tem.businessobject.TravelAdvance;
import org.kuali.kfs.module.tem.businessobject.TravelerDetail;
import org.kuali.kfs.sys.KFSPropertyConstants;
import org.kuali.kfs.sys.context.SpringContext;
import org.kuali.kfs.sys.document.FinancialSystemTransactionalDocumentBase;
import org.kuali.rice.core.api.util.type.KualiDecimal;
import org.kuali.rice.krad.service.BusinessObjectService;
/**
* if the cash advance is not cleared on an expense report, the system will generate a tax ramification document showing all taxable
* income of travelers/hosts.
*/
public class TaxableRamificationDocument extends FinancialSystemTransactionalDocumentBase {
private final static Logger LOG = Logger.getLogger(TaxableRamificationDocument.class);
private String arInvoiceDocNumber;
private Date dueDate;
private KualiDecimal invoiceAmount;
private KualiDecimal openAmount;
private String taxableRamificationNotice;
private String travelDocumentIdentifier;
private Integer travelerDetailId;
private String travelAdvanceDocumentNumber;
private TravelerDetail travelerDetail;
private TravelAdvance travelAdvance;
private List<TemSourceAccountingLine> advanceAccountingLines;
/**
* Gets the arInvoiceDocNumber attribute.
*
* @return Returns the arInvoiceDocNumber.
*/
public String getArInvoiceDocNumber() {
return arInvoiceDocNumber;
}
/**
* Sets the arInvoiceDocNumber attribute value.
*
* @param arInvoiceDocNumber The arInvoiceDocNumber to set.
*/
public void setArInvoiceDocNumber(String arInvoiceDocNumber) {
this.arInvoiceDocNumber = arInvoiceDocNumber;
}
/**
* Gets the dueDate attribute.
*
* @return Returns the dueDate.
*/
public Date getDueDate() {
return dueDate;
}
/**
* Sets the dueDate attribute value.
*
* @param dueDate The dueDate to set.
*/
public void setDueDate(Date dueDate) {
this.dueDate = dueDate;
}
/**
* Gets the invoiceAmount attribute.
*
* @return Returns the invoiceAmount.
*/
public KualiDecimal getInvoiceAmount() {
return invoiceAmount;
}
/**
* Sets the invoiceAmount attribute value.
*
* @param invoiceAmount The invoiceAmount to set.
*/
public void setInvoiceAmount(KualiDecimal invoiceAmount) {
this.invoiceAmount = invoiceAmount;
}
/**
* Gets the openAmount attribute.
*
* @return Returns the openAmount.
*/
public KualiDecimal getOpenAmount() {
return openAmount;
}
/**
* Sets the openAmount attribute value.
*
* @param openAmount The openAmount to set.
*/
public void setOpenAmount(KualiDecimal openAmount) {
this.openAmount = openAmount;
}
/**
* Gets the travelerDetail attribute.
*
* @return Returns the travelerDetail.
*/
public TravelerDetail getTravelerDetail() {
return travelerDetail;
}
/**
* Sets the travelerDetail attribute value.
*
* @param travelerDetail The travelerDetail to set.
*/
public void setTravelerDetail(TravelerDetail travelerDetail) {
this.travelerDetail = travelerDetail;
}
/**
* Gets the travelAdvance attribute.
*
* @return Returns the travelAdvance.
*/
public TravelAdvance getTravelAdvance() {
return travelAdvance;
}
/**
* Sets the travelAdvance attribute value.
*
* @param travelAdvance The travelAdvance to set.
*/
public void setTravelAdvance(TravelAdvance travelAdvance) {
this.travelAdvance = travelAdvance;
}
/**
* Gets the travelDocumentIdentifier attribute.
*
* @return Returns the travelDocumentIdentifier.
*/
public String getTravelDocumentIdentifier() {
return travelDocumentIdentifier;
}
/**
* Sets the travelDocumentIdentifier attribute value.
*
* @param travelDocumentIdentifier The travelDocumentIdentifier to set.
*/
public void setTravelDocumentIdentifier(String travelDocumentIdentifier) {
this.travelDocumentIdentifier = travelDocumentIdentifier;
}
/**
* Gets the travelerDetailId attribute.
*
* @return Returns the travelerDetailId.
*/
public Integer getTravelerDetailId() {
return travelerDetailId;
}
/**
* Sets the travelerDetailId attribute value.
*
* @param travelerDetailId The travelerDetailId to set.
*/
public void setTravelerDetailId(Integer travelerDetailId) {
this.travelerDetailId = travelerDetailId;
}
/**
* Gets the travelAdvanceId attribute.
*
* @return Returns the travelAdvanceId.
*/
public String getTravelDocumentNumber() {
return travelAdvanceDocumentNumber;
}
/**
* Sets the travelAdvanceId attribute value.
*
* @param travelAdvanceId The travelAdvanceId to set.
*/
public void setTravelAdvanceDocumentNumber(String travelAdvanceDocumentNumber) {
this.travelAdvanceDocumentNumber = travelAdvanceDocumentNumber;
}
/**
* Gets the taxableRamificationNotice attribute.
* @return Returns the taxableRamificationNotice.
*/
public String getTaxableRamificationNotice() {
return taxableRamificationNotice;
}
/**
* Sets the taxableRamificationNotice attribute value.
* @param taxableRamificationNotice The taxableRamificationNotice to set.
*/
public void setTaxableRamificationNotice(String taxableRamificationNotice) {
this.taxableRamificationNotice = taxableRamificationNotice;
}
@Override
public boolean answerSplitNodeQuestion(String nodeName) throws UnsupportedOperationException {
if (nodeName.equals(TemWorkflowConstants.RouteNodeNames.REQUIRED_ACCOUNT_NOTIFICATION)) {
return requireFiscalOfficerFYI();
}
throw new UnsupportedOperationException("Cannot answer split question for this node you call \"" + nodeName + "\"");
}
protected boolean requireFiscalOfficerFYI() {
return this.getParameterService().getParameterValueAsBoolean(TaxableRamificationNotificationStep.class, TemConstants.TaxRamificationParameter.SEND_FYI_TO_FISCAL_OFFICER_IND);
}
/**
* Read only method to look up accounting lines associated with the advance. Couldn't do this in OJB because collection-descriptor
* assumes the collection is related to your PK. Because it's stupid.
* @return the accounting lines associated with the travel advance associated with this document
*/
public List<TemSourceAccountingLine> getAdvanceAccountingLines() {
if (advanceAccountingLines == null) {
Map<String, Object> fieldValues = new HashMap<String, Object>();
fieldValues.put(KFSPropertyConstants.DOCUMENT_NUMBER, getTravelDocumentNumber());
fieldValues.put(KFSPropertyConstants.FINANCIAL_DOCUMENT_LINE_TYPE_CODE, TemConstants.TRAVEL_ADVANCE_ACCOUNTING_LINE_TYPE_CODE);
advanceAccountingLines = new ArrayList<TemSourceAccountingLine>();
advanceAccountingLines.addAll(SpringContext.getBean(BusinessObjectService.class).findMatchingOrderBy(TemSourceAccountingLine.class, fieldValues, KFSPropertyConstants.SEQUENCE_NUMBER, true));
}
return advanceAccountingLines;
}
}