/// <summary> /// Executes the NewCourseSchedule business operation. /// </summary> public async virtual Task <NewCourseScheduleBusinessResponse> NewCourseSchedule(IDatabaseConnection databaseConnection, NewCourseScheduleBusinessRequest businessRequest) { // Validate the business request. this.ValidateNewCourseScheduleRequest(businessRequest); // Initialize the operation data. NewCourseScheduleOperationData operationData = new NewCourseScheduleOperationData(); // Validate the business operation. await this.ValidateNewCourseScheduleOperation(databaseConnection, businessRequest, operationData); // Generate a unique CourseSchedule code. string courseScheduleCode = this.uniqueTokenGenerator.GenerateUniqueToken(); // Create the CourseSchedule data row. operationData.CourseScheduleDataRow = new CourseScheduleDataRow(); operationData.CourseScheduleDataRow.CourseScheduleCode = courseScheduleCode; operationData.CourseScheduleDataRow.SessionID = operationData.SessionDataRow.SessionID; operationData.CourseScheduleDataRow.DayOfWeek = (int)businessRequest.CourseSchedule.DayOfWeek; operationData.CourseScheduleDataRow.Time = businessRequest.CourseSchedule.Time; await this.courseScheduleDataAccessComponent.Create(databaseConnection, operationData.CourseScheduleDataRow); // Generate the unique CourseGroup codes. operationData.CourseGroupCodes = new string[businessRequest.CourseSchedule.CourseGroups.Length]; for (int courseGroupIndex = 0; courseGroupIndex < businessRequest.CourseSchedule.CourseGroups.Length; courseGroupIndex++) { string courseGroupCode = this.uniqueTokenGenerator.GenerateUniqueToken(); operationData.CourseGroupCodes[courseGroupIndex] = courseGroupCode; } // Create the CourseGroup data rows. for (int courseGroupIndex = 0; courseGroupIndex < businessRequest.CourseSchedule.CourseGroups.Length; courseGroupIndex++) { CourseGroupDataRow courseGroupDataRow = new CourseGroupDataRow(); courseGroupDataRow = new CourseGroupDataRow(); courseGroupDataRow.CourseGroupCode = operationData.CourseGroupCodes[courseGroupIndex]; courseGroupDataRow.CourseScheduleID = operationData.CourseScheduleDataRow.CourseScheduleID; courseGroupDataRow.PlacesCount = businessRequest.CourseSchedule.CourseGroups[courseGroupIndex].PlacesCount; await this.courseGroupDataAccessComponent.Create(databaseConnection, courseGroupDataRow); } // Build the business response. NewCourseScheduleBusinessResponse businessResponse = new NewCourseScheduleBusinessResponse(); // Build the CourseSchedule business response element. NewCourseScheduleBusinessResponse.CourseScheduleBusinessResponseElement courseScheduleBusinessResponseElement = new NewCourseScheduleBusinessResponse.CourseScheduleBusinessResponseElement(); courseScheduleBusinessResponseElement.CourseScheduleCode = operationData.CourseScheduleDataRow.CourseScheduleCode; businessResponse.CourseSchedule = courseScheduleBusinessResponseElement; // Build the CourseGroup business response elements. List <NewCourseScheduleBusinessResponse.CourseScheduleBusinessResponseElement.CourseGroupBusinessResponseElement> courseGroupBusinessResponseElements = new List <NewCourseScheduleBusinessResponse.CourseScheduleBusinessResponseElement.CourseGroupBusinessResponseElement>(); for (int courseGroupIndex = 0; courseGroupIndex < businessRequest.CourseSchedule.CourseGroups.Length; courseGroupIndex++) { NewCourseScheduleBusinessResponse.CourseScheduleBusinessResponseElement.CourseGroupBusinessResponseElement courseGroupBusinessResponseElement = new NewCourseScheduleBusinessResponse.CourseScheduleBusinessResponseElement.CourseGroupBusinessResponseElement(); courseGroupBusinessResponseElement.CourseGroupCode = operationData.CourseGroupCodes[courseGroupIndex]; courseGroupBusinessResponseElements.Add(courseGroupBusinessResponseElement); } // Set the CourseGroup business response elements. courseScheduleBusinessResponseElement.CourseGroups = courseGroupBusinessResponseElements.ToArray(); // Return the business response. return(businessResponse); }
/// <summary> /// Validates the NewCourseSchedule business operation. /// </summary> private async Task ValidateNewCourseScheduleOperation(IDatabaseConnection databaseConnection, NewCourseScheduleBusinessRequest businessRequest, NewCourseScheduleOperationData operationData) { // Validate the InvalidSessionCode error code. operationData.SessionDataRow = await this.sessionDataAccessComponent.ReadBySessionCode(databaseConnection, businessRequest.Session.SessionCode); if (operationData.SessionDataRow == null) { // Throw a NewCourseSchedule business exception. NewCourseScheduleBusinessException businessException = this.BuildNewCourseScheduleBusinessException(NewCourseScheduleBusinessException.ErrorCodes.InvalidSessionCode, businessRequest.Session.SessionCode); throw businessException; } }