/// <summary> /// Creates new record /// </summary> /// <param name="stageHistoryData"> Stage history data to create </param> /// <param name="isIntermediateStage"> Shows if this stage intemediate </param> /// <returns>Stage entity</returns> protected virtual Entity CreateStageHistoryRecord(StageHistoryData stageHistoryData, bool isIntermediateStage = false) { DateTime currentDate = stageHistoryData.Date ?? UserConnection.CurrentUser.GetCurrentDateTime(); Entity newEntity = StageHistorySchema.CreateEntity(UserConnection); newEntity.SetColumnValue("Id", Guid.NewGuid()); newEntity.SetColumnValue("RootEntityId", stageHistoryData.EntityId); newEntity.SetColumnValue("OwnerId", stageHistoryData.OwnerId); newEntity.SetColumnValue("StageId", stageHistoryData.Stage.StageId); newEntity.SetColumnValue("StartDate", currentDate); if (stageHistoryData.Stage.End || isIntermediateStage) { newEntity.SetColumnValue("DueDate", currentDate); } return(newEntity); }
/// <summary> /// Synchronizes stages with stage log /// </summary> /// <param name="oldStageId"> Old stage identifier </param> /// <param name="rootEntity"> Root entity data </param> public virtual void SynchronizeStage(Guid oldStageId, Entity rootEntity) { var stages = GetStagesCollection().ToList(); var rootEntityId = rootEntity.GetTypedColumnValue <Guid>(RootEntityColumns["Id"]); var rootEntityNewStageId = rootEntity.GetTypedColumnValue <Guid>(RootEntityColumns["Stage"]); var rootEntityNewStageOwnerId = rootEntity.GetTypedColumnValue <Guid>(RootEntityColumns["Owner"]); var newStageData = stages.FirstOrDefault(s => s.StageId == rootEntityNewStageId); var oldStageData = stages.FirstOrDefault(s => s.StageId == oldStageId); if (newStageData == null) { return; } if (oldStageData != null) { UpdateDueDateForLastStage(oldStageId, rootEntityId); } var isStagePrevious = oldStageData != null && newStageData.Number < oldStageData.Number; if (isStagePrevious) { UpdateIntermediateStages(newStageData.Number, rootEntityId); } else { var intermStages = GetIntermediateStages(stages, oldStageData, newStageData); CreateIntermediateStages(rootEntityId, rootEntityNewStageOwnerId, intermStages); } var currentDate = UserConnection.CurrentUser.GetCurrentDateTime(); var stageHistoryData = new StageHistoryData { EntityId = rootEntity.GetTypedColumnValue <Guid>("Id"), Stage = newStageData, OwnerId = rootEntityNewStageOwnerId, Date = currentDate.AddSeconds(newStageData.Number) }; var newHistoryRecord = CreateStageHistoryRecord(stageHistoryData); newHistoryRecord.Save(); }