///<summary>Responsible for updating procedures in the group to "In Process" or "Not In Process", depending on the stat passed in. ///Also sends signal to cause cache refresh. Refreshes local cache for clients directly connected.</summary> public static void UpdateGroupForProc(long procNum, ProcStat stat) { //No need to check RemotingRole; no call to db. List <ProcMultiVisit> listPmvs = GetGroupsForProcsFromDb(procNum); ProcMultiVisit pmv = listPmvs.FirstOrDefault(x => x.ProcNum == procNum); if (pmv == null) { return; //Rare edge case. Might happen is someone deletes the procedure at the same time another person is updating it. } bool isGroupInProcessOld = IsGroupInProcess(listPmvs); if (stat == ProcStat.D) { //If the procedure is deleted, also delete the procvisitmulti to reduce clutter. listPmvs.Remove(pmv); //Remove pmv from listpmvs. if (pmv.ProcMultiVisitNum == pmv.GroupProcMultiVisitNum && !listPmvs.IsNullOrEmpty()) //If the group points to the pmv to be removed and the group still exists. { long replacementGPMVNum = listPmvs.First().ProcMultiVisitNum; UpdateGroupProcMultiVisitNumForGroup(pmv.ProcMultiVisitNum, replacementGPMVNum); foreach (ProcMultiVisit procMulti in listPmvs) //Replace all group numbers. { procMulti.GroupProcMultiVisitNum = replacementGPMVNum; } } Delete(pmv.ProcMultiVisitNum); } else { ProcMultiVisit oldPmv = pmv.Copy(); pmv.ProcStatus = stat; Update(pmv, oldPmv); } bool isGroupInProcess = IsGroupInProcess(listPmvs); if (isGroupInProcess != isGroupInProcessOld) { UpdateInProcessForGroup(pmv.GroupProcMultiVisitNum, isGroupInProcess); } //Always send a signal and refresh the cache in case someone else is going to edit the group soon. Signalods.SetInvalid(InvalidType.ProcMultiVisits); if (RemotingClient.RemotingRole == RemotingRole.ClientDirect) { RefreshCache(); } }
///<summary>Will not create a group if there are less than 2 items in listProcs. Also sends signal and refreshes cache.</summary> public static void CreateGroup(List <Procedure> listProcs) { //No need to check RemotingRole; no call to db. if (listProcs.Count < 2) //No reason to make a "group" with 0 or 1 items. { return; } List <ProcMultiVisit> listPmvs = new List <ProcMultiVisit>(); for (int i = 0; i < listProcs.Count; i++) { ProcMultiVisit pmv = new ProcMultiVisit(); pmv.ProcNum = listProcs[i].ProcNum; pmv.ProcStatus = listProcs[i].ProcStatus; listPmvs.Add(pmv); } bool isGroupInProcess = ProcMultiVisits.IsGroupInProcess(listPmvs); //Could be in process if grouped procs which are different statuses via menu. long groupProcMultiVisitNum = 0; for (int i = 0; i < listPmvs.Count; i++) { ProcMultiVisit pmv = listPmvs[i]; pmv.IsInProcess = isGroupInProcess; if (i == 0) { groupProcMultiVisitNum = ProcMultiVisits.Insert(pmv); ProcMultiVisit oldPmv = pmv.Copy(); pmv.GroupProcMultiVisitNum = groupProcMultiVisitNum; ProcMultiVisits.Update(pmv, oldPmv); //Have to update after insert, or else we cannot know what the primary key is. } else { pmv.GroupProcMultiVisitNum = groupProcMultiVisitNum; ProcMultiVisits.Insert(pmv); } } Signalods.SetInvalid(InvalidType.ProcMultiVisits); RefreshCache(); }