示例#1
0
        public List <GetTongHopNo> GetSoTongHopNo(DateTime fromDate, DateTime toDate)
        {
            var dkData = BalanceLogic.GetSoDuDauKyCongNo(fromDate);

            dkData = dkData.Where(o => o.DebitBalance > 0 || o.CreditBalance > 0).ToList();

            var psData = ReportDAO.GetSoTongHopNo(fromDate, toDate);

            // Thêm DK
            var dkNotPS = new List <GetTongHopNo>();

            foreach (GetBalance item in dkData)
            {
                var psFind = psData.Find(o =>
                                         o.AccountID == item.AccountID &&
                                         o.AccountDetailID == item.AccountDetailID &&
                                         o.CustomerID == item.CustomerID);
                // có ps
                if (psFind != null)
                {
                    psFind.DKNo = item.DebitBalance;
                    psFind.DKCo = item.CreditBalance;
                }
                // không có ps
                else
                {
                    dkNotPS.Add(new GetTongHopNo
                    {
                        AccountID       = item.AccountID,
                        AccountDetailID = item.AccountDetailID,
                        CustomerID      = item.CustomerID,
                        CustomerName    = item.CustomerName,
                        CustomerSName   = item.CustomerSName,
                        DKNo            = item.DebitBalance,
                        DKCo            = item.CreditBalance
                    });
                }
            }

            // Thêm danh sách có đầu kỳ nhưng không có phát sinh
            psData.AddRange(dkNotPS);

            // Tính cuối kỳ
            foreach (var ps in psData)
            {
                decimal ckNo = ps.DKNo + ps.PSNo - ps.DKCo - ps.PSCo;
                if (ckNo > 0)
                {
                    ps.CKNo = ckNo;
                }
                else
                {
                    ps.CKCo = Math.Abs(ckNo);
                }
            }

            return(psData.OrderBy(o => o.AccountID).ThenBy(o => o.AccountDetailID).ThenBy(o => o.CustomerSName).ToList());
        }