예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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);
        }