Beispiel #1
0
        private void FillGridNoHours()
        {
            List <Job> listJobsInDevelopmentNoHours = _listJobsAll.Where(x => x.HoursActual <= 0 &&
                                                                         x.PhaseCur.In(JobPhase.Development) &&
                                                                         !x.Category.In(JobCategory.Bug, JobCategory.Query, JobCategory.Conversion, JobCategory.Research)).ToList();

            gridNoHours.BeginUpdate();
            gridNoHours.Columns.Clear();
            gridNoHours.Columns.Add(new ODGridColumn("Job", 0));
            gridNoHours.Columns.Add(new ODGridColumn("Owner", 70)
            {
                TextAlign = HorizontalAlignment.Center
            });
            gridNoHours.Columns.Add(new ODGridColumn("Owner Action", 90));
            gridNoHours.Rows.Clear();
            foreach (Job job in listJobsInDevelopmentNoHours)
            {
                ODGridRow row = new ODGridRow()
                {
                    Tag = job
                };
                row.Cells.Add(job.ToString());
                row.Cells.Add(Userods.GetName(job.OwnerNum));
                row.Cells.Add(job.OwnerAction.GetDescription());
                gridNoHours.Rows.Add(row);
            }
            gridNoHours.EndUpdate();
        }
Beispiel #2
0
        private void FillGridQuoteNotStarted()
        {
            List <Job> listJobsQuoteNotStarted = _listJobsAll.Where(x => x.ListJobQuotes.Exists(y => y.IsCustomerApproved == true) &&
                                                                    x.HoursActual <= 0 &&
                                                                    !x.PhaseCur.In(JobPhase.Cancelled, JobPhase.Complete, JobPhase.Documentation) &&
                                                                    !x.Category.In(JobCategory.Bug, JobCategory.Query, JobCategory.Conversion, JobCategory.Research)).ToList();

            gridQuoteNotStarted.BeginUpdate();
            gridQuoteNotStarted.Columns.Clear();
            gridQuoteNotStarted.Columns.Add(new ODGridColumn("Job", 0));
            gridQuoteNotStarted.Columns.Add(new ODGridColumn("Owner", 70)
            {
                TextAlign = HorizontalAlignment.Center
            });
            gridQuoteNotStarted.Columns.Add(new ODGridColumn("Owner Action", 90));
            gridQuoteNotStarted.Rows.Clear();
            foreach (Job job in listJobsQuoteNotStarted)
            {
                ODGridRow row = new ODGridRow()
                {
                    Tag = job
                };
                row.Cells.Add(job.ToString());
                row.Cells.Add(Userods.GetName(job.OwnerNum));
                row.Cells.Add(job.OwnerAction.GetDescription());
                gridQuoteNotStarted.Rows.Add(row);
            }
            gridQuoteNotStarted.EndUpdate();
        }
		///<summary>Fills with jobs that are in development and attached to the selected sprint. Ordered by last timelog.</summary>
		private void FillGridActiveDevelopment() {
			gridActiveDevelopment.BeginUpdate();
			gridActiveDevelopment.ListGridColumns.Clear();
			gridActiveDevelopment.ListGridColumns.Add(new GridColumn("Priority",90,HorizontalAlignment.Center));
			gridActiveDevelopment.ListGridColumns.Add(new GridColumn("Last Updated",90,HorizontalAlignment.Center));
			gridActiveDevelopment.ListGridColumns.Add(new GridColumn("Owner",55,HorizontalAlignment.Center));
			gridActiveDevelopment.ListGridColumns.Add(new GridColumn("Owner Action",110));
			gridActiveDevelopment.ListGridColumns.Add(new GridColumn("EstHrs",60,HorizontalAlignment.Center,GridSortingStrategy.AmountParse));
			gridActiveDevelopment.ListGridColumns.Add(new GridColumn("ActHrs",60,HorizontalAlignment.Center,GridSortingStrategy.AmountParse));
			gridActiveDevelopment.ListGridColumns.Add(new GridColumn("",300));
			gridActiveDevelopment.ListGridRows.Clear();
			List<Job> listActiveJobs=_listAttachedJobs.Where(x => x.PhaseCur==JobPhase.Development).OrderByDescending(x => x.ListJobTimeLogs.Count>0?x.ListJobTimeLogs.Select(y => y.DateTStamp).Max():DateTime.MinValue)
					.ThenBy(x => _listJobPriorities.FirstOrDefault(y => y.DefNum==x.Priority).ItemOrder).ToList();
			foreach(Job job in listActiveJobs) {
				Color backColor=Color.White;
				Def jobPriority=_listJobPriorities.FirstOrDefault(y => y.DefNum==job.Priority);
				gridActiveDevelopment.ListGridRows.Add(
				new GridRow(
					new GridCell(jobPriority.ItemName) {
						ColorBackG=jobPriority.ItemColor,
						ColorText=(job.Priority==_listJobPriorities.FirstOrDefault(y => y.ItemValue.Contains("Urgent")).DefNum) ? Color.White : Color.Black,
					},
					new GridCell(job.OwnerNum==0 ? "-" : Userods.GetName(job.OwnerNum)),
					new GridCell(job.OwnerAction.GetDescription()),
					new GridCell(job.HoursEstimate.ToString()),
					new GridCell(job.HoursActual.ToString()),
					new GridCell(job.ToString())
					) {
					Tag=job,
					ColorBackG=backColor
				}
				);
			}
			gridActiveDevelopment.EndUpdate();
		}
Beispiel #4
0
 private void FormTaskNoteEdit_Load(object sender, EventArgs e)
 {
     textDateTime.Text = TaskNoteCur.DateTimeNote.ToString();
     textUser.Text     = Userods.GetName(TaskNoteCur.UserNum);
     textNote.Text     = TaskNoteCur.Note;
     this.Top         += 150;
 }
Beispiel #5
0
        ///<summary>Returns the commit message for this job. Job should not be null.</summary>
        private string GetCommitMessage(Job job)
        {
            string description;

            if (job.Category == JobCategory.Bug)
            {
                Bug    bug            = Bugs.GetOne(job.ListJobLinks.Where(x => x.LinkType == JobLinkType.Bug).FirstOrDefault()?.FKey ?? 0);
                string bugDescription = "";
                if (bug != null)
                {
                    bugDescription = bug.Description.Replace("\"", "");
                }
                else
                {
                    bugDescription = job.Title;
                }
                description = job.Category.ToString().Substring(0, 1) + job.JobNum + " - "
                              + bugDescription;
            }
            else
            {
                description = job.Category.ToString().Substring(0, 1) + job.JobNum + " - " + job.Title;
            }
            string reviewers = string.Join(", ", job.ListJobReviews
                                           .Where(x => x.ReviewStatus == JobReviewStatus.Done || x.ReviewStatus == JobReviewStatus.NeedsAdditionalReview)
                                           .DistinctBy(x => x.ReviewerNum)
                                           .Select(x => Userods.GetName(x.ReviewerNum))
                                           .OrderBy(x => x)
                                           .ToList());

            return($"{POut.String(description)}\r\nBackported to: {POut.String(job.JobVersion)}\r\nReviewed by: {POut.String(reviewers)}");
        }
Beispiel #6
0
 private void FormProcBroken_Load(object sender, EventArgs e)
 {
     textDateEntry.Text      = _procCur.DateEntryC.ToShortDateString();
     textProcDate.Text       = _procCur.ProcDate.ToShortDateString();
     textAmount.Text         = _procCur.ProcFee.ToString("f");
     _selectedProvNum        = _procCur.ProvNum;
     comboProv.SelectedIndex = -1;          //initializes to 0; must be -1 for fillComboProv
     if (PrefC.HasClinicsEnabled)
     {
         _listClinics = new List <Clinic>()
         {
             new Clinic()
             {
                 Abbr = Lan.g(this, "None")
             }
         };                                                                                       //Seed with "None"
         Clinics.GetForUserod(Security.CurUser).ForEach(x => _listClinics.Add(x));                //do not re-organize from cache. They could either be alphabetizeded or sorted by item order.
         _listClinics.ForEach(x => comboClinic.Items.Add(x.Abbr));
         _selectedClinicNum = _procCur.ClinicNum;
         comboClinic.IndexSelectOrSetText(_listClinics.FindIndex(x => x.ClinicNum == _selectedClinicNum), () => { return(Clinics.GetAbbr(_selectedClinicNum)); });
     }
     else
     {
         labelClinic.Visible = false;
         comboClinic.Visible = false;
         fillComboProv();
     }
     textUser.Text         = Userods.GetName(_procCur.UserNum);
     textChartNotes.Text   = _procCur.Note;
     textAccountNotes.Text = _procCur.BillingNote;
 }
