protected static void Aggregate(CheckSummary aRes, APPaymentExt aSrc, DateTime?aPayDate) { aRes.DocBal += aSrc.OrigDocAmt; aRes.CuryDocBal += aSrc.CuryOrigDocAmt; aRes.DocCount++; aRes.PayDate = aPayDate; if (aSrc.DocDate < aPayDate) { aRes.OverdueDocCount++; aRes.OverdueDocBal += aSrc.OrigDocAmt; aRes.OverdueCuryDocBal += aSrc.CuryOrigDocAmt; } if (aRes.MaxPayDate == null || aSrc.DocDate > aRes.MaxPayDate) { aRes.MaxPayDate = aSrc.DocDate; } if (aRes.MinPayDate == null || aSrc.DocDate < aRes.MinPayDate) { aRes.MinPayDate = aSrc.DocDate; } }
public virtual IEnumerable documents() { DocFilter filter = Filter.Current; Dictionary <CashAcctKey, CheckSummary> result = new Dictionary <CashAcctKey, CheckSummary>(); if (filter == null && !filter.PayDate.HasValue) { return(result.Values); } PXSelectBase <APPaymentExt> sel = new PXSelectJoin <APPaymentExt, InnerJoin <CashAccount, On <CashAccount.cashAccountID, Equal <APPaymentExt.cashAccountID> >, InnerJoin <Vendor, On <Vendor.bAccountID, Equal <APPayment.vendorID> >, InnerJoin <PaymentMethod, On <PaymentMethod.paymentMethodID, Equal <APPaymentExt.paymentMethodID> >, LeftJoin <CABatchDetail, On <CABatchDetail.origModule, Equal <GL.BatchModule.moduleAP>, And <CABatchDetail.origDocType, Equal <APPayment.docType>, And <CABatchDetail.origRefNbr, Equal <APPayment.refNbr> > > > > > > >, Where <APPaymentExt.released, Equal <boolFalse>, And <APPayment.docType, NotEqual <APDocType.prepayment>, And <APPayment.docType, NotEqual <APDocType.refund>, And <APPaymentExt.openDoc, Equal <boolTrue>, And2 <Match <Vendor, Current <AccessInfo.userName> >, And <Where2 <Where <PaymentMethod.aPCreateBatchPayment, Equal <True>, And <CABatchDetail.batchNbr, IsNull> >, Or <Where <PaymentMethod.aPCreateBatchPayment, Equal <False>, And <PaymentMethod.aPPrintChecks, Equal <boolTrue>, And <APPayment.printed, Equal <boolFalse> > > > > > > > > > > >, OrderBy < Asc <APPaymentExt.docType, Asc <APPaymentExt.refNbr> > > >(this); if (filter.PayDate != null) { sel.WhereAnd <Where <APPaymentExt.docDate, LessEqual <Current <DocFilter.payDate> > > >(); } if (filter.PayAccountID != null) { sel.WhereAnd <Where <APPaymentExt.cashAccountID, Equal <Current <DocFilter.payAccountID> > > >(); } if (filter.PayTypeID != null) { sel.WhereAnd <Where <APPaymentExt.paymentMethodID, Equal <Current <DocFilter.payTypeID> > > >(); } APPaymentKey lastInvoice = null; foreach (PXResult <APPaymentExt, CashAccount, Vendor, PaymentMethod, CABatchDetail> it in sel.Select()) { APPaymentExt inv = (APPaymentExt)it; CashAccount acct = (CashAccount)it; APPaymentKey invNbr = new APPaymentKey(inv.DocType, inv.RefNbr); if (lastInvoice != null && lastInvoice.CompareTo(invNbr) == 0) { continue; //Skip multiple entries for invoice } //inv.DocCount = it.RowCount; lastInvoice = invNbr; CashAcctKey key = new CashAcctKey(inv.CashAccountID.Value, inv.PaymentMethodID); CheckSummary res = null; if (!result.ContainsKey(key)) { res = new CheckSummary(); res.PayAccountID = inv.CashAccountID; res.PayTypeID = inv.PaymentMethodID; res.CuryID = acct.CuryID; res.CuryInfoID = inv.CuryInfoID; result[key] = res; } else { res = result[key]; } Aggregate(res, inv, filter.PayDate); } return(result.Values); }