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; } }
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); }