/* * 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.service.impl; import java.sql.Date; import java.sql.Timestamp; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.kuali.kfs.integration.ar.AccountsReceivableOrganizationOptions; import org.kuali.kfs.module.tem.businessobject.ActualExpense; import org.kuali.kfs.module.tem.businessobject.ExpenseTypeAware; import org.kuali.kfs.module.tem.businessobject.GroupTraveler; import org.kuali.kfs.module.tem.businessobject.PerDiem; import org.kuali.kfs.module.tem.businessobject.PerDiemExpense; import org.kuali.kfs.module.tem.businessobject.SpecialCircumstances; import org.kuali.kfs.module.tem.businessobject.TemExpense; import org.kuali.kfs.module.tem.businessobject.TemProfile; import org.kuali.kfs.module.tem.businessobject.TemSourceAccountingLine; import org.kuali.kfs.module.tem.businessobject.TransportationModeDetail; import org.kuali.kfs.module.tem.businessobject.TravelAdvance; import org.kuali.kfs.module.tem.businessobject.TripType; import org.kuali.kfs.module.tem.document.TEMReimbursementDocument; import org.kuali.kfs.module.tem.document.TravelAuthorizationDocument; import org.kuali.kfs.module.tem.document.TravelDocument; import org.kuali.kfs.module.tem.document.TravelReimbursementDocument; import org.kuali.kfs.module.tem.document.service.TravelDocumentService; import org.kuali.rice.core.api.datetime.DateTimeService; import org.kuali.rice.core.api.util.KeyValue; import org.kuali.rice.core.api.util.type.KualiDecimal; import org.kuali.rice.kew.api.exception.WorkflowException; import org.kuali.rice.kim.api.identity.Person; import org.kuali.rice.krad.document.Document; import org.kuali.rice.krad.uif.field.LinkField; /** * Mock Travel Document Service Implementation */ public class MockTravelDocumentServiceImpl implements TravelDocumentService { protected static Logger LOG = Logger.getLogger(MockTravelDocumentServiceImpl.class); protected TravelDocumentService realTravelDocumentService; protected DateTimeService dateTimeService; public static final String VALID_DOCUMENT_IDENTIFIER = "T-MOCK"; public static final int VALID_TEM_PROFILE_ID = 37; @Override public TravelDocument findRootForTravelReimbursement(String travelDocumentIdentifier) { if (StringUtils.equals(travelDocumentIdentifier, VALID_DOCUMENT_IDENTIFIER)) { return createTA(); } else { return realTravelDocumentService.findRootForTravelReimbursement(travelDocumentIdentifier); } } protected TravelAuthorizationDocument createTA() { TravelAuthorizationDocument ta = new TravelAuthorizationDocument(); ta.setTravelDocumentIdentifier(VALID_DOCUMENT_IDENTIFIER); ta.setTemProfile(createTemProfile()); ta.setTemProfileId(ta.getTemProfile().getProfileId()); return ta; } protected TemProfile createTemProfile() { TemProfile profile = new TemProfile(); profile.setProfileId(VALID_TEM_PROFILE_ID); profile.getTemProfileAddress().setProfileId(VALID_TEM_PROFILE_ID); profile.setDefaultChartCode("BL"); profile.setDefaultAccount("1031400"); profile.setDefaultSubAccount("ADV"); profile.setDefaultProjectCode("KUL"); profile.setDateOfBirth(dateTimeService.getCurrentSqlDate()); profile.setGender("M"); profile.setHomeDeptOrgCode("BL"); profile.setHomeDeptChartOfAccountsCode("BL"); return profile; } public void setTravelDocumentService(TravelDocumentService travelDocumentService) { this.realTravelDocumentService = travelDocumentService; } public void setDateTimeService(DateTimeService dateTimeService) { this.dateTimeService = dateTimeService; } /** methods which haven't been changed for testing **/ @Override public String getMessageFrom(final String messageType, String... args) { return realTravelDocumentService.getMessageFrom(messageType, args); } @Override public List<SpecialCircumstances> findActiveSpecialCircumstances(String documentNumber, String documentType) { return realTravelDocumentService.findActiveSpecialCircumstances(documentNumber, documentType); } @Override public List<TravelAuthorizationDocument> findAuthorizationDocuments(final String travelDocumentNumber) { return realTravelDocumentService.findAuthorizationDocuments(travelDocumentNumber); } @Override public List<String> findAuthorizationDocumentNumbers(final String travelDocumentNumber) { return realTravelDocumentService.findAuthorizationDocumentNumbers(travelDocumentNumber); } @Override public List<TravelReimbursementDocument> findReimbursementDocuments(final String travelDocumentNumber) { return realTravelDocumentService.findReimbursementDocuments(travelDocumentNumber); } @Override public void updatePerDiemItemsFor(final TravelDocument document, final List<PerDiemExpense> perDiemList, final Integer perDiemId, final Timestamp start, final Timestamp end) { realTravelDocumentService.updatePerDiemItemsFor(document, perDiemList, perDiemId, start, end); } @Override public Map<String, List<Document>> getDocumentsRelatedTo(final TravelDocument document) throws WorkflowException { return realTravelDocumentService.getDocumentsRelatedTo(document); } @Override public Map<String, List<Document>> getDocumentsRelatedTo(final String documentNumber) throws WorkflowException { return realTravelDocumentService.getDocumentsRelatedTo(documentNumber); } @Override public List<Document> getDocumentsRelatedTo(final TravelDocument document, String... documentType) { return realTravelDocumentService.getDocumentsRelatedTo(document, documentType); } @Override public void addAdHocFYIRecipient(final Document document) { realTravelDocumentService.addAdHocFYIRecipient(document); } @Override public void addAdHocFYIRecipient(final Document document, String initiatorUserId) { realTravelDocumentService.addAdHocFYIRecipient(document, initiatorUserId); } @Override public void addAdHocRecipient(Document document, String initiatorUserId, String actionRequested) { realTravelDocumentService.addAdHocRecipient(document, initiatorUserId, actionRequested); } @Override public void routeToFiscalOfficer(final TravelDocument document, final String noteText) throws WorkflowException, Exception { realTravelDocumentService.routeToFiscalOfficer(document, noteText); } @Override public PerDiemExpense copyPerDiemExpense(PerDiemExpense perDiemExpense) { return realTravelDocumentService.copyPerDiemExpense(perDiemExpense); } @Override public KualiDecimal calculateMileage(ActualExpense actualExpense) { return realTravelDocumentService.calculateMileage(actualExpense); } @Override public void handleNewActualExpense(final ActualExpense newActualExpenseLine) { realTravelDocumentService.handleNewActualExpense(newActualExpenseLine); } @Override public Map<String, KualiDecimal> calculateDailyTotal(PerDiemExpense perDiemMilaeage) { return realTravelDocumentService.calculateDailyTotal(perDiemMilaeage); } @Override public List<Map<String, KualiDecimal>> calculateDailyTotals(List<PerDiemExpense> perDiemExpenses) { return realTravelDocumentService.calculateDailyTotals(perDiemExpenses); } @Override public void copyDownPerDiemExpense(TravelDocument travelDocument, int copyIndex, List<PerDiemExpense> perDiemExpenses) { realTravelDocumentService.copyDownPerDiemExpense(travelDocument, copyIndex, perDiemExpenses); } @Override public boolean isHostedMeal(final ExpenseTypeAware havingExpenseType) { return realTravelDocumentService.isHostedMeal(havingExpenseType); } @Override public boolean isTravelManager(final Person user) { return realTravelDocumentService.isTravelManager(user); } @Override public Integer calculateProratePercentage(PerDiemExpense perDiemExpense, String perDiemCalcMethod, Timestamp tripEnd) { return realTravelDocumentService.calculateProratePercentage(perDiemExpense, perDiemCalcMethod, tripEnd); } @Override public boolean isOpen(TravelDocument document) { return realTravelDocumentService.isOpen(document); } @Override public boolean isProcessed(TravelDocument document) { return realTravelDocumentService.isProcessed(document); } @Override public boolean isFinal(TravelDocument document) { return realTravelDocumentService.isFinal(document); } @Override public boolean isTravelAuthorizationProcessed(TravelAuthorizationDocument document) { return realTravelDocumentService.isTravelAuthorizationProcessed(document); } @Override public boolean isTravelAuthorizationOpened(TravelAuthorizationDocument document) { return realTravelDocumentService.isTravelAuthorizationOpened(document); } @Override public boolean isUnsuccessful(TravelDocument document) { return realTravelDocumentService.isUnsuccessful(document); } @Override public Integer calculatePerDiemPercentageFromTimestamp(PerDiemExpense perDiemExpense, Timestamp tripEnd) { return realTravelDocumentService.calculatePerDiemPercentageFromTimestamp(perDiemExpense, tripEnd); } @Override public KualiDecimal getAmountDueFromInvoice(String documentNumber, KualiDecimal requestedAmount) { return realTravelDocumentService.getAmountDueFromInvoice(documentNumber, requestedAmount); } @Override public TravelAuthorizationDocument findCurrentTravelAuthorization(TravelDocument document) { return realTravelDocumentService.findCurrentTravelAuthorization(document); } @Override public KualiDecimal getTotalCumulativeReimbursements(TravelDocument document) { return realTravelDocumentService.getTotalCumulativeReimbursements(document); } @Override public KualiDecimal getTotalAuthorizedEncumbrance(TravelDocument document) { return realTravelDocumentService.getTotalAuthorizedEncumbrance(document); } @Override public boolean isResponsibleForAccountsOn(final TravelDocument document, String principalId) { return realTravelDocumentService.isResponsibleForAccountsOn(document, principalId); } @Override public boolean checkNonEmployeeTravelerTypeCode(String travelerTypeCode) { return realTravelDocumentService.checkNonEmployeeTravelerTypeCode(travelerTypeCode); } @Override public String getAllStates(final String countryCode) { return realTravelDocumentService.getAllStates(countryCode); } @Override public List<GroupTraveler> copyGroupTravelers(List<GroupTraveler> groupTravelers, String documentNumber) { return realTravelDocumentService.copyGroupTravelers(groupTravelers, documentNumber); } @Override public List<? extends TemExpense> copyActualExpenses(List<? extends TemExpense> actualExpenses, String documentNumber) { return realTravelDocumentService.copyActualExpenses(actualExpenses, documentNumber); } @Override public List<PerDiemExpense> copyPerDiemExpenses(List<PerDiemExpense> perDiemExpenses, String documentNumber) { return realTravelDocumentService.copyPerDiemExpenses(perDiemExpenses, documentNumber); } @Override public List<TravelAdvance> copyTravelAdvances(List<TravelAdvance> travelAdvances, String documentNumber) { return realTravelDocumentService.copyTravelAdvances(travelAdvances, documentNumber); } @Override public List<SpecialCircumstances> copySpecialCircumstances(List<SpecialCircumstances> specialCircumstancesList, String documentNumber) { return realTravelDocumentService.copySpecialCircumstances(specialCircumstancesList, documentNumber); } @Override public List<TransportationModeDetail> copyTransportationModeDetails(List<TransportationModeDetail> transportationModeDetails, String documentNumber) { return realTravelDocumentService.copyTransportationModeDetails(transportationModeDetails, documentNumber); } @Override public void showNoTravelAuthorizationError(TravelReimbursementDocument document) { realTravelDocumentService.showNoTravelAuthorizationError(document); } @Override public KualiDecimal getAdvancesTotalFor(final TravelDocument travelDocument) { return realTravelDocumentService.getAdvancesTotalFor(travelDocument); } @Override public List<TravelAdvance> getOutstandingTravelAdvanceByInvoice(Set<String> arInvoiceDocNumber) { return realTravelDocumentService.getOutstandingTravelAdvanceByInvoice(arInvoiceDocNumber); } @Override public String retrieveAddressFromLocationCode(String locationCode) { return realTravelDocumentService.retrieveAddressFromLocationCode(locationCode); } @Override public void detachImportedExpenses(TravelDocument document) { realTravelDocumentService.detachImportedExpenses(document); } @Override public void attachImportedExpenses(TravelDocument document) { realTravelDocumentService.attachImportedExpenses(document); } @Override public boolean checkHoldGLPEs(TravelDocument document) { return realTravelDocumentService.checkHoldGLPEs(document); } @Override public void revertOriginalDocument(TravelDocument travelDocument, String status) { realTravelDocumentService.revertOriginalDocument(travelDocument, status); } @Override public Date findLatestTaxableRamificationNotificationDate() { return realTravelDocumentService.findLatestTaxableRamificationNotificationDate(); } @Override public boolean validateSourceAccountingLines(TravelDocument travelDocument, boolean addToErrorPath) { return realTravelDocumentService.validateSourceAccountingLines(travelDocument, addToErrorPath); } @Override public String getDocumentType(TravelDocument document) { return realTravelDocumentService.getDocumentType(document); } @Override public List<KeyValue> getMileageRateKeyValues(Date searchDate) { return realTravelDocumentService.getMileageRateKeyValues(searchDate); } @Override public List<GroupTraveler> importGroupTravelers(final TravelDocument document, final String csvData) throws Exception { return realTravelDocumentService.importGroupTravelers(document, csvData); } @Override public <T> List<T> importFile(final String fileContents, final Class<T> c, final String[] attributeNames, final Map<String,List<String>> defaultValues, final Integer[] attributeMaxLength, final String tabErrorKey) { return realTravelDocumentService.importFile(fileContents, c, attributeNames, defaultValues, attributeMaxLength, tabErrorKey); } @Override public List<TravelAdvance> getTravelAdvancesForTrip(String travelDocumentIdentifier) { return realTravelDocumentService.getTravelAdvancesForTrip(travelDocumentIdentifier); } @Override public AccountsReceivableOrganizationOptions getOrgOptions() { return realTravelDocumentService.getOrgOptions(); } @Override public void disableDuplicateExpenses(TravelDocument trDocument, ActualExpense actualExpense) { realTravelDocumentService.disableDuplicateExpenses(trDocument, actualExpense); } @Override public void setPerDiemMealsAndIncidentals(PerDiemExpense expense, PerDiem perDiem, TripType tripType, Timestamp tripEnd, boolean shouldProrate) { realTravelDocumentService.setPerDiemMealsAndIncidentals(expense, perDiem, tripType, tripEnd, shouldProrate); } @Override public TravelDocument getParentTravelDocument(String travelDocumentIdentifier) { return realTravelDocumentService.getParentTravelDocument(travelDocumentIdentifier); } @Override public Collection<String> getApprovedTravelDocumentNumbersByTrip(String travelDocumentIdentifier) { return realTravelDocumentService.getApprovedTravelDocumentNumbersByTrip(travelDocumentIdentifier); } @Override public List<String> findMatchingTrips(TravelDocument document) { return realTravelDocumentService.findMatchingTrips(document); } @Override public void restorePerDiemProperty(TravelDocument document, String property) { realTravelDocumentService.restorePerDiemProperty(document, property); } @Override public TravelDocument getRootTravelDocumentWithoutWorkflowDocument(String travelDocumentIdentifier) { return realTravelDocumentService.getRootTravelDocumentWithoutWorkflowDocument(travelDocumentIdentifier); } @Override public List<TemSourceAccountingLine> smooshAccountingLinesToSubAccount(List<TemSourceAccountingLine> originalAccountingLines) { return realTravelDocumentService.smooshAccountingLinesToSubAccount(originalAccountingLines); } @Override public List<LinkField> getAgencyLinks(TravelDocument travelDocument) { return realTravelDocumentService.getAgencyLinks(travelDocument); } @Override public String customizeAgencyLink(TravelDocument travelDocument, String agencyName, String link) { return realTravelDocumentService.customizeAgencyLink(travelDocument, agencyName, link); } @Override public boolean isDocumentStatusValidForReconcilingCharges(TravelDocument travelDocument) { return realTravelDocumentService.isDocumentStatusValidForReconcilingCharges(travelDocument); } @Override public boolean isInitiatorTraveler(TravelDocument travelDoc) { return realTravelDocumentService.isInitiatorTraveler(travelDoc); } @Override public boolean requiresTravelerApproval(TravelAuthorizationDocument taDoc) { return realTravelDocumentService.requiresTravelerApproval(taDoc); } @Override public boolean requiresTravelerApproval(TEMReimbursementDocument trDoc) { return realTravelDocumentService.requiresTravelerApproval(trDoc); } }