示例#1
0
        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;
        }
示例#2
0
        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;
        }