public async Task <IActionResult> ScheduleAppointment(ScheduleAppointmentRequest request)
        {
            var appointmentId = _identifierGenerationService.Generate();
            var command       = new ScheduleAppointmentCommand(appointmentId, request.DoctorId, request.PatientId, request.AppointmentAt, request.AppointmentDurationInMinutes);
            await _scheduleAppointmentCommandHandler.HandleAsync(command);

            return(CreatedAtAction(nameof(GetById), new { AppointmentId = appointmentId }, null));
        }
Пример #2
0
        public async Task Edit(int id, string title, string Description, DateTime startTime, string patientId)
        {
            var appointment = this.db.Appointments.Find(id);



            if (patientId != null && patientId != appointment.PatientId)
            {
                if (appointment.PatientId != null)
                {
                    var oldPatientScheduleId = GetScheduleId(appointment.PatientId);
                    var oldUserAppointment   = this.db.ScheduleAppointments.Find(oldPatientScheduleId, appointment.Id);
                    if (oldUserAppointment != null)
                    {
                        this.db.ScheduleAppointments.Remove(oldUserAppointment);
                    }
                    var oldUserRequestAppointment = this.db.RequestedAppointments.Find(oldPatientScheduleId, appointment.Id);

                    if (oldUserRequestAppointment != null)
                    {
                        this.db.RequestedAppointments.Remove(oldUserRequestAppointment);
                    }
                }

                int patientScheduleId       = GetScheduleId(patientId);
                var patientAlreadyRequested = this.db.RequestedAppointments.Find(patientScheduleId, appointment.Id);
                if (patientAlreadyRequested != null)
                {
                    patientAlreadyRequested.Confirm = false;
                }
                else
                {
                    var patientScheduleAppointment = new ScheduleAppointmentRequest
                    {
                        RequestedScheduleId  = patientScheduleId,
                        AppointmentRequestId = appointment.Id,
                        Confirm = false
                    };

                    this.db.Add(patientScheduleAppointment);
                }
            }

            appointment.Title       = title;
            appointment.Description = Description;
            appointment.StartTime   = startTime;
            appointment.PatientId   = patientId;
            await this.db.SaveChangesAsync();
        }
        public ValidationResult Validate(string workOrderReference, ScheduleAppointmentRequest request)
        {
            var validationResult = new ValidationResult();

            if (string.IsNullOrEmpty(workOrderReference))
            {
                validationResult.Valid = false;
                validationResult.ErrorMessages.Add("You must provide a work order reference");
            }
            else
            {
                var workOrder = Task.Run(() => _hackneyRepairsService.GetWorkOrderDetails(workOrderReference)).Result;
                if (string.IsNullOrEmpty(workOrder.wo_ref))
                {
                    validationResult.Valid = false;
                    validationResult.ErrorMessages.Add("Please provide a valid work order reference");
                }
            }
            if (string.IsNullOrEmpty(request.BeginDate))
            {
                validationResult.Valid = false;
                validationResult.ErrorMessages.Add("You must provide a begin Date");
            }
            else
            {
                DateTime beginDateTime;
                if (!DateTime.TryParse(request.BeginDate, out beginDateTime))
                {
                    validationResult.Valid = false;
                    validationResult.ErrorMessages.Add("Please provide a valid begin date in the following format. Eg:2017-11-10T10:00:00Z");
                }
            }
            if (string.IsNullOrEmpty(request.EndDate))
            {
                validationResult.Valid = false;
                validationResult.ErrorMessages.Add("You must provide a end Date");
            }
            else
            {
                DateTime endDateTime;
                if (!DateTime.TryParse(request.EndDate, out endDateTime))
                {
                    validationResult.Valid = false;
                    validationResult.ErrorMessages.Add("Please provide a valid end date in the following format. Eg:2017-11-10T10:00:00Z");
                }
            }
            return(validationResult);
        }
Пример #4
0
        public void returns_false_and_errormessage_if_schedule_booking_request_is_missing_work_order_reference()
        {
            var fakeRequestBuilder = new Mock <IHackneyRepairsService>();

            fakeRequestBuilder.Setup(service => service.GetWorkOrderDetails("015580954"))
            .ReturnsAsync(new DrsOrder {
                wo_ref = "015580954"
            });
            var validator = new ScheduleBookingRequestValidator(fakeRequestBuilder.Object);
            var request   = new ScheduleAppointmentRequest
            {
                BeginDate = "2017-11-10T10:00:00Z",
                EndDate   = "2017-11-10T12:00:00Z"
            };
            var result = validator.Validate("", request);

            Assert.False(result.Valid); Assert.Equal(result.ErrorMessages.Count, 1);
            Assert.Contains("You must provide a work order reference", result.ErrorMessages);
        }
Пример #5
0
        public void returns_true_if_schedule_booking_request_is_valid()
        {
            var fakeRequestBuilder = new Mock <IHackneyRepairsService>();

            fakeRequestBuilder.Setup(service => service.GetWorkOrderDetails("015580954"))
            .ReturnsAsync(new DrsOrder {
                wo_ref = "015580954"
            });
            var validator = new ScheduleBookingRequestValidator(fakeRequestBuilder.Object);
            var request   = new ScheduleAppointmentRequest
            {
                BeginDate = "2017-11-10T10:00:00Z",
                EndDate   = "2017-11-10T12:00:00Z"
            };
            var result = validator.Validate("015580954", request);

            Assert.True(result.Valid);
            Assert.Equal(result.ErrorMessages.Count, 0);
        }
        public async Task <JsonResult> Post(string workOrderReference, [FromBody] ScheduleAppointmentRequest request)
        {
            try
            {
                var validationResult = _scheduleBookingRequestValidator.Validate(workOrderReference, request);
                if (validationResult.Valid)
                {
                    var appointmentsActions = new AppointmentActions(_loggerAdapter, _appointmentsService,
                                                                     _serviceRequestBuilder, _repairsService, _repairsServiceRequestBuilder);
                    var result = await appointmentsActions.BookAppointment(workOrderReference,
                                                                           DateTime.Parse(request.BeginDate),
                                                                           DateTime.Parse(request.EndDate));

                    var json = Json(result);
                    json.StatusCode  = 200;
                    json.ContentType = "application/json";
                    return(json);
                }
                else
                {
                    var errors = validationResult.ErrorMessages.Select(error => new ApiErrorMessage
                    {
                        developerMessage = error,
                        userMessage      = error
                    }).ToList();
                    var jsonResponse = Json(errors);
                    jsonResponse.StatusCode = 400;
                    return(jsonResponse);
                }
            }
            catch (Exception e)
            {
                var errorMessage = new ApiErrorMessage
                {
                    developerMessage = e.Message,
                    userMessage      = "We had some problems processing your request"
                };
                var jsonResponse = Json(errorMessage);
                jsonResponse.StatusCode = 500;
                return(jsonResponse);
            }
        }
Пример #7
0
        public void returns_false_and_errormessage_if_end_date_is_not_formatted_correctly()
        {
            var fakeRequestBuilder = new Mock <IHackneyRepairsService>();

            fakeRequestBuilder.Setup(service => service.GetWorkOrderDetails("015580954"))
            .ReturnsAsync(new DrsOrder {
                wo_ref = "015580954"
            });
            var validator = new ScheduleBookingRequestValidator(fakeRequestBuilder.Object);
            var request   = new ScheduleAppointmentRequest
            {
                BeginDate = "2017-11-10T10:00:00Z",
                EndDate   = "2017-11-10T12:00:00Zdfdf"
            };
            var result = validator.Validate("015580954", request);

            Assert.False(result.Valid);
            Assert.Equal(result.ErrorMessages.Count, 1);
            Assert.True(result.ErrorMessages[0].Contains("Please provide a valid end date"));
        }
Пример #8
0
        public async Task <bool> AddAppointment(string title, string description, DateTime startTime, string userId, string patientId)
        {
            var appointment = new Appointment
            {
                Title       = title,
                Description = description,
                StartTime   = startTime,
                PatientId   = patientId,
                CreatorId   = userId
            };

            this.db.Add(appointment);
            int scheduleId = GetScheduleId(userId);

            if (patientId != null)
            {
                int patientScheduleId = GetScheduleId(patientId);

                var patientScheduleAppointment = new ScheduleAppointmentRequest
                {
                    RequestedScheduleId  = patientScheduleId,
                    AppointmentRequestId = appointment.Id,
                    Confirm = false
                };

                this.db.Add(patientScheduleAppointment);
            }

            var scheduleAppointment = new ScheduleAppointment
            {
                ScheduleId    = scheduleId,
                AppointmentId = appointment.Id
            };

            this.db.Add(scheduleAppointment);

            await this.db.SaveChangesAsync();

            return(true);
        }