public List <BLL.MonthlyReport> MonthlyReport_List(DateTime dtFrom, DateTime dtTo, bool isMonthly)
        {
            BLL.MonthlyReport sr = new BLL.MonthlyReport();

            List <BLL.MonthlyReport> rv = new List <BLL.MonthlyReport>();
            var l1 = DB.AccountGroups.Where(x => x.FundMasterId == Caller.FundMasterId && (x.GroupName == "Income" || x.GroupName == "Expenses")).ToList();

            foreach (var ag in l1)
            {
                sr             = new BLL.MonthlyReport();
                sr.Description = ag.GroupName;
                rv.Add(sr);

                rv.AddRange(IncomeExpenditureByGroupName(ag, dtFrom, dtTo, "", isMonthly));
                foreach (var uag in ag.AccountGroup1)
                {
                    rv.AddRange(IncomeExpenditureByGroupName(uag, dtFrom, dtTo, "", isMonthly));
                }
            }


            return(rv);
        }
        List <BLL.MonthlyReport> IncomeExpenditureByGroupName(DAL.AccountGroup ag, DateTime dtFrom, DateTime dtTo, string Prefix, bool isMonthly)
        {
            int n = Math.Abs((dtTo.Year * 12 + (dtTo.Month - 1)) - (dtFrom.Year * 12 + (dtFrom.Month - 1)));

            if (isMonthly == false)
            {
                n = n / 2;
            }
            if (n > 12)
            {
                n = 12;
            }


            List <BLL.MonthlyReport> rv = new List <BLL.MonthlyReport>();

            BLL.MonthlyReport sr   = new BLL.MonthlyReport();
            decimal[]         tamt = new decimal[12];


            #region CustomeWise

            decimal[] gtamt = new decimal[12];

            foreach (var l in ag.Ledgers)
            {
                decimal[] amt = new decimal[12];

                for (int i = 0; i <= n; i++)
                {
                    decimal dr = 0, cr = 0;

                    amt[i] = isMonthly == true ? 0 : 1;
                    if (isMonthly == true)
                    {
                        DateTime dt = dtFrom.AddMonths(i);

                        dr = l.PaymentDetails.Where(x => x.Payment.PaymentDate.Year == dt.Year && x.Payment.PaymentDate.Month == dt.Month).Sum(x => x.Amount);
                        cr = l.Payments.Where(x => x.PaymentDate.Year == dt.Year && x.PaymentDate.Month == dt.Month).Sum(x => x.Amount);

                        dr += l.Receipts.Where(x => x.ReceiptDate.Year == dt.Year && x.ReceiptDate.Month == dt.Month).Sum(x => x.Amount);
                        cr += l.ReceiptDetails.Where(x => x.Receipt.ReceiptDate.Year == dt.Year && x.Receipt.ReceiptDate.Month == dt.Month).Sum(x => x.Amount);

                        cr    += l.JournalDetails.Where(x => x.Journal.JournalDate.Year == dt.Year && x.Journal.JournalDate.Month == dt.Month).Sum(x => x.CrAmt);
                        dr    += l.JournalDetails.Where(x => x.Journal.JournalDate.Year == dt.Year && x.Journal.JournalDate.Month == dt.Month).Sum(x => x.DrAmt);
                        amt[i] = Math.Abs(dr - cr);
                    }
                    else
                    {
                        DateTime dt = dtFrom.AddYears(i);
                        dr = l.PaymentDetails.Where(x => x.Payment.PaymentDate.Year == dt.Year).Sum(x => x.Amount);
                        cr = l.Payments.Where(x => x.PaymentDate.Year == dt.Year).Sum(x => x.Amount);

                        dr += l.Receipts.Where(x => x.ReceiptDate.Year == dt.Year).Sum(x => x.Amount);
                        cr += l.ReceiptDetails.Where(x => x.Receipt.ReceiptDate.Year == dt.Year).Sum(x => x.Amount);

                        dr    += l.JournalDetails.Where(x => x.Journal.JournalDate.Year == dt.Year).Sum(x => x.DrAmt);
                        cr    += l.JournalDetails.Where(x => x.Journal.JournalDate.Year == dt.Year).Sum(x => x.CrAmt);
                        amt[i] = Math.Abs(dr - cr);
                    }
                }
                sr        = new BLL.MonthlyReport();
                sr.Amount = amt.Sum();

                if (sr.Amount > 0)
                {
                    sr.Description = string.Format("   {0}-{1}", l.LedgerCode, l.LedgerName);
                    sr.LId         = l.Id;
                    sr.M1          = amt[0];
                    sr.M2          = amt[1];
                    sr.M3          = amt[2];
                    sr.M4          = amt[3];
                    sr.M5          = amt[4];
                    sr.M6          = amt[5];
                    sr.M7          = amt[6];
                    sr.M8          = amt[7];
                    sr.M9          = amt[8];
                    sr.M10         = amt[9];
                    sr.M11         = amt[10];
                    sr.M12         = amt[11];
                    rv.Add(sr);
                }

                for (int i = 0; i < 12; i++)
                {
                    tamt[i] += amt[i];
                }
            }
            sr        = new BLL.MonthlyReport();
            sr.Amount = tamt.Sum();



            for (int i = 0; i < 12; i++)
            {
                gtamt[i] += tamt[i];
            }

            sr        = new BLL.MonthlyReport();
            sr.Amount = gtamt.Sum();

            if (sr.Amount != 0)
            {
                sr.Description = string.Format("Grand Total");
                sr.M1          = gtamt[0];
                sr.M2          = gtamt[1];
                sr.M3          = gtamt[2];
                sr.M4          = gtamt[3];
                sr.M5          = gtamt[4];
                sr.M6          = gtamt[5];
                sr.M7          = gtamt[6];
                sr.M8          = gtamt[7];
                sr.M9          = gtamt[8];
                sr.M10         = gtamt[9];
                sr.M11         = gtamt[10];
                sr.M12         = gtamt[11];
                rv.Add(sr);

                // rv.Add(new BLL.MonthlyReport());
            }
            #endregion

            return(rv);
        }