public RequestView updateRequest(RequestView request) { LookupMgr lookupMgr = new LookupMgr(this.svc); RequestView oldRequest = getRequest(request.ID); string from = (string)MainFactory.getConfiguration().get(CONFIG_EMAIL); if (request.EstimatedDueDate == null) throw new ArgumentException("Estimated Due Date cannot be empty."); string status = this.requestStatusList.Data.Where(x => x.ID == request.Status.ID).FirstOrDefault().Text.ToLower(); request.Status.Text = status; // update elements if (status.Equals("complete") && request.Status.ID != oldRequest.Status.ID) { if (request.Resolution == null || request.Resolution.Length < 1) throw new ArgumentException("You are closing this request. Please provide a resolution."); foreach (ElementView element in oldRequest.ElementList.ToList()) { if (element.ClosedDate == null) { if (!element.AssignedTo.Equals(request.AssignedTo)) throw new InvalidOperationException("There are elements that are not assigned to you. You cannot close this request until these elements are closed manually."); element.PercentComplete = 100; element.Resolution = "AutoStamp: " + request.Resolution; element.Status = this.elementStatusList.Data.Where(x => x.Text.Equals("Complete")).FirstOrDefault(); updateElement(element, true); } } request.setClosed(); EmailSvc.Email(from, request.RequestedBy.EmailAddress, "", "Request " + request.ID + " - " + request.Summary + " has been completed", ConsoleFactory.requestEmailSubmitterStatusChange(request)); } else if ((status.Equals("rejected") || status.Equals("cancelled")) && request.Status.ID != oldRequest.Status.ID) { if (request.Resolution == null || request.Resolution.Length < 1) throw new ArgumentException("You are closing this request. Please provide a resolution."); request.setClosed(); EmailSvc.Email(from, request.RequestedBy.EmailAddress, "", "Request " + request.ID + " - " + request.Summary + " has been " + request.Resolution + ".", ConsoleFactory.requestEmailSubmitterStatusChange(request)); } else if (status.Equals("on hold") && request.Status.ID != oldRequest.Status.ID) request.setHoldDate(); else if (oldRequest.Status.Text.ToLower().Equals("on hold") && request.Status.ID != oldRequest.Status.ID) request.setResumeDate(); else if (status.Equals("moved to project") && request.Status.ID != oldRequest.Status.ID) { UserMgr userMgr = new UserMgr(MainFactory.getUserSvc()); if (request.EstimatedHours == null || request.EstimatedHours <= 0) throw new ArgumentException("Request must have estimated hours before being requested for promotion."); EmailSvc.Email(from, userMgr.getUser(Int32.Parse((string)MainFactory.getConfiguration().get("BIManagerID"))).EmailAddress, "", "Request " + request.ID + " - " + request.Summary + " has been updated", ConsoleFactory.requestEmailPromoteBody(request)); request.ManagerQueueDate = DateTime.Today; } // hours are different. update cost if (request.EstimatedHours != oldRequest.EstimatedHours) request.EstimatedCost = request.EstimatedHours * request.InternalHoursMultiplier; request.ActualCost = oldRequest.ElementList.Sum(x => x.Hours) * request.InternalHoursMultiplier; request.isNew = false; request.setLastUpdated(); RequestView r = convertRequest(this.svc.updateRequest(request)); //change oldRequest's child Element's parent pointer to this foreach (ElementView e in oldRequest.ElementList) e.Parent = r; r.ElementList = oldRequest.ElementList; // change Parent's pointer to this if (r.Parent != null) { r.Parent.RequestList.Remove(r); r.Parent.RequestList.Add(r); } // if a u parent was added in this update. if (r.Parent == null && request.Parent != null && request.Parent.ID != 0) { foreach (RequestView rv in this.requestList.Data) if (rv.Parent != null && rv.Parent.ID == request.Parent.ID) { r.Parent = rv.Parent; r.Parent.RequestList.Add(r); break; } } // change the pointer in the requestList to point to this object foreach (RequestView rv in this.requestList.Data.ToList()) if (rv.ID == request.ID) this.requestList.Data.Remove(rv); this.requestList.Data.Add(r); HttpContext.Current.Application.Lock(); HttpContext.Current.Application["Request"] = this.requestList; HttpContext.Current.Application.UnLock(); return r; }
public ProjectView saveProject(RequestView request, DateTime startDate) { if (request.Parent != null && request.Parent.ID != 0) throw new ArgumentException("Request is already part of a project. It cannot be promoted to project."); LookupMgr lookupMgr = new LookupMgr(this.svc); UserMgr userMgr = new UserMgr(MainFactory.getUserSvc()); request.SubmittedBy = (User)userMgr.getUser(request.SubmittedBy.EmployeeID); request.RequestedBy = (User)userMgr.getUser(request.RequestedBy.EmployeeID); request.AssignedTo = (User)userMgr.getUser(request.AssignedTo.EmployeeID); request.Program = lookupMgr.getPrograms().Where(x => x.ID == request.Program.ID).Cast<Program>().FirstOrDefault(); request.RequestCategory = lookupMgr.getRequestCategories(true).Where(x => x.ID == request.RequestCategory.ID).FirstOrDefault(); request.Status = this.requestStatusList.Data.Where(x => x.Text.ToLower().Equals("moved to project")).FirstOrDefault(); request.CType = lookupMgr.getRequestTypes(EOpenType.Request, true).Where(x => x.ID == request.CType.ID).FirstOrDefault(); request.SupportArea = lookupMgr.getSupportAreas().Where(x => x.ID == request.SupportArea.ID).FirstOrDefault(); request.ValueDriver = lookupMgr.getValueDrivers().Where(x => x.ID == request.ValueDriver.ID).Cast<ValueDriver>().FirstOrDefault(); ProjectView project = new ProjectView(request); project.Status = this.projectStatusList.Data.Where(x => x.Text.Equals("Pending")).FirstOrDefault(); project.StartDate = startDate; project.ManagerApprovedDate = DateTime.Today; project = convertProject(this.svc.saveProject(project)); request.Parent = project; request.isNew = false; request.setLastUpdated(); project.RequestList.Add(getRequest(request.ID)); updateRequest(request); // update pointer and status foreach (RequestView rv in this.requestList.Data.ToList()) { if (rv.ID == request.ID) { request.ElementList = rv.ElementList; this.requestList.Data.Remove(rv); } } this.requestList.Data.Add(request); HttpContext.Current.Application.Lock(); HttpContext.Current.Application["Request"] = this.requestList; HttpContext.Current.Application.UnLock(); return project; }