Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
CourseOffering |
|
| 1.0;1 |
1 | /* | |
2 | * Copyright 2010 The Kuali Foundation | |
3 | * | |
4 | * Licensed under the Educational Community License, Version 2.0 (the | |
5 | * "License"); you may not use this file except in compliance with the | |
6 | * License. You may obtain a copy of the License at | |
7 | * | |
8 | * http://www.osedu.org/licenses/ECL-2.0 | |
9 | * | |
10 | * Unless required by applicable law or agreed to in writing, software | |
11 | * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or | |
13 | * implied. See the License for the specific language governing | |
14 | * permissions and limitations under the License. | |
15 | */ | |
16 | ||
17 | package org.kuali.student.enrollment.courseoffering.infc; | |
18 | ||
19 | import java.util.List; | |
20 | ||
21 | import org.kuali.student.r2.common.infc.IdEntity; | |
22 | import org.kuali.student.r2.common.infc.IdNamelessEntity; | |
23 | import org.kuali.student.r2.common.infc.RichText; | |
24 | import org.kuali.student.r2.common.infc.TimeAmount; | |
25 | import org.kuali.student.r2.lum.lrc.infc.ResultValuesGroup; | |
26 | import org.kuali.student.r2.lum.clu.dto.ExpenditureInfo; | |
27 | import org.kuali.student.r2.lum.clu.dto.RevenueInfo; | |
28 | import org.kuali.student.r2.lum.clu.infc.Fee; | |
29 | ||
30 | /** | |
31 | * @author Kamal | |
32 | */ | |
33 | ||
34 | public interface CourseOffering extends IdNamelessEntity{ | |
35 | ||
36 | /** | |
37 | * A unique identifier assigned to all approved courses that exist | |
38 | * in the catalog This is not updatable once initialized. | |
39 | * | |
40 | * @name Course Id | |
41 | * @readOnly | |
42 | * @required | |
43 | * @impl this maps the the version dependent id as the offering | |
44 | * must point to one and only one version of the | |
45 | * course. Maps to cluId in Lui. | |
46 | */ | |
47 | public String getCourseId(); | |
48 | ||
49 | /** | |
50 | * Academic term of course offering | |
51 | * | |
52 | * @name Term Id | |
53 | * @readOnly on updates | |
54 | * @required | |
55 | * @impl set during the #createCourseOffering and then maps to | |
56 | * the aptKey on the Lui | |
57 | */ | |
58 | public String getTermId(); | |
59 | ||
60 | /** | |
61 | * Identifies the number of a course as reflected in the course catalog. | |
62 | * This typically must be unique across all courses offered during that | |
63 | * term. If the user wants to create two separate offerings for the same | |
64 | * course they must modify this code to make it unique. For example: An | |
65 | * on-line offering of the course might have an "O" appended to it to | |
66 | * distinguish it from the face to face offering, i.e. ENG101 and ENG101O | |
67 | * Initially copied from the course catalog but then, depending on the | |
68 | * configuration it may be updatable. Often this field is configured so that | |
69 | * it is not not directly updatable but rather is calculated from it's two | |
70 | * constituent parts, the subject area and the course number suffix. For | |
71 | * example: Subject Area = "ENG" and Suffix = "101" then code = "ENG101" | |
72 | * | |
73 | * @name Course Offering Code | |
74 | * @impl initialially this is copied from the course catalog code but then | |
75 | * is subsequently stored in the lui as lui.officialIdentifier.code | |
76 | */ | |
77 | public String getCourseOfferingCode(); | |
78 | ||
79 | /** | |
80 | * Identifies the department and/subject code of the course as reflected in | |
81 | * the course catalog. Initially copied from the course catalog but then, | |
82 | * depending on the configuration it may be updatable. In most | |
83 | * configurations this should not be updatable. Often used in the | |
84 | * calculation of the courseCode | |
85 | * | |
86 | * @name Subject Area | |
87 | * @impl initially copied from the canonical course but then stored in the | |
88 | * Lui as lui.officialIdentifier.division | |
89 | */ | |
90 | public String getSubjectArea(); | |
91 | ||
92 | /** | |
93 | * A suffix of the course number as reflected in the college catalog. This | |
94 | * is the "number" portion of the course code. Initially copied from the | |
95 | * course catalog but then, depending on the configuration it may be | |
96 | * updatable. This field is often configured to be updatable but the updates | |
97 | * typically simply append something like an "O" for on-line to it to | |
98 | * differentiate multiple course offerings for the same course. Often used | |
99 | * in the calculation of the courseCode. | |
100 | * | |
101 | * @name Course Number Suffix | |
102 | * @impl initially copied from the canonical course but then stored in the | |
103 | * Lui as lui.officialIdentifier.suffixCode | |
104 | */ | |
105 | public String getCourseNumberSuffix(); | |
106 | ||
107 | /** | |
108 | * Name of the course used in the college catalog. Initially copied from the | |
109 | * course catalog but then, depending on the configuration it may be | |
110 | * updatable. For regular courses this is not generally allowed to be | |
111 | * updated on the offering, but for special topics courses this is often | |
112 | * overridden to capture the particular topic being taught offered this | |
113 | * term. Note: the configuration of the validation for titles is typically | |
114 | * restricted to exclude line breaks. This may have to be loosened as some | |
115 | * schools may want the particular topic to appear on a 2nd line. For | |
116 | * example: SPECIAL TOPICS: AN EXPLORATION OF DEEP SPACE ARTIFACTS | |
117 | * l | |
118 | * @name Course Title | |
119 | * @impl initially copied from the canonical course but then stored in the | |
120 | * Lui as lui.officialIdentifier.longName | |
121 | */ | |
122 | public String getCourseOfferingTitle(); | |
123 | ||
124 | /** | |
125 | * Indicates that the entire course offering is an Honors Course ??? Is this | |
126 | * an enrollment restriction rule or a flag or both? | |
127 | * | |
128 | * @name Is Honors Offering | |
129 | * @impl store in a generic lui luCodes type of field? | |
130 | */ | |
131 | public Boolean getIsHonorsOffering(); | |
132 | ||
133 | /** | |
134 | * Total maximum number of "seats" or enrollment slots that can be filled | |
135 | * for the offering. Calculated based on sum of all the maximum seats of | |
136 | * primary activity type offerings. | |
137 | * | |
138 | * @name Maximum Enrollment | |
139 | * @impl maps to Lui.maximumEnrollment | |
140 | */ | |
141 | public Integer getMaximumEnrollment(); | |
142 | ||
143 | /** | |
144 | * Total minimum number of seats that must be filled for the offering not to | |
145 | * be canceled. Calculated based on sum of all the minimum seats of primary | |
146 | * activity type offerings | |
147 | * | |
148 | * @name Minimum Enrollment | |
149 | * @impl maps to Lui.minimumEnrollment | |
150 | */ | |
151 | public Integer getMinimumEnrollment(); | |
152 | ||
153 | /** | |
154 | * The unique identifier of the other course offerings with which this | |
155 | * offering is joint-listed | |
156 | * | |
157 | * @name Joint Offering Ids | |
158 | * @readOnly I think? | |
159 | * @impl Canonical might suggest offerings that can be jointly offered. This | |
160 | * is stored as a luiluirelation of joint type | |
161 | */ | |
162 | public List<String> getJointOfferingIds(); | |
163 | ||
164 | /******** Assessment Information ***************/ | |
165 | ||
166 | /** | |
167 | * The options/scales that indicate the allowable grades within a | |
168 | * grading scheme that can be awarded. Typically, the values here | |
169 | * are constrained by the values on the canonical course. If the | |
170 | * value is set here then the Clu must have a grading option set | |
171 | * on the canonical activity. For example: an id might point to | |
172 | * Pass/Fail or Letter Graded option. | |
173 | * | |
174 | * @name: Grading Option Id | |
175 | * @impl Lui.resultOptionIds of type ??? | |
176 | */ | |
177 | public String getGradingOptionId(); | |
178 | ||
179 | /** | |
180 | * The options/scales that indicate the allowable grades within a | |
181 | * grading scheme in which an eligible student can register. This | |
182 | * list of options includes the Grading Option Id plus any | |
183 | * additional grading schemes, such as P/F or Audit. | |
184 | * | |
185 | * @name: registration Grading Option Ids | |
186 | * @impl Lui.resultOptionIds of type ??? | |
187 | */ | |
188 | public List<String> getRegistrationGradingOptionIds(); | |
189 | ||
190 | /** | |
191 | * A display string for the credit option. | |
192 | * | |
193 | * @name Credit Option Display | |
194 | * @readOnly | |
195 | */ | |
196 | public String getCreditOptionDisplay(); | |
197 | ||
198 | /** | |
199 | * Type of credit of course offering. This field is initially copied from | |
200 | * the canonical course but then, depending on configuration, it may be | |
201 | * updated. TODO: figure out which of the credit options will be copied down | |
202 | * because the canonical has more than one! Often it is just a fixed single | |
203 | * value but a ResultValuesGroup could contain a range (with increments) or | |
204 | * even a discrete list of possible credit values. | |
205 | * | |
206 | * @name Credit Option Id | |
207 | * @impl Lui.resultOptionIds returns a list of resultOptions. Filter option | |
208 | * with credit type and that should give the resultValueGroup. | |
209 | */ | |
210 | public String getCreditOptionId(); | |
211 | ||
212 | ||
213 | /******** Personnel Information *****************/ | |
214 | ||
215 | /** | |
216 | * Instructors for this course offering TODO: find out if the canonical | |
217 | * instructors should be copied down | |
218 | * | |
219 | * @name Instructors | |
220 | * @impl These are derived from Lui Person relations with instructor type | |
221 | */ | |
222 | public List<? extends OfferingInstructor> getInstructors(); | |
223 | ||
224 | /********* Organization Information **************/ | |
225 | ||
226 | /** | |
227 | * Organization(s) that is responsible for administering the course delivery | |
228 | * - and all associated logistics - of the course Initially copied from the | |
229 | * canonical course then, depending on the configuration, updated This is | |
230 | * typically an academic department but could be for example the extended | |
231 | * studies office that is responsible for delivering the course even though | |
232 | * it's content is managed by an academic department. | |
233 | * | |
234 | * @name Units Deployment | |
235 | * @impl initalized from canonical course units deployment but then stored | |
236 | * in lui.unitsDeployment | |
237 | */ | |
238 | public List<String> getUnitsDeploymentOrgIds(); | |
239 | ||
240 | /** | |
241 | * Organization(s) that is responsible for the academic content of the | |
242 | * course as approved in its canonical form. This is the organization that | |
243 | * has oversight of the curriculum. This is typically an academic | |
244 | * department. | |
245 | * | |
246 | * @name Units Content Owner | |
247 | * @readOnly on updates | |
248 | * @impl this is never updatable so it should just be grabbed from the | |
249 | * canonical course and then stored in lui.unitsContentOwner | |
250 | */ | |
251 | public List<String> getUnitsContentOwnerOrgIds(); | |
252 | ||
253 | ||
254 | ||
255 | /*********** Waitlist *****************************/ | |
256 | ||
257 | /* | |
258 | * TODO: Skip this section for core slice development | |
259 | */ | |
260 | ||
261 | /** | |
262 | * Indicates whether a RegistrationGroup has a waitlist TODO: figure out how | |
263 | * to store this TODO: make sure we are consistent on how we spell Waitlist, | |
264 | * should be spelled Waitlist, or Wait List or Wait-List (as the | |
265 | * merriam-webster has it) | |
266 | * | |
267 | * @name Has Waitlist | |
268 | * @impl not sure how to store this, it depends on how we end up | |
269 | * implementing waitlists. | |
270 | */ | |
271 | public Boolean getHasWaitlist(); | |
272 | ||
273 | /** | |
274 | * Indicates the type of waitlist as it relates to processing students on | |
275 | * and off The three types predefined in kuali are Automatic, Semi-Automatic | |
276 | * and Manual TODO: Right not Waitlist types are not tied to any Waitlist | |
277 | * object so we need to define an "other key" to get the list of valid | |
278 | * values from the type service. TODO: Decide if we need a separate | |
279 | * getHasWaitList, perhaps no value in this field means no waitlist. TODO: | |
280 | * Cross validate with hasWaitlist | |
281 | * | |
282 | * @name Waitlist Type Key | |
283 | * @impl TODO: decide if this this should be stored on the Lui or on a | |
284 | * waitlist object? | |
285 | */ | |
286 | public String getWaitlistTypeKey(); | |
287 | ||
288 | /** | |
289 | * Indicates the waitlist level, i.e., CourseOffering or ActivityOffering | |
290 | * | |
291 | * @name Waitlist Level Type Key | |
292 | */ | |
293 | ||
294 | public String getWaitlistLevelTypeKey(); | |
295 | ||
296 | /************* Finances ***************************/ | |
297 | ||
298 | /** | |
299 | * The primary source of funding for the offering. | |
300 | * | |
301 | * @name Funding Source | |
302 | * @impl fyi "funding source" is an enumeration values are state support, | |
303 | * self-support, contract funding | |
304 | */ | |
305 | public String getFundingSource(); | |
306 | ||
307 | /** | |
308 | * Flag indicating whether a course is eligible for Financial Aid. Derived | |
309 | * from course catalog (canonical) TODO: find a place to store this on the | |
310 | * canonical course because it does not currently exist there TODO: Decide | |
311 | * if this is really a rule or a CluSet or what? | |
312 | * | |
313 | * @name Is Financial Aid Eligible | |
314 | * @impl TODO: decide where to store | |
315 | */ | |
316 | public Boolean getIsFinancialAidEligible(); | |
317 | ||
318 | /** | |
319 | * Places where this Course offering is offered. | |
320 | * | |
321 | * @name Campus Locations | |
322 | */ | |
323 | public List<String> getCampusLocations() ; | |
324 | ||
325 | /** | |
326 | * Custom Descr for the course Offering | |
327 | * @name Course Offering Description | |
328 | */ | |
329 | public RichText getDescr(); | |
330 | ||
331 | /** | |
332 | * Is this a Honors Course offering | |
333 | * @name Honors Flag | |
334 | */ | |
335 | public Boolean getHonorsOffering(); | |
336 | ||
337 | /** | |
338 | * Is this Course Offering Financial aid eligible | |
339 | * @name Financial Aid Eligible Flag | |
340 | */ | |
341 | public Boolean getFinancialAidEligible(); | |
342 | ||
343 | /** | |
344 | * Indicates whether a final exam is to be given for this format Offering | |
345 | * and if its true, the level at which it exists | |
346 | * | |
347 | * @name Has Final Exam | |
348 | */ | |
349 | public Boolean getHasFinalExam(); | |
350 | ||
351 | /** | |
352 | * Indicates whether the fee is at activity offering level or course offering | |
353 | * level. If true its at Activity Offering level, if false its at CourseOffering level. | |
354 | * | |
355 | * | |
356 | * @name Is Fee at Activity Offering | |
357 | */ | |
358 | public Boolean getIsFeeAtActivityOffering(); | |
359 | ||
360 | /** | |
361 | * Indicates whether the course offering has an evaluation | |
362 | * | |
363 | * | |
364 | * @name Is Evaluated | |
365 | */ | |
366 | public Boolean getIsEvaluated(); | |
367 | } | |
368 |