View Javadoc
1   /*
2    * The Kuali Financial System, a comprehensive financial management system for higher education.
3    *
4    * Copyright 2005-2014 The Kuali Foundation
5    *
6    * This program is free software: you can redistribute it and/or modify
7    * it under the terms of the GNU Affero General Public License as
8    * published by the Free Software Foundation, either version 3 of the
9    * License, or (at your option) any later version.
10   *
11   * This program is distributed in the hope that it will be useful,
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   * GNU Affero General Public License for more details.
15   *
16   * You should have received a copy of the GNU Affero General Public License
17   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
18   */
19  package org.kuali.kfs.integration.ar;
20  
21  import java.sql.Date;
22  import java.util.List;
23  
24  import org.kuali.kfs.integration.cg.ContractsAndGrantsBillingAward;
25  import org.kuali.rice.core.api.util.type.KualiDecimal;
26  
27  /**
28   * Methods needed for Contracts & Grants modules to interact with an Accounts Receivable module to perform Contracts & Grants Billing
29   * operations.
30   * NOTE: If you are not using Contracts & Grants Billing functionality, then there is no reason for your institution to implement this service;
31   * just use the provided no op implementation
32   */
33  public interface AccountsReceivableModuleBillingService {
34      /**
35       * This method gets the award billed to date amount using ContractsGrantsInvoiceDocumentService
36       *
37       * @param award the award to find the total billed to date for
38       * @return the total amount billed to date on the award
39       */
40      public KualiDecimal getAwardBilledToDateAmount(ContractsAndGrantsBillingAward award);
41  
42      /**
43       * This method calculates total payments to date by Award using ContractsGrantsInvoiceDocumentService
44       *
45       * @param proposalNumber
46       * @return
47       */
48      public KualiDecimal calculateTotalPaymentsToDateByAward(Long proposalNumber);
49  
50      /**
51       * This method returns a new instance of the MilestoneSchedule class.
52       *
53       * @return new MilestoneSchedule instance
54       */
55      public AccountsReceivableMilestoneSchedule getMilestoneSchedule();
56  
57      /**
58       * This method returns a new instance of the PredeterminedBillingSchedule class.
59       *
60       * @return new PredeterminedBillingSchedule instance
61       */
62      public AccountsReceivablePredeterminedBillingSchedule getPredeterminedBillingSchedule();
63  
64      /**
65       * Checks to see if the award corresponding to the passed in proposalNumber has a
66       * MilestoneSchedule associated with it.
67       *
68       * @param proposalNumber proposalNumber for the Award use as key to look for MilestoneSchedule
69       * @return true if there is an active MilestoneSchedule for this proposalNumber, false otherwise
70       */
71      public boolean hasMilestoneSchedule(Long proposalNumber);
72  
73      /**
74       * Checks to see if the award corresponding to the passed in proposalNumber has a
75       * PredeterminedBillingSchedule associated with it.
76       *
77       * @param proposalNumber proposalNumber for the Award use as key to look for PredeterminedBillingSchedule
78       * @return true if there is an active PredeterminedBillingSchedule for this proposalNumber, false otherwise
79       */
80      public boolean hasPredeterminedBillingSchedule(Long proposalNumber);
81  
82      /**
83       * Checks to see if the award corresponding to the passed in proposalNumber has active
84       * Milestones associated with it.
85       *
86       * @param proposalNumber proposalNumber for the Award use as key to look for MilestoneSchedule
87       * @return true if there is at least one active Milestone for this proposalNumber, false otherwise
88       */
89      public boolean hasActiveMilestones(Long proposalNumber);
90  
91      /**
92       * Checks to see if the award corresponding to the passed in proposalNumber has active
93       * Bills associated with it.
94       *
95       * @param proposalNumber proposalNumber for the Award use as key to look for PredeterminedBillingSchedule
96       * @return true if there is at least one active Bill for this proposalNumber, false otherwise
97       */
98      public boolean hasActiveBills(Long proposalNumber);
99  
100     /**
101      * Calculate the lastBilledDate for the Award based on it's AwardAccounts
102      *
103      * @param award the Award used to calculate lastBilledDate
104      * @return the lastBilledDate
105      */
106     public Date getLastBilledDate(ContractsAndGrantsBillingAward award);
107 
108     /**
109      * This method checks the Contract Control account set for Award Account based on award's invoicing option.
110      *
111      * @return errorString
112      */
113     public List<String> checkAwardContractControlAccounts(ContractsAndGrantsBillingAward award);
114 
115     /**
116      * Gets the Contracts & Grants Invoice Document Type
117      *
118      * @return Contracts & Grants Invoice Document Type
119      */
120     public String getContractsGrantsInvoiceDocumentType();
121 
122     /**
123      * Determines whether the CG and Billing Enhancements are on from the system parameters
124      *
125      * @return true if Contracts & Grants Billing enhancement is enabled
126      */
127     public boolean isContractsGrantsBillingEnhancementActive();
128 
129     /**
130      * Gets the Default Dunning Campaign code
131      *
132      * @return Default Dunning Campaign code
133      */
134 
135     public String getDefaultDunningCampaignCode();
136 
137 
138     /**
139      * Gets the Default Billing Frequency code
140      *
141      * @return Default Billing Frequency code
142      */
143     public String getDefaultBillingFrequency();
144 
145     /**
146      * Gets the Default Invoicing Option code
147      *
148      * @return Default Invoicing Option code
149      */
150     public String getDefaultInvoicingOption();
151 
152 }