public void UpdateDrugs(PatientDrug[] drugs, Patient patientToUpdate, HttpRequest request) { for (var cursor = 0; cursor < drugs.Length; cursor++) { PatientDrug drug = drugs[cursor]; if (drug.ID == 0) { drug.PatientId = patientToUpdate.ID; string[] sideEffectsIDs = request.Form["Drugs[" + cursor + "].SideEffects"]; var sideEffectsItems = _context.SideEffects.Where(se => sideEffectsIDs.Contains(se.ID.ToString())); foreach (var sideEffect in sideEffectsItems) { PatientDrugSideEffect drugSideEffect = new PatientDrugSideEffect(); drugSideEffect.PatientDrug = drugs[cursor]; drugSideEffect.SideEffect = sideEffect; drugs[cursor].SideEffects.Add(drugSideEffect); } _context.Update(drug); } else { //var drugToUpdate = patientToUpdate.PatientDrugs.SingleOrDefault(pd => pd.ID == drug.ID); string[] sideEffectsIDs = request.Form["Drugs[" + cursor + "].SideEffects"]; var drugToUpdate = _context.PatientDrugs.Include(pd => pd.SideEffects). SingleOrDefault(pd => pd.ID == drug.ID); var sideEffectsItems = _context.SideEffects.Where(se => sideEffectsIDs.Contains(se.ID.ToString())); var uiSelectedIds = sideEffectsIDs.Select(int.Parse).ToList(); var toDeleteEffectIds = drugToUpdate.SelectedEffectsIds.Except(uiSelectedIds); var toInsertEffectIds = uiSelectedIds.Except(drugToUpdate.SelectedEffectsIds); if (toDeleteEffectIds.Count() > 0) { _context.PatientDrugSideEffects. RemoveRange(_context.PatientDrugSideEffects. Where(pdse => toDeleteEffectIds.Contains(pdse.SideEffectId) && pdse.PatientDrugId == drugToUpdate.ID)); } if (toInsertEffectIds.Count() > 0) { var sideEffectsNewItems = _context.SideEffects.Where(se => toInsertEffectIds.Contains(se.ID)); foreach (var sideEffect in sideEffectsNewItems) { PatientDrugSideEffect drugSideEffect = new PatientDrugSideEffect(); drugSideEffect.PatientDrug = drugs[cursor]; drugSideEffect.SideEffect = sideEffect; drugToUpdate.SideEffects.Add(drugSideEffect); } } drugToUpdate.StartDate = drug.StartDate; drugToUpdate.EndDate = drug.EndDate; drugToUpdate.DrugId = drug.DrugId; _context.Update(drugToUpdate); } } }
private void AddSideEffectsToDrugs(PatientDrug[] drugs) { for (var cursor = 0; cursor < Request.Form["Drugs.index"].ToList().Count; cursor++) { string stringIndex = Request.Form["Drugs.index"][cursor]; string sideEffectsIds = Request.Form["Drugs[" + stringIndex + "].SideEffects"]; var sideEffects = _context.SideEffects.Where(se => sideEffectsIds.Contains(se.ID.ToString())); foreach (var sideEffect in sideEffects) { PatientDrugSideEffect drugSideEffect = new PatientDrugSideEffect(); drugSideEffect.PatientDrug = drugs[cursor]; drugSideEffect.SideEffect = sideEffect; drugs[cursor].SideEffects.Add(drugSideEffect); } } }