예제 #1
0
        public IHttpActionResult CreateRequestEvent(RequestEventParameterModel param)
        {
            RequestEventParameter dto = new RequestEventParameter
            {
                RequestVersion  = param.RequestVersion,
                Note            = param.Note,
                RequestId       = param.RequestId,
                StatusRequestId = param.StatusRequestId,
                NewDeadLineDate = String.IsNullOrEmpty(param.NewDeadLineDate) ? (DateTime?)null : Convert.ToDateTime(param.NewDeadLineDate)
            };

            return(execute(delegate()
            {
                long userId = User.Identity.GetUserId <long>();
                requestService.CreateRequestEvent(userId, dto);
                result = Json(new { success = true });
            }));
        }
예제 #2
0
        public void CreateRequestEvent(long userId, RequestEventParameter dto)
        {
            DateTime currentDate = dateTimeService.GetCurrent();
            Request  request     = requestRepository.Get(dto.RequestId);

            if (request.Version > dto.RequestVersion)
            {
                throw new DataServiceException(Resource.ConcurrencyConstraintMsg);
            }

            if (dto.StatusRequestId == (long)RawStatusRequestEnum.ExtendedDeadLine && !dto.NewDeadLineDate.HasValue)
            {
                setErrorMsg("NewDeadLineDate", Resource.EmptyConstraintMsg);
            }

            if (dto.NewDeadLineDate.HasValue && dto.NewDeadLineDate.Value.Date <= currentDate.Date)
            {
                setErrorMsg("NewDeadLineDate", String.Format(Resource.NewDeadLineDateConstraintMsg,
                                                             dto.NewDeadLineDate.Value.Date.ToShortDateString(), request.DateEndPlan.Date.ToShortDateString()));
            }

            checkStringConstraint("Note", dto.Note,
                                  (dto.StatusRequestId == (long)RawStatusRequestEnum.Rejected ||
                                   dto.StatusRequestId == (long)RawStatusRequestEnum.RejectedAfterAccepted ||
                                   dto.StatusRequestId == (long)RawStatusRequestEnum.NotApprovedComplete),
                                  2000, 5);

            if (errorMessages.Count > 0)
            {
                throw new DataServiceException(Resource.GeneralConstraintMsg, errorMessages);
            }


            WorkerUser         user = workerUserRepository.Get(userId);
            IEnumerable <long> allowableUserStates = user.UserType.AllowableStates.ToEnumerable <long>();
            IDictionary <long, IEnumerable <StatusRequest> > graphState = getGraphState(allowableUserStates);

            StatusRequest statusRequest = statusRepository.Get(dto.StatusRequestId);

            var lastEvent = queryHandler.Handle <RequestLastEventQueryParam, IEnumerable <RequestEventDTO>, IQuery <RequestLastEventQueryParam, IEnumerable <RequestEventDTO> > >
                                (new RequestLastEventQueryParam
            {
                RequestIds  = new long[] { dto.RequestId },
                WithDateEnd = false
            }, _requestLastEventQuery).FirstOrDefault();

            RequestEvent newEvent = new RequestEvent()
            {
                RequestId     = request.Id,
                DateInsert    = currentDate,
                DateEvent     = currentDate,
                OrdGroup      = lastEvent.OrdGroup,
                User          = user,
                StatusRequest = statusRequest,
                Note          = dto.Note
            };

            requestEventRepository.Save(newEvent);

            RequestEvent dateEndEvent = null;

            if (dto.StatusRequestId == (long)RawStatusRequestEnum.ExtendedDeadLine)
            {
                StatusRequest dateEndStatusRequest = statusRepository.Get((long)RawStatusRequestEnum.DateEnd);
                dateEndEvent = new RequestEvent()
                {
                    RequestId     = request.Id,
                    DateInsert    = currentDate,
                    DateEvent     = dto.NewDeadLineDate.Value,
                    OrdGroup      = lastEvent.OrdGroup + 1,
                    User          = user,
                    StatusRequest = dateEndStatusRequest
                };
                request.CountCorrectionDateEndPlan++;
                request.DateEndPlan = dto.NewDeadLineDate.Value;
                requestEventRepository.Save(dateEndEvent);
            }
            else if (dto.StatusRequestId == (long)RawStatusRequestEnum.ExtendedConfirmation)
            {
                StatusRequest dateEndStatusRequest = statusRepository.Get((long)RawStatusRequestEnum.DateEnd);
                dateEndEvent = new RequestEvent()
                {
                    RequestId     = request.Id,
                    DateInsert    = currentDate,
                    DateEvent     = request.DateEndPlan.AddDays(1),
                    OrdGroup      = lastEvent.OrdGroup + 1,
                    User          = user,
                    StatusRequest = dateEndStatusRequest
                };
                request.DateEndPlan = dateEndEvent.DateEvent;
                requestEventRepository.Save(dateEndEvent);
            }

            request.User       = user;
            request.DateUpdate = currentDate;
            request.Status     = statusRequest;
            requestRepository.Save(request);



            bool transferRequestToArchive = dto.StatusRequestId == (long)RawStatusRequestEnum.ApprovedComplete ||
                                            dto.StatusRequestId == (long)RawStatusRequestEnum.ApprovedRejected ||
                                            dto.StatusRequestId == (long)RawStatusRequestEnum.Passive;

            //перенос заявки в архив
            if (transferRequestToArchive)
            {
                var requestArch = new RequestArch
                {
                    CountCorrectionDateEndPlan = request.CountCorrectionDateEndPlan,
                    DateEndFact        = currentDate,
                    DateEndPlan        = request.DateEndPlan,
                    DateInsert         = request.DateInsert,
                    DateUpdate         = request.DateUpdate,
                    DescriptionProblem = request.DescriptionProblem,
                    Employee           = request.Employee,
                    Object             = request.Object,
                    Status             = request.Status,
                    Worker             = request.Worker,
                    Version            = request.Version,
                    User = request.User,
                    Id   = request.Id
                };
                requestArchRepository.Insert(requestArch, requestArch.Id);
                var requestEvents = requestEventRepository.GetList(r => r.RequestId == request.Id).ToList();
                foreach (var evnt in requestEvents)
                {
                    var evntArch = new RequestEventArch
                    {
                        DateEvent     = evnt.DateEvent,
                        DateInsert    = evnt.DateInsert,
                        Note          = evnt.Note,
                        OrdGroup      = evnt.OrdGroup,
                        RequestId     = evnt.RequestId,
                        StatusRequest = evnt.StatusRequest,
                        User          = evnt.User,
                        Id            = evnt.Id
                    };
                    requestEventArchRepository.Insert(evntArch, evntArch.Id);
                }
                requestEventRepository.Delete(e => e.RequestId == request.Id);
                requestRepository.Delete(request.Id);
            }


            repository.SaveChanges();

            queue.Push(new RequestAppEvent()
            {
                RequestEventId = newEvent.Id,
                Archive        = transferRequestToArchive
            });
        }