Beispiel #7
0
        private void FillGridHigh()
        {
            List <Job> listHighPriorityJobs = _listJobsAll.Where(x => x.Priority.In(591, 601) &&     //High Priority or Urgent
                                                                 !x.PhaseCur.In(JobPhase.Cancelled, JobPhase.Complete, JobPhase.Documentation) &&
                                                                 !x.Category.In(JobCategory.Bug, JobCategory.Query, JobCategory.Conversion, JobCategory.Research)).ToList();

            gridHighPriorityJobs.BeginUpdate();
            gridHighPriorityJobs.Columns.Clear();
            gridHighPriorityJobs.Columns.Add(new ODGridColumn("Job", 0));
            gridHighPriorityJobs.Columns.Add(new ODGridColumn("Owner", 70)
            {
                TextAlign = HorizontalAlignment.Center
            });
            gridHighPriorityJobs.Columns.Add(new ODGridColumn("Owner Action", 90));
            gridHighPriorityJobs.Columns.Add(new ODGridColumn("Engineer", 75)
            {
                TextAlign = HorizontalAlignment.Center
            });
            gridHighPriorityJobs.Columns.Add(new ODGridColumn("Hrs Est", 75)
            {
                TextAlign = HorizontalAlignment.Center
            });
            gridHighPriorityJobs.Columns.Add(new ODGridColumn("Hrs So Far", 75)
            {
                TextAlign = HorizontalAlignment.Center
            });
            gridHighPriorityJobs.Columns.Add(new ODGridColumn("Hrs Last 7 Days", 90)
            {
                TextAlign = HorizontalAlignment.Center
            });
            gridHighPriorityJobs.Columns.Add(new ODGridColumn("Last Updated", 90)
            {
                TextAlign = HorizontalAlignment.Center
            });
            gridHighPriorityJobs.Columns.Add(new ODGridColumn("Expert", 75)
            {
                TextAlign = HorizontalAlignment.Center
            });
            gridHighPriorityJobs.Rows.Clear();
            foreach (Job job in listHighPriorityJobs)
            {
                ODGridRow row = new ODGridRow()
                {
                    Tag = job
                };
                row.Cells.Add(job.ToString());
                row.Cells.Add(Userods.GetName(job.OwnerNum));
                row.Cells.Add(job.OwnerAction.GetDescription());
                row.Cells.Add(Userods.GetName(job.UserNumEngineer));
                row.Cells.Add(job.TimeEstimate.TotalHours.ToString());
                row.Cells.Add(job.HoursActual.ToString());
                row.Cells.Add(job.ListJobTimeLogs.Where(x => x.DateTStamp >= DateTime.Today.AddDays(-7)).Sum(y => y.TimeReview.TotalHours).ToString());
                DateTime lastUpdated = job.ListJobLogs.Where(x => x.Description != "Job Viewed").Select(y => y.DateTimeEntry).OrderByDescending(x => x.Ticks).FirstOrDefault();
                row.Cells.Add(lastUpdated == DateTime.MinValue?"N/A":lastUpdated.ToShortDateString());
                row.Cells.Add(Userods.GetName(job.UserNumExpert));
                gridHighPriorityJobs.Rows.Add(row);
            }
            gridHighPriorityJobs.EndUpdate();
        }
Beispiel #8
0
        private void FillGrid()
        {
            EmailAddresses.RefreshCache();
            _listEmailAddresses = EmailAddresses.GetDeepCopy();
            //Add user specific email addresses to the list
            List <Userod> listUsers = new List <Userod>();

            if (Security.IsAuthorized(Permissions.SecurityAdmin, true) && !IsSelectionMode)
            {
                listUsers.AddRange(Userods.GetUsers());                //If authorized, get all non-hidden users.
            }
            else
            {
                listUsers.Add(Security.CurUser);                //Otherwise, just this user.
            }
            foreach (Userod user in listUsers)
            {
                EmailAddress userAddress = EmailAddresses.GetForUser(user.UserNum);
                if (userAddress != null)
                {
                    _listEmailAddresses.Insert(0, userAddress);
                }
            }
            gridMain.BeginUpdate();
            gridMain.ListGridColumns.Clear();
            GridColumn col;

            col = new GridColumn(Lan.g(this, "User Name"), 240);
            gridMain.ListGridColumns.Add(col);
            col = new GridColumn(Lan.g(this, "Sender Address"), 270);
            gridMain.ListGridColumns.Add(col);
            col = new GridColumn(Lan.g(this, "User"), 135);
            gridMain.ListGridColumns.Add(col);
            col = new GridColumn(Lan.g(this, "Default"), 50, HorizontalAlignment.Center);
            gridMain.ListGridColumns.Add(col);
            col = new GridColumn(Lan.g(this, "Notify"), 0, HorizontalAlignment.Center);
            gridMain.ListGridColumns.Add(col);
            gridMain.ListGridRows.Clear();
            GridRow row;

            foreach (EmailAddress emailAddress in _listEmailAddresses)
            {
                row = new GridRow();
                row.Cells.Add(emailAddress.EmailUsername);
                row.Cells.Add(emailAddress.SenderAddress);
                row.Cells.Add(Userods.GetName(emailAddress.UserNum));
                row.Cells.Add((emailAddress.EmailAddressNum == PrefC.GetLong(PrefName.EmailDefaultAddressNum))?"X":"");
                row.Cells.Add((emailAddress.EmailAddressNum == PrefC.GetLong(PrefName.EmailNotifyAddressNum))?"X":"");
                row.Tag = emailAddress;
                gridMain.ListGridRows.Add(row);
            }
            gridMain.EndUpdate();
        }
Beispiel #9
0
 private void FormJobNoteEdit_Load(object sender, EventArgs e)
 {
     textDateTime.Text = _jobNote.DateTimeNote.ToString();
     textUser.Text     = Userods.GetName(_jobNote.UserNum);
     textNote.Text     = _jobNote.Note;
     if (Security.CurUser.UserNum != _jobNote.UserNum)
     {
         textNote.ReadOnly = true;
         butOK.Enabled     = false;
         butDelete.Enabled = false;
     }
 }
Beispiel #10
0
 /// <summary></summary>
 private void FillGridMain()
 {
     gridMain.BeginUpdate();
     gridMain.ListGridColumns.Clear();
     gridMain.ListGridRows.Clear();
     gridMain.ListGridColumns.AddRange(new[] { new GridColumn(Lan.g(this, "User"), 70), new GridColumn(Lan.g(this, "Saved"), 80) });
     gridMain.ListGridRows.AddRange(WikiListHists.GetByNameNoContent(ListNameCur)
                                    .Select(x => new GridRow(Userods.GetName(x.UserNum), x.DateTimeSaved.ToString())
     {
         Tag = x
     }));
     gridMain.EndUpdate();
 }
Beispiel #11
0
 private void FormTaskNoteEdit_Load(object sender, EventArgs e)
 {
     textDateTime.Text = TaskNoteCur.DateTimeNote.ToString();
     textUser.Text     = Userods.GetName(TaskNoteCur.UserNum);
     textNote.Text     = TaskNoteCur.Note;
     this.Top         += 150;
     if (TaskNoteCur.IsNew)
     {
         textDateTime.ReadOnly = true;
     }
     else if (!Security.IsAuthorized(Permissions.TaskEdit))             //Tasknotes are not editable unless user has TaskEdit permission.
     {
         butOK.Enabled     = false;
         butDelete.Enabled = false;
     }
 }
Beispiel #12
0
 private void FormProcBroken_Load(object sender, EventArgs e)
 {
     textDateEntry.Text            = _procCur.DateEntryC.ToShortDateString();
     textProcDate.Text             = _procCur.ProcDate.ToShortDateString();
     textAmount.Text               = _procCur.ProcFee.ToString("f");
     comboClinic.SelectedClinicNum = _procCur.ClinicNum;
     fillComboProv();
     comboProv.SetSelectedProvNum(_procCur.ProvNum);
     textUser.Text               = Userods.GetName(_procCur.UserNum);
     textChartNotes.Text         = _procCur.Note;
     textAccountNotes.Text       = _procCur.BillingNote;
     labelAmountDescription.Text = "";
     if (_isNonRefundable)
     {
         labelAmountDescription.Text = AmountTotal.ToString("c") + ": Non-Refundable portion";
     }
 }
Beispiel #13
0
		/// <summary></summary>
		private void FillGrid() {
			gridMain.BeginUpdate();
			gridMain.Columns.Clear();
			ODGridColumn col=new ODGridColumn(Lan.g(this,"User"),70);
			gridMain.Columns.Add(col);
			col=new ODGridColumn(Lan.g(this,"Last Saved"),80);
			gridMain.Columns.Add(col);
			gridMain.Rows.Clear();
			_listWikiPage=WikiPages.GetDraftsByTitle(OwnerForm.WikiPageCur.PageTitle);
			for(int i=0;i<_listWikiPage.Count;i++) {
				ODGridRow row=new ODGridRow();
				row.Cells.Add(Userods.GetName(_listWikiPage[i].UserNum));
				row.Cells.Add(_listWikiPage[i].DateTimeSaved.ToString());
				gridMain.Rows.Add(row);
			}
			gridMain.EndUpdate();
		}
Beispiel #14
0
        /// <summary></summary>
        private void FillGridMain()
        {
            gridMain.BeginUpdate();
            gridMain.Columns.Clear();
            ODGridColumn col = new ODGridColumn(Lan.g(this, "User"), 70);

            gridMain.Columns.Add(col);
            col = new ODGridColumn(Lan.g(this, "Saved"), 80);
            gridMain.Columns.Add(col);
            gridMain.Rows.Clear();
            _listWikiListHists = WikiListHists.GetByName(ListNameCur);
            for (int i = 0; i < _listWikiListHists.Count; i++)
            {
                ODGridRow row = new ODGridRow();
                row.Cells.Add(Userods.GetName(_listWikiListHists[i].UserNum));
                row.Cells.Add(_listWikiListHists[i].DateTimeSaved.ToString());
                gridMain.Rows.Add(row);
            }
            gridMain.EndUpdate();
        }
