| 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 |