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; } }