private void AddNewStage(int dealId, int stageId) { DateTime datanow = System.DateTime.Now; //update if exists try { var updateDeal = _dealStageServices.Query(a => a.Dealid == dealId && a.ExitDate == null).ToList(); updateDeal.ForEach(a => a.ExitDate = datanow); updateDeal.ForEach(a => _dealStageServices.Update(a)); } catch (Exception) { ; } //add control steage deal var dealstage = new DealStage() { BusinessEntityId = _currentUser.GetCurrentBusinessEntityId(), Dealid = dealId, StageId = stageId, UserSettingId = _currentUser.Id(), CreateDate = datanow, ModifiedDate = datanow, ExitDate = null }; _dealStageServices.Add(dealstage); }
/// <summary> /// Изменить (или установить начальный) этап сделки /// </summary> /// <param name="stage">Новый этап сделки</param> private void PerformStageChanging(DealStage stage) { var currentDate = DateTime.Now; // закрываем текущую строку истории var currentHist = stageHistory.Where(x => x.EndDate == null).SingleOrDefault(); if (currentHist != null) { currentHist.EndDate = currentDate; } Stage = stage; StageDate = currentDate; IsClosed = !IsActive; // добавляем новую строку истории var hist = new DealStageHistory(stage); stageHistory.Add(hist); hist.Deal = this; }
/// <summary> /// Проверить возможность закрытия сделки (при переходе на этапы 7.1, 7.2) /// </summary> /// <param name="deal">Сделка</param> /// <param name="dealStage">Новый этап сделки</param> private void CheckPossibilityToCloseDeal(Deal deal, DealStage dealStage, User user) { // Получаем все реализации по сделке var sales = dealRepository.Query <SaleWaybill>().Where(x => x.Deal.Id == deal.Id).ToList <SaleWaybill>(); // проверяем наличие неоплаченных реализаций if (sales.Where(x => x.IsFullyPaid == false).Count() != 0) { throw new Exception("Невозможно закрыть сделку, в которой имеются неоплаченные накладные реализации."); } ValidationUtils.Assert(!dealRepository.IsAnyUndistributedDealPaymentDocument(deal.Id), "Невозможно закрыть сделку, в которой имеются неразнесенные оплаты или корректировки сальдо."); // проверяем наличие неотгруженных накладных реализации var expenditureWaybills = sales.Where(x => x.Is <ExpenditureWaybill>()).ToList().ConvertAll(x => x.As <ExpenditureWaybill>()); if (expenditureWaybills.Where(x => x.State != ExpenditureWaybillState.ShippedBySender).Count() != 0) { throw new Exception("Невозможно закрыть сделку, в которой имеются неотгруженные накладные реализации."); } // проверяем наличие непринятых возвратов var unreceiptedReturnFromClientCount = dealRepository.Query <ReturnFromClientWaybill>() .Where(x => x.Deal.Id == deal.Id && x.State != ReturnFromClientWaybillState.Receipted) .Count(); ValidationUtils.Assert(unreceiptedReturnFromClientCount == 0, "Невозможно закрыть сделку, в которой имеются непринятые возвраты."); ValidationUtils.Assert(CalculateMainIndicators(deal, calculateBalance: true).Balance == 0M, "Невозможно закрыть сделку, сальдо по которой отлично от нуля."); // Проверка задач var taskCount = taskRepository.GetOpenTaskCountForDeal(deal.Id); ValidationUtils.Assert(taskCount == 0, "Невозможно закрыть сделку, в которой имеются незакрытые мероприятия и задачи."); }
public DealStageHistory(DealStage dealStage) { DealStage = dealStage; StartDate = DateTime.Now; }