001/*
002 * Copyright 2008 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 org.kuali.ole.sys.service;
017
018import java.util.List;
019
020import org.kuali.ole.sys.businessobject.ElectronicPaymentClaim;
021import org.kuali.rice.kim.api.identity.Person;
022
023/**
024 * A set of methods that help the ElectronicPaymentClaimingService turn a list of ElectronicPaymentClaim records into a document
025 * used to claim those records.
026 * 
027 * @see org.kuali.ole.sys.service.ElectronicPaymentClaimingService
028 * @see org.kuali.ole.sys.businessobject.ElectronicPaymentClaim
029 */
030public interface ElectronicPaymentClaimingDocumentGenerationStrategy {
031
032    /**
033     * Returns the label which will identify the claiming document to users
034     * 
035     * @return a label
036     */
037    public abstract String getDocumentLabel();
038
039    /**
040     * get the workflow document type code of the claiming document
041     * 
042     * @return the workflow document type code of the claiming document
043     */
044    public String getClaimingDocumentWorkflowDocumentType();
045
046    /**
047     * Determines if the given user can use the document wrapped by this ElectronicPaymentClaimingDocumentGenerationStrategy
048     * implementaton to claim any ElectronicPaymentClaim records
049     * 
050     * @param claimingUser the user attempting to claim ElectronicPaymentClaim records with a document
051     * @return true if the user can use this kind of document to claim ElectronicPaymentClaim records, false otherwise
052     */
053    public abstract boolean userMayUseToClaim(Person claimingUser);
054
055    /**
056     * Creates a document to claim a given list of ElectronicPaymentClaim records.
057     * 
058     * @param electronicPayments a List of ElectronicPaymentClaim records
059     * @param user the user doing the claiming
060     * @return the absolute URL that should be redirected to, so that the user can edit the document
061     */
062    public abstract String createDocumentFromElectronicPayments(List<ElectronicPaymentClaim> electronicPayments, Person user);
063
064    /**
065     * Determines whether the given document number would be considered valid by the system that the document this strategy
066     * interacts with
067     * 
068     * @param referenceDocumentNumber the document number reference to validate
069     * @return true if the document reference is considered valid, false otherwise
070     */
071    public abstract boolean isDocumentReferenceValid(String referenceDocumentNumber);
072}