public ActionResult BankTransactionList(DataTablesViewModel param, string fromDate, string toDate)
        {
            try
            {
                if (!PermissionControl.CheckPermission(UserAppPermissions.BankTransaction_View))
                {
                    return(RedirectToAction("Restricted", "Home"));
                }

                DateTime frdate = DateTime.Now;
                if (!string.IsNullOrWhiteSpace(fromDate))
                {
                    frdate = DateTime.Parse(fromDate);
                }

                DateTime tdate = DateTime.Now;
                if (!string.IsNullOrWhiteSpace(toDate))
                {
                    tdate = DateTime.Parse(toDate);
                }



                logger.DebugFormat("Getting Bank Trasaction List with From Date [{0}] and To Date [{1}]", frdate.ToShortDateString(), tdate.ToShortDateString());

                CompanyBankTransactionVM transaction = new CompanyBankTransactionVM();
                transaction.DTObject = param;
                var list = bankTransactionManagement.GetAllBankTransactionByParam(transaction, frdate, tdate);

                logger.DebugFormat("Successfully Retrieve Bank Trasaction List Records [{2}] with From Date [{0}] and To Ddate [{1}]", frdate.ToShortDateString(), tdate.ToShortDateString(), list.Count());
                return(Json(new
                {
                    sEcho = param.draw,
                    iTotalRecords = list.Select(i => i.DTObject.TotalRecordsCount).FirstOrDefault(),
                    iTotalDisplayRecords = list.Select(i => i.DTObject.TotalRecordsCount).FirstOrDefault(), // Filtered Count
                    aaData = list
                }));
            }
            catch (Exception ex)
            {
                logger.ErrorFormat("Exception Raised : Message[{0}] Stack Trace [{1}] ", ex.Message, ex.StackTrace);
                return(null);
            }
        }
        public IEnumerable <CompanyBankTransactionVM> GetAllBankTransactionByParam(CompanyBankTransactionVM param, DateTime fromDate, DateTime toDate)
        {
            try
            {
                IQueryable <CompanyBankTransactionVM> query = (from CBT in DbContext.CompanyBankTransactions.AsNoTracking()
                                                               join CB in DbContext.CompanyBanks.AsNoTracking() on CBT.CompanyBankID equals CB.CompanyBankID
                                                               join Comp in DbContext.Companies.AsNoTracking() on CB.CompanyID equals Comp.CompanyID
                                                               join Bnk in DbContext.Banks.AsNoTracking() on CB.BankID equals Bnk.BankID
                                                               where !CBT.IsDeleted
                                                               orderby CBT.TransactionDate ascending
                                                               where (DbFunctions.TruncateTime(CBT.TransactionDate) >= DbFunctions.TruncateTime(fromDate) && DbFunctions.TruncateTime(CBT.TransactionDate) <= DbFunctions.TruncateTime(toDate))
                                                               select new CompanyBankTransactionVM
                {
                    CompanyBankTransactionID = CBT.CompanyBankTransactionID,

                    Description = CBT.Description,
                    Amount = CBT.Amount,
                    TransactionType = CBT.TransactionType,
                    TransactionDate = CBT.TransactionDate,
                    TransactionStatus = CBT.TransactionStatus,
                    PaymentType = CBT.PaymentType,
                    CategoryType = CBT.CategoryType,
                    ReceiptNumber = CBT.ReceiptNumber,
                    AccountNumber = CB.AccountNumber,
                    CompanyName = Comp.Name,
                    BankName = Bnk.Name,
                });


                query = GetBankTransactionFiltersOrderQuery(query, param);


                int totalRecord = query.Count();

                var transaction = query.Skip(param.DTObject.start).Take(param.DTObject.length).ToList().Select(index => new CompanyBankTransactionVM
                {
                    CompanyBankTransactionID = index.CompanyBankTransactionID,
                    CompanyName       = index.CompanyName,
                    BankName          = index.BankName,
                    Description       = index.Description,
                    Amount            = index.Amount,
                    TransactionType   = index.TransactionType,
                    TransactionDate   = index.TransactionDate,
                    PaymentType       = index.PaymentType,
                    CategoryType      = index.CategoryType,
                    ReceiptNumber     = index.ReceiptNumber,
                    AccountNumber     = index.AccountNumber,
                    TransactionStatus = index.TransactionStatus,
                    DTObject          = new DataTablesViewModel()
                    {
                        TotalRecordsCount = totalRecord
                    }
                }).ToList();



                return(transaction);
            }
            catch (Exception ex)
            {
                logger.ErrorFormat("Exception Raised : Message[{0}] Stack Trace [{1}] ", ex.Message, ex.StackTrace);
                return(null);
            }
        }
        private IQueryable <CompanyBankTransactionVM> GetBankTransactionFiltersOrderQuery(IQueryable <CompanyBankTransactionVM> query, CompanyBankTransactionVM param, bool forAll = false)
        {
            try
            {
                if (param == null)
                {
                    return(query);
                }

                int index = -1;
                foreach (var columnData in param.DTObject.columns)
                {
                    index += 1;
                    if (columnData.orderable)
                    {
                        foreach (var row in param.DTObject.order.Where(i => i.column == index))
                        {
                            if (row.dir == "asc")
                            {
                                query = query.OrderBy(columnData.data);
                            }
                            else
                            {
                                query = query.OrderByDescending(columnData.data);
                            }
                        }
                    }


                    if (columnData.search.value == null || string.IsNullOrEmpty(columnData.search.value.Trim()))
                    {
                        continue;
                    }
                    switch (columnData.data)
                    {
                    case "Description":
                        if (!forAll)
                        {
                            query = query.Where(col => col.Description.ToUpper().Contains(columnData.search.value.ToUpper()));
                        }
                        break;
                    }
                }

                if (param.DTObject.search.value != null && !string.IsNullOrEmpty(param.DTObject.search.value))
                {
                    query = query.Where(col => (
                                            col.Description.ToUpper().Contains(param.DTObject.search.value.ToUpper()) ||
                                            col.TransactionType.ToUpper().Contains(param.DTObject.search.value.ToUpper()) ||
                                            col.PaymentType.ToUpper().Contains(param.DTObject.search.value.ToUpper()) ||
                                            col.CategoryType.ToUpper().Contains(param.DTObject.search.value.ToUpper()) ||
                                            col.ReceiptNumber.ToUpper().Contains(param.DTObject.search.value.ToUpper()) ||
                                            col.AccountNumber.ToUpper().Contains(param.DTObject.search.value.ToUpper()) ||

                                            col.Amount.ToString().Contains(param.DTObject.search.value.ToUpper())));
                }
                return(query);


                return(query);
            }
            catch (Exception ex)
            {
                logger.ErrorFormat("Exception Raised : Message[{0}] Stack Trace [{1}] ", ex.Message, ex.StackTrace);
                return(null);
            }
        }
 public IEnumerable <CompanyBankTransactionVM> GetAllBankTransactionByParam(CompanyBankTransactionVM transaction, DateTime frdate, DateTime tdate)
 {
     return(bankTransactionRepository.GetAllBankTransactionByParam(transaction, frdate, tdate));
 }