Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 4
0
        /// <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);
        }