Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <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();
        }