예제 #1
0
        private void AutoAC(atriumDB.ActivityRow prevAC, ActivityConfig.ACSeriesRow asr, int revId, ACEngine.RevType revType, DateTime acDate, Stack <ParentChildStep> _flowQ, bool recurse)
        {
            FileManager fmp = FM;

            try
            {
                if (asr.InitialStep == (int)ACEngine.Step.CreateFile)
                {
                    myFM   = FM.AtMng.CreateFile(fmp);
                    prevAC = null;
                    revId  = 0;
                }


                ACEngine             ace;
                atriumDB.ActivityRow newAC;
                DoACAllSteps(prevAC, asr, revId, revType, acDate, out ace, out newAC, _flowQ, null);
                LastActivityId = newAC.ActivityId;
                FM.GetActivity().CalculateBF(newAC, revId != 0, false);
                if (PrototypeAC != null)
                {
                    if (!PrototypeAC.IsActivityCommentNull())
                    {
                        newAC.ActivityComment = PrototypeAC.ActivityComment;
                    }
                    //copy user bfs
                    foreach (atriumDB.ActivityBFRow abfr in PrototypeAC.GetActivityBFRows())
                    {
                        if (abfr.ACBFId == ActivityBFBE.USERBFID)
                        {
                            atriumDB.ActivityBFRow newabfr = (atriumDB.ActivityBFRow)FM.GetActivityBF().Add(newAC);
                            newabfr.BFDate        = abfr.BFDate;
                            newabfr.InitialBFDate = abfr.InitialBFDate;
                            if (!abfr.IsBFCommentNull())
                            {
                                newabfr.BFComment = abfr.BFComment;
                            }
                            newabfr.BFType      = abfr.BFType;
                            newabfr.BFOfficerID = abfr.BFOfficerID;
                        }
                    }
                }
                ace.Save(true, false);

                FM.GetDocMng().GetDocument().Send(newAC);

                //recurse to allow nested files
                if (recurse)
                {
                    AutoNextStep(newAC);
                }
            }
            catch (Exception x)
            {
                myFM = fmp;
                throw x;
            }
            finally
            {
                myFM = fmp;
            }
        }
예제 #2
0
        public bool AutoNextStep(atriumDB.ActivityRow activity)
        {
            //TODO:  prevent recursive calls to outofofficereply
            OutOfOfficeReply(activity);

            bool any = false;

            ActivityConfig.ACSeriesRow acsr = FM.AtMng.acMng.DB.ACSeries.FindByACSeriesId(activity.ACSeriesId);
            if (acsr.GetACDependencyRowsByNextSteps().Length == 0)
            {
                ActivityConfig.ACSeriesRow acss = FM.GetActivity().FindParentStep(activity);
                if (acss != null)
                {
                    foreach (ActivityConfig.ACDependencyRow acdr in acss.GetACDependencyRowsByNextSteps())
                    {
                        if (acdr.LinkType == (int)ConnectorType.Auto)
                        {
                            CurrentACE = null;
                            AutoAC(activity, acdr.ACSeriesRowByPreviousSteps, 0, ACEngine.RevType.Nothing);
                            any = true;
                        }
                    }
                }
            }
            else
            {
                foreach (ActivityConfig.ACDependencyRow acdr in acsr.GetACDependencyRowsByNextSteps())
                {
                    if (acdr.LinkType == (int)ConnectorType.Auto)
                    {
                        if (acdr.ACSeriesRowByPreviousSteps.StepType == (int)StepType.Decision && acdr.ACSeriesRowByPreviousSteps.GetActivityFieldRows().Length > 0)
                        {
                            //handle auto-steps that go to internal decisions
                            //only handles one level and must be a single path

                            bool ok = CurrentACE.SillyQuestion(acdr.ACSeriesRowByPreviousSteps);
                            foreach (ActivityConfig.ACDependencyRow acdrAnswr in acdr.ACSeriesRowByPreviousSteps.GetACDependencyRowsByNextSteps())
                            {
                                if ((ok && acdrAnswr.DescEng == "Yes") | (!ok && acdrAnswr.DescEng == "No"))
                                {
                                    ActivityConfig.ACSeriesRow acs_auto = acdrAnswr.ACSeriesRowByPreviousSteps;
                                    CurrentACE = null;
                                    AutoAC(activity, acs_auto, 0, ACEngine.RevType.Nothing);
                                    any = true;
                                }
                            }
                        }
                        else
                        {
                            CurrentACE = null;
                            AutoAC(activity, acdr.ACSeriesRowByPreviousSteps, 0, ACEngine.RevType.Nothing);
                            any = true;
                        }
                    }
                }
            }

            CurrentACE = null;

            return(any);
        }