Beispiel #15
0
        private void FillGridOld()
        {
            List <Job> listJobsOld = _listJobsAll.Where(x => x.DateTimeEntry <= DateTime.Now.AddYears(-1) &&
                                                        !x.PhaseCur.In(JobPhase.Cancelled, JobPhase.Complete, JobPhase.Documentation) &&
                                                        !x.Category.In(JobCategory.Bug, JobCategory.Query, JobCategory.Conversion, JobCategory.Research)).ToList();

            gridOldJobs.BeginUpdate();
            gridOldJobs.Columns.Clear();
            gridOldJobs.Columns.Add(new ODGridColumn("Job", 0));
            gridOldJobs.Columns.Add(new ODGridColumn("DateEntry", 80)
            {
                TextAlign = HorizontalAlignment.Center
            });
            gridOldJobs.Columns.Add(new ODGridColumn("Last Updated", 80)
            {
                TextAlign = HorizontalAlignment.Center
            });
            gridOldJobs.Columns.Add(new ODGridColumn("Owner", 70)
            {
                TextAlign = HorizontalAlignment.Center
            });
            gridOldJobs.Rows.Clear();
            foreach (Job job in listJobsOld)
            {
                ODGridRow row = new ODGridRow()
                {
                    Tag = job
                };
                row.Cells.Add(job.ToString());
                row.Cells.Add(job.DateTimeEntry.ToShortDateString());
                DateTime lastUpdated = job.ListJobLogs.Where(x => x.Description != "Job Viewed").Select(y => y.DateTimeEntry).OrderByDescending(x => x.Ticks).FirstOrDefault();
                row.Cells.Add(lastUpdated == DateTime.MinValue?"N/A":lastUpdated.ToShortDateString());
                row.Cells.Add(Userods.GetName(job.OwnerNum));
                gridOldJobs.Rows.Add(row);
            }
            gridOldJobs.EndUpdate();
        }
Beispiel #16
0
        /// <summary></summary>
        private void FillGrid()
        {
            gridMain.BeginUpdate();
            gridMain.Columns.Clear();
            ODGridColumn col = new ODGridColumn(Lan.g(this, "User"), 70);

            gridMain.Columns.Add(col);
            col = new ODGridColumn(Lan.g(this, "Del"), 25);
            gridMain.Columns.Add(col);
            col = new ODGridColumn(Lan.g(this, "Saved"), 80);
            gridMain.Columns.Add(col);
            gridMain.Rows.Clear();
            ListWikiPageHists = WikiPageHists.GetByTitle(PageTitleCur);
            ListWikiPageHists.Add(WikiPages.PageToHist(WikiPages.GetByTitle(PageTitleCur)));
            for (int i = 0; i < ListWikiPageHists.Count; i++)
            {
                ODGridRow row = new ODGridRow();
                row.Cells.Add(Userods.GetName(ListWikiPageHists[i].UserNum));
                row.Cells.Add((ListWikiPageHists[i].IsDeleted?"X":""));
                row.Cells.Add(ListWikiPageHists[i].DateTimeSaved.ToString());
                gridMain.Rows.Add(row);
            }
            gridMain.EndUpdate();
        }
Beispiel #17
0
        private void FillGridOverEst()
        {
            List <Job> listJobsOverEst = _listJobsAll.Where(x => x.TimeEstimate.TotalHours < x.HoursActual &&
                                                            !x.PhaseCur.In(JobPhase.Cancelled, JobPhase.Complete, JobPhase.Documentation) &&
                                                            !x.Category.In(JobCategory.Bug, JobCategory.Query, JobCategory.Conversion, JobCategory.Research)).ToList();

            gridOverEstimate.BeginUpdate();
            gridOverEstimate.Columns.Clear();
            gridOverEstimate.Columns.Add(new ODGridColumn("Job", 0));
            gridOverEstimate.Columns.Add(new ODGridColumn("Owner", 60)
            {
                TextAlign = HorizontalAlignment.Center
            });
            gridOverEstimate.Columns.Add(new ODGridColumn("Hrs Est", 60)
            {
                TextAlign = HorizontalAlignment.Center
            });
            gridOverEstimate.Columns.Add(new ODGridColumn("Hrs So Far", 60)
            {
                TextAlign = HorizontalAlignment.Center
            });
            gridOverEstimate.Rows.Clear();
            foreach (Job job in listJobsOverEst)
            {
                ODGridRow row = new ODGridRow()
                {
                    Tag = job
                };
                row.Cells.Add(job.ToString());
                row.Cells.Add(Userods.GetName(job.OwnerNum));
                row.Cells.Add(job.TimeEstimate.TotalHours.ToString());
                row.Cells.Add(job.HoursActual.ToString());
                gridOverEstimate.Rows.Add(row);
            }
            gridOverEstimate.EndUpdate();
        }
