Exemple #1
0
        public void CheckPossibilityToMoveToPreviousStage(Deal deal, User user)
        {
            // права
            CheckPermissionToPerformOperation(deal, user, Permission.Deal_Stage_Change);

            // сущность
            deal.CheckPossibilityToMoveToPreviousStage();

            // запросы к БД
            switch (deal.Stage)
            {
            // 5
            case DealStage.ContractExecution:
                // В предпродажное состояние можно перейти, только если нет ни одной продажной сущности: оплат, накладных реализации
                var expenditureWaybillCount = dealRepository.Query <ExpenditureWaybill>().Where(x => x.Deal.Id == deal.Id).Count();
                ValidationUtils.Assert(expenditureWaybillCount == 0,
                                       String.Format("Невозможно перейти на этап «{0}», так как по сделке существуют накладные реализации товаров.", deal.PreviousStage.GetDisplayName()));

                var returnFromClientWaybillCount = dealRepository.Query <ReturnFromClientWaybill>().Where(x => x.Deal.Id == deal.Id).Count();
                ValidationUtils.Assert(returnFromClientWaybillCount == 0,
                                       String.Format("Невозможно перейти на этап «{0}», так как по сделке существуют накладные возврата товара.", deal.PreviousStage.GetDisplayName()));

                ValidationUtils.Assert(!deal.DealPaymentDocuments.Any(),
                                       String.Format("Невозможно перейти на этап «{0}», так как по сделке существуют оплаты или корректировки сальдо.", deal.PreviousStage.GetDisplayName()));
                break;
            }
        }