1 package org.kuali.student.enrollment.class2.courseoffering.service.facade; 2 3 import org.kuali.rice.core.api.util.KeyValue; 4 import org.kuali.student.enrollment.class2.courseoffering.service.facade.issue.CourseOfferingAutogenIssue; 5 import org.kuali.student.enrollment.courseoffering.dto.ActivityOfferingClusterInfo; 6 import org.kuali.student.enrollment.courseoffering.dto.ActivityOfferingInfo; 7 import org.kuali.student.enrollment.courseoffering.dto.CourseOfferingInfo; 8 import org.kuali.student.enrollment.coursewaitlist.dto.CourseWaitListInfo; 9 import org.kuali.student.r2.common.dto.BulkStatusInfo; 10 import org.kuali.student.r2.common.dto.ContextInfo; 11 import org.kuali.student.r2.common.exceptions.AlreadyExistsException; 12 import org.kuali.student.r2.common.exceptions.DataValidationErrorException; 13 import org.kuali.student.r2.common.exceptions.DependentObjectsExistException; 14 import org.kuali.student.r2.common.exceptions.DoesNotExistException; 15 import org.kuali.student.r2.common.exceptions.InvalidParameterException; 16 import org.kuali.student.r2.common.exceptions.MissingParameterException; 17 import org.kuali.student.r2.common.exceptions.OperationFailedException; 18 import org.kuali.student.r2.common.exceptions.PermissionDeniedException; 19 import org.kuali.student.r2.common.exceptions.ReadOnlyException; 20 import org.kuali.student.r2.common.exceptions.VersionMismatchException; 21 import org.kuali.student.r2.core.acal.dto.TermInfo; 22 23 import java.util.HashMap; 24 import java.util.List; 25 26 /** 27 * Used to support service calls related to Autogen RGs. 28 * Terminology 29 * AO: activity offering 30 * FO: format offering 31 * AOC: activity offering cluster 32 * RG: registration group 33 */ 34 public interface CourseOfferingServiceFacade { 35 36 /** 37 * Useful for when a cluster is created to create the naming. 38 * 39 * e.g. CL 1, CL 2, CL 3, ... 40 * 41 * @param numberOfExistingClusters used to determine the next name as CL (numberOfExistingClusters+1) 42 * @return the default cluster name for the next cluster. 43 */ 44 public String getDefaultClusterName (int numberOfExistingClusters); 45 46 /** 47 * Useful for when a cluster is created to create the naming. 48 * 49 * e.g. CL 1, CL 2, CL 3, ... 50 * 51 * @param courseOfferingId: determines the CourseOffering that a default cluster will be created within 52 * @return the default cluster name for the next cluster. 53 */ 54 public String getDefaultClusterNamePerCO (String courseOfferingId, ContextInfo context); 55 56 /** 57 * If a Course Offering is brand-new with no AOs, then call this method to create the first default 58 * AOC to be used. 59 * @param foId The format offering ID that the cluster belongs to 60 * @param context Context info 61 * @return the default cluster created 62 * @throws PermissionDeniedException 63 * @throws MissingParameterException 64 * @throws InvalidParameterException 65 * @throws OperationFailedException 66 * @throws DoesNotExistException 67 * @throws ReadOnlyException 68 * @throws DataValidationErrorException 69 */ 70 ActivityOfferingClusterInfo createDefaultCluster(String foId, ContextInfo context) 71 throws PermissionDeniedException, MissingParameterException, 72 InvalidParameterException, OperationFailedException, 73 DoesNotExistException, ReadOnlyException, DataValidationErrorException; 74 75 CourseOfferingInfo copyCourseOfferingToTargetTerm(CourseOfferingInfo coInfo, TermInfo targetTerm, List<String> optionKeys, ContextInfo context) throws InvalidParameterException, PermissionDeniedException, DataValidationErrorException, AlreadyExistsException, ReadOnlyException, OperationFailedException, MissingParameterException, DoesNotExistException 76 ; 77 78 /** 79 * User Story 3: I need the system to automatically create reg groups when I create an AO (via add or copy) 80 * to eliminate the need to manually create them 81 * This creates an AO, then adds the created AO to an AOC, generating RGs as needed 82 * @param aoInfo The AO to be created and added to the AOC 83 * @param aocId The ID of the activity offering cluster 84 * @param context 85 * @return List of RGs created 86 */ 87 ActivityOfferingResult createActivityOffering(ActivityOfferingInfo aoInfo, String aocId, ContextInfo context) 88 throws PermissionDeniedException, DataValidationErrorException, InvalidParameterException, ReadOnlyException, 89 OperationFailedException, MissingParameterException, DoesNotExistException, VersionMismatchException; 90 91 /** 92 * A variant on User Story 3 that does not create an AO (relying on copyAO from the 93 * @param aoId The ID of an AO to copy 94 * @param aocId The AOC cluster ID for the copy of the AO to be associated with 95 * @param context 96 * @return An AOResult with RGs created 97 */ 98 ActivityOfferingResult copyActivityOfferingToCluster(String aoId, String aocId, ContextInfo context) 99 throws PermissionDeniedException, DataValidationErrorException, 100 InvalidParameterException, ReadOnlyException, OperationFailedException, 101 MissingParameterException, DoesNotExistException, VersionMismatchException; 102 103 /** 104 * User Story 4: I need the system to automatically update registration groups as I 105 * update an activity offering(s) so reg group states and messaging remain current. 106 * @param aoInfo AO to be updated 107 * @param context contextInfo 108 * @return AOResult of RGs modified? 109 */ 110 ActivityOfferingResult updateActivityOffering(ActivityOfferingInfo aoInfo, ContextInfo context) 111 throws PermissionDeniedException, DataValidationErrorException, InvalidParameterException, ReadOnlyException, 112 OperationFailedException, MissingParameterException, DoesNotExistException, VersionMismatchException; 113 114 /** 115 * We need an explicit call to update the registration groups. 116 * @param aoInfo AO used and later part of the returned object. This is a pass by reference object so be careful. 117 * @param context contextInfo 118 * @return AOResult of RGs modified? 119 */ 120 ActivityOfferingResult updateRegistrationGroups(ActivityOfferingInfo aoInfo, ContextInfo context) 121 throws PermissionDeniedException, DataValidationErrorException, InvalidParameterException, ReadOnlyException, 122 OperationFailedException, MissingParameterException, DoesNotExistException, VersionMismatchException; 123 124 /** 125 * User Story 5: I need the system to automatically delete all associated registration groups when I delete 126 * an AO from an AOC 127 * A pass-through to the deleteActivityOfferingCascaded. 128 * @param aocId 129 * @param foId 130 * @param context 131 * Doesn't return anything for now. If we need something, can always modify the return type 132 */ 133 void deleteActivityOfferingCascaded(String aoId, ContextInfo context) 134 throws PermissionDeniedException, MissingParameterException, InvalidParameterException, 135 OperationFailedException, DoesNotExistException, DataValidationErrorException, ReadOnlyException, VersionMismatchException; 136 137 /** 138 * User Story 6: As a user, I need the system to automatically create/delete all associated registration 139 * groups when I move an Activity from one AOC to another 140 * Moves an AO from a source AOC to a target AOC. Assumption is each AO Set in an AOC has a unique AO type, 141 * i.e., no two AO sets within an AOC can have the same type. 142 * @param aoId The id of the AO to be moved from source AOC to target AOC 143 * @param sourceAocId The AOC where aoId is currently (and to be removed) 144 * @param targetAocId The AOC where aoId should be placed 145 * @param context 146 * @return TBD 147 * @throws PermissionDeniedException 148 * @throws MissingParameterException 149 * @throws InvalidParameterException 150 * @throws OperationFailedException 151 * @throws DoesNotExistException 152 */ 153 List<BulkStatusInfo> moveActivityOffering(String aoId, String sourceAocId, String targetAocId, ContextInfo context) 154 throws PermissionDeniedException, 155 DataValidationErrorException, 156 DoesNotExistException, 157 InvalidParameterException, 158 MissingParameterException, 159 OperationFailedException, 160 ReadOnlyException, 161 VersionMismatchException; 162 163 /** 164 * User Story 7: As a user, I need the system to automatically delete all AOs when I delete an 165 * AOC so I don’t have to delete all the AOs first 166 * This is a pass-through to service call deleteActivityOfferingClusterCascaded 167 * @param aocId The ID of the AOC to delete 168 * 169 */ 170 void deleteActivityOfferingCluster(String aocId, ContextInfo context) 171 throws DoesNotExistException, InvalidParameterException, 172 MissingParameterException, OperationFailedException, 173 PermissionDeniedException, DependentObjectsExistException; 174 175 /** 176 * User Story 8: As a user, I want to view counts of seats so that I can ensure I have the right numbers of seats to support my business needs. 177 * 178 * Compute the maximum number of seats for the Activity Offerings within the given Course Offering specified by courseOfferingId. 179 * 180 * Note: Out of Scope for M6 181 * 182 * @param courseOfferingId 183 * @param contextInfo Context information containing the 184 * principalId and locale information about 185 * the caller of service operation 186 * @return the max number of seats in the Course Offering. 187 * @throws OperationFailedException unable to complete request 188 * @throws PermissionDeniedException an authorization failure has occurred 189 */ 190 191 public Integer getSeatCountByCourseOffering (String courseOfferingId, ContextInfo contextInfo) throws OperationFailedException, PermissionDeniedException; 192 193 /** 194 * User Story 8: As a user, I want to view counts of seats so that I can ensure I have the right numbers of seats to support my business needs. 195 * 196 * Compute the maximum number of seats for Activity Offering's within the Activity Offering Cluster specified by aocId. 197 * 198 * Note: Out of Scope for M6 199 * 200 * @param aocId 201 * @param contextInfo Context information containing the 202 * principalId and locale information about 203 * the caller of service operation 204 * @return the max number of seats in the Activity Offering Cluster. 205 * @throws OperationFailedException unable to complete request 206 * @throws PermissionDeniedException an authorization failure has occurred 207 */ 208 public Integer getSeatCountByActivityOfferingCluster (String aocId, ContextInfo contextInfo) throws OperationFailedException, PermissionDeniedException; 209 210 /** 211 * User Story 8: As a user, I want to view counts of seats so that I can ensure I have the right numbers of seats to support my business needs. 212 * 213 * Compute the maximum number of seats for Activity Offerings within the Registration Group specified by registrationGroupId. 214 * 215 * Note: Out of Scope for M6 216 * 217 * @param registrationGroupId 218 * @param contextInfo Context information containing the 219 * principalId and locale information about 220 * the caller of service operation 221 * @return the max number of seats in the Registration Group 222 * @throws PermissionDeniedException unable to complete request 223 * @throws OperationFailedException an authorization failure has occurred 224 */ 225 public Integer getSeatCountByRegistrationGroup (String registrationGroupId, ContextInfo contextInfo) throws OperationFailedException, PermissionDeniedException; 226 227 public List<CourseOfferingAutogenIssue> findAutogenIssuesByTerm(String termId, ContextInfo context) 228 throws PermissionDeniedException, MissingParameterException, InvalidParameterException, 229 OperationFailedException, DoesNotExistException; 230 231 public CourseOfferingAutogenIssue findAutogenIssuesByCourseOffering(String courseOfferingId, ContextInfo context) 232 throws PermissionDeniedException, MissingParameterException, InvalidParameterException, 233 OperationFailedException, DoesNotExistException; 234 235 /** 236 * User Story 9: As a user, I want to be able to view AOs by Activity, AOC, or Registration Group so that I can view my Activities in a way to support my specific business needs 237 * 238 * Get the counts for the information tool bar at the course offering level. 239 * 240 * @param courseOfferingId 241 * @param context 242 * @return the counts at the course offering level. 243 * @throws OperationFailedException 244 * @throws MissingParameterException 245 * @throws InvalidParameterException 246 * @throws DoesNotExistException 247 * @throws PermissionDeniedException 248 */ 249 public AutogenCount getAutogenCountByCourseOffering(String courseOfferingId, ContextInfo context) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException; 250 251 /** 252 * User Story 9: As a user, I want to be able to view AOs by Activity, AOC, or Registration Group so that I can view my Activities in a way to support my specific business needs 253 * 254 * Get the counts for the information toolbar at the format offering level. 255 * 256 * @param formatOfferingId 257 * @param context 258 * @return the counts at the format offering level. 259 * 260 */ 261 public AutogenCount getAutogenCountByFormatOffering(String formatOfferingId, ContextInfo context) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException; 262 263 264 /** 265 * User Story 9: As a user, I want to be able to view AOs by Activity, AOC, or Registration Group so that I can view my Activities in a way to support my specific business needs 266 * 267 * Get the counts for the information tool bar at the Activity Offering Cluster Level. 268 * 269 * Note there will always be zero aoc's reported as it is nonsensical at this level. 270 * 271 * @param activiyOfferingClusterId 272 * @param context 273 * @return the counts at the Activity Offering Cluster Level. 274 */ 275 public AutogenCount getAutogenCountByActivtyOfferingCluster (String activiyOfferingClusterId, ContextInfo context) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException; 276 277 278 /** 279 * Returns all ActivityOfferingClusterInfos that map back to a single course offering 280 * 281 * @param courseOfferingId 282 * @return 283 */ 284 public List<ActivityOfferingClusterInfo> getActivityOfferingClusterByCourseOffering(String courseOfferingId); 285 286 /** 287 * Returns new CourseWaitListInfo after AO had been un-colocated 288 * 289 * @param courseWaitListInfo (original WL) 290 * @param waitlistType 291 * @param hasWaitlist 292 * @param limitWaitlistSize 293 * @param aoId (activity offering ID) 294 * @param foId (format offering ID) 295 * @return 296 */ 297 public CourseWaitListInfo createUncolocatedWaitList(CourseWaitListInfo courseWaitListInfo, String waitlistType, boolean hasWaitlist, boolean limitWaitlistSize, String aoId, String foId, ContextInfo context); 298 299 /** 300 * Returns new CourseWaitListInfo after AO had been un-colocated 301 * 302 * @param courseWaitListInfo (original WL) 303 * @param waitlistType 304 * @param hasWaitlist 305 * @param limitWaitlistSize 306 * @param isColocatedAO (activity offering colo or not) 307 * @param isMaxEnrollmentShared (max enrollment shared checked) 308 * @param aoIdfoIdMap (map of ao and fo IDs) 309 * @return 310 */ 311 public CourseWaitListInfo createColocatedWaitList(CourseWaitListInfo courseWaitListInfo, String waitlistType, boolean hasWaitlist, boolean limitWaitlistSize, boolean isColocatedAO, boolean isMaxEnrollmentShared, 312 HashMap<String, String> aoIdfoIdMap, ContextInfo context); 313 314 315 /** 316 * 317 * Returns the number of AO Clusters for a particular FO. If there are no clusters, the count will be 0 318 * 319 * @param foId Format Offering Id 320 * @param contextInfo Context Info 321 * @return Returns the number of AO Clusters for a particular FO. If there are no clusters, the count will be 0 322 * @throws MissingParameterException 323 * @throws InvalidParameterException 324 * @throws OperationFailedException 325 * @throws PermissionDeniedException 326 */ 327 public int getAoClusterCountByFoId(String foId, ContextInfo contextInfo) throws MissingParameterException, 328 InvalidParameterException, 329 OperationFailedException, 330 PermissionDeniedException; 331 332 /** 333 * This method will give a KeyValue pair AO_ID, AO_TYPE of the Activity Offerings for a given Format offering 334 * 335 * @param foId Format offering Id. 336 * @param contextInfo the context info object 337 * @return List of KeyValue pair AO_ID, AO_TYPE of the Activity Offerings 338 * @throws MissingParameterException 339 * @throws InvalidParameterException 340 * @throws OperationFailedException 341 * @throws PermissionDeniedException 342 */ 343 public List<KeyValue> getAoIdAndAoTypeByFO(String foId, ContextInfo contextInfo) throws MissingParameterException, 344 InvalidParameterException, 345 OperationFailedException, 346 PermissionDeniedException; 347 }