public IActionResult CaseConfirm() { ScSessionBookingInfo bookingInfo = _session.ScBookingInfo; if (string.IsNullOrEmpty(bookingInfo.CaseNumber)) { //return Redirect(step1Url); return(RedirectToAction("Index")); } //user information var user = _session.GetUserInformation(); //Time-slot is still available var model = new ScCaseConfirmViewModel { CaseNumber = bookingInfo.CaseNumber, Date = bookingInfo.DateFriendlyName, Time = bookingInfo.TimeSlotFriendlyName, CaseLocationName = $"{bookingInfo.CaseLocationName} Law Courts", BookingLocationName = $"{bookingInfo.BookingLocationName} Law Courts", HearingTypeName = bookingInfo.HearingTypeName, ContainerId = bookingInfo.ContainerId, CaseRegistryId = bookingInfo.CaseRegistryId, BookingRegistryId = bookingInfo.BookingRegistryId, FullDate = bookingInfo.FullDate, EmailAddress = user.Email, Phone = user.Phone }; return(View(model)); }
public async Task <IActionResult> CaseConfirm(ScCaseConfirmViewModel model) { if (!ModelState.IsValid) { return(View(model)); } string userGuid; string userDisplayName; if (_scBookingService.IsLocalDevEnvironment) { // use fake SiteMinder header values for local development userGuid = "072cfc73-e3b9-437b-8012-0b0945f09879"; userDisplayName = "Matthew Begbie"; } else { //read smgov_userguid SiteMinder header userGuid = HttpContext.Request.Headers.ContainsKey("smgov_userguid") ? HttpContext.Request.Headers["smgov_userguid"].ToString() : string.Empty; //read smgov_userdisplayname SiteMinder header userDisplayName = HttpContext.Request.Headers.ContainsKey("smgov_userdisplayname") ? HttpContext.Request.Headers["smgov_userdisplayname"].ToString() : string.Empty; } //make booking var result = await _scBookingService.BookCourtCase(model, userGuid, userDisplayName); return(Redirect( $"/scjob/booking/sc/CaseBooked?booked={result.IsBooked}")); }
public IActionResult CaseConfirm() { ScSessionBookingInfo bookingInfo = _session.ScBookingInfo; if (string.IsNullOrEmpty(bookingInfo.CaseNumber)) { return(Redirect("/scjob/booking/sc/CaseSearch")); } //convert JS ticks to .Net date var dt = new DateTime(Convert.ToInt64(bookingInfo.SelectedCaseDate)); //user information var user = _session.GetUserInformation(); //Time-slot is still available var model = new ScCaseConfirmViewModel { CaseNumber = bookingInfo.CaseNumber, Date = dt.ToString("dddd, MMMM dd, yyyy"), Time = bookingInfo.TimeSlotFriendlyName, CaseLocationName = $"{bookingInfo.CaseLocationName} Law Courts", BookingLocationName = $"{bookingInfo.BookingLocationName} Law Courts", HearingTypeName = bookingInfo.HearingTypeName, ContainerId = bookingInfo.ContainerId, CaseRegistryId = bookingInfo.CaseRegistryId, BookingRegistryId = bookingInfo.BookingRegistryId, FullDate = dt, EmailAddress = user.Email, Phone = user.Phone }; return(View(model)); }
/// <summary> /// Book court case /// </summary> public async Task <ScCaseConfirmViewModel> BookCourtCase(ScCaseConfirmViewModel model, string userGuid, string userDisplayName) { //if the user could not be detected return if (string.IsNullOrWhiteSpace(userGuid)) { return(model); } ScSessionBookingInfo bookingInfo = _session.ScBookingInfo; // check the schedule again to make sure the time slot wasn't taken by someone else AvailableDatesByLocation schedule = await _client.AvailableDatesByLocationAsync( bookingInfo.BookingRegistryId, bookingInfo.HearingTypeId); //ensure time slot is still available if (IsTimeStillAvailable(schedule, bookingInfo.ContainerId)) { //build object to send to the API var bookInfo = new BookHearingInfo { CEIS_Physical_File_ID = bookingInfo.CaseId, containerID = bookingInfo.ContainerId, dateTime = model.FullDate, hearingLength = bookingInfo.HearingLengthMinutes, locationID = bookingInfo.BookingRegistryId, requestedBy = $"{userDisplayName} {model.Phone} {model.EmailAddress}", hearingTypeId = bookingInfo.HearingTypeId }; //submit booking BookingHearingResult result = await _client.BookingHearingAsync(bookInfo); //get the raw result bookingInfo.RawResult = result.bookingResult; //test to see if the booking was successful if (result.bookingResult.ToLower().StartsWith("success")) { //create database entry DbSet <BookingHistory> bookingHistory = _dbContext.Set <BookingHistory>(); bookingHistory.Add(new BookingHistory { ContainerId = bookingInfo.ContainerId, SmGovUserGuid = userGuid, Timestamp = DateTime.Now }); //save to DB await _dbContext.SaveChangesAsync(); //update model model.IsBooked = true; bookingInfo.IsBooked = true; //store user info in session for next booking var userInfo = new SessionUserInfo { Phone = model.Phone, Email = model.EmailAddress, ContactName = $"{userDisplayName}" }; _session.UserInfo = userInfo; var emailBody = await GetEmailBody(); //send email await _mailService.SendEmail( //"*****@*****.**", model.EmailAddress, EmailSubject, emailBody); //clear booking info session _session.ScBookingInfo = null; } else { model.IsBooked = false; bookingInfo.IsBooked = false; } } else { //The booking is not available anymore //user needs to choose a new time slot model.IsTimeSlotAvailable = false; model.IsBooked = false; bookingInfo.IsBooked = false; } // save the booking info back to the session _session.ScBookingInfo = bookingInfo; return(model); }