public PlanningApp GeneratePlanningStates(List <StateInitialiserState> stateInitialisers, IEnumerable <StateStatus> stateStatus) { var currentDate = SystemDate.Instance.date; foreach (var stateInialiser in stateInitialisers) { PlanningAppState newPlanningAppState = new PlanningAppState(); newPlanningAppState.state = stateInialiser; PlanningAppState prevState; var stateCount = PlanningAppStates.Count; if (stateCount > 0) { prevState = PlanningAppStates[stateCount - 1]; newPlanningAppState.DueByDate = prevState.DueByDate.AddBusinessDays(stateInialiser.CompletionTime); } else { newPlanningAppState.DueByDate = currentDate.AddBusinessDays(stateInialiser.CompletionTime); } newPlanningAppState.StateStatus = stateStatus.Where(s => s.Name == StatusList.OnTime).SingleOrDefault(); //Add custom fields to state if exist foreach (var stateInitialiserStateCustomField in newPlanningAppState.state.StateInitialiserStateCustomFields) { newPlanningAppState.customFields .Add(new PlanningAppStateCustomField { StateInitialiserStateCustomFieldId = stateInitialiserStateCustomField.StateInitialiserCustomFieldId }); } PlanningAppStates.Add(newPlanningAppState); } //set first state to current state if (PlanningAppStates.Count > 0) { PlanningAppStates[0].CurrentState = true; } //Set overall Status to InProgress CurrentPlanningStatus = stateStatus.Where(s => s.Name == StatusList.AppInProgress).SingleOrDefault(); return(this); }
public PlanningApp InsertNewPlanningState(StateInitialiserState newStateInitialiser, IEnumerable <StateStatus> stateStatus) { if (!Completed()) { var currentState = Current(); if (newStateInitialiser.OrderId > currentState.state.OrderId) { //Remove states after current state var states = this.PlanningAppStates.ToList(); PlanningAppState newState = new PlanningAppState(); newState.state = newStateInitialiser; newState.CurrentState = false; newState.StateStatus = stateStatus.Where(s => s.Name == StatusList.OnTime).SingleOrDefault(); newState.CompletionDate = null; newState.DueByDate = DateTime.Now; PlanningAppStates.Add(newState); updateDueByDates(); } } return(this); }