public ActionResult ProductSearch(ProductDetailRequestModel model, string returnUrl)
        {
            model.ProductId = Convert.ToInt32(Request.Form["ProductDropDown"]);
            model.ProgramId = Convert.ToInt32(Request.Form["ProgramDropDown"]);
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            // Calling WCF service.
            RateCalculatorServiceClient proxy = new RateCalculatorServiceClient();
            var res = new ProductDetailResponseModel();

            try
            {
                var result = proxy.GetLowerestProductRate(model.ProductId, model.ProgramId, model.StartDate, model.EndtDate);

                // calling directly from UI without wcf service layer. working fine.
                //var result = _productDetailBAL.GetLowerestProductRate(model.ProductId, model.ProgramId, model.StartDate, model.EndtDate);
                ViewBag.showResult = result != null ? true : false;

                if (ViewBag.showResult)
                {
                    res.ProductName  = result.ProductName;
                    res.ProgramName  = result.ProgramName;
                    res.LowerestRate = result.LowerstProductRate;
                    res.StartDate    = result.StartDate;
                    res.EndtDate     = result.EndDate;
                }
            }
            catch (Exception ex)
            {
            }
            finally
            {
                proxy.Close();
            }


            return(View("_SearchResults", res));
        }
Exemple #2
0
        public async Task <Tuple <List <ProductDetailViewModel>, int> > SearchByWarehouseAsync(ProductDetailRequestModel request)
        {
            BusinessDbContext db = base.Repository.Db as BusinessDbContext;
            var tuple            = await base.SearchAsync(request);

            var whProducts = db.WarehouseProducts.Where(x => x.ShopId == request.ShopId && x.WarehouseId == request.WarehouseId);
            var enumerable = from m in tuple.Item1
                             join wh in whProducts on m.Id equals wh.ProductDetailId into ps
                             from wh in ps.DefaultIfEmpty()
                             select new { ProductDetail = m, Quantity = wh?.OnHand ?? 0 };

            foreach (var v in enumerable)
            {
                v.ProductDetail.OnHand = v.Quantity;
            }

            var list   = enumerable.Select(x => x.ProductDetail).ToList();
            var tuple1 = new Tuple <List <ProductDetailViewModel>, int>(list, tuple.Item2);

            return(tuple1);
        }