/// <summary> /// search by postcode /// </summary> /// <param name="page"></param> /// <param name="pageSize"></param> /// <param name="customerId"></param> /// <param name="filter"></param> /// <returns></returns> public async Task <ViewResult <PageModel <DeliveryAddrModel> > > Search(int?page, int?pageSize, int customerId, string filter = null) { var result = new ViewResult <PageModel <DeliveryAddrModel> >(); try { var addrs = await _deliveryAddrRepository.GetAddrsByCustomerId(customerId); int currentPage = page.Value; int currentPageSize = pageSize.Value; List <DeliveryAddrModel> deliveryAddrModel = null; int totalAddrModels = new int(); if (!string.IsNullOrEmpty(filter)) { filter = filter.Trim().ToLower(); deliveryAddrModel = addrs.Select(x => x.ToDeliveryAddrModel()).Where(c => c.PostCode.ToLower().Contains(filter)).OrderBy(c => c.PostCode) .Skip(currentPage * currentPageSize) .Take(currentPageSize) .ToList(); totalAddrModels = addrs.Count(c => c.PostCode.ToLower().Contains(filter)); } else { deliveryAddrModel = addrs.Select(x => x.ToDeliveryAddrModel()) .OrderBy(c => c.PostCode) .Skip(currentPage * currentPageSize) .Take(currentPageSize) .ToList(); totalAddrModels = addrs.Count(); } result.Data = new PageModel <DeliveryAddrModel>() { Page = currentPage, TotalCount = totalAddrModels, TotalPages = (int)Math.Ceiling((decimal)totalAddrModels / currentPageSize), Items = deliveryAddrModel }; } catch (Exception ex) { result.Status = -1; result.Message = ex.Message; Logger.WriteErrorLog("DeliveryAddrService", "Search", ex); } return(result); }
/// <summary> /// get deleivery address by customer id /// </summary> /// <param name="id"></param> /// <returns></returns> public async Task <MulitViewResult <OrderDevliveryAddrModel> > GetDeliveryAddrsByCustomerId(int id) { var result = new MulitViewResult <OrderDevliveryAddrModel>(); try { //get customer all delivery address var deliveryAddrs = await _deliveryAddressRepository.GetAddrsByCustomerId(id); //get customer order delivery address var orderDeliveryAddrs = await _orderAddrRepository.GetOrderAddrByCustomerId(id); //customer has no delivery address if (deliveryAddrs == null || deliveryAddrs.Count < 1) { result.Status = -2; result.Message = "Please contact admin to configure address"; return(result); } var deliveryAddrsModel = deliveryAddrs.Select(x => x.ToOrderDevliveryAddrModel()).ToList(); //customer has no order address if (orderDeliveryAddrs == null || orderDeliveryAddrs.Count < 1) { result.Datas = deliveryAddrsModel; return(result); } //need to caculate usage rate foreach (var orderAddress in orderDeliveryAddrs) { var deliveryAddrModel = deliveryAddrsModel.FirstOrDefault(x => x.Id == orderAddress.AddrId); if (deliveryAddrModel == null) { continue; } deliveryAddrModel.Count++; } result.Datas = deliveryAddrsModel.OrderByDescending(x => x.Count).ToList(); } catch (Exception ex) { result.Status = -1; result.Message = ex.Message; Logger.WriteErrorLog("OrderService", "GetDeliveryAddrsByCustomerId", ex); } return(result); }