public IEnumerable filteredItems() { bool found = false; foreach (EPTimeCardRow item in FilteredItems.Cache.Inserted) { found = true; yield return(item); } if (found) { yield break; } PXSelectBase <EPTimeCardRow> select = new PXSelectJoin <EPTimeCardRow, LeftJoin <EPEmployee, On <EPEmployee.bAccountID, Equal <EPTimeCard.employeeID> >, LeftJoin <EPApproval, On <EPApproval.refNoteID, Equal <EPTimeCardRow.noteID> >, LeftJoin <EPEmployeeEx, On <EPEmployeeEx.userID, Equal <EPApproval.approvedByID> > > > >, Where <EPTimeCardRow.isApproved, Equal <True>, And2 <Where <EPTimeCardRow.isReleased, NotEqual <True>, Or <EPTimeCardRow.isReleased, IsNull> >, And2 <Where <EPTimeCardRow.isHold, NotEqual <True>, Or <EPTimeCardRow.isHold, IsNull> >, And <Where <EPTimeCardRow.isRejected, NotEqual <True>, Or <EPTimeCardRow.isRejected, IsNull> > > > > >, OrderBy <Asc <EPTimeCardRow.timeCardCD, Desc <EPTimeCardRow.approveDate> > > >(this); List <string> timeCards = new List <string>(); foreach (PXResult <EPTimeCardRow, EPEmployee, EPApproval, EPEmployeeEx> res in select.Select()) { EPTimeCardRow rec = (EPTimeCardRow)res; if (!timeCards.Contains(rec.TimeCardCD)) { timeCards.Add(rec.TimeCardCD); EPEmployee employee = (EPEmployee)res[1]; EPApproval approval = (EPApproval)res; EPEmployeeEx approver = (EPEmployeeEx)res[3]; rec.EmployeeCD = employee.AcctCD; rec.EmployeeName = employee.AcctName; rec.ApproveDate = approval.ApproveDate; rec.ApprovedBy = approver.AcctCD; RecalculateTotals(rec); FilteredItems.Cache.SetStatus(rec, PXEntryStatus.Inserted); yield return(rec); } } FilteredItems.Cache.IsDirty = false; }
public IEnumerable filteredItems() { //due to 2-level approval JOIN to EPApprovalEx can produce duplicate records. //timecards hashset maintains the list of unique items. HashSet <string> timeCards = new HashSet <string>(); bool found = false; foreach (EPTimeCardRow item in FilteredItems.Cache.Inserted) { timeCards.Add(item.TimeCardCD); found = true; yield return(item); } if (found) { yield break; } PXSelectBase <EPTimeCardRow> select = new PXSelectJoin <EPTimeCardRow, LeftJoin <EPEmployee, On <EPEmployee.bAccountID, Equal <EPTimeCardRow.employeeID> >, LeftJoin <EPApprovalEx, On <EPApprovalEx.refNoteID, Equal <EPTimeCardRow.noteID> >, LeftJoin <EPEmployeeEx, On <EPEmployeeEx.userID, Equal <EPApprovalEx.approvedByID> > > > >, Where <EPTimeCardRow.isApproved, Equal <True>, And2 <Where <EPTimeCardRow.isReleased, NotEqual <True>, Or <EPTimeCardRow.isReleased, IsNull> >, And2 <Where <EPTimeCardRow.isHold, NotEqual <True>, Or <EPTimeCardRow.isHold, IsNull> >, And <Where <EPTimeCardRow.isRejected, NotEqual <True>, Or <EPTimeCardRow.isRejected, IsNull> > > > > >, OrderBy <Asc <EPTimeCardRow.timeCardCD, Desc <EPTimeCardRow.approveDate> > > >(this);//Sort by approveDate to display last approver (for 2-level approval) foreach (PXResult <EPTimeCardRow, EPEmployee, EPApprovalEx, EPEmployeeEx> res in select.Select()) { EPTimeCardRow rec = (EPTimeCardRow)res; EPApprovalEx approval = (EPApprovalEx)res; EPEmployeeEx approver = (EPEmployeeEx)res[3]; if (timeCards.Add(rec.TimeCardCD)) { rec.ApproveDate = approval.ApproveDate; rec.ApprovedByID = approver.AcctCD; rec.ApprovedByName = approver.AcctName; FilteredItems.Cache.SetStatus(rec, PXEntryStatus.Inserted); yield return(rec); } } FilteredItems.Cache.IsDirty = false; }