001 /*
002 * Copyright 2011 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 org.kuali.kfs.sys.service;
017
018 import java.util.List;
019 import java.util.Map;
020
021 import org.kuali.kfs.fp.document.AdvanceDepositDocument;
022 import org.kuali.kfs.sys.businessobject.AccountingLine;
023 import org.kuali.kfs.sys.businessobject.ElectronicPaymentClaim;
024 import org.kuali.rice.kim.bo.Person;
025 import org.kuali.rice.kns.document.Document;
026
027 /**
028 * A service which helps in the claiming of ElectronicPaymentClaim records
029 */
030 public interface ElectronicPaymentClaimingService {
031
032 /**
033 * Constructs a List of Notes that detail which ElectronicPaymentClaim records have been claimed by a document
034 *
035 * @param claims the ElectronicPaymentClaim record that will be claimed by a document
036 * @param claimingUser the user who's actually claiming ElectronicPaymentClaim records
037 * @return a List of Notes that will summarize that claiming.
038 */
039 public abstract List<String> constructNoteTextsForClaims(List<ElectronicPaymentClaim> claims);
040
041 /**
042 * Returns a list of which document types the given user can claim Electronic Payment Claims with.
043 *
044 * @param user the user attempting to use a document to claim ElectronicPaymentClaim records
045 * @return a list of ElectronicPaymentClaimingDocumentGenerationStrategy document helper implementations
046 */
047 public abstract List<ElectronicPaymentClaimingDocumentGenerationStrategy> getClaimingDocumentChoices(Person user);
048
049 /**
050 * Given a List of ElectronicPaymentClaim records and a ElectronicPaymentClaimingDocumentGenerationStrategy document helper
051 * implementation, creates a document that will claim; this method should also do the work of "claiming" each of the given
052 * ElectronicPaymentClaim records by filling in their referenceFinancialDocumentNumber field.
053 *
054 * @param claims the List of ElectronicPaymentClaim records to claim with a document
055 * @param documentCreationHelper the document helper which will help this method in constructing the claiming document
056 * @param user the Person record of the user who is claiming the given electronic payments
057 * @return the URL to redirect to, so the user can edit the document
058 */
059 public abstract String createPaymentClaimingDocument(List<ElectronicPaymentClaim> claims, ElectronicPaymentClaimingDocumentGenerationStrategy documentCreationHelper, Person user);
060
061 /**
062 * Unclaims all ElectronicPaymentClaim records claimed by the given document, by setting the ElectronicPaymentClaim's reference
063 * document to null.
064 *
065 * @param document the document that claimed ElectronicPaymentClaims and now needs to give them back
066 */
067 public abstract void declaimElectronicPaymentClaimsForDocument(Document document);
068
069 /**
070 * Sets the referenceFinancialDocumentNumber on each of the payments passed in with the given document number and then saves
071 * them.
072 *
073 * @param payments a list of payments to claim
074 * @param docmentNumber the document number of the claiming document
075 */
076 public abstract void claimElectronicPayments(List<ElectronicPaymentClaim> payments, String documentNumber);
077
078 /**
079 * Returns a list of SAVED electronic payment claims from the lines of an AdvanceDepositDocument
080 *
081 * @param doc the document that is generating electronic payment claim records
082 * @return a list of the generated electronic payment claim records
083 */
084 public abstract List<ElectronicPaymentClaim> generateElectronicPaymentClaimRecords(AdvanceDepositDocument doc);
085
086 /**
087 * Determines if the given accounting line represents an electronic payment
088 * @param accountingLine the accounting line to check
089 * @return true if the accounting line does represent an electronic payment, false otherwise
090 */
091 public abstract boolean representsElectronicFundAccount(AccountingLine accountingLine);
092
093 /**
094 * check whether the given user has permission to claim eletronic payment for the given document type defined in the specified
095 * namespace
096 *
097 * @param user the given user being checked
098 * @param namespaceCode the specified namespace
099 * @param workflowDocumentTypeName the workflow document type name of the document being claimed
100 * @return true if the user has permisson to claim electronic payment; otherwise, false
101 */
102 public abstract boolean isAuthorizedForClaimingElectronicPayment(Person user, String workflowDocumentTypeName);
103
104 }