Beispiel #18
0
        private void FillGridMain()
        {
            string[]      searchTokens  = textSearch.Text.ToLower().Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries);
            long[]        userNums      = new long[0];
            JobCategory[] jobCats       = new JobCategory[0];
            JobPhase[]    jobPhases     = new JobPhase[0];
            long[]        jobPriorities = new long[0];
            if (listBoxUsers.SelectedIndices.Count > 0 && !listBoxUsers.SelectedIndices.Contains(0))
            {
                userNums = listBoxUsers.SelectedIndices.Cast <int>().Select(x => _listUsers[x - 1].UserNum).ToArray();
            }
            if (listBoxCategory.SelectedIndices.Count > 0 && !listBoxCategory.SelectedIndices.Contains(0))
            {
                jobCats = listBoxCategory.SelectedIndices.Cast <int>().Select(x => (JobCategory)(x - 1)).ToArray();
            }
            if (listBoxPhases.SelectedIndices.Count > 0 && !listBoxPhases.SelectedIndices.Contains(0))
            {
                jobPhases = listBoxPhases.SelectedIndices.Cast <int>().Select(x => (JobPhase)(x - 1)).ToArray();
            }
            if (listBoxPriorities.SelectedIndices.Count > 0 && !listBoxPriorities.SelectedIndices.Contains(0))
            {
                jobPriorities = listBoxPriorities.GetListSelected <Def>().Select(x => x.DefNum).ToArray();
            }
            Action actionCloseProgress = ODProgress.Show(ODEventType.Job, typeof(JobEvent), "Getting job data...");

            #region Get Missing Data
            //This entire section will go out to the database and get any data that is unknown based on some of the filters.
            //The other filters will be applied later via the cached lists.
            try {
                List <Job> listJobs = Jobs.GetForSearch(dateFrom.Value, dateTo.Value, jobPhases.ToList(), jobPriorities.ToList(), _listJobsAll.Select(x => x.JobNum).ToList());
                Jobs.FillInMemoryLists(listJobs, true);
                _listJobsAll.AddRange(listJobs);
            }
            catch (OutOfMemoryException oome) {
                actionCloseProgress();
                oome.DoNothing();
                MsgBox.Show(this, "Not enough memory to complete the search.  Please refine search filters.");
                return;
            }
            //Only get the feature request entries that we care about.
            JobEvent.Fire(ODEventType.Job, "Getting feature request data...");
            List <long> listFeatureRequestNums = _listJobsAll.SelectMany(x => x.ListJobLinks)
                                                 .Where(x => x.LinkType == JobLinkType.Request)
                                                 .Select(x => x.FKey)
                                                 .Distinct()
                                                 .ToList();
            //Don't download any feature requests that we already know about.
            listFeatureRequestNums.RemoveAll(x => x.In(_listFeatureRequestsAll.Select(y => y.FeatReqNum)));
            if (!listFeatureRequestNums.IsNullOrEmpty())
            {
                _listFeatureRequestsAll.AddRange(FeatureRequests.GetAll(listFeatureRequestNums));
            }
            //Only get the bug entries that we care about.
            JobEvent.Fire(ODEventType.Job, "Getting bug data...");
            List <long> listBugIds = _listJobsAll.SelectMany(x => x.ListJobLinks)
                                     .Where(x => x.LinkType == JobLinkType.Bug)
                                     .Select(x => x.FKey)
                                     .Distinct()
                                     .ToList();
            //Don't download any bugs that we already know about.
            listBugIds.RemoveAll(x => x.In(_listBugsAll.Select(y => y.BugId)));
            if (!listBugIds.IsNullOrEmpty())
            {
                _listBugsAll.AddRange(Bugs.GetMany(listBugIds));
            }
            #endregion
            JobEvent.Fire(ODEventType.Job, "Filling grid...");
            gridMain.BeginUpdate();
            gridMain.ListGridColumns.Clear();
            gridMain.ListGridColumns.Add(new GridColumn("Job\r\nNum", 50, GridSortingStrategy.AmountParse));
            gridMain.ListGridColumns.Add(new GridColumn("Priority", 50, HorizontalAlignment.Center));
            gridMain.ListGridColumns.Add(new GridColumn("Phase", 85));
            gridMain.ListGridColumns.Add(new GridColumn("Category", 80));
            gridMain.ListGridColumns.Add(new GridColumn("Job Title", -1));
            gridMain.ListGridColumns.Add(new GridColumn("Version", 80));
            gridMain.ListGridColumns.Add(new GridColumn("Est. Version", 80));
            gridMain.ListGridColumns.Add(new GridColumn("Expert", 75));
            gridMain.ListGridColumns.Add(new GridColumn("Engineer", 75));
            gridMain.ListGridColumns.Add(new GridColumn("Est.\r\nHours", 60, GridSortingStrategy.AmountParse));
            gridMain.ListGridColumns.Add(new GridColumn("Act.\r\nHours", 60, GridSortingStrategy.AmountParse));
            gridMain.ListGridColumns.Add(new GridColumn("Job\r\nMatch", 45, HorizontalAlignment.Center));
            gridMain.ListGridColumns.Add(new GridColumn("Bug\r\nMatch", 45, HorizontalAlignment.Center));
            gridMain.ListGridColumns.Add(new GridColumn("FR\r\nMatch", 45, HorizontalAlignment.Center));
            gridMain.ListGridRows.Clear();
            _listJobsFiltered = new List <Job>();
            foreach (Job jobCur in _listJobsAll)
            {
                if (jobCats.Length > 0 && !jobCats.Contains(jobCur.Category))
                {
                    continue;
                }
                if (jobPhases.Length > 0 && !jobPhases.Contains(jobCur.PhaseCur))
                {
                    continue;
                }
                if (jobPriorities.Length > 0 && !jobPriorities.Contains(jobCur.Priority))
                {
                    continue;
                }
                if (userNums.Length > 0 && !userNums.All(x => Jobs.GetUserNums(jobCur).Contains(x)))
                {
                    continue;
                }
                if (!jobCur.DateTimeEntry.Between(dateFrom.Value, dateTo.Value))
                {
                    continue;
                }
                bool isJobMatch        = false;
                bool isBugMatch        = false;
                bool isFeatureReqMatch = false;
                if (searchTokens.Length > 0)
                {
                    bool       addRow   = false;
                    List <Bug> listBugs = jobCur.ListJobLinks.FindAll(x => x.LinkType == JobLinkType.Bug)
                                          .Select(x => _listBugsAll.FirstOrDefault(y => x.FKey == y.BugId))
                                          .Where(x => x != null)
                                          .ToList();
                    List <FeatureRequest> listFeatures = jobCur.ListJobLinks.FindAll(x => x.LinkType == JobLinkType.Request)
                                                         .Select(x => _listFeatureRequestsAll.FirstOrDefault(y => x.FKey == y.FeatReqNum))
                                                         .Where(x => x != null)
                                                         .ToList();
                    foreach (string token in searchTokens.Distinct())
                    {
                        bool isFound = false;
                        //JOB MATCHES
                        if (jobCur.Title.ToLower().Contains(token) ||
                            jobCur.Implementation.ToLower().Contains(token) ||
                            jobCur.Requirements.ToLower().Contains(token) ||
                            jobCur.Documentation.ToLower().Contains(token) ||
                            jobCur.JobNum.ToString().Contains(token))
                        {
                            isFound    = true;
                            isJobMatch = true;
                        }
                        //BUG MATCHES
                        if (!isFound || !isBugMatch)
                        {
                            if (listBugs.Any(x => x.Description.ToLower().Contains(token) || x.Discussion.ToLower().Contains(token)))
                            {
                                isFound    = true;
                                isBugMatch = true;
                            }
                        }
                        //FEATURE REQUEST MATCHES
                        if (!isFound || !isFeatureReqMatch)
                        {
                            if (listFeatures.Any(x => x.Description.Contains(token) || x.FeatReqNum.ToString().ToLower().Contains(token)))
                            {
                                isFound           = true;
                                isFeatureReqMatch = true;
                            }
                        }
                        addRow = isFound;
                        if (!isFound)
                        {
                            break;                            //stop looking for additional tokens, we didn't find this one.
                        }
                    }
                    if (!addRow)
                    {
                        continue;                        //we did not find one of the search terms.
                    }
                }
                _listJobsFiltered.Add(jobCur);
                Def     jobPriority = _listJobPriorities.FirstOrDefault(y => y.DefNum == jobCur.Priority);
                GridRow row         = new GridRow();
                row.Cells.Add(jobCur.JobNum.ToString());
                row.Cells.Add(new GridCell(jobPriority.ItemName)
                {
                    ColorBackG = jobPriority.ItemColor,
                    ColorText  = (jobCur.Priority == _listJobPriorities.FirstOrDefault(y => y.ItemValue.Contains("Urgent")).DefNum) ? Color.White : Color.Black,
                });
                row.Cells.Add(jobCur.PhaseCur.ToString());
                row.Cells.Add(jobCur.Category.ToString());
                row.Cells.Add(jobCur.Title);
                row.Cells.Add(jobCur.JobVersion.ToString());
                row.Cells.Add(jobCur.ProposedVersion.ToString());
                row.Cells.Add(Userods.GetName(jobCur.UserNumExpert));
                row.Cells.Add(Userods.GetName(jobCur.UserNumEngineer));
                row.Cells.Add(jobCur.HoursEstimate.ToString());
                row.Cells.Add(jobCur.HoursActual.ToString());
                row.Cells.Add(isJobMatch ? "X" : "");
                row.Cells.Add(isBugMatch ? "X" : "");
                row.Cells.Add(new GridCell(isFeatureReqMatch ? "X" : "")
                {
                    ColorBackG = _listFeatureRequestsAll.Count == 0 ? Control.DefaultBackColor : Color.Empty
                });
                row.Tag = jobCur;
                gridMain.ListGridRows.Add(row);
            }
            gridMain.EndUpdate();
            actionCloseProgress();
        }
 ///<summary>Loads the given emailMessage into the control.
 ///Set listEmailMessages to messages to be considered for the auto complete contacts pop up.  When null will query.</summary>
 public void LoadEmailMessage(EmailMessage emailMessage, List <EmailMessage> listHistoricEmailMessages = null)
 {
     Cursor        = Cursors.WaitCursor;
     _emailMessage = emailMessage;
     _patCur       = Patients.GetPat(_emailMessage.PatNum);           //we could just as easily pass this in.
     if (_emailMessage.SentOrReceived == EmailSentOrReceived.Neither) //Composing a message
     {
         _isComposing = true;
         if (_isSigningEnabled)
         {
             SetSig(EmailMessages.GetCertFromPrivateStore(_emailMessage.FromAddress));
         }
         _emailMessage.UserNum = Security.CurUser.UserNum; //UserNum is also updated when sent. Setting here to display when composing.
     }
     else                                                  //sent or received (not composing)
                                                           //For all email received or sent types, we disable most of the controls and put the window into a mostly read-only state.
                                                           //There is no reason a user should ever edit a received message.
                                                           //The user can copy the content and send a new email if needed (to mimic forwarding until we add the forwarding feature).
     {
         _isComposing              = false;
         textMsgDateTime.Text      = _emailMessage.MsgDateTime.ToString();
         textMsgDateTime.ForeColor = Color.Black;
         gridAttachments.SetAddButtonEnabled(false);
         textFromAddress.ReadOnly         = true;
         textToAddress.ReadOnly           = true;
         textCcAddress.ReadOnly           = true;
         textBccAddress.ReadOnly          = true;
         textSubject.ReadOnly             = true;
         textSubject.SpellCheckIsEnabled  = false;                                                                              //Prevents slowness resizing the window, because spell checker runs each time resize event is fired.
         textBodyText.ReadOnly            = true;
         textBodyText.SpellCheckIsEnabled = false;                                                                              //Prevents slowness resizing the window, because spell checker runs each time resize event is fired.
         comboEmailFrom.Visible           = false;
         textFromAddress.Width            = textCcAddress.Width;                                                                //Match the size of Cc Address.
         textFromAddress.Anchor           = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                                                                                  | System.Windows.Forms.AnchorStyles.Right))); //Change the anchors to accommodate.
     }
     textSentOrReceived.Text = _emailMessage.SentOrReceived.ToString();
     textFromAddress.Text    = _emailMessage.FromAddress;
     textToAddress.Text      = _emailMessage.ToAddress;
     textCcAddress.Text      = _emailMessage.CcAddress;
     textBccAddress.Text     = _emailMessage.BccAddress;       //if you send an email to yourself, you'll be able to see everyone in the bcc field.
     textSubject.Text        = _emailMessage.Subject;
     textBodyText.Visible    = true;
     webBrowser.Visible      = false;
     if (EmailMessages.IsReceived(_emailMessage.SentOrReceived))
     {
         List <List <Health.Direct.Common.Mime.MimeEntity> > listMimeParts =
             EmailMessages.GetMimePartsForMimeTypes(_emailMessage.RawEmailIn, EmailAddressPreview, "text/html", "text/plain", "image/");
         List <Health.Direct.Common.Mime.MimeEntity> listHtmlParts = listMimeParts[0]; //If RawEmailIn is blank, then this list will also be blank (ex Secure Web Mail messages).
         List <Health.Direct.Common.Mime.MimeEntity> listTextParts = listMimeParts[1]; //If RawEmailIn is blank, then this list will also be blank (ex Secure Web Mail messages).
         _listImageParts = listMimeParts[2];                                           //If RawEmailIn is blank, then this list will also be blank (ex Secure Web Mail messages).
         if (listHtmlParts.Count > 0)                                                  //Html body found.
         {
             textBodyText.Visible = false;
             _isLoading           = true;
             try {
                 webBrowser.DocumentText = EmailMessages.ProcessMimeTextPart(listHtmlParts[0]);
             }
             catch (ApplicationException ex) {
                 webBrowser.DocumentText = "Improperly formatted email. Error displaying email: " + ex.Message;
             }
             webBrowser.Location = textBodyText.Location;
             webBrowser.Size     = textBodyText.Size;
             webBrowser.Anchor   = textBodyText.Anchor;
             webBrowser.Visible  = true;
             if (_listImageParts.Count > 0)
             {
                 butShowImages.Visible = true;
             }
         }
         else if (listTextParts.Count > 0)               //No html body found, however one specific mime part is for viewing in text only.
         {
             textBodyText.Text = EmailMessages.ProcessMimeTextPart(listTextParts[0]);
         }
         else                                            //No html body found and no text body found.  Last resort.  Show all mime parts which are not attachments (ugly).
         {
             textBodyText.Text = _emailMessage.BodyText; //This version of the body text includes all non-attachment mime parts.
         }
         lableUserName.Visible = false;
         textUserName.Visible  = false;
     }
     else                                                //Sent or Unsent/Saved.
     {
         textBodyText.Text     = _emailMessage.BodyText; //Show the body text exactly as typed by the user.
         lableUserName.Visible = true;
         textUserName.Visible  = true;
         textUserName.Text     = (Userods.GetName(_emailMessage.UserNum));          //Blank if 0.
     }
     FillAttachments();
     if (IsComposing)
     {
         FillComboEmail();
         SetHistoricContacts(listHistoricEmailMessages);
     }
     textBodyText.Select();
     Cursor = Cursors.Default;
     if (_isPreview)
     {
         tabAttachmentsShowEmail.TabPages.Remove(tabShowEmail);                 //Do not show Hide Email tab when in Email Preview mode
     }
     else
     {
         InitEmailShowInListBox();
         RefreshShowIn();
     }
 }
