Пример #1
0
        public static JobLog MakeLogEntryForCategory(Job jobNew, Job jobOld)
        {
            string note   = "Job Category was changed from " + jobOld.Category.ToString() + " to " + jobNew.Category.ToString() + ".";
            JobLog jobLog = new JobLog()
            {
                JobNum          = jobOld.JobNum,
                UserNumChanged  = Security.CurUser.UserNum,
                UserNumExpert   = jobOld.UserNumExpert,
                UserNumEngineer = jobOld.UserNumEngineer,
                Title           = jobOld.Title,
                Description     = note,
                TimeEstimate    = TimeSpan.FromHours(jobNew.HoursEstimate)
            };

            JobLogs.Insert(jobLog);
            JobNotifications.UpsertAllNotifications(jobNew, Security.CurUser.UserNum, JobNotificationChanges.CategoryChange);
            return(JobLogs.GetOne(jobLog.JobLogNum));           //to get new timestamp.
        }
Пример #2
0
        public static JobLog MakeLogEntryForProject(Job jobNew, Job jobOld)
        {
            string note   = $@"Job Project was manually changed from {jobOld.PatternReviewProject.ToString()} to {jobNew.PatternReviewProject.ToString()}.";
            JobLog jobLog = new JobLog()
            {
                JobNum          = jobOld.JobNum,
                UserNumChanged  = Security.CurUser.UserNum,
                UserNumExpert   = jobOld.UserNumExpert,
                UserNumEngineer = jobOld.UserNumEngineer,
                Title           = jobOld.Title,
                Description     = note,
                TimeEstimate    = TimeSpan.FromHours(jobNew.HoursEstimate)
            };

            JobLogs.Insert(jobLog);
            JobNotifications.UpsertAllNotifications(jobNew, Security.CurUser.UserNum, JobNotificationChanges.PhaseChange);
            return(JobLogs.GetOne(jobLog.JobLogNum));           //to get new timestamp.
        }
Пример #3
0
        /// <summary>Inserts log entry to DB and returns the resulting JobLog.  Returns null if no log was needed.</summary>
        public static JobLog MakeLogEntry(Job jobNew, Job jobOld, bool isManualLog = false)
        {
            if (jobNew == null)
            {
                return(null);
            }
            JobNotificationChanges changes = new JobNotificationChanges();
            JobLog jobLog = new JobLog()
            {
                JobNum          = jobNew.JobNum,
                UserNumChanged  = Security.CurUser.UserNum,
                UserNumExpert   = jobNew.UserNumExpert,
                UserNumEngineer = jobNew.UserNumEngineer,
                Description     = "",
                TimeEstimate    = TimeSpan.FromHours(jobNew.HoursEstimate)
            };

            if (isManualLog)
            {
                jobLog.Description = "Manual \"last worked on\" update";
                JobLogs.Insert(jobLog);
                return(JobLogs.GetOne(jobLog.JobLogNum));               //to get new timestamp.
            }
            List <string> logDescriptions = new List <string>();

            if (jobOld.IsApprovalNeeded && !jobNew.IsApprovalNeeded)
            {
                if (jobOld.PhaseCur == JobPhase.Concept && (jobNew.PhaseCur == JobPhase.Definition || jobNew.PhaseCur == JobPhase.Development))
                {
                    logDescriptions.Add("Concept approved.");
                    jobLog.MainRTF          = jobNew.Implementation;
                    jobLog.RequirementsRTF += jobNew.Requirements;
                    changes = changes | JobNotificationChanges.ApprovalChange;
                }
                if ((jobOld.PhaseCur == JobPhase.Concept || jobOld.PhaseCur == JobPhase.Definition) && jobNew.PhaseCur == JobPhase.Development)
                {
                    logDescriptions.Add("Job approved.");
                    jobLog.MainRTF          = jobNew.Implementation;
                    jobLog.RequirementsRTF += jobNew.Requirements;
                    changes = changes | JobNotificationChanges.ApprovalChange;
                }
                if (jobOld.PhaseCur == JobPhase.Development && jobNew.PhaseCur == JobPhase.Development)
                {
                    logDescriptions.Add("Changes approved.");
                    jobLog.MainRTF          = jobNew.Implementation;
                    jobLog.RequirementsRTF += jobNew.Requirements;
                    changes = changes | JobNotificationChanges.ApprovalChange;
                }
            }
            else if (jobNew.PhaseCur.In(JobPhase.Documentation, JobPhase.Complete) && !jobOld.PhaseCur.In(JobPhase.Documentation, JobPhase.Complete))
            {
                logDescriptions.Add("Job implemented.");
                jobLog.MainRTF         += jobNew.Implementation;
                jobLog.RequirementsRTF += jobNew.Requirements;
            }
            if (jobOld.PhaseCur > jobNew.PhaseCur && jobOld.PhaseCur != JobPhase.Cancelled)
            {
                logDescriptions.Add("Job Unapproved.");                //may be a chance for a false positive when using override permission.
            }
            if (jobOld.PhaseCur != JobPhase.Cancelled && jobNew.PhaseCur == JobPhase.Cancelled)
            {
                logDescriptions.Add("Job Cancelled.");                //may be a chance for a false positive when using override permission.
            }
            if (jobNew.UserNumExpert != jobOld.UserNumExpert)
            {
                logDescriptions.Add("Expert changed.");
                changes = changes | JobNotificationChanges.ExpertChange;
            }
            if (jobNew.UserNumEngineer != jobOld.UserNumEngineer)
            {
                logDescriptions.Add("Engineer changed.");
                changes = changes | JobNotificationChanges.EngineerChange;
            }
            if (jobOld.Requirements != jobNew.Requirements)
            {
                logDescriptions.Add("Job Requirements Changed.");
                jobLog.RequirementsRTF += jobNew.Requirements;
                changes = changes | JobNotificationChanges.ConceptChange;
            }
            if (jobOld.Implementation != jobNew.Implementation)
            {
                logDescriptions.Add("Job Implementation Changed.");
                jobLog.MainRTF += jobNew.Implementation;
                changes         = changes | JobNotificationChanges.WriteupChange;
            }
            //Do not log RequirementsJSON changes here.
            //if(jobOld.RequirementsJSON!=jobNew.RequirementsJSON) {
            //	logDescriptions.Add("Job Requirements List Changed.");
            //	changes=changes|JobNotificationChanges.ConceptChange;
            //}
            if (jobOld.Title != jobNew.Title)
            {
                logDescriptions.Add("Job Title Changed.");
            }
            if (jobOld.HoursEstimate != jobNew.HoursEstimate)
            {
                logDescriptions.Add("Job Estimate Changed from " + jobOld.HoursEstimate.ToString() + " hour(s) to " + jobNew.HoursEstimate.ToString() + " hour(s).");
            }
            jobLog.Title       = jobNew.Title;
            jobLog.Description = string.Join("\r\n", logDescriptions);
            if (string.IsNullOrEmpty(jobLog.Description))
            {
                return(null);
            }
            JobLogs.Insert(jobLog);
            JobNotifications.UpsertAllNotifications(jobNew, Security.CurUser.UserNum, changes);
            return(JobLogs.GetOne(jobLog.JobLogNum));           //to get new timestamp.
        }
Пример #4
0
        ///<summary>Removes invalid jobs from the list of jobs passed in and then queries the DB to fill corresponding in-memory lists for remaining jobs.
        ///Set isForSearch true in order to only fill in-memory lists that are required for the Job Search window.</summary>
        public static void FillInMemoryLists(List <Job> listJobsAll, bool isForSearch = false)
        {
            //No need for remoting call here.
            listJobsAll.RemoveAll(x => x == null || x.JobNum == 0);
            List <long> jobNums = listJobsAll.Select(x => x.JobNum).ToList();
            Dictionary <long, List <JobLink> >         dictJobLinksAll         = new Dictionary <long, List <JobLink> >();
            Dictionary <long, List <JobNote> >         dictJobNotesAll         = new Dictionary <long, List <JobNote> >();
            Dictionary <long, List <JobReview> >       dictJobReviewsAll       = new Dictionary <long, List <JobReview> >();
            Dictionary <long, List <JobReview> >       dictJobTimeLogsAll      = new Dictionary <long, List <JobReview> >();
            Dictionary <long, List <JobQuote> >        dictJobQuotesAll        = new Dictionary <long, List <JobQuote> >();
            Dictionary <long, List <JobLog> >          dictJobLogsAll          = new Dictionary <long, List <JobLog> >();
            Dictionary <long, List <JobNotification> > dictJobNotificationsAll = new Dictionary <long, List <JobNotification> >();
            Dictionary <long, List <JobActiveLink> >   dictJobActiveLinksAll   = new Dictionary <long, List <JobActiveLink> >();

            //The job search only needs ListJobLinks and ListJobReviews to be filled.
            dictJobLinksAll   = JobLinks.GetJobLinksForJobs(jobNums).GroupBy(x => x.JobNum).ToDictionary(x => x.Key, x => x.ToList());
            dictJobReviewsAll = JobReviews.GetReviewsForJobs(jobNums.ToArray()).GroupBy(x => x.JobNum).ToDictionary(x => x.Key, x => x.ToList());
            //Fill all other dictionaries when not filling in-memory lists for job search results (saves db calls and memory usage).
            if (!isForSearch)
            {
                dictJobNotesAll         = JobNotes.GetJobNotesForJobs(jobNums).GroupBy(x => x.JobNum).ToDictionary(x => x.Key, x => x.ToList());
                dictJobTimeLogsAll      = JobReviews.GetTimeLogsForJobs(jobNums.ToArray()).GroupBy(x => x.JobNum).ToDictionary(x => x.Key, x => x.ToList());
                dictJobQuotesAll        = JobQuotes.GetJobQuotesForJobs(jobNums).GroupBy(x => x.JobNum).ToDictionary(x => x.Key, x => x.ToList());
                dictJobLogsAll          = JobLogs.GetJobLogsForJobs(jobNums).GroupBy(x => x.JobNum).ToDictionary(x => x.Key, x => x.ToList());
                dictJobNotificationsAll = JobNotifications.GetNotificationsForJobs(jobNums).GroupBy(x => x.JobNum).ToDictionary(x => x.Key, x => x.ToList());
                dictJobActiveLinksAll   = JobActiveLinks.GetJobActiveLinksForJobNums(jobNums).GroupBy(x => x.JobNum).ToDictionary(x => x.Key, x => x.ToList());
            }
            foreach (Job job in listJobsAll)
            {
                if (!dictJobLinksAll.TryGetValue(job.JobNum, out job.ListJobLinks))
                {
                    job.ListJobLinks = new List <JobLink>();                 //empty list if not found
                }
                if (!dictJobNotesAll.TryGetValue(job.JobNum, out job.ListJobNotes))
                {
                    job.ListJobNotes = new List <JobNote>();                 //empty list if not found
                }
                if (!dictJobReviewsAll.TryGetValue(job.JobNum, out job.ListJobReviews))
                {
                    job.ListJobReviews = new List <JobReview>();                 //empty list if not found
                }
                if (!dictJobTimeLogsAll.TryGetValue(job.JobNum, out job.ListJobTimeLogs))
                {
                    job.ListJobTimeLogs = new List <JobReview>();                 //empty list if not found
                }
                if (!dictJobQuotesAll.TryGetValue(job.JobNum, out job.ListJobQuotes))
                {
                    job.ListJobQuotes = new List <JobQuote>();                 //empty list if not found
                }
                if (!dictJobLogsAll.TryGetValue(job.JobNum, out job.ListJobLogs))
                {
                    job.ListJobLogs = new List <JobLog>();                 //empty list if not found
                }
                if (!dictJobNotificationsAll.TryGetValue(job.JobNum, out job.ListJobNotifications))
                {
                    job.ListJobNotifications = new List <JobNotification>();                 //empty list if not found
                }
                if (!dictJobActiveLinksAll.TryGetValue(job.JobNum, out job.ListJobActiveLinks))
                {
                    job.ListJobActiveLinks = new List <JobActiveLink>();                 //empty list if not found
                }
            }
        }