Beispiel #1
0
 public APDocumentsByVendor()
 {
     enq = PXGraph.CreateInstance <APDocumentEnq>();
 }
        protected override List <APGLDiscrepancyByDocumentEnqResult> SelectDetails()
        {
            var list = new List <APGLDiscrepancyByDocumentEnqResult>();
            APGLDiscrepancyByVendorEnqFilter header = Filter.Current;

            if (header == null ||
                header.BranchID == null ||
                header.PeriodFrom == null ||
                header.VendorID == null)
            {
                return(list);
            }

            #region AP balances

            APDocumentEnq graphAP = PXGraph.CreateInstance <APDocumentEnq>();
            APDocumentEnq.APDocumentFilter filterAP = PXCache <APDocumentEnq.APDocumentFilter> .CreateCopy(graphAP.Filter.Current);

            filterAP.BranchID    = header.BranchID;
            filterAP.VendorID    = header.VendorID;
            filterAP.FinPeriodID = header.PeriodFrom;
            filterAP.AccountID   = header.AccountID;
            filterAP.SubCD       = header.SubCD;
            filterAP             = graphAP.Filter.Update(filterAP);

            Dictionary <ARDocKey, APGLDiscrepancyByDocumentEnqResult> dict = new Dictionary <ARDocKey, APGLDiscrepancyByDocumentEnqResult>();
            HashSet <int?> accountIDs    = new HashSet <int?>();
            HashSet <int?> subAccountIDs = new HashSet <int?>();
            graphAP.Documents.Select();

            foreach (KeyValuePair <ARDocKey, APDocumentResult> pair in graphAP.HandledDocuments)
            {
                ARDocKey         key             = pair.Key;
                APDocumentResult handledDocument = pair.Value;
                APGLDiscrepancyByDocumentEnqResult result;

                if (dict.TryGetValue(key, out result))
                {
                    result.XXTurnover += (handledDocument.APTurnover ?? 0m);
                }
                else
                {
                    result            = new APGLDiscrepancyByDocumentEnqResult();
                    result.GLTurnover = 0m;
                    result.XXTurnover = (handledDocument.APTurnover ?? 0m);
                    PXCache <APDocumentResult> .RestoreCopy(result, handledDocument);

                    dict.Add(key, result);
                }

                accountIDs.Add(result.APAccountID);
            }

            #endregion

            #region GL balances

            AccountByPeriodEnq    graphGL  = PXGraph.CreateInstance <AccountByPeriodEnq>();
            AccountByPeriodFilter filterGL = PXCache <AccountByPeriodFilter> .CreateCopy(graphGL.Filter.Current);

            graphGL.Filter.Cache.SetDefaultExt <AccountByPeriodFilter.ledgerID>(filterGL);
            filterGL.BranchID      = header.BranchID;
            filterGL.StartPeriodID = header.PeriodFrom;
            filterGL.EndPeriodID   = header.PeriodFrom;
            filterGL.SubID         = header.SubCD;
            filterGL = graphGL.Filter.Update(filterGL);

            foreach (int?accountID in accountIDs)
            {
                filterGL.AccountID = accountID;
                filterGL           = graphGL.Filter.Update(filterGL);

                foreach (GLTranR gltran in graphGL.GLTranEnq.Select()
                         .RowCast <GLTranR>()
                         .Where(row =>
                                row.Module == BatchModule.AP &&
                                row.ReferenceID == header.VendorID))
                {
                    ARDocKey key = new ARDocKey(gltran.TranType, gltran.RefNbr);
                    APGLDiscrepancyByDocumentEnqResult result;

                    if (dict.TryGetValue(key, out result))
                    {
                        decimal glTurnover = CalcGLTurnover(gltran);
                        result.GLTurnover += glTurnover;
                    }
                }
            }

            #endregion

            list.AddRange(dict.Values.Where(result =>
                                            header.ShowOnlyWithDiscrepancy != true ||
                                            result.Discrepancy != 0m));
            return(list);
        }