Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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"));
        }
Esempio n. 3
0
        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));
        }