예제 #1
0
        public void Checked(long fileId, string comments)
        {
            var file = GetFileById(fileId);

            if (file == null)
            {
                throw new ArgumentException(string.Format("Дело с идентификатором {0} не найдено", fileId));
            }

            var status = FileStageService.GetStatusForStage(FileStages.Checked);

            if (status == null)
            {
                throw new ArgumentException(string.Format("Не определен статус для дел, переданных на проверку"));
            }

            file.CurrentStatus = status;

            var unit_of_work = UnitOfWorkProvider.GetUnitOfWork();

            unit_of_work.BeginTransaction();
            FileRepository.Update(file);
            FileStatusService.SetStatus(fileId, status.Id, DateTime.Now, comments);
            unit_of_work.Commit();
        }
예제 #2
0
        public IEnumerable <long> AcceptForControl(IEnumerable <long> file_ids)
        {
            //1. Проверяем право текущего пользователя принимать дела
            //2. Проверяем наличие статуса для дел, переданных на контроль
            //3. Формируем список дел (из переданных), которые еще не заняты другими контролерами
            //4. В одной транзакции принимает дел на контроль

            //1.
            var user = UserService.GetCurrentUser();

            if (!user.IsController)
            {
                throw new DomainException("Текущий пользователь не имеет прав для приема дел");
            }

            //2.
            var status = FileStageService.GetStatusForStage(FileStages.SendForControl);

            if (status == null)
            {
                throw new ArgumentException(string.Format("Не определен статус для дел, переданных на проверку"));
            }

            //3.
            List <File>  free_files    = new List <File>();
            List <Int64> free_file_ids = new List <Int64>();

            foreach (var id in file_ids)
            {
                var file = GetFileById(id);

                if (file.Controller == null)
                {
                    free_files.Add(file);
                    free_file_ids.Add(id);
                }
            }

            //4.
            var unit_of_work = UnitOfWorkProvider.GetUnitOfWork();

            unit_of_work.BeginTransaction();

            foreach (var file in free_files)
            {
                file.Controller    = user;
                file.CurrentStatus = status;
                FileRepository.Update(file);
                FileStatusService.SetStatus(file.Id, status.Id, DateTime.Now, string.Empty);
            }

            unit_of_work.Commit();

            return(free_file_ids);
        }
예제 #3
0
        public long Add(ServiceAction action)
        {
            Debug.Assert(action.Type.NeedMakeFile);

            //Возраждение удаленного дела
            File file = FileRepository.GetByActionId(action.Id);

            if (file != null && file.IsDeleted)
            {
                file.IsDeleted = false;
                FileRepository.Update(file);

                return(file.Id);
            }

            //Создание нового дела
            var status = FileStageService.GetStatusForStage(FileStages.NewFile);

            if (status == null)
            {
                throw new DomainException(string.Format("Не определен статус для новых дел"));
            }

            file = new File {
                Caption       = action.Customer,
                Date          = action.Date,
                Expert        = action.User,
                Ogv           = action.Service.Organization,
                Action        = action,
                CurrentStatus = status
            };

            //операторные скобки UnitOfWork.BeginTransaction() and UnitOfWork.Commit()
            //не используем, поскольку предполагается использование этого метода
            //в уже созданнных
            FileRepository.Create(file);
            FileStatusService.SetStatus(file.Id, status.Id, DateTime.Now, string.Empty);

            return(file.Id);
        }