Example #1
0
        private List <Order> GetOrders(params Func <OrderResult, bool>[] filters)
        {
            List <Order>            orders          = new List <Order>();
            Dictionary <int, Order> orderDictionary = new Dictionary <int, Order>();

            var q = from ebayOrder in m_context.EbayOrder
                    join ebayOrdersLog in m_context.EbayOrderslog
                    on ebayOrder.EbayId equals ebayOrdersLog.EbayId
                    into logs
                    from log in logs.DefaultIfEmpty()
                    from ebayOrderDetail in m_context.EbayOrderdetail
                    from ebayTopMenu in m_context.EbayTopmenu
                    where ebayOrder.EbayOrdersn == ebayOrderDetail.EbayOrdersn
                    where ebayTopMenu.Id == ebayOrder.EbayStatus
                    orderby ebayOrder.EbayId, ebayOrderDetail.Sku, log.Operationtime descending
                select new OrderResult
            {
                ebayOrder       = ebayOrder,
                ebayOrderDetail = ebayOrderDetail,
                ebayTopMenu     = ebayTopMenu,
                log             = log
            };

            IEnumerable <OrderResult> q1 = q;

            if (filters != null)
            {
                foreach (var filter in filters)
                {
                    q1 = q1.Where(filter);
                }
            }

            var q2 = from a in q1
                     select new
            {
                OrderId        = a.ebayOrder.EbayId,
                OrderSn        = a.ebayOrder.EbayOrdersn,
                UserId         = a.ebayOrder.EbayUserid,
                UserName       = a.ebayOrder.EbayUsername,
                PhoneNo        = a.ebayOrder.EbayPhone,
                Email          = a.ebayOrder.EbayUsermail,
                Address1       = a.ebayOrder.EbayStreet,
                Address2       = a.ebayOrder.EbayStreet1,
                City           = a.ebayOrder.EbayCity,
                State          = a.ebayOrder.EbayState,
                PostCode       = a.ebayOrder.EbayPostcode,
                Country        = a.ebayOrder.EbayCountryname,
                WarehouseId    = a.ebayOrder.EbayWarehouse,
                AccountName    = a.ebayOrder.EbayAccount,
                Carrier        = a.ebayOrder.EbayCarrier,
                TrackingNumber = a.ebayOrder.EbayTracknumber,
                Status         = a.ebayTopMenu.Name,
                StatusId       = a.ebayOrder.EbayStatus.GetValueOrDefault(),
                OrderShipFee   = a.ebayOrder.Ordershipfee.GetValueOrDefault(),
                CreatedTime    = a.ebayOrder.EbayCreatedtime.GetValueOrDefault(),
                PaidTime       = a.ebayOrder.EbayPaidtime,
                ShippedTime    = a.ebayOrder.ShippedTime,
                MarketTime     = a.ebayOrder.EbayMarkettime,
                RecordNumber   = a.ebayOrder.Recordnumber,
                OrderDetailId  = a.ebayOrderDetail.EbayId,
                SKU            = a.ebayOrderDetail.Sku,
                Quantity       = a.ebayOrderDetail.EbayAmount,
                ItemPrice      = a.ebayOrderDetail.EbayItemprice,
                ItemId         = a.ebayOrderDetail.EbayItemid,
                ItemName       = a.ebayOrderDetail.EbayItemtitle,
                ShippingFee    = a.ebayOrderDetail.Shipingfee,
                Log            = a.log
            };

            foreach (var row in q2)
            {
                Order order = null;
                if (orderDictionary.ContainsKey(row.OrderId))
                {
                    order = orderDictionary[row.OrderId];
                }
                else
                {
                    order                = new Order();
                    order.OrderId        = row.OrderId;
                    order.OrderSn        = row.OrderSn;
                    order.UserId         = row.UserId;
                    order.UserName       = row.UserName;
                    order.PhoneNo        = row.PhoneNo;
                    order.Email          = row.Email;
                    order.Address1       = row.Address1;
                    order.Address2       = row.Address2;
                    order.City           = row.City;
                    order.State          = row.State;
                    order.PostCode       = row.PostCode;
                    order.Country        = row.Country;
                    order.WarehouseId    = row.WarehouseId;
                    order.AccountName    = row.AccountName;
                    order.Carrier        = row.Carrier;
                    order.TrackingNumber = row.TrackingNumber;
                    order.Status         = row.Status;
                    order.StatusId       = row.StatusId;
                    order.ShippingFee    = row.OrderShipFee;
                    order.CreatedTime    = DateUtils.ConvertUnixTimeToDateTime(row.CreatedTime);
                    if (row.PaidTime != null)
                    {
                        int  paidTime = 0;
                        bool success  = int.TryParse(row.PaidTime, out paidTime);
                        if (success)
                        {
                            order.PaidTime = DateUtils.ConvertUnixTimeToDateTime(paidTime);
                        }
                    }
                    if (row.ShippedTime != null)
                    {
                        int  shippedTime = 0;
                        bool success     = int.TryParse(row.ShippedTime, out shippedTime);
                        if (success)
                        {
                            order.ShippedTime = DateUtils.ConvertUnixTimeToDateTime(shippedTime);
                        }
                    }
                    if (row.MarketTime != null)
                    {
                        int  marketTime = 0;
                        bool success    = int.TryParse(row.ShippedTime, out marketTime);
                        if (success)
                        {
                            order.MarketTime = DateUtils.ConvertUnixTimeToDateTime(marketTime);
                        }
                    }
                    order.RecordNumber             = row.RecordNumber;
                    orderDictionary[order.OrderId] = order;
                    orders.Add(order);
                }

                bool exist = false;
                foreach (OrderDetail detail in order.OrderDetails)
                {
                    if (detail.Id == row.OrderDetailId)
                    {
                        exist = true;
                        break;
                    }
                }

                if (!exist)
                {
                    OrderDetail orderDetail = new OrderDetail();
                    orderDetail.Id  = row.OrderDetailId;
                    orderDetail.SKU = row.SKU;
                    int  quantity = 0;
                    bool success  = int.TryParse(row.Quantity, out quantity);
                    if (!success || quantity < 1)
                    {
                        continue;
                    }
                    orderDetail.Quantity = quantity;

                    double price = 0.0;
                    success = double.TryParse(row.ItemPrice, out price);
                    if (!success)
                    {
                        continue;
                    }
                    orderDetail.Price = price;

                    double shippingFee = 0.0;
                    if (row.ShippingFee != null && row.ShippingFee.Trim().Length > 0)
                    {
                        success = double.TryParse(row.ShippingFee, out shippingFee);
                        if (!success)
                        {
                            continue;
                        }
                    }
                    orderDetail.ShippingFee = shippingFee;

                    orderDetail.ItemId   = row.ItemId;
                    orderDetail.ItemName = row.ItemName;

                    order.OrderDetails.Add(orderDetail);
                }

                if (row.Log != null)
                {
                    exist = false;
                    foreach (OrderLog orderLog in order.OrderLogs)
                    {
                        if (orderLog.Id == row.Log.Id)
                        {
                            exist = true;
                            break;
                        }
                    }

                    if (!exist)
                    {
                        OrderLog orderLog = new OrderLog();
                        orderLog.Id    = row.Log.Id;
                        orderLog.Notes = row.Log.Notes;
                        orderLog.User  = row.Log.Operationuser;
                        orderLog.Time  = DateUtils.ConvertUnixTimeToDateTime(row.Log.Operationtime);
                        order.OrderLogs.Add(orderLog);
                    }
                }
            }
            return(orders);
        }