コード例 #1
0
        public async Task <IActionResult> Reserve(ReserveDoctorsViewModel reserveDoctors)
        {
            if (!ModelState.IsValid)
            {
                return(View(reserveDoctors));
            }

            if (!TimeSpan.TryParse(reserveDoctors.Reserve.ReserveTime, out var time))
            {
                ModelState.AddModelError("Reserve.ReserveTime", "ساعت فرمت مناسبی ندارد");
                return(View(reserveDoctors));
            }

            var dates           = reserveDoctors.Reserve.ReserveDate.Split('/');
            var reserveDateTime = new DateTime(
                int.Parse(dates[0]),
                int.Parse(dates[1]),
                int.Parse(dates[2]), new PersianCalendar());

            reserveDateTime = reserveDateTime.Date + time;

            if (DateTime.Now > reserveDateTime)
            {
                TempData["Error"] = "تاریخ وارد شده باید در آینده باشد.";
                return(View(reserveDoctors));
            }

            var dayOfWeek = reserveDateTime.DayOfWeek switch
            {
                DayOfWeek.Sunday => "یکشنبه",
                DayOfWeek.Monday => "دوشنبه",
                DayOfWeek.Tuesday => "سه شنبه",
                DayOfWeek.Wednesday => "چهارشنبه",
                DayOfWeek.Thursday => "پنج شنبه",
                DayOfWeek.Saturday => "شنبه",
                _ => null
            };

            if (string.IsNullOrEmpty(dayOfWeek))
            {
                TempData["Error"] = "امکان رزرو در روز جمعه وجود ندارد";
                return(View(reserveDoctors));
            }

            var weekdays = await _db.WeekDays
                           .Include(a => a.Doctor)
                           .Where(a => (a.DayName.Equals(dayOfWeek)) &&
                                  a.Doctor.Specialty.Equals(reserveDoctors.Reserve.DoctorSpecialty))
                           .ToListAsync();

            var patient = await _db.Patients
                          .FirstOrDefaultAsync(a =>
                                               a.Username.Equals(User.Identity.Name));

            foreach (var day in weekdays)
            {
                var hasAlreadyThatReserveWithChosenDoctorOnThatDay = await _db.Reservations
                                                                     .AnyAsync(a =>
                                                                               a.ReserveDate.Day.Equals(reserveDateTime.Day) &&
                                                                               a.Doctor.Id.Equals(day.Doctor.Id) &&
                                                                               a.Patient.Id.Equals(patient.Id) &&
                                                                               a.ReserveStatus.Equals("در انتظار ویزیت"));

                var hasReserveOnThatTime = await _db.Reservations
                                           .AnyAsync(a =>
                                                     a.Patient.Id.Equals(patient.Id) &&
                                                     a.ReserveDate.Equals(reserveDateTime) &&
                                                     a.ReserveStatus.Equals("در انتظار ویزیت"));

                var hasFourReserveWithThatDoctor = await _db.Reservations
                                                   .CountAsync(a =>
                                                               a.DoctorId.Equals(day.Doctor.Id) &&
                                                               a.PatientId.Equals(patient.Id) &&
                                                               a.ReserveStatus.Equals("در انتظار ویزیت")) >= 4;

                var hasReachedReserveLimit = await _db.Reservations
                                             .CountAsync(a =>
                                                         a.PatientId.Equals(patient.Id) &&
                                                         a.ReserveStatus.Equals("در انتظار ویزیت")) >= 20;

                if (!(hasReserveOnThatTime || hasAlreadyThatReserveWithChosenDoctorOnThatDay ||
                      hasFourReserveWithThatDoctor ||
                      hasReachedReserveLimit))
                {
                    switch (time.Hours)
                    {
                    case 8 when day.EightTen.Equals("خالی"):
                        reserveDoctors.Doctors.Add(day.Doctor);

                        break;

                    case 10 when day.TenTwelve.Equals("خالی"):
                        reserveDoctors.Doctors.Add(day.Doctor);

                        break;

                    case 12 when day.TwelveFourteen.Equals("خالی"):
                        reserveDoctors.Doctors.Add(day.Doctor);

                        break;

                    case 14 when day.FourteenSixteen.Equals("خالی"):
                        reserveDoctors.Doctors.Add(day.Doctor);

                        break;
                    }
                }
            }

            ViewBag.ReserveTime = reserveDateTime;
            ViewBag.ReserveDate = reserveDoctors.Reserve.ReserveDate;

            return(View(reserveDoctors));
        }
コード例 #2
0
        public IActionResult Reserve()
        {
            ReserveDoctorsViewModel vm = new ReserveDoctorsViewModel();

            return(View(vm));
        }