public bool SubmitWorkOrder(WorkOrderViewModel wovm, int employeeId, ParsekPublicHealthNurseInformationSystem.Models.EntityDataModel DB) { int[] temp = Globals.GetIdsFromString(wovm.PatientId); Patient selectedPatient = temp.Length == 1 ? DB.Patients.FirstOrDefault(x => x.PatientId == temp.FirstOrDefault()) : null; if (selectedPatient == null || wovm.EnterPatients && wovm.PatientIds.IsNullOrWhiteSpace() || wovm.MultipleVisits && ( wovm.TimeType == 0 || wovm.NumberOfVisits < 1 || wovm.NumberOfVisits > 10 || wovm.TimeType == WorkOrderViewModel.VisitTimeType.TimeFrame && (wovm.TimeFrame > DateTime.Now.AddMonths(6) || wovm.TimeFrame < DateTime.Now || wovm.TimeFrame < wovm.DateTimeOfFirstVisit || (wovm.TimeFrame - wovm.DateTimeOfFirstVisit).Days < (wovm.NumberOfVisits - 1) ) || wovm.TimeType == WorkOrderViewModel.VisitTimeType.TimeInterval && (wovm.TimeInterval > 30 || wovm.TimeInterval < 1)) || wovm.EnterMedicine && wovm.MedicineIds.IsNullOrWhiteSpace() || wovm.EnterBloodSample && (wovm.BloodVialBlueCount < 0 || wovm.BloodVialBlueCount > 30 || wovm.BloodVialGreenCount < 0 || wovm.BloodVialGreenCount > 30 || wovm.BloodVialRedCount < 0 || wovm.BloodVialRedCount > 30 || wovm.BloodVialYellowCount < 0 || wovm.BloodVialYellowCount > 30) ) { return(false); } else { WorkOrderDataViewModel wodvm = new WorkOrderDataViewModel(); wodvm.SupervisorId = employeeId; wodvm.PatientId = selectedPatient.PatientId; wodvm.SelectedServiceId = wovm.SelectedServiceId; wodvm.DateTimeOfFirstVisit = wovm.DateTimeOfFirstVisit; wodvm.MandatoryFirstVisit = wovm.MandatoryFirstVisit; wodvm.NumberOfVisits = wovm.NumberOfVisits; wodvm.MultipleVisits = wovm.MultipleVisits; wodvm.TimeFrame = wovm.TimeFrame; wodvm.TimeInterval = wovm.TimeInterval; wodvm.TimeType = wovm.TimeType; wodvm.EnterMedicine = wovm.EnterMedicine; wodvm.EnterBloodSample = wovm.EnterBloodSample; wodvm.BloodVialBlueCount = wovm.EnterBloodSample ? wovm.BloodVialBlueCount : 0; wodvm.BloodVialGreenCount = wovm.EnterBloodSample ? wovm.BloodVialGreenCount : 0; wodvm.BloodVialRedCount = wovm.EnterBloodSample ? wovm.BloodVialRedCount : 0; wodvm.BloodVialYellowCount = wovm.EnterBloodSample ? wovm.BloodVialYellowCount : 0; wodvm.EnterPatients = wovm.EnterPatients; wodvm.DateCreated = wovm.DateCreated != DateTime.MinValue ? wovm.DateCreated : DateTime.Now; WorkOrderSummaryViewModel wosvm = new WorkOrderSummaryViewModel(); wosvm.Patient = selectedPatient.FullName; wosvm.Supervisor = DB.Employees.Find(employeeId).FullName; wosvm.ServiceTitle = DB.Services.FirstOrDefault(x => x.ServiceId == wovm.SelectedServiceId).ServiceTitle; wosvm.DateTimeOfFirstVisit = wovm.DateTimeOfFirstVisit; wosvm.MandatoryFirstVisit = wovm.MandatoryFirstVisit; wosvm.NumberOfVisits = wovm.NumberOfVisits; wosvm.MultipleVisits = wovm.MultipleVisits; wosvm.TimeFrame = wovm.TimeFrame; wosvm.TimeInterval = wovm.TimeInterval; wosvm.TimeType = wovm.TimeType; wosvm.EnterBloodSample = wovm.EnterBloodSample; wosvm.EnterMedicine = wovm.EnterMedicine; wosvm.EnterPatients = wovm.EnterPatients; wosvm.DateCreated = wodvm.DateCreated; if (wovm.EnterMedicine) { wodvm.MedicineIds = new List <int>(); wosvm.Medicine = new List <string>(); int[] medicineIds = Globals.GetIdsFromString(wovm.MedicineIds); foreach (var medicine in DB.Medicines.Where(x => medicineIds.Contains(x.MedicineId)).ToList()) { if (medicine != null) { wodvm.MedicineIds.Add(medicine.MedicineId); wosvm.Medicine.Add(medicine.FullName); } } } if (wovm.EnterBloodSample) { wosvm.BloodVialBlueCount = wovm.BloodVialBlueCount; wosvm.BloodVialGreenCount = wovm.BloodVialGreenCount; wosvm.BloodVialRedCount = wovm.BloodVialRedCount; wosvm.BloodVialYellowCount = wovm.BloodVialYellowCount; } if (wovm.EnterPatients) { wodvm.PatientIds = new List <int>(); wosvm.Patients = new List <string>(); int[] ids = Globals.GetIdsFromString(wovm.PatientIds); foreach (var id in ids) { Patient patient = DB.Patients.FirstOrDefault(x => x.PatientId == id); if (patient != null) { wodvm.PatientIds.Add(patient.PatientId); wosvm.Patients.Add(patient.FullName); } } } Employee selectedNurse = DB.Employees.FirstOrDefault(x => x.JobTitle.Title == JobTitle.HealthNurse && x.District.DistrictId == selectedPatient.District.DistrictId); if (selectedNurse == null) { wovm.ViewMessage = "Pacientov okoliš nima dodeljene patronažne sestre!"; return(false); } wodvm.SelectedNurseId = selectedNurse.EmployeeId; wosvm.Nurse = selectedNurse.FullName; Employee employee = DB.Employees.FirstOrDefault(x => x.EmployeeId == wodvm.SupervisorId); Contractor contractor = employee.Contractor; WorkOrder workOrder = new WorkOrder(); workOrder.Contractor = contractor; workOrder.Issuer = employee; workOrder.Service = DB.Services.FirstOrDefault(x => x.ServiceId == wodvm.SelectedServiceId); workOrder.Name = workOrder.Service.ServiceTitle; workOrder.Nurse = DB.Employees.FirstOrDefault(x => x.EmployeeId == wodvm.SelectedNurseId); //workOrder.NurseReplacement = null; workOrder.Patient = DB.Patients.FirstOrDefault(x => x.PatientId == wodvm.PatientId); workOrder.DateCreated = wodvm.DateCreated; Visit visit = new Visit(); visit.Date = wodvm.DateTimeOfFirstVisit; visit.DateConfirmed = wodvm.DateTimeOfFirstVisit; visit.Mandatory = wodvm.MandatoryFirstVisit; visit.WorkOrder = workOrder; visit.Done = false; // Check for single or multiple visits. if (wodvm.MultipleVisits && wodvm.NumberOfVisits > 1) { int timeFrame = 1; bool mandatoryvisit = wodvm.MandatoryFirstVisit; if (wodvm.TimeType == WorkOrderViewModel.VisitTimeType.TimeFrame) { timeFrame = (wodvm.TimeFrame - wodvm.DateTimeOfFirstVisit).Days / (wodvm.NumberOfVisits - 1); mandatoryvisit = false; } else if (wodvm.TimeType == WorkOrderViewModel.VisitTimeType.TimeInterval) { timeFrame = wodvm.TimeInterval; } for (int i = 1; i < wodvm.NumberOfVisits; i++) { Visit vis = new Visit(); vis.Date = wodvm.DateTimeOfFirstVisit.AddDays(timeFrame * i); vis.DateConfirmed = wodvm.DateTimeOfFirstVisit.AddDays(timeFrame * i); vis.Mandatory = mandatoryvisit; vis.WorkOrder = workOrder; DB.Visits.Add(vis); } } // Get all used medicine if (wodvm.EnterMedicine) { List <Medicine> medicines = DB.Medicines.Where(x => wodvm.MedicineIds.Contains(x.MedicineId)).ToList(); foreach (var medicine in medicines) { MedicineWorkOrder medicineWorkOrder = new MedicineWorkOrder(); medicineWorkOrder.Medicine = medicine; medicineWorkOrder.WorkOrder = workOrder; DB.MedicineWorkOrders.Add(medicineWorkOrder); } } if (wodvm.EnterBloodSample) { BloodSample bloodSample = new BloodSample(); bloodSample.BloodVialBlueCount = wodvm.BloodVialBlueCount; bloodSample.BloodVialGreenCount = wodvm.BloodVialGreenCount; bloodSample.BloodVialRedCount = wodvm.BloodVialRedCount; bloodSample.BloodVialYellowCount = wodvm.BloodVialYellowCount; bloodSample.WorkOrder = workOrder; DB.BloodSamples.Add(bloodSample); } if (wodvm.EnterPatients) { foreach (var id in wodvm.PatientIds) { Patient patient = DB.Patients.FirstOrDefault(x => x.PatientId == id); if (patient != null) { PatientWorkOrder patientWorkOrder = new PatientWorkOrder(); patientWorkOrder.WorkOrder = workOrder; patientWorkOrder.Patient = patient; DB.PatientWorkOrders.Add(patientWorkOrder); } } } DB.WorkOrders.Add(workOrder); DB.Visits.Add(visit); //DB.SaveChanges(); return(true); } }
public ActionResult Submit() { WorkOrderDataViewModel wodvm = (WorkOrderDataViewModel)Session["SavedWorkOrder"]; Employee employee = DB.Employees.FirstOrDefault(x => x.EmployeeId == wodvm.SupervisorId); Contractor contractor = employee.Contractor; WorkOrder workOrder = new WorkOrder(); workOrder.Contractor = contractor; workOrder.Issuer = employee; workOrder.Service = DB.Services.FirstOrDefault(x => x.ServiceId == wodvm.SelectedServiceId); workOrder.Name = workOrder.Service.ServiceTitle; workOrder.Nurse = DB.Employees.FirstOrDefault(x => x.EmployeeId == wodvm.SelectedNurseId); //workOrder.NurseReplacement = null; workOrder.Patient = DB.Patients.FirstOrDefault(x => x.PatientId == wodvm.PatientId); workOrder.DateCreated = wodvm.DateCreated; Visit visit = new Visit(); visit.Date = wodvm.DateTimeOfFirstVisit; visit.DateConfirmed = wodvm.DateTimeOfFirstVisit; visit.Mandatory = wodvm.MandatoryFirstVisit; visit.WorkOrder = workOrder; visit.Done = false; // Check for single or multiple visits. if (wodvm.MultipleVisits && wodvm.NumberOfVisits > 1) { int timeFrame = 1; bool mandatoryvisit = wodvm.MandatoryFirstVisit; if (wodvm.TimeType == WorkOrderViewModel.VisitTimeType.TimeFrame) { timeFrame = (wodvm.TimeFrame - wodvm.DateTimeOfFirstVisit).Days / (wodvm.NumberOfVisits - 1); mandatoryvisit = false; } else if (wodvm.TimeType == WorkOrderViewModel.VisitTimeType.TimeInterval) { timeFrame = wodvm.TimeInterval; } for (int i = 1; i < wodvm.NumberOfVisits; i++) { Visit vis = new Visit(); vis.Date = wodvm.DateTimeOfFirstVisit.AddDays(timeFrame * i); vis.DateConfirmed = wodvm.DateTimeOfFirstVisit.AddDays(timeFrame * i); vis.Mandatory = mandatoryvisit; vis.WorkOrder = workOrder; DB.Visits.Add(vis); } } // Get all used medicine if (wodvm.EnterMedicine) { List <Medicine> medicines = DB.Medicines.Where(x => wodvm.MedicineIds.Contains(x.MedicineId)).ToList(); foreach (var medicine in medicines) { MedicineWorkOrder medicineWorkOrder = new MedicineWorkOrder(); medicineWorkOrder.Medicine = medicine; medicineWorkOrder.WorkOrder = workOrder; DB.MedicineWorkOrders.Add(medicineWorkOrder); } } if (wodvm.EnterBloodSample) { BloodSample bloodSample = new BloodSample(); bloodSample.BloodVialBlueCount = wodvm.BloodVialBlueCount; bloodSample.BloodVialGreenCount = wodvm.BloodVialGreenCount; bloodSample.BloodVialRedCount = wodvm.BloodVialRedCount; bloodSample.BloodVialYellowCount = wodvm.BloodVialYellowCount; bloodSample.WorkOrder = workOrder; DB.BloodSamples.Add(bloodSample); } if (wodvm.EnterPatients) { foreach (var id in wodvm.PatientIds) { Patient patient = DB.Patients.FirstOrDefault(x => x.PatientId == id); if (patient != null) { PatientWorkOrder patientWorkOrder = new PatientWorkOrder(); patientWorkOrder.WorkOrder = workOrder; patientWorkOrder.Patient = patient; DB.PatientWorkOrders.Add(patientWorkOrder); } } } DB.WorkOrders.Add(workOrder); DB.Visits.Add(visit); DB.SaveChanges(); Session["SavedWorkOrder"] = null; Session["SavedWorkOrderSummary"] = null; return(RedirectToAction("Index", "Home")); }
public ActionResult EnterData(int visitId, int?patientId = null) { // Get correct visit Visit visit = db.Visits.FirstOrDefault(x => x.VisitId == visitId); if (visit == null) { return(RedirectToAction("Index", "Home")); } // todo: select auto fill values // select all activities // select all visit inputs // select activities for required patient VisitViewModel vvm = new VisitViewModel(); vvm.VisitId = visit.VisitId; vvm.ActivityInputs = new List <VisitViewModel.Input>(); vvm.ActivityInputIds = new List <int>(); vvm.ActivityIds = new List <int>(); vvm.ActivityInputValues = new List <string>(); vvm.VisitDate = visit.DateConfirmed; Patient patient = null; bool isMainPatientSelected = false; if (patientId != null) // If patientId is not null then we are requesting data for specific patient. { // Get correct patient if (visit.WorkOrder.Patient.PatientId == patientId) { patient = visit.WorkOrder.Patient; isMainPatientSelected = true; } else { PatientWorkOrder pwo = db.PatientWorkOrders.FirstOrDefault(x => x.Patient.PatientId == patientId && x.WorkOrder.WorkOrderId == visit.WorkOrder.WorkOrderId); if (pwo == null) { return(RedirectToAction("Index", "Home")); } else { patient = pwo.Patient; isMainPatientSelected = false; } } vvm.PatientId = patient.PatientId; // Select all activities for selected service. //List<ServiceActivity> allact = db.Activities.Select(x => x.ServiceActivities).ToList(); List <Activity> activities = db.Activities.Where(x => x.ServiceActivities.Any( sa => sa.Service.ServiceId == visit.WorkOrder.Service.ServiceId && (sa.Active == true || db.ActivityInputDatas.Any( aid => aid.Visit.VisitId == visit.VisitId && aid.Value != null && aid.Value != "" && aid.ActivityActivityInput.Activity.ActivityId == sa.Activity.ActivityId) )) && (x.ActivityActivityInputs.Any(y => y.ActivityInputFor == ActivityActivityInput.InputForType.All || y.ActivityInputFor == ActivityActivityInput.InputForType.ParentOnly && isMainPatientSelected || y.ActivityInputFor == ActivityActivityInput.InputForType.PatientOnly && !isMainPatientSelected ))).ToList(); activities = activities.OrderByDescending(a => a.ActivityActivityInputs.Any(ai => ai.ActivityInput.InputType == ActivityInput.InputTypeEnum.Number)).ToList(); List <Visit> visits = visit.WorkOrder.Visits.ToList(); visits = visits.OrderBy(v => v.DateConfirmed).ToList(); Visit firstVisit = visits.First(); vvm.MeasurmentsCount = 0; foreach (Activity activity in activities) { //if(patientId == null && !activity.ActivityInputFor || patientId != null && activity.ActivityInputFor) // Skip if activity is/is not general. // continue; if (activity.ActivityActivityInputs.Any(ai => ai.ActivityInput.InputType == ActivityInput.InputTypeEnum.Number) == true) { vvm.MeasurmentsCount += 1; } VisitViewModel.Input inputs = new VisitViewModel.Input(); inputs.ActivityTitle = activity.ActivityTitle; // Select all inputs for selected activity. List <ActivityInput> activityInputs = db.ActivityInputs.Where(x => x.ActivityActivityInputs.Any(y => y.Activity.ActivityId == activity.ActivityId && (y.Active == true || db.ActivityInputDatas.Any( aid => aid.Visit.VisitId == visit.VisitId && aid.Value != null && aid.Value != "" && aid.ActivityActivityInput.Activity.ActivityId == y.Activity.ActivityId && aid.ActivityActivityInput.ActivityInput.ActivityInputId == y.ActivityInput.ActivityInputId)))).ToList(); inputs.ActivityInputDatas = new List <VisitViewModel.Input.InputData>(); foreach (var activityInput in activityInputs) { VisitViewModel.Input.InputData inputData = new VisitViewModel.Input.InputData(); inputData.ActivityInputId = activityInput.ActivityInputId; inputData.ActivityInputTitle = activityInput.Title; //inputData.ActivityInputValue = ""; inputData.InputType = activityInput.InputType; inputData.Required = activityInput.ActivityActivityInputs.FirstOrDefault(x => x.Activity.ActivityId == activity.ActivityId && x.ActivityInput.ActivityInputId == activityInput.ActivityInputId).Required; List <string> possibleValues = activityInput.PossibleValues.Split(new string[] { ";;" }, StringSplitOptions.None).ToList(); inputData.PossibleValues = possibleValues; int correctVisitId; //correct = first or current inputData.ReadOnly = false; if (activityInput.ActivityActivityInputs.FirstOrDefault(x => x.Activity.ActivityId == activity.ActivityId && x.ActivityInput.ActivityInputId == activityInput.ActivityInputId).OneTime) { correctVisitId = firstVisit.VisitId; if (visit.VisitId != correctVisitId) { inputData.ReadOnly = true; } } else { correctVisitId = visit.VisitId; } ActivityInputData input; if (patient == null) { input = db.ActivityInputDatas.FirstOrDefault(x => x.ActivityActivityInput.ActivityInput.ActivityInputId == inputData.ActivityInputId && x.ActivityActivityInput.Activity.ActivityId == activity.ActivityId && x.Visit.VisitId == correctVisitId && x.Patient == null); } else { input = db.ActivityInputDatas.FirstOrDefault(x => x.ActivityActivityInput.ActivityInput.ActivityInputId == inputData.ActivityInputId && x.ActivityActivityInput.Activity.ActivityId == activity.ActivityId && x.Visit.VisitId == correctVisitId && x.Patient.PatientId == patient.PatientId); } vvm.ActivityInputValues.Add(input == null ? "" : input.Value); inputs.ActivityInputDatas.Add(inputData); vvm.ActivityInputIds.Add(activityInput.ActivityInputId); vvm.ActivityIds.Add(activity.ActivityId); } vvm.ActivityInputs.Add(inputs); } } else // If patientId is null then we are requesting general data. { // Select all patients related to visit vvm.MainPatient = db.Patients.FirstOrDefault(x => x.PatientId == visit.WorkOrder.Patient.PatientId); //vvm.PatientId = vvm.MainPatient.PatientId; //patientId = vvm.PatientId; List <Patient> patients = new List <Patient>(); foreach (var patientWorkOrders in visit.WorkOrder.PatientWorkOrders) { patients.Add(patientWorkOrders.Patient); } vvm.ChildPatients = patients; if (patients.Count == 0) { // return RedirectToAction("EnterData", "Visit", new { visitId = visitId, patientId = vvm.MainPatient } ); } } return(View("Index", vvm)); }