Example #1
0
        public async Task <IActionResult> VisitForm(string reserveDate, int docId = 0, int patientId = 0)
        {
            if (docId == 0 || patientId == 0)
            {
                return(NotFound());
            }

            DateTime dt = Convert.ToDateTime(reserveDate);

            var reserve = await _db.Reservations
                          .Include(a => a.Patient)
                          .FirstOrDefaultAsync(a =>
                                               a.DoctorId.Equals(docId) &&
                                               a.PatientId.Equals(patientId) &&
                                               a.ReserveDate.Equals(dt));

            if (reserve == null)
            {
                return(NotFound());
            }

            var addVisitViewModel = new AddVisitViewModel()
            {
                Reservation = reserve
            };

            return(View(addVisitViewModel));
        }
Example #2
0
        public ActionResult AddScheduledVisit(AddVisitViewModel model)
        {
            if (!ModelState.IsValid)
            {
                View(model);
            }
            var names = model.CityName.Split(',');

            if (_repository.IsNewCity(model.CityName))
            {
                try
                {
                    _repository.AddCity(new City
                    {
                        Name      = names[0],
                        Latitude  = model.Latitude,
                        Longitude = model.Longitude
                    });
                }
                catch (Exception ex)
                {
                    _loger.Log(ex.Message, LogLevel.Error, DateTime.Now, GetType().ToString());
                    return(View("CustomError"));
                }
            }

            var visit = new Visit
            {
                Date      = null,
                UserId    = User.Identity.GetUserId(),
                Comment   = null,
                Rate      = null,
                CityId    = _repository.Cities.First(c => c.Name == names[0]).Id,
                IsVisited = false
            };

            try
            {
                _repository.SaveVisit(visit);
            }
            catch (Exception ex)
            {
                _loger.Log(ex.Message, LogLevel.Error, DateTime.Now, GetType().ToString());
                return(View("CustomError"));
            }
            _loger.Log("User" + User.Identity.Name + "adds a visit", LogLevel.Info, DateTime.Now);

            return(RedirectToAction("Index", "Visit"));
        }
Example #3
0
        public async Task <IActionResult> AddVisit(AddVisitViewModel visitViewModel)
        {
            if (visitViewModel.Reservation.DoctorId == 0 ||
                visitViewModel.Reservation.PatientId == 0)
            {
                return(StatusCode(404));
            }

            var reserve = await _db.Reservations
                          .FirstOrDefaultAsync(a =>
                                               a.DoctorId.Equals(visitViewModel.Reservation.DoctorId) &&
                                               a.PatientId.Equals(visitViewModel.Reservation.PatientId) &&
                                               a.ReserveDate.Equals(visitViewModel.Reservation.ReserveDate));

            if (reserve == null)
            {
                return(StatusCode(404));
            }

            string[] drugs  = null;
            string[] number = null;
            if (!string.IsNullOrEmpty(visitViewModel.DrugList))
            {
                string[] temp = null;
                try
                {
                    temp = visitViewModel.DrugList.Split('،');
                }
                catch (Exception)
                {
                    return(StatusCode(403));
                }

                drugs  = temp.Where((x, i) => i % 2 == 0).ToArray();
                number = temp.Where((x, i) => i % 2 != 0).ToArray();

                if (drugs.Any(a => a.Equals("")) || number.Any(a => a.Equals("")))
                {
                    return(StatusCode(403));
                }

                if (drugs.Length != number.Length)
                {
                    return(StatusCode(403));
                }
            }

            DateTime reserveDateTimeAgain = DateTime.MinValue;

            if (!(string.IsNullOrEmpty(visitViewModel.ReserveDateAgain) || string.IsNullOrEmpty(visitViewModel.ReserveTimeAgain)))
            {
                if (!TimeSpan.TryParse(visitViewModel.ReserveTimeAgain, out var time))
                {
                    return(StatusCode(402));
                }

                var dates = visitViewModel.ReserveDateAgain.Split('/');
                reserveDateTimeAgain = new DateTime(Int32.Parse(dates[0]), int.Parse(dates[1]), int.Parse(dates[2]), new PersianCalendar());
                reserveDateTimeAgain = reserveDateTimeAgain.Date + time;

                if (reserveDateTimeAgain.Date <= DateTime.Today.Date)
                {
                    return(StatusCode(406));
                }

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

                if (string.IsNullOrEmpty(dayOfWeek))
                {
                    return(StatusCode(401));
                }

                var day = await _db.WeekDays.FirstOrDefaultAsync(a =>
                                                                 a.DoctorId.Equals(visitViewModel.Reservation.DoctorId) &&
                                                                 a.DayName.Equals(dayOfWeek));

                switch (time.Hours)
                {
                case 8 when !day.EightTen.Equals("خالی"):
                    return(StatusCode(400));

                case 10 when !day.TenTwelve.Equals("خالی"):
                    return(StatusCode(400));

                case 12 when !day.TwelveFourteen.Equals("خالی"):
                    return(StatusCode(400));

                case 14 when !day.FourteenSixteen.Equals("خالی"):
                    return(StatusCode(400));
                }


                var isAvailableReserve = await _db.Reservations
                                         .AnyAsync(a =>
                                                   a.DoctorId.Equals(visitViewModel.Reservation.DoctorId) &&
                                                   a.ReserveDate.Equals(reserveDateTimeAgain));

                var isPatientBusy = await _db.Reservations
                                    .AnyAsync(a =>
                                              a.PatientId.Equals(reserve.PatientId) &&
                                              a.ReserveDate.Equals(reserveDateTimeAgain) &&
                                              a.ReserveStatus.Contains("در انتظار ویزیت"));

                if (isPatientBusy)
                {
                    return(StatusCode(409));
                }

                if (isAvailableReserve)
                {
                    return(StatusCode(405));
                }
            }

            InsuranceProvider insurance = null;

            if (!string.IsNullOrEmpty(visitViewModel.InsuranceProviderName))
            {
                if (drugs == null)
                {
                    return(StatusCode(409));
                }
                insurance = await _db.InsuranceProviders
                            .FirstOrDefaultAsync(a =>
                                                 a.InsuranceName.Equals(visitViewModel.InsuranceProviderName));
            }

            if (!reserveDateTimeAgain.Equals(DateTime.MinValue))
            {
                var reserveAgain = new Reservation()
                {
                    Doctor        = await _db.Doctors.FindAsync(visitViewModel.Reservation.DoctorId),
                    Patient       = await _db.Patients.FindAsync(visitViewModel.Reservation.PatientId),
                    ReserveDate   = reserveDateTimeAgain,
                    ReserveStatus = "در انتظار ویزیت"
                };

                await _db.Reservations.AddAsync(reserveAgain);

                await _db.SaveChangesAsync();
            }

            reserve.ReserveStatus = "ویزیت شده";

            var newVisit = new Visit()
            {
                CauseOfPatientReferral = visitViewModel.Visit.CauseOfPatientReferral,
                DoctorAssessment       = visitViewModel.Visit.DoctorAssessment,
                DoctorNote             = visitViewModel.Visit.DoctorNote,
                Reservation            = reserve,
                InsuranceProvider      = insurance
            };
            await _db.Visits.AddAsync(newVisit);

            await _db.SaveChangesAsync();

            _db.Reservations.Update(reserve);
            await _db.SaveChangesAsync();

            if (drugs != null)
            {
                var newPrescription = new Prescription()
                {
                    PaymentMethod = "نقدی",
                    Status        = "پرداخت نشده",
                    Visit         = newVisit
                };
                await _db.Prescriptions.AddAsync(newPrescription);

                await _db.SaveChangesAsync();

                int i = 0;
                foreach (var drug in drugs)
                {
                    var drugDb = await _db.Drugs.FirstOrDefaultAsync(a => a.Name.Equals(drug));

                    if (drugDb != null)
                    {
                        var newPresDrug = new PrescriptionDrug()
                        {
                            Drug         = drugDb,
                            Prescription = newPrescription,
                            Count        = int.Parse(number[i]),
                            IsBought     = false
                        };
                        i++;
                        await _db.PrescriptionDrugs.AddAsync(newPresDrug);

                        await _db.SaveChangesAsync();
                    }
                    else
                    {
                        var unknownCategory = await _db.DrugCategories
                                              .FirstOrDefaultAsync(a =>
                                                                   a.Name.Equals("نامشخص"));

                        if (unknownCategory == null)
                        {
                            var newUnknownCategory = new DrugCategory()
                            {
                                Name = "نامشخص"
                            };
                            await _db.DrugCategories.AddAsync(newUnknownCategory);

                            await _db.SaveChangesAsync();

                            unknownCategory = newUnknownCategory;
                        }

                        var newDrug = new Drug()
                        {
                            Name         = drug,
                            Count        = 0,
                            DrugCategory = unknownCategory,
                            Cost         = 9999,
                            Instruction  = "نامشخص",
                            Status       = false
                        };
                        await _db.Drugs.AddAsync(newDrug);

                        await _db.SaveChangesAsync();

                        var newPresDrug = new PrescriptionDrug()
                        {
                            Drug         = newDrug,
                            Prescription = newPrescription,
                            Count        = int.Parse(number[i]),
                            IsBought     = false
                        };
                        i++;
                        await _db.PrescriptionDrugs.AddAsync(newPresDrug);

                        await _db.SaveChangesAsync();
                    }
                }
            }

            return(StatusCode(200));
        }
 public AddVisitView(MainViewModel mainVM)
 {
     InitializeComponent();
     DataContext = new AddVisitViewModel(mainVM);
 }