Beispiel #20
0
        private void FormCommItem_Load(object sender, EventArgs e)
        {
            _isStartingUp        = true;
            _listCommlogTypeDefs = Defs.GetDefsForCategory(DefCat.CommLogTypes, true);
            if (!PrefC.IsODHQ)
            {
                _listCommlogTypeDefs.RemoveAll(x => x.ItemValue == CommItemTypeAuto.ODHQ.ToString());
            }
            //there will usually be a commtype set before this dialog is opened
            for (int i = 0; i < _listCommlogTypeDefs.Count; i++)
            {
                listType.Items.Add(_listCommlogTypeDefs[i].ItemName);
                if (_listCommlogTypeDefs[i].DefNum == _commlogCur.CommType)
                {
                    listType.SelectedIndex = i;
                }
            }
            for (int i = 0; i < Enum.GetNames(typeof(CommItemMode)).Length; i++)
            {
                listMode.Items.Add(Lan.g("enumCommItemMode", Enum.GetNames(typeof(CommItemMode))[i]));
            }
            for (int i = 0; i < Enum.GetNames(typeof(CommSentOrReceived)).Length; i++)
            {
                listSentOrReceived.Items.Add(Lan.g("enumCommSentOrReceived", Enum.GetNames(typeof(CommSentOrReceived))[i]));
            }
            if (!PrefC.IsODHQ)
            {
                labelDateTimeEnd.Visible = false;
                textDateTimeEnd.Visible  = false;
                butNow.Visible           = false;
                butNowEnd.Visible        = false;
            }
            if (!Security.IsAuthorized(Permissions.CommlogEdit, _commlogCur.CommDateTime))
            {
                //The user does not have permissions to create or edit commlogs.
                if (_commlogOld.IsNew || _isPersistent)
                {
                    DialogResult = DialogResult.Cancel;
                    Close();
                    return;
                }
                butDelete.Enabled       = false;
                butOK.Enabled           = false;
                butEditAutoNote.Enabled = false;
            }
            textNote.Select();
            string keyData = GetSignatureKey();

            signatureBoxWrapper.FillSignature(_commlogCur.SigIsTopaz, keyData, _commlogCur.Signature);
            signatureBoxWrapper.BringToFront();
            if (_isPersistent)
            {
                RefreshUserOdPrefs();
                labelCommlogNum.Visible = false;
                textCommlogNum.Visible  = false;
                butUserPrefs.Visible    = true;
                butOK.Text        = Lan.g(this, "Create");
                butCancel.Text    = Lan.g(this, "Close");
                butDelete.Visible = false;
            }
            if (_commlogOld.IsNew && PrefC.GetBool(PrefName.CommLogAutoSave))
            {
                timerAutoSave.Start();
            }
            textPatientName.Text = Patients.GetLim(_commlogCur.PatNum).GetNameFL();
            textUser.Text        = Userods.GetName(_commlogCur.UserNum);   //might be blank.
            textDateTime.Text    = _commlogCur.CommDateTime.ToShortDateString() + "  " + _commlogCur.CommDateTime.ToShortTimeString();
            if (_commlogCur.DateTimeEnd.Year > 1880)
            {
                textDateTimeEnd.Text = _commlogCur.DateTimeEnd.ToShortDateString() + "  " + _commlogCur.DateTimeEnd.ToShortTimeString();
            }
            listMode.SelectedIndex           = (int)_commlogCur.Mode_;
            listSentOrReceived.SelectedIndex = (int)_commlogCur.SentOrReceived;
            textNote.Text           = _commlogCur.Note;
            textNote.SelectionStart = textNote.Text.Length;
            butEditAutoNote.Visible = GetHasAutoNotePrompt();
            if (!ODBuild.IsDebug())
            {
                labelCommlogNum.Visible = false;
                textCommlogNum.Visible  = false;
            }
            textCommlogNum.Text = _commlogCur.CommlogNum.ToString();
            if (_isPersistent)
            {
                PatientChangedEvent.Fired += PatientChangedEvent_Fired;
            }
            CommItemSaveEvent.Fired += CommItemSaveEvent_Fired;
            _isStartingUp            = false;
        }
        private void FillGridOrders()
        {
            long supplierNum = 0;

            if (!comboSupplier.IsAllSelected)
            {
                supplierNum = comboSupplier.GetSelectedKey <Supplier>(x => x.SupplierNum);
            }
            _listSupplyOrders = SupplyOrders.GetList(supplierNum);
            if (!checkShowReceived.Checked)
            {
                _listSupplyOrders = _listSupplyOrders.FindAll(x => x.DateReceived.Year < 1880);
            }
            //Show the not received items at the bottom, then order by date placed.
            _listSupplyOrders = _listSupplyOrders.OrderBy(x => x.DateReceived.Year < 1880)
                                .ThenBy(x => x.DatePlaced).ToList();
            gridOrders.BeginUpdate();
            gridOrders.ListGridColumns.Clear();
            GridColumn col = new GridColumn(Lan.g(this, "Date Placed"), 80);

            gridOrders.ListGridColumns.Add(col);
            col = new GridColumn(Lan.g(this, "Date Received"), 90);
            gridOrders.ListGridColumns.Add(col);
            col = new GridColumn(Lan.g(this, "Amount"), 70, HorizontalAlignment.Right);
            gridOrders.ListGridColumns.Add(col);
            col = new GridColumn(Lan.g(this, "Shipping"), 70, HorizontalAlignment.Right);
            gridOrders.ListGridColumns.Add(col);
            col = new GridColumn(Lan.g(this, "Supplier"), 120);
            gridOrders.ListGridColumns.Add(col);
            col = new GridColumn(Lan.g(this, "Note"), 200);
            gridOrders.ListGridColumns.Add(col);
            col = new GridColumn(Lan.g(this, "Placed By"), 100);
            gridOrders.ListGridColumns.Add(col);
            gridOrders.ListGridRows.Clear();
            GridRow row;

            for (int i = 0; i < _listSupplyOrders.Count; i++)
            {
                row = new GridRow();
                bool isPending = false;
                if (_listSupplyOrders[i].DatePlaced.Year > 2200)
                {
                    isPending = true;
                }
                if (isPending)
                {
                    row.Cells.Add(Lan.g(this, "pending"));
                }
                else
                {
                    row.Cells.Add(_listSupplyOrders[i].DatePlaced.ToShortDateString());
                }
                if (_listSupplyOrders[i].DateReceived.Year < 1880)
                {
                    row.Cells.Add("");
                }
                else
                {
                    row.Cells.Add(_listSupplyOrders[i].DateReceived.ToShortDateString());
                }
                row.Cells.Add(_listSupplyOrders[i].AmountTotal.ToString("c"));
                row.Cells.Add(_listSupplyOrders[i].ShippingCharge.ToString("c"));
                row.Cells.Add(Suppliers.GetName(_listSuppliers, _listSupplyOrders[i].SupplierNum));
                row.Cells.Add(_listSupplyOrders[i].Note);
                if (isPending || _listSupplyOrders[i].UserNum == 0)
                {
                    row.Cells.Add("");
                }
                else
                {
                    row.Cells.Add(Userods.GetName(_listSupplyOrders[i].UserNum));
                }
                row.Tag = _listSupplyOrders[i];
                gridOrders.ListGridRows.Add(row);
            }
            gridOrders.EndUpdate();
        }
		///<summary>Fills with jobs that are attached to the selected sprint and are not complete. Ordered by owner and then category.</summary>
		private void FillGridQueue() {
			gridSprintQueue.BeginUpdate();
			gridSprintQueue.ListGridColumns.Clear();
			gridSprintQueue.ListGridColumns.Add(new GridColumn("Priority",90,HorizontalAlignment.Center));
			gridSprintQueue.ListGridColumns.Add(new GridColumn("Owner",55,HorizontalAlignment.Center));
			gridSprintQueue.ListGridColumns.Add(new GridColumn("Owner Action",110));
			gridSprintQueue.ListGridColumns.Add(new GridColumn("EstHrs",60,HorizontalAlignment.Center,GridSortingStrategy.AmountParse));
			gridSprintQueue.ListGridColumns.Add(new GridColumn("ActHrs",60,HorizontalAlignment.Center,GridSortingStrategy.AmountParse));
			gridSprintQueue.ListGridColumns.Add(new GridColumn("",300));
			gridSprintQueue.ListGridRows.Clear();
			List<Job> listQueue=_listAttachedJobs.Where(x => x.PhaseCur.In(JobPhase.Concept,JobPhase.Definition,JobPhase.Quote)).ToList();
			listQueue=listQueue.OrderBy(x => x.OwnerNum!=0)
					//This is the reverse order of the actual priority of different categories of jobs
					//Purposefully put in this order so they appear correctly in the list.
					.ThenBy(x => x.Category==JobCategory.NeedNoApproval)
					.ThenBy(x => x.Category==JobCategory.Research)
					.ThenBy(x => x.Category==JobCategory.Conversion)
					.ThenBy(x => x.Category==JobCategory.HqRequest)
					.ThenBy(x => x.Category==JobCategory.InternalRequest)
					.ThenBy(x => x.Category==JobCategory.Feature)
					.ThenBy(x => x.Category==JobCategory.Query)
					.ThenBy(x => x.Category==JobCategory.ProgramBridge)
					.ThenBy(x => x.Category==JobCategory.Enhancement)
					.ThenBy(x => x.Category==JobCategory.Bug)
					.ThenBy(x => _listJobPriorities.FirstOrDefault(y => y.DefNum==x.Priority).ItemOrder).ToList();
			Dictionary<JobPhase,List<Job>> dictPhases=new Dictionary<JobPhase,List<Job>>();
			foreach(Job job in listQueue) {
				JobPhase phase=job.PhaseCur;
				if(!dictPhases.ContainsKey(phase)) {
					dictPhases[phase]=new List<Job>();
				}
				dictPhases[phase].Add(job);
			}
			//sort dictionary so actions will appear in same order
			//This is in reverse order in the code so it is correct in the UI
			dictPhases=dictPhases.OrderBy(x => x.Key==JobPhase.Concept)
					.ThenBy(x => x.Key==JobPhase.Quote)
					.ThenBy(x => x.Key==JobPhase.Definition).ToDictionary(x => x.Key,x => x.Value);
			foreach(KeyValuePair<JobPhase,List<Job>> kvp in dictPhases) {
				if(listQueue.Count==0) {
					continue;
				}
				gridSprintQueue.ListGridRows.Add(new GridRow("","","","","",kvp.Key.ToString()) { ColorBackG=Color.FromArgb(223,234,245),Bold=true });
				foreach(Job job in kvp.Value) {
					Color backColor=Color.White;
					Def jobPriority=_listJobPriorities.FirstOrDefault(y => y.DefNum==job.Priority);
					gridSprintQueue.ListGridRows.Add(
					new GridRow(
						new GridCell(jobPriority.ItemName) {
							ColorBackG=jobPriority.ItemColor,
							ColorText=(job.Priority==_listJobPriorities.FirstOrDefault(y => y.ItemValue.Contains("Urgent")).DefNum) ? Color.White : Color.Black,
						},
						new GridCell(job.OwnerNum==0 ? "-" : Userods.GetName(job.OwnerNum)),
						new GridCell(job.OwnerAction.GetDescription()),
						new GridCell(job.HoursEstimate.ToString()),
						new GridCell(job.HoursActual.ToString()),
						new GridCell(job.ToString())
						) {
						Tag=job,
						ColorBackG=backColor
					}
					);
				}
			}
			gridSprintQueue.EndUpdate();
		}
Beispiel #23
0
 private void FormCommItem_Load(object sender, System.EventArgs e)
 {
     IsStartingUp         = true;
     textPatientName.Text = Patients.GetLim(CommlogCur.PatNum).GetNameFL();
     textUser.Text        = Userods.GetName(CommlogCur.UserNum);   //might be blank.
     textDateTime.Text    = CommlogCur.CommDateTime.ToShortDateString() + "  " + CommlogCur.CommDateTime.ToShortTimeString();
     if (CommlogCur.DateTimeEnd.Year > 1880)
     {
         textDateTimeEnd.Text = CommlogCur.DateTimeEnd.ToShortDateString() + "  " + CommlogCur.DateTimeEnd.ToShortTimeString();
     }
     //there will usually be a commtype set before this dialog is opened
     for (int i = 0; i < DefC.Short[(int)DefCat.CommLogTypes].Length; i++)
     {
         listType.Items.Add(DefC.Short[(int)DefCat.CommLogTypes][i].ItemName);
         if (DefC.Short[(int)DefCat.CommLogTypes][i].DefNum == CommlogCur.CommType)
         {
             listType.SelectedIndex = i;
         }
     }
     for (int i = 0; i < Enum.GetNames(typeof(CommItemMode)).Length; i++)
     {
         listMode.Items.Add(Lan.g("enumCommItemMode", Enum.GetNames(typeof(CommItemMode))[i]));
     }
     listMode.SelectedIndex = (int)CommlogCur.Mode_;
     for (int i = 0; i < Enum.GetNames(typeof(CommSentOrReceived)).Length; i++)
     {
         listSentOrReceived.Items.Add
             (Lan.g("enumCommSentOrReceived", Enum.GetNames(typeof(CommSentOrReceived))[i]));
     }
     try{
         listSentOrReceived.SelectedIndex = (int)CommlogCur.SentOrReceived;
     }
     catch {
         MessageBox.Show(((int)CommlogCur.SentOrReceived).ToString());
     }
     //checkIsStatementSent.Checked=CommlogCur.IsStatementSent;
     textNote.Text           = CommlogCur.Note;
     textNote.SelectionStart = textNote.Text.Length;
                 #if !DEBUG
     labelCommlogNum.Visible = false;
     textCommlogNum.Visible  = false;
                 #endif
     textCommlogNum.Text = CommlogCur.CommlogNum.ToString();
     if (!PrefC.GetBool(PrefName.DistributorKey))
     {
         labelDateTimeEnd.Visible = false;
         textDateTimeEnd.Visible  = false;
         butNow.Visible           = false;
         butNowEnd.Visible        = false;
     }
     textNote.Select();
     string keyData = GetSignatureKey();
     signatureBoxWrapper.FillSignature(CommlogCur.SigIsTopaz, keyData, CommlogCur.Signature);
     signatureBoxWrapper.BringToFront();
     IsStartingUp = false;
     if (!Security.IsAuthorized(Permissions.CommlogEdit, CommlogCur.CommDateTime))
     {
         if (IsNew)
         {
             DialogResult = DialogResult.Cancel;
             return;
         }
         butDelete.Enabled = false;
         butOK.Enabled     = false;
     }
 }
Beispiel #24
0
        private void FillGridJobs(List <Job> listJobs)
        {
            int           totalJobs            = listJobs.Count();
            int           totalBugs            = 0;
            int           totalFeatures        = 0;
            double        totalHrsEst          = 0;
            double        totalHrsSpent        = 0;
            double        totalQuotedDollars   = 0;
            List <Def>    listJobPriorities    = Defs.GetDefsForCategory(DefCat.JobPriorities);
            List <string> listProposedVersions = Enum.GetNames(typeof(JobProposedVersion)).ToList();

            gridJobs.BeginUpdate();
            gridJobs.ListGridColumns.Clear();
            gridJobs.ListGridColumns.Add(new GridColumn("Job", 0));
            gridJobs.ListGridColumns.Add(new GridColumn("Owner", 70)
            {
                TextAlign = HorizontalAlignment.Center
            });
            gridJobs.ListGridColumns.Add(new GridColumn("Owner Action", 90));
            gridJobs.ListGridColumns.Add(new GridColumn("Phase", 75)
            {
                TextAlign = HorizontalAlignment.Center
            });
            gridJobs.ListGridColumns.Add(new GridColumn("Priority", 75)
            {
                TextAlign = HorizontalAlignment.Center
            });
            gridJobs.ListGridColumns.Add(new GridColumn("Expert", 75)
            {
                TextAlign = HorizontalAlignment.Center
            });
            gridJobs.ListGridColumns.Add(new GridColumn("Engineer", 75)
            {
                TextAlign = HorizontalAlignment.Center
            });
            //Est. Version has a combobox, but it currently does not work.
            //TODO: Centralize a save method so job saving can be called from anywhere and perform the same functionality
            gridJobs.ListGridColumns.Add(new GridColumn("Est. Version", 90)
            {
                ListDisplayStrings = listProposedVersions, TextAlign = HorizontalAlignment.Center
            });
            gridJobs.ListGridColumns.Add(new GridColumn("Hrs Est", 90)
            {
                TextAlign = HorizontalAlignment.Center, SortingStrategy = GridSortingStrategy.AmountParse
            });
            gridJobs.ListGridColumns.Add(new GridColumn("Hrs Last 7 Days", 90)
            {
                TextAlign = HorizontalAlignment.Center, SortingStrategy = GridSortingStrategy.AmountParse
            });
            gridJobs.ListGridColumns.Add(new GridColumn("Hrs Total", 90)
            {
                TextAlign = HorizontalAlignment.Center, SortingStrategy = GridSortingStrategy.AmountParse
            });
            gridJobs.ListGridColumns.Add(new GridColumn("Est Completion %", 110)
            {
                TextAlign = HorizontalAlignment.Center, SortingStrategy = GridSortingStrategy.AmountParse
            });
            gridJobs.ListGridColumns.Add(new GridColumn("Last Updated", 90)
            {
                TextAlign = HorizontalAlignment.Center, SortingStrategy = GridSortingStrategy.DateParse
            });
            gridJobs.ListGridRows.Clear();
            foreach (Job job in listJobs)
            {
                Def jobPriority = listJobPriorities.FirstOrDefault(y => y.DefNum == job.Priority);
                totalBugs     += job.ListJobLinks.Count(x => x.LinkType == JobLinkType.Bug);
                totalFeatures += job.ListJobLinks.Count(x => x.LinkType == JobLinkType.Request);
                totalHrsEst   += job.HoursEstimate;
                totalHrsSpent += job.HoursActual;
                foreach (JobQuote quote in job.ListJobQuotes)
                {
                    totalQuotedDollars += PIn.Double(quote.Amount);
                }
                GridRow row = new GridRow()
                {
                    Tag = job
                };
                row.Cells.Add(job.ToString());
                row.Cells.Add(Userods.GetName(job.OwnerNum));
                row.Cells.Add(job.OwnerAction.GetDescription());
                row.Cells.Add(job.PhaseCur.ToString());
                GridCell cell = new GridCell(jobPriority.ItemName);
                cell.ColorBackG = jobPriority.ItemColor;
                cell.ColorText  = (job.Priority == listJobPriorities.FirstOrDefault(y => y.ItemValue.Contains("Urgent")).DefNum) ? Color.White : Color.Black;
                row.Cells.Add(cell);
                row.Cells.Add(Userods.GetName(job.UserNumExpert));
                row.Cells.Add(Userods.GetName(job.UserNumEngineer));
                cell = new GridCell(job.ProposedVersion.ToString());
                cell.ComboSelectedIndex = listProposedVersions.IndexOf(job.ProposedVersion.ToString());
                row.Cells.Add(cell);
                row.Cells.Add(job.HoursEstimate.ToString());
                row.Cells.Add(job.ListJobTimeLogs.Where(x => x.DateTStamp >= DateTime.Today.AddDays(-7)).Sum(y => y.TimeReview.TotalHours).ToString());
                row.Cells.Add(job.HoursActual.ToString());
                row.Cells.Add(Math.Round((job.HoursActual / job.HoursEstimate * 100), 0).ToString());
                DateTime lastUpdated = job.ListJobLogs.Where(x => x.Description != "Job Viewed").Select(y => y.DateTimeEntry).OrderByDescending(x => x.Ticks).FirstOrDefault();
                row.Cells.Add(lastUpdated == DateTime.MinValue?"N/A":lastUpdated.ToShortDateString());
                gridJobs.ListGridRows.Add(row);
            }
            gridJobs.EndUpdate();
            textTotalJobs.Text         = totalJobs.ToString();
            textTotalHrsEst.Text       = totalHrsEst.ToString();
            textTotalHrsSpent.Text     = totalHrsSpent.ToString();
            textTotalQuote.Text        = totalQuotedDollars.ToString();
            textTotalBugs.Text         = totalBugs.ToString();
            textTotalFeatures.Text     = totalFeatures.ToString();
            textCompletionPercent.Text = Math.Round(totalHrsSpent / totalHrsEst * 100, 0).ToString();
        }
Beispiel #25
0
 internal string GetUserodName(long userNum)
 {
     return(Userods.GetName(userNum));           //might be blank.
 }
Beispiel #26
0
 private void FormSupplyOrderEdit_Load(object sender, EventArgs e)
 {
     textSupplier.Text = Suppliers.GetName(ListSuppliersAll, SupplyOrderCur.SupplierNum);
     if (SupplyOrderCur.DatePlaced.Year > 2200)
     {
         textDatePlaced.Text    = DateTime.Today.ToShortDateString();
         SupplyOrderCur.UserNum = Security.CurUser.UserNum;
     }
     else
     {
         textDatePlaced.Text = SupplyOrderCur.DatePlaced.ToShortDateString();
     }
     textAmountTotal.Text    = SupplyOrderCur.AmountTotal.ToString("n");
     textShippingCharge.Text = SupplyOrderCur.ShippingCharge.ToString("n");
     if (SupplyOrderCur.DateReceived.Year > 1880)
     {
         textDateReceived.Text = SupplyOrderCur.DateReceived.ToShortDateString();
     }
     textNote.Text = SupplyOrderCur.Note;
     comboUser.Items.AddNone <Userod>();
     comboUser.Items.AddList(Userods.GetUsers().FindAll(x => !x.IsHidden), x => x.UserName);         //the abbr parameter is usually skipped. <T> is inferred.
     comboUser.SetSelectedKey <Userod>(SupplyOrderCur.UserNum, x => x.UserNum, x => Userods.GetName(x));
 }
Beispiel #27
0
 private void FillGridMain()
 {
     if (!_IsSearchReady)
     {
         return;
     }
     Cursor = Cursors.WaitCursor;
     gridMain.BeginUpdate();
     gridMain.Columns.Clear();
     //TODO: change columns
     gridMain.Columns.Add(new ODGridColumn("Job\r\nNum", 50));
     gridMain.Columns.Add(new ODGridColumn("Phase", 85));
     gridMain.Columns.Add(new ODGridColumn("Category", 80));
     gridMain.Columns.Add(new ODGridColumn("Job Title", 300));
     gridMain.Columns.Add(new ODGridColumn("Version", 80));
     gridMain.Columns.Add(new ODGridColumn("Expert", 75));
     gridMain.Columns.Add(new ODGridColumn("Engineer", 75));
     gridMain.Columns.Add(new ODGridColumn("Job\r\nMatch", 45)
     {
         TextAlign = HorizontalAlignment.Center
     });
     gridMain.Columns.Add(new ODGridColumn("Bug\r\nMatch", 45)
     {
         TextAlign = HorizontalAlignment.Center
     });
     gridMain.Columns.Add(new ODGridColumn("Feature\r\nRequest\r\nMatch", 45)
     {
         TextAlign = HorizontalAlignment.Center
     });
     gridMain.Rows.Clear();
     string[] searchTokens = textSearch.Text.ToLower().Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries);
     _listJobsFiltered = new List <Job>();
     long[]        userNums  = new long[0];
     JobCategory[] jobCats   = new JobCategory[0];
     JobPhase[]    jobPhases = new JobPhase[0];
     if (listBoxUsers.SelectedIndices.Count > 0 && !listBoxUsers.SelectedIndices.Contains(0))
     {
         userNums = listBoxUsers.SelectedIndices.Cast <int>().Select(x => _listUsers[x - 1].UserNum).ToArray();
     }
     if (listBoxCategory.SelectedIndices.Count > 0 && !listBoxCategory.SelectedIndices.Contains(0))
     {
         jobCats = listBoxCategory.SelectedIndices.Cast <int>().Select(x => (JobCategory)(x - 1)).ToArray();
     }
     if (listBoxStatus.SelectedIndices.Count > 0 && !listBoxStatus.SelectedIndices.Contains(0))
     {
         jobPhases = listBoxStatus.SelectedIndices.Cast <int>().Select(x => (JobPhase)(x - 1)).ToArray();
     }
     foreach (Job jobCur in _listJobsAll)
     {
         if (jobCats.Length > 0 && !jobCats.Contains(jobCur.Category))
         {
             continue;
         }
         if (jobPhases.Length > 0 && !jobPhases.Contains(jobCur.PhaseCur))
         {
             continue;
         }
         if (userNums.Length > 0 && !userNums.All(x => Jobs.GetUserNums(jobCur).Contains(x)))
         {
             continue;
         }
         bool isJobMatch        = false;
         bool isBugMatch        = false;
         bool isFeatureReqMatch = false;
         if (searchTokens.Length > 0)
         {
             bool                  addRow       = false;
             List <Bug>            listBugs     = jobCur.ListJobLinks.FindAll(x => x.LinkType == JobLinkType.Bug).Select(x => _listBugsAll.FirstOrDefault(y => x.FKey == y.BugId)).Where(x => x != null).ToList();
             List <FeatureRequest> listFeatures = jobCur.ListJobLinks.FindAll(x => x.LinkType == JobLinkType.Request).Select(x => _listFeatureRequestsAll.FirstOrDefault(y => x.FKey == y.FeatReqNum)).Where(x => x != null).ToList();
             foreach (string token in searchTokens.Distinct())
             {
                 bool isFound = false;
                 //JOB MATCHES
                 if (jobCur.Title.ToLower().Contains(token) ||
                     jobCur.Implementation.ToLower().Contains(token) ||
                     jobCur.Requirements.ToLower().Contains(token) ||
                     jobCur.Documentation.ToLower().Contains(token) ||
                     jobCur.JobNum.ToString().Contains(token))
                 {
                     isFound    = true;
                     isJobMatch = true;
                 }
                 //BUG MATCHES
                 if (!isFound || !isBugMatch)
                 {
                     if (listBugs.Any(x => x.Description.ToLower().Contains(token) || x.Discussion.ToLower().Contains(token)))
                     {
                         isFound    = true;
                         isBugMatch = true;
                     }
                 }
                 //FEATURE REQUEST MATCHES
                 if (!isFound || !isFeatureReqMatch)
                 {
                     if (listFeatures.Any(x => x.Description.Contains(token) || x.FeatReqNum.ToString().ToLower().Contains(token)))
                     {
                         isFound           = true;
                         isFeatureReqMatch = true;
                     }
                 }
                 addRow = isFound;
                 if (!isFound)
                 {
                     break;                            //stop looking for additional tokens, we didn't find this one.
                 }
             }
             if (!addRow)
             {
                 continue;                        //we did not find one of the search terms.
             }
         }
         _listJobsFiltered.Add(jobCur);
         ODGridRow row = new ODGridRow();
         row.Cells.Add(jobCur.JobNum.ToString());
         row.Cells.Add(jobCur.PhaseCur.ToString());
         row.Cells.Add(jobCur.Category.ToString());
         row.Cells.Add(jobCur.Title.Left(53, true));
         row.Cells.Add(jobCur.JobVersion.ToString());
         row.Cells.Add(Userods.GetName(jobCur.UserNumExpert));
         row.Cells.Add(Userods.GetName(jobCur.UserNumEngineer));
         row.Cells.Add(isJobMatch ? "X" : "");
         row.Cells.Add(isBugMatch ? "X" : "");
         row.Cells.Add(new ODGridCell(isFeatureReqMatch ? "X" : "")
         {
             CellColor = _listFeatureRequestsAll.Count == 0 ? Control.DefaultBackColor : Color.Empty
         });
         row.Tag = jobCur;
         gridMain.Rows.Add(row);
     }
     gridMain.EndUpdate();
     Cursor = Cursors.Default;
 }
Beispiel #28
0
        private void FillGrid()
        {
            if (textDateFrom.errorProvider1.GetError(textDateFrom) != "" || textDateTo.errorProvider1.GetError(textDateTo) != "")
            {
                return;
            }
            DateTime            dateFrom         = PIn.Date(textDateFrom.Text);
            DateTime            dateTo           = textDateTo.Text != ""?PIn.Date(textDateTo.Text):DateTime.MaxValue;
            double              filterAmt        = string.IsNullOrEmpty(textAmt.errorProvider1.GetError(textAmt))?PIn.Double(textAmt.Text):0;
            List <JournalEntry> listJEntries     = JournalEntries.GetForAccount(_acctCur.AccountNum);
            List <Transaction>  listTransactions = Transactions.GetManyTrans(listJEntries.Select(x => x.TransactionNum).ToList());

            //Resize grid to fit, important for later resizing
            gridMain.BeginUpdate();
            gridMain.Columns.Clear();
            gridMain.Rows.Clear();
            gridMain.Width          = isPrinting?1050:(this.Width - 16);//gridMain.Location.XPos=0 and the grid is form width - 16
            gridMain.HideScrollBars = isPrinting;
            gridMain.EndUpdate();
            gridMain.BeginUpdate();
            gridMain.Title = _acctCur.Description + " (" + Lan.g("enumAccountType", _acctCur.AcctType.ToString()) + ")";
            gridMain.Columns.Clear();
            gridMain.Columns.Add(new ODGridColumn(Lan.g("TableJournal", "Chk #"), 60, HorizontalAlignment.Center));
            gridMain.Columns.Add(new ODGridColumn(Lan.g("TableJournal", "Date"), 75));
            gridMain.Columns.Add(new ODGridColumn(Lan.g("TableJournal", "Memo"), isPrinting?200:220));
            gridMain.Columns.Add(new ODGridColumn(Lan.g("TableJournal", "Splits"), isPrinting?200:220));
            int colClearWidth = 40;          //because the "clear" column has not been added yet.
            int colUserWidth  = 100;         //because the user columns haven't been added yet.
            //if printing, total size=paper width-margins (1050), otherwise total size=gridWidth-scroll bar width of 19
            //divide remaining size, total size - grid col widths, into thirds for the debit, credit, and balance columns
            int colW = (gridMain.Width - (isPrinting?0:19) - gridMain.WidthAllColumns - colClearWidth - 2 * colUserWidth) / 3;

            gridMain.Columns.Add(new ODGridColumn(Lan.g("TableJournal", "Debit" + (Accounts.DebitIsPos(_acctCur.AcctType)?"(+)":"(-)")), colW, HorizontalAlignment.Right));
            gridMain.Columns.Add(new ODGridColumn(Lan.g("TableJournal", "Credit" + (Accounts.DebitIsPos(_acctCur.AcctType)?"(-)":"(+)")), colW, HorizontalAlignment.Right));
            gridMain.Columns.Add(new ODGridColumn(Lan.g("TableJournal", "Balance"), colW, HorizontalAlignment.Right));
            gridMain.Columns.Add(new ODGridColumn(Lan.g("TableJournal", "Created By"), colUserWidth));
            gridMain.Columns.Add(new ODGridColumn(Lan.g("TableJournal", "Last Edited By"), colUserWidth));
            gridMain.Columns.Add(new ODGridColumn(Lan.g("TableJournal", "Clear"), colClearWidth, HorizontalAlignment.Center));
            gridMain.Rows.Clear();
            ODGridRow row;
            decimal   bal = 0;

            foreach (JournalEntry jeCur in listJEntries)
            {
                if (jeCur.DateDisplayed > dateTo)
                {
                    break;
                }
                if (new[] { AccountType.Income, AccountType.Expense }.Contains(_acctCur.AcctType) && jeCur.DateDisplayed < dateFrom)
                {
                    continue;                    //for income and expense accounts, previous balances are not included. Only the current timespan.
                }
                //DebitIsPos=true for checking acct, bal+=DebitAmt-CreditAmt
                bal += (Accounts.DebitIsPos(_acctCur.AcctType)?1:-1) * ((decimal)jeCur.DebitAmt - (decimal)jeCur.CreditAmt);
                if (new[] { AccountType.Asset, AccountType.Liability, AccountType.Equity }.Contains(_acctCur.AcctType) && jeCur.DateDisplayed < dateFrom)
                {
                    continue;                    //for asset, liability, and equity accounts, older entries do affect the current balance.
                }
                if (filterAmt != 0 && filterAmt != jeCur.CreditAmt && filterAmt != jeCur.DebitAmt)
                {
                    continue;
                }
                if (textFindText.Text != "" && new[] { jeCur.Memo, jeCur.CheckNumber, jeCur.Splits }.All(x => !x.ToUpper().Contains(textFindText.Text.ToUpper())))
                {
                    continue;
                }
                row = new ODGridRow();
                row.Cells.Add(jeCur.CheckNumber);
                row.Cells.Add(jeCur.DateDisplayed.ToShortDateString());
                row.Cells.Add(jeCur.Memo);
                row.Cells.Add(jeCur.Splits);
                row.Cells.Add(jeCur.DebitAmt == 0?"":jeCur.DebitAmt.ToString("n"));
                row.Cells.Add(jeCur.CreditAmt == 0?"":jeCur.CreditAmt.ToString("n"));
                row.Cells.Add(bal.ToString("n"));
                row.Cells.Add(Userods.GetName(listTransactions.FirstOrDefault(x => x.TransactionNum == jeCur.TransactionNum)?.UserNum ?? 0));
                row.Cells.Add(Userods.GetName(jeCur.SecUserNumEdit));
                row.Cells.Add(jeCur.ReconcileNum == 0?"":"X");
                row.Tag = jeCur.Copy();
                gridMain.Rows.Add(row);
            }
            gridMain.EndUpdate();
            gridMain.ScrollToEnd();
        }
Beispiel #29
0
 private void signatureBoxWrapper_SignatureChanged(object sender, EventArgs e)
 {
     CommlogCur.UserNum = Security.CurUser.UserNum;
     textUser.Text      = Userods.GetName(CommlogCur.UserNum);
     SigChanged         = true;
 }
 private void FormTreatPlanEdit_Load(object sender, System.EventArgs e)
 {
     //this window never comes up for new TP.  Always saved ahead of time.
     if (!Security.IsAuthorized(Permissions.TreatPlanEdit, PlanCur.DateTP))
     {
         butOK.Enabled                = false;
         butDelete.Enabled            = false;
         butPickResponsParty.Enabled  = false;
         butClearResponsParty.Enabled = false;
         butSigClear.Enabled          = false;
         butDocumentDetach.Enabled    = false;
         textHeading.ReadOnly         = true;
         textDateTP.ReadOnly          = true;
         textNote.ReadOnly            = true;
         if (Security.IsAuthorized(Permissions.TreatPlanSign, PlanCur.DateTP))                //User has permission to edit the heading field.
         {
             textHeading.ReadOnly = false;
             butOK.Enabled        = true;
         }
     }
     if (!Security.IsAuthorized(Permissions.TreatPlanPresenterEdit, true))
     {
         butPickPresenter.Visible = false;
     }
     if (PlanCur.UserNumPresenter > 0)
     {
         _presenterCur      = Userods.GetUser(PlanCur.UserNumPresenter);
         _presenterOld      = _presenterCur.Copy();
         textPresenter.Text = _presenterCur.UserName;
     }
     textUserEntry.Text = Userods.GetName(PlanCur.SecUserNumEntry);
     textDateTP.Text    = PlanCur.DateTP.ToShortDateString();
     textHeading.Text   = PlanCur.Heading;
     textNote.Text      = PlanCur.Note;
     if (PrefC.GetBool(PrefName.EasyHidePublicHealth))
     {
         labelResponsParty.Visible    = false;
         textResponsParty.Visible     = false;
         butPickResponsParty.Visible  = false;
         butClearResponsParty.Visible = false;
     }
     if (PlanCur.ResponsParty != 0)
     {
         textResponsParty.Text = Patients.GetLim(PlanCur.ResponsParty).GetNameLF();
     }
     if (PlanCur.Signature != "")            //Per Nathan 01 OCT 2015: In addition to invalidating signature (old behavior) we will also block editing signed TPs.
     {
         butOK.Enabled                = false;
         textHeading.ReadOnly         = true;
         textDateTP.ReadOnly          = true;
         textNote.ReadOnly            = true;
         butClearResponsParty.Enabled = false;
         butPickResponsParty.Enabled  = false;
         butSigClear.Visible          = true;
         butDocumentDetach.Enabled    = false;
     }
     else
     {
         butSigClear.Visible = false;
         butSigClear.Enabled = false;
     }
     if (PlanCur.DocNum > 0)           //Was set at some point in the past.
     {
         Document doc = Documents.GetByNum(PlanCur.DocNum);
         if (doc.DocNum == 0)
         {
             textDocument.Text       = "(" + Lan.g(this, "Missing Document") + ")";       //Invalid Fkey to document.DocNum
             butDocumentView.Enabled = false;
         }
         else
         {
             textDocument.Text = doc.Description;
             if (!Documents.DocExists(doc.DocNum))
             {
                 textDocument.Text      += " (" + Lan.g(this, "Unreachable File") + ")";            //Document points to unreachable file
                 butDocumentView.Enabled = false;
             }
         }
     }
     else              //hide document controls because there is no attached document
     {
         labelDocument.Visible     = false;
         textDocument.Visible      = false;
         butDocumentView.Visible   = false;
         butDocumentDetach.Visible = false;
     }
 }