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