public async Task <ActionResult> AddSurgery([Bind(Include = "MedicalCenter,StartDateTime,Duration")] CreateVisitTimeViewModel model) { if (ModelState.IsValid) { var end = model.StartDateTime.AddMinutes(model.Duration); var confilictedVisitTimes = db.VisitTimes.Where(x => (x.Start.HasValue && x.VisitDurationMin.HasValue && DbFunctions.AddMinutes(x.Start, x.VisitDurationMin.Value) >= model.StartDateTime && x.Start < model.StartDateTime) || (x.Start.HasValue && x.Start <= end && DbFunctions.AddMinutes(x.Start, x.VisitDurationMin.Value) > end)); model.ConfilictedVisitTimes = confilictedVisitTimes.ToList(); //RedirectToAction("AddSurgeryConfirm",model); if (model.ConfilictedVisitTimes.Count > 0) { return(View("AddSurgeryConfirm", model)); } return(await AddSurgeryConfirm(model)); } ViewBag.MedicalCenter = new SelectList(db.MedicalCenters, "Id", "Name"); return(View(model)); }
public async Task <ActionResult> Add([Bind(Include = "MedicalCenter,StartDateTime,Duration,Break,Count,Fee,CancelRate,Spetiality")] CreateVisitTimeViewModel model) { var userId = User.Identity.GetUserId(); if (ModelState.IsValid) { db.DoctorMedicalCenters.AddOrUpdate(x => new { x.DoctorId, x.MedicalCenterId }, new DoctorMedicalCenter { MedicalCenterId = model.MedicalCenter, DoctorId = userId }); var visitRecord = db.VisitRecords.Add(new VisitRecord() { CancelRate = model.CancelRate, Count = model.Count, DoctorId = userId, Fee = model.Fee, MedicalCenterId = model.MedicalCenter, Removed = 0, Reserved = 0, Start = model.StartDateTime, SpecialtyId = model.Spetiality == 0 ? null : model.Spetiality, Break = model.Break, Duration = model.Duration, State = VisitRecordState.Active }); await db.SaveChangesAsync(); var doctorMedicalCenter = db.DoctorMedicalCenters.First(x => x.DoctorId == userId && x.MedicalCenterId == model.MedicalCenter); for (int i = 0; i < model.Count; i++) { db.VisitTimes.Add(new VisitTime { CancelRate = model.CancelRate, Fee = model.Fee, Order = i + 1, Start = model.StartDateTime.AddMinutes(i * (model.Duration + model.Break)), VisitDurationMin = (Byte)model.Duration, DoctorMedicalCenter = doctorMedicalCenter, VisitRecordId = visitRecord.Id, State = VisitTimeState.Active }); } //db.Entry(medicalCenter).State = EntityState.Modified; await db.SaveChangesAsync(); return(RedirectToAction("Index", "Panel")); } var user = db.Users.First(x => x.Id == userId); ViewBag.MedicalCenter = new SelectList(db.MedicalCenters, "Id", "Name"); var specialties = new SelectList(user.DoctorSpecialties.Select(x => x.Specialty), "Id", "Title").ToList(); specialties.Insert(0, new SelectListItem() { Text = "همه موارد", Value = "0" }); ViewBag.Spetiality = specialties; return(View(model)); }
public async Task <ActionResult> AddSurgeryConfirm([Bind(Include = "MedicalCenter,StartDateTime,Duration,ConfilictedVisitTimes")] CreateVisitTimeViewModel model) { var userId = User.Identity.GetUserId(); if (ModelState.IsValid) { if (model.ConfilictedVisitTimes != null && model.ConfilictedVisitTimes.Count > 0) { foreach (var visitTime in model.ConfilictedVisitTimes) { if (visitTime.State == VisitTimeState.Reserved) { Tools.NotifyToUser(visitTime.PatientUserId); } visitTime.State = VisitTimeState.DoctorCancel; } } db.DoctorMedicalCenters.AddOrUpdate(x => new { x.DoctorId, x.MedicalCenterId }, new DoctorMedicalCenter { MedicalCenterId = model.MedicalCenter, DoctorId = userId }); var visitRecord = db.VisitRecords.Add(new VisitRecord() { CancelRate = 0, Count = 1, DoctorId = userId, Fee = 0, MedicalCenterId = model.MedicalCenter, Removed = 0, Reserved = 0, Start = model.StartDateTime, SpecialtyId = null, Break = 0, Duration = model.Duration, State = VisitRecordState.Surgery }); await db.SaveChangesAsync(); var doctorMedicalCenter = db.DoctorMedicalCenters.First(x => x.DoctorId == userId && x.MedicalCenterId == model.MedicalCenter); db.VisitTimes.Add(new VisitTime { CancelRate = 0, Fee = 0, Order = 1, Start = model.StartDateTime, VisitDurationMin = (Byte)model.Duration, DoctorMedicalCenter = doctorMedicalCenter, VisitRecordId = visitRecord.Id, State = VisitTimeState.Surgery }); //db.Entry(medicalCenter).State = EntityState.Modified; await db.SaveChangesAsync(); return(RedirectToAction("Index", "Panel")); } return(View(model)); }