public SuggestedExpenseList GetSuggestedExpensesFromHistory(List <SuggestedRoute> suggestedRoutes)
        {
            var suggestedExpenses = new SuggestedExpenseList();

            suggestedExpenses.ExpenseList      = new List <CustomerPricingDetailViewModel>();
            suggestedExpenses.AllowanceList    = new List <CustomerPricingDetailViewModel>();
            suggestedExpenses.FixedExpenseList = new List <CustomerPricingDetailViewModel>();
            suggestedExpenses.OtherExpenseList = new List <CustomerPricingDetailViewModel>();
            var expenseCate   = Convert.ToInt32(ExpenseCategory.Expense).ToString();
            var allowanceCate = Convert.ToInt32(ExpenseCategory.Allowance).ToString();
            var expenseRoot   = Convert.ToInt32(ExpenseRoot.History).ToString();

            foreach (var suggestedRoute in suggestedRoutes)
            {
                var history = suggestedRoute;

                #region Get expense history
                var exCate          = expenseCate;
                var historyExpenses = (from p in _expenseDetailRepository.GetAllQueryable()
                                       join e in _expenseRepository.GetAllQueryable() on p.ExpenseC equals e.ExpenseC into pe
                                       from e in pe.DefaultIfEmpty()
                                       where p.OrderD == history.OrderD & p.OrderNo == history.OrderNo &
                                       p.DetailNo == history.DetailNo & p.DispatchNo == history.DispatchNo &
                                       p.IsIncluded == "1" & p.IsRequested == "0"
                                       select new CustomerPricingDetailViewModel()
                {
                    CategoryI = exCate,
                    ExpenseC = p.ExpenseC,
                    ExpenseN = e.ExpenseN,
                    Unit = p.Unit,
                    UnitPrice = p.UnitPrice,
                    Quantity = p.Quantity,
                    Amount = p.Amount,
                    OrderD = p.OrderD,
                    OrderNo = p.OrderNo,
                    DetailNo = p.DetailNo,
                    DispatchNo = p.DispatchNo,
                    ExpenseRoot = expenseRoot
                }).ToList();


                if (historyExpenses.Any())
                {
                    suggestedExpenses.ExpenseList.AddRange(historyExpenses);
                }
                #endregion

                #region Get allowance history
                var allCate           = allowanceCate;
                var historyAllowances = (from p in _allowanceDetailRepository.GetAllQueryable()
                                         join e in _expenseRepository.GetAllQueryable() on p.AllowanceC equals e.ExpenseC into pe
                                         from e in pe.DefaultIfEmpty()
                                         where p.OrderD == history.OrderD & p.OrderNo == history.OrderNo &
                                         p.DetailNo == history.DetailNo & p.DispatchNo == history.DispatchNo
                                         select new CustomerPricingDetailViewModel()
                {
                    CategoryI = allCate,
                    ExpenseC = p.AllowanceC,
                    ExpenseN = e.ExpenseN,
                    Unit = p.Unit,
                    UnitPrice = p.UnitPrice,
                    Quantity = p.Quantity,
                    Amount = p.Amount,
                    OrderD = p.OrderD,
                    OrderNo = p.OrderNo,
                    DetailNo = p.DetailNo,
                    DispatchNo = p.DispatchNo,
                    ExpenseRoot = expenseRoot
                }).ToList();


                if (historyAllowances.Any())
                {
                    suggestedExpenses.AllowanceList.AddRange(historyAllowances);
                }
                #endregion
            }
            return(suggestedExpenses);
        }
        public SuggestedExpenseList GetSuggestedExpensesFromRoute(List <SuggestedRoute> suggestedRoutes)
        {
            var suggestedExpenses = new SuggestedExpenseList();

            suggestedExpenses.ExpenseList      = new List <CustomerPricingDetailViewModel>();
            suggestedExpenses.AllowanceList    = new List <CustomerPricingDetailViewModel>();
            suggestedExpenses.FixedExpenseList = new List <CustomerPricingDetailViewModel>();
            suggestedExpenses.OtherExpenseList = new List <CustomerPricingDetailViewModel>();
            foreach (var suggestedRoute in suggestedRoutes)
            {
                var route       = suggestedRoute;
                var expenseRoot = Convert.ToInt32(ExpenseRoot.Route).ToString();

                #region Get route expense list
                var expenseCate = Convert.ToInt32(ExpenseCategory.Expense).ToString();
                var expenses    = _routeDetailRepository.Query(
                    p => p.RouteId == route.RouteId & p.CategoryI == expenseCate &
                    p.IsUsed).ToList();

                if (expenses.Any())
                {
                    var expensesDestination = Mapper.Map <List <Route_D>, List <CustomerPricingDetailViewModel> >(expenses);
                    expensesDestination.ForEach(s => s.ExpenseRoot = expenseRoot);
                    suggestedExpenses.ExpenseList.AddRange(expensesDestination);
                }
                #endregion

                #region Get route allowance list
                var allowanceCate = Convert.ToInt32(ExpenseCategory.Allowance).ToString();
                var allowances    = _routeDetailRepository.Query(
                    p => p.RouteId == route.RouteId & p.CategoryI == allowanceCate &
                    p.IsUsed).ToList();

                if (allowances.Any())
                {
                    var allowancesDestination = Mapper.Map <List <Route_D>, List <CustomerPricingDetailViewModel> >(allowances);
                    allowancesDestination.ForEach(s => s.ExpenseRoot = expenseRoot);
                    suggestedExpenses.AllowanceList.AddRange(allowancesDestination);
                }
                #endregion

                #region Get fixed expense list
                var fixedCate     = Convert.ToInt32(ExpenseCategory.Fix).ToString();
                var fixedExpenses = _routeDetailRepository.Query(
                    p => p.RouteId == route.RouteId & p.CategoryI == fixedCate &
                    p.IsUsed).ToList();

                if (fixedExpenses.Any())
                {
                    var fixedExpensesDestination = Mapper.Map <List <Route_D>, List <CustomerPricingDetailViewModel> >(fixedExpenses);

                    fixedExpensesDestination.ForEach(s => s.ExpenseRoot = expenseRoot);
                    suggestedExpenses.FixedExpenseList.AddRange(fixedExpensesDestination);
                }
                #endregion

                #region Get other expense list
                var otherCate     = Convert.ToInt32(ExpenseCategory.Other).ToString();
                var otherExpenses = _routeDetailRepository.Query(
                    p => p.RouteId == route.RouteId & p.CategoryI == otherCate &
                    p.IsUsed).ToList();

                if (otherExpenses.Any())
                {
                    var otherExpensesDestination = Mapper.Map <List <Route_D>, List <CustomerPricingDetailViewModel> >(otherExpenses);
                    otherExpensesDestination.ForEach(s => s.ExpenseRoot = expenseRoot);
                    suggestedExpenses.OtherExpenseList.AddRange(otherExpensesDestination);
                }
                #endregion
            }
            return(suggestedExpenses);
        }