Пример #1
0
        ///<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();
            }
        }
Пример #2
0
        ///<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();
        }