Example #1
0
        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);
        }
Example #2
0
        /// <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;
        }
Example #3
0
        /// <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, "Невозможно закрыть сделку, в которой имеются незакрытые мероприятия и задачи.");
        }
Example #4
0
 public DealStageHistory(DealStage dealStage)
 {
     DealStage = dealStage;
     StartDate = DateTime.Now;
 }