Ejemplo n.º 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();
        }
Ejemplo n.º 2
0
        private void ReturnStatusForFiles(IEnumerable <Int64> file_ids)
        {
            var sended_status = FileStageService.GetStatusForStage(FileStages.Sended);

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

            foreach (var id in file_ids)
            {
                //1. Удалеяем статус отправлено из истории
                //2. Возвращаем последний (по времени) статус

                //1.
                FileStatusService.DeleteStatus(id, sended_status.Id);

                //2.
                var file   = FileService.GetFileById(id);
                var status = FileStatusService.GetLastStatuses(id);

                if (file != null && status != null)
                {
                    file.CurrentStatus = status.Status;
                    FileService.Update(file);
                }
            }
        }
Ejemplo n.º 3
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);
        }
Ejemplo n.º 4
0
        public void UpdatePackageFiles(Int64 package_id, IEnumerable <Int64> file_ids)
        {
            var sended_status = FileStageService.GetStatusForStage(FileStages.Sended);

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

            var files_old     = new List <Int64>(GetPackageFiles(package_id).Select(m => m.Id));
            var return_status = new List <Int64>();
            var set_status    = new List <Int64>();

            //1. Для новых файлов
            foreach (var id in file_ids)
            {
                if (!files_old.Contains(id))
                {
                    set_status.Add(id);
                }
            }

            //2. Для удаленных файлов
            foreach (var id in files_old)
            {
                if (!file_ids.Contains(id))
                {
                    return_status.Add(id);
                }
            }

            PackageRepository.UpdateFiles(package_id, file_ids);

            //Для всех новых файлов устанавливаем статус "Отправлено в ОГВ"
            foreach (var id in set_status)
            {
                FileStatusService.SetStatus(id, sended_status.Id, DateTime.Now, string.Empty);

                var file = FileService.GetFileById(id);

                if (file != null)
                {
                    file.CurrentStatus = sended_status;
                    FileService.Update(file);
                }
            }

            //Для удаленных дел возвращаем последний статус
            ReturnStatusForFiles(return_status);
        }
Ejemplo n.º 5
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);
        }