protected override OpportunityInStageData FormIntermediateStageRecord(Entity entity, OpportunityStageData stage) { OpportunityInStageData oppInStageData = base.FormIntermediateStageRecord(entity, stage); return(FillOwnerId(entity, oppInStageData)); }
protected override OpportunityInStageData FormNewStageHistoryRecord(Entity entity, OpportunityStageData newStageData) { OpportunityInStageData oppInStageData = base.FormNewStageHistoryRecord(entity, newStageData); return(FillOwnerId(entity, oppInStageData)); }
protected override void ProcessIntermediateStages(Entity entity, OpportunityStageData oldStageData, OpportunityStageData newStageData) { if (IsLastStageSuccessful(newStageData)) { base.ProcessIntermediateStages(entity, oldStageData, newStageData); } }
protected override void ProcessIntermediateStages(Guid entityId, Guid newStageOwnerId, OpportunityStageData oldStageData, OpportunityStageData newStageData) { if (newStageData.IsSuccessful && newStageData.IsEnd || !newStageData.IsEnd) { base.ProcessIntermediateStages(entityId, newStageOwnerId, oldStageData, newStageData); } }
protected override void ProcessPreviousStages(Guid entityId, Guid newStageOwnerId, OpportunityStageData oldStageData, OpportunityStageData newStageData) { base.ProcessPreviousStages(entityId, newStageOwnerId, oldStageData, newStageData); var historicalStages = EntityInStageRepository.GetHistoricalOpportunityInStage(entityId, newStageData.Number); EntityInStageRepository.BulkUpdate(historicalStages, new Dictionary <string, object> { { "Historical", true } }); }
protected List <OpportunityStageData> GetIntermediateStages(List <OpportunityStageData> stages, OpportunityStageData oldStage, OpportunityStageData newStage) { var intermStages = new List <OpportunityStageData>(); if (oldStage == null) { intermStages = stages .Where(stage => stage.Number < newStage.Number) .ToList(); } else { intermStages = stages.Where(stage => (stage.Number > oldStage.Number) && stage.Number < newStage.Number) .ToList(); } return(intermStages .Where(stage => !stage.End) .OrderBy(stage => stage.Number) .ToList()); }
/// <summary> /// Synchronizes stages for opportunity. /// </summary> /// <param name="oldStageId">Last opportunity stage identifier</param> /// <param name="opportunity">Current opportunity state</param> protected virtual void SynchronizeStage(Guid oldStageId, Entity opportunity) { List <OpportunityStageData> stages = GetStagesCollection(); var oppId = opportunity.GetTypedColumnValue <Guid>("Id"); var newStageId = opportunity.GetTypedColumnValue <Guid>("StageId"); var newStageOwnerId = opportunity.GetTypedColumnValue <Guid>("OwnerId"); OpportunityStageData newStageData = stages.FirstOrDefault(s => s.StageId == newStageId); OpportunityStageData oldStageData = stages.FirstOrDefault(s => s.StageId == oldStageId); if (newStageData == null) { return; } if (oldStageData != null) { UpdateDueDateForLastStage(oldStageId, oppId); } bool isStagePrevious = oldStageData != null && newStageData.Number < oldStageData.Number; if (isStagePrevious) { UpdateIntermediateStages(newStageData.Number, oppId); } else { var intermStages = GetIntermediateStages(stages, oldStageData, newStageData); CreateIntermediateStages(oppId, newStageOwnerId, intermStages); } var currentDate = UserConnection.CurrentUser.GetCurrentDateTime(); OpportunityInStageData oppData = new OpportunityInStageData { OpportunityId = opportunity.GetTypedColumnValue <Guid>("Id"), StageData = newStageData, OwnerId = newStageOwnerId, Date = currentDate.AddSeconds(newStageData.Number) }; CreateOpportunityInStage(oppData); }
private bool IsLastStageSuccessful(OpportunityStageData newStageData) { return(newStageData.IsSuccessful && newStageData.IsEnd || !newStageData.IsEnd); }