Exemplo n.º 1
0
        public ActionResult AjaxWaitingData(DataFilter filter, int page = 1, int rows = 100)
        {
            int           warehouseID = 0, total = 0;
            List <object> dataList = new List <object>();

            if (int.TryParse(Session["warehouseId"].ToString(), out warehouseID))
            {
                Warehouses = new GenericRepository <Warehouses>(db);
                Warehouses warehouse = Warehouses.Get(warehouseID);
                if (warehouse != null && warehouse.WarehouseType.Equals((int)WarehouseTypeType.DropShip))
                {
                    /** Order Filter **/
                    var OrderFilter = db.Orders.AsNoTracking().Where(o => !o.StatusCode.Value.Equals((int)OrderStatusCode.Completed) && o.PaymentStatus.Value.Equals((int)OrderPaymentStatus2.Charged));
                    /** Shipping Method Filter **/
                    var MethodFilter             = db.ShippingMethod.AsNoTracking().Where(m => m.IsEnable && !m.IsDirectLine);
                    List <OrderJoinData> results = DataFilter(filter, OrderFilter, MethodFilter, EnumData.ProcessStatus.待出貨, warehouseID);
                    if (results.Any())
                    {
                        TimeZoneConvert   timeZoneConvert = new TimeZoneConvert();
                        EnumData.TimeZone TimeZone        = MyHelp.GetTimeZone((int)Session["TimeZone"]);

                        int length = rows;
                        int start  = (page - 1) * length;
                        total   = results.Count();
                        results = results.OrderByDescending(oData => oData.order.TimeOfOrder).Skip(start).Take(length).ToList();

                        string[] skus = results.SelectMany(oData => oData.items.Select(i => i.ProductID)).Distinct().ToArray();
                        Dictionary <string, string> skuNameList = db.Skus.AsNoTracking().Where(s => s.IsEnable.Value && skus.Contains(s.Sku)).ToDictionary(s => s.Sku, s => s.ProductName);

                        int[] itemIDs = results.SelectMany(oData => oData.items.Select(i => i.ID)).ToArray();
                        Dictionary <int, string[]> serialOfItem = db.SerialNumbers.AsNoTracking().Where(s => itemIDs.Contains(s.OrderItemID)).GroupBy(s => s.OrderItemID).ToDictionary(s => s.Key, s => s.Select(ss => ss.SerialNumber).ToArray());

                        dataList.AddRange(results.Select(oData => new
                        {
                            OrderID         = oData.order.OrderID,
                            POId            = oData.package.POId,
                            PackageID       = oData.package.ID,
                            ItemID          = oData.item.ID,
                            PaymentDate     = oData.payment != null ? timeZoneConvert.InitDateTime(oData.payment.AuditDate.Value, EnumData.TimeZone.EST).ConvertDateTime(TimeZone).ToString("MM/dd/yyyy<br />hh:mm tt") : "",
                            Sku             = oData.itemCount == 1 ? oData.item.ProductID : "Multi",
                            DisplayName     = oData.itemCount == 1 ? skuNameList[oData.item.ProductID] : "Multi",
                            ItemCount       = oData.itemCount,
                            OrderQtyTotal   = oData.items.Sum(i => i.Qty),
                            ShippingCountry = oData.address.CountryName,
                            ShippingMethod  = oData.package.ShippingMethod.Value,
                            StatusCode      = Enum.GetName(typeof(OrderStatusCode), oData.order.StatusCode.Value),
                            Comment         = oData.package.Comment,
                            SupplierComment = string.IsNullOrEmpty(oData.package.SupplierComment) ? "" : oData.package.SupplierComment,
                            Serials         = oData.items.Where(i => serialOfItem.ContainsKey(i.ID)).ToDictionary(i => i.ID, i => serialOfItem[i.ID]),
                            SerialNumber    = oData.itemCount + oData.item.Qty == 2 ? (serialOfItem.ContainsKey(oData.item.ID) ? serialOfItem[oData.item.ID].First() : "") : "Multi",
                            TrackingNumber  = string.IsNullOrEmpty(oData.package.TrackingNumber) ? "" : oData.package.TrackingNumber,
                            POInvoice       = string.IsNullOrEmpty(oData.package.POInvoice) ? "" : oData.package.POInvoice
                        }));
                    }
                }
            }

            return(Content(JsonConvert.SerializeObject(new { total, rows = dataList }), "appllication/json"));
        }
Exemplo n.º 2
0
        private TrackResult DHL_Track(CarrierAPI api, string trackingNumber)
        {
            TrackResult result = new TrackResult();

            DHL_API          DHL        = new DHL_API(api);
            TrackingResponse DHL_Result = DHL.Tracking(trackingNumber);

            TimeZoneConvert timeZone = new TimeZoneConvert();

            if (DHL_Result != null && DHL_Result.AWBInfo.Any(awb => awb.ShipmentInfo != null && !string.IsNullOrEmpty(awb.ShipmentInfo.ConsigneeName)))
            {
                List <ShipmentEvent> DHL_EventList = DHL_Result.AWBInfo.First(awb => awb.ShipmentInfo != null && !string.IsNullOrEmpty(awb.ShipmentInfo.ConsigneeName)).ShipmentInfo.Items.Skip(1).Cast <ShipmentEvent>().ToList();

                if (DHL_EventList.Any())
                {
                    if (DHL_EventList.Any(e => e.ServiceEvent.EventCode == "PU"))
                    {
                        result.PickupDate     = DHL_EventList.Where(e => e.ServiceEvent.EventCode == "PU").Select(e => timeZone.InitDateTime(e.Date.Add(e.Time.TimeOfDay), EnumData.TimeZone.TST).Utc).First();
                        result.DeliveryStatus = (int)OrderService.DeliveryStatusType.Intransit;
                    }

                    result.DeliveryNote = DHL_EventList.Select(e => timeZone.InitDateTime(e.Date.Add(e.Time.TimeOfDay), EnumData.TimeZone.TST).Utc.ToString() + " " + e.ServiceEvent.Description).Last();

                    if (DHL_EventList.Any(e => e.ServiceEvent.EventCode == "OK"))
                    {
                        result.DeliveryDate   = DHL_EventList.Where(e => e.ServiceEvent.EventCode == "OK").Select(e => timeZone.InitDateTime(e.Date.Add(e.Time.TimeOfDay), EnumData.TimeZone.TST).Utc).First();
                        result.DeliveryStatus = (int)OrderService.DeliveryStatusType.Delivered;
                    }
                }
            }
            else
            {
                result.DeliveryNote = DHL_Result.AWBInfo.First().Status.ActionStatus;
                //result.DeliveryStatus = (int)OrderService.DeliveryStatusType.Delivered;
            }

            return(result);
        }
Exemplo n.º 3
0
        public TrackResult Track(string trackingNo = null)
        {
            TrackResult result = new TrackResult();

            try
            {
                var paymentDate = orderData.PaymentDate;
                if (!orderData.PaymentDate.HasValue || orderData.PaymentDate.Equals(DateTime.MinValue))
                {
                    paymentDate = orderData.Payments?.FirstOrDefault(p => p.PaymentStatus.Value.Equals((int)PaymentStatus.Cleared))?.AuditDate;
                }
                result.PaymentDate = paymentDate.HasValue && !paymentDate.Equals(DateTime.MinValue) ? time_zone.InitDateTime(paymentDate.Value, EnumData.TimeZone.EST).Utc : paymentDate;

                if (carrierData == null)
                {
                    throw new Exception("Not found carrier!");
                }

                switch (carrierData.CarrierAPI.Type.Value)
                {
                case (byte)EnumData.CarrierType.DHL:
                    result = DHL_Track(carrierData.CarrierAPI, packageData.TrackingNumber);
                    break;

                case (byte)EnumData.CarrierType.FedEx:
                    result = FedEx_Track(carrierData.CarrierAPI, packageData.TrackingNumber);
                    break;

                case (byte)EnumData.CarrierType.Sendle:
                    result = Sendle_Track(carrierData.CarrierAPI, packageData.TrackingNumber);
                    break;

                case (byte)EnumData.CarrierType.Winit:
                    result = Winit_Track(carrierData.CarrierAPI, trackingNo ?? packageData.TrackingNumber);
                    break;
                }
            }
            catch (Exception e)
            {
                throw new Exception(orderData.OrderID + " - " + e.Message);
            }

            return(result);
        }
Exemplo n.º 4
0
        public ActionResult GetOrderData(DataFilter filter, int page = 1, int rows = 100)
        {
            int           total    = 0;
            List <object> dataList = new List <object>();

            /** Order Filter **/
            var OrderFilter = db.Orders.AsNoTracking().AsQueryable();

            if (!filter.StatusCode.Equals(null))
            {
                OrderFilter = OrderFilter.Where(o => o.StatusCode.Value.Equals(filter.StatusCode.Value));
            }
            if (!string.IsNullOrWhiteSpace(filter.OrderID))
            {
                OrderFilter = OrderFilter.Where(o => o.OrderID.ToString().Equals(filter.OrderID) || (o.OrderSource.Value.Equals(1) && (o.eBaySalesRecordNumber.Equals(filter.OrderID) || o.OrderSourceOrderId.Contains(filter.OrderID))) || (!o.OrderSource.Value.Equals(1) && o.OrderSourceOrderId.Contains(filter.OrderID)));
            }
            if (!string.IsNullOrWhiteSpace(filter.UserID))
            {
                OrderFilter = OrderFilter.Where(o => o.eBayUserID.Contains(filter.UserID));
            }
            if (!filter.CurrencyCode.Equals(null))
            {
                OrderFilter = OrderFilter.Where(o => o.OrderCurrencyCode.Value.Equals(filter.CurrencyCode.Value));
            }

            /** Package Filter **/
            var PackageFilter = db.Packages.AsNoTracking().Where(p => p.IsEnable.Value);

            if (!filter.ProccessStatus.Equals(null))
            {
                PackageFilter = PackageFilter.Where(p => p.ProcessStatus.Equals(filter.ProccessStatus.Value));
            }
            if (!filter.DeclaredTotal.Equals(0))
            {
                PackageFilter = PackageFilter.Where(p => p.DeclaredTotal.Equals(filter.DeclaredTotal));
            }

            /** Item Filter **/
            var ItemFilter = db.Items.AsNoTracking().Where(i => i.IsEnable.Value);

            if (!string.IsNullOrWhiteSpace(filter.Sku))
            {
                ItemFilter = ItemFilter.Where(i => i.ProductID.ToLower().Contains(filter.Sku.ToLower()));
            }
            if (!string.IsNullOrWhiteSpace(filter.ItemName))
            {
                ItemFilter = ItemFilter.Where(i => i.DisplayName.ToLower().Contains(filter.ItemName.ToLower()));
            }

            /** Address Filter **/
            var AddressFilter = db.Addresses.AsNoTracking().Where(a => a.IsEnable.Value);

            if (!string.IsNullOrWhiteSpace(filter.CountryCode))
            {
                AddressFilter = AddressFilter.Where(a => a.CountryCode.Equals(filter.CountryCode));
            }

            var results = OrderFilter.ToList()
                          .Join(PackageFilter, o => o.OrderID, p => p.OrderID, (o, p) => new OrderJoinData()
            {
                order = o, package = p
            })
                          .Join(ItemFilter.GroupBy(i => i.PackageID.Value), oData => oData.package.ID, i => i.Key, (oData, i) => new OrderJoinData(oData)
            {
                item = i.First(), items = i.ToList(), itemCount = i.Sum(ii => 1 + ii.KitItemCount).Value
            })
                          .Join(AddressFilter, oData => oData.order.ShippingAddress, a => a.Id, (oData, a) => new OrderJoinData(oData)
            {
                address = a
            });

            /** Payment Filter **/
            var PaymentFilter = db.Payments.AsNoTracking().Where(p => p.IsEnable.Value);

            if (!filter.PaymentDate.Equals(new DateTime()))
            {
                DateTime dateFrom = new DateTime(filter.PaymentDate.Year, filter.PaymentDate.Month, filter.PaymentDate.Day, 0, 0, 0);
                dateFrom = new TimeZoneConvert(dateFrom, MyHelp.GetTimeZone((int)Session["TimeZone"])).ConvertDateTime(EnumData.TimeZone.EST);
                DateTime dateTo = new DateTime(filter.PaymentDate.Year, filter.PaymentDate.Month, filter.PaymentDate.Day + 1, 0, 0, 0);
                dateTo        = new TimeZoneConvert(dateTo, MyHelp.GetTimeZone((int)Session["TimeZone"])).ConvertDateTime(EnumData.TimeZone.EST);
                PaymentFilter = PaymentFilter.Where(p => DateTime.Compare(p.AuditDate.Value, dateFrom) >= 0 && DateTime.Compare(p.AuditDate.Value, dateTo) < 0);

                results = results.Join(PaymentFilter, oData => oData.order.OrderID, p => p.OrderID, (oData, p) => new OrderJoinData(oData)
                {
                    payment = p
                }).ToList();
            }
            else
            {
                results = results.GroupJoin(PaymentFilter, oData => oData.order.OrderID, p => p.OrderID.Value, (oData, pg) => new { orderJoinData = oData, payment = pg.OrderBy(p => p.PaymentStatus).OrderByDescending(p => p.AuditDate.Value).Take(1) })
                          .SelectMany(o => o.payment.DefaultIfEmpty(), (o, p) => new OrderJoinData(o.orderJoinData)
                {
                    payment = p
                }).ToList();
            }

            if (results.Any())
            {
                int length = rows;
                int start  = (page - 1) * length;
                total   = results.Count();
                results = results.OrderByDescending(data => data.order.TimeOfOrder).Skip(start).Take(length).ToList();

                TimeZoneConvert   TimeZoneConvert = new TimeZoneConvert();
                EnumData.TimeZone TimeZone        = MyHelp.GetTimeZone((int)Session["TimeZone"]);

                Dictionary <int, bool> isDirectLine = db.ShippingMethod.AsNoTracking().Where(m => m.IsEnable).ToDictionary(m => m.ID, m => m.IsDirectLine);

                dataList.AddRange(results.Select(data => new
                {
                    PackageID          = data.package.ID,
                    OrderID            = data.package.OrderID.Value,
                    ParentOrderID      = data.order.ParentOrderID.Value,
                    OrderSourceOrderId = data.order.OrderSourceOrderId,
                    eBayUserID         = data.order.eBayUserID,
                    ItemCount          = data.itemCount,
                    PaymentDate        = data.payment != null ? TimeZoneConvert.InitDateTime(data.payment.AuditDate.Value, EnumData.TimeZone.EST).ConvertDateTime(TimeZone).ToString("MM/dd/yyyy<br />hh:mm tt") : "",
                    Sku               = data.itemCount == 1 ? data.item.ProductID : "Multi",
                    DisplayName       = data.itemCount == 1 ? data.item.DisplayName : "Multi",
                    ShippingCountry   = data.address.CountryName,
                    SubTotal          = data.items.Sum(i => i.Qty * i.UnitPrice).Value.ToString("N"),
                    DeclaredTotal     = data.package.DeclaredTotal != 0 ? data.package.DeclaredTotal.ToString("N") : "",
                    OrderCurrencyCode = Enum.GetName(typeof(CurrencyCodeType2), data.order.OrderCurrencyCode),
                    PaymentStatus     = Enum.GetName(typeof(OrderPaymentStatus2), data.order.PaymentStatus),
                    StatusCode        = Enum.GetName(typeof(OrderStatusCode), data.order.StatusCode),
                    Comment           = data.package.Comment ?? "",
                    ProccessStatus    = GetOrderLink(data),
                    HasCaseAction     = data.package.ProcessStatus.Equals((byte)EnumData.ProcessStatus.已出貨) && data.package.ShippingMethod.HasValue && isDirectLine.ContainsKey(data.package.ShippingMethod.Value) && isDirectLine[data.package.ShippingMethod.Value]
                }));
            }

            return(Json(new { total, rows = dataList }, JsonRequestBehavior.AllowGet));
        }
Exemplo n.º 5
0
        public ActionResult GetCaseEventData(CaseFilter filter, int page = 1, int rows = 100)
        {
            int           total    = 0;
            List <object> dataList = new List <object>();

            TimeZoneConvert timeZoneConvert = new TimeZoneConvert();

            EnumData.TimeZone TimeZone = MyHelp.GetTimeZone((int)Session["TimeZone"]);

            var CaseFilter = db.CaseEvent.AsNoTracking().AsQueryable();

            if (!string.IsNullOrEmpty(filter.OrderID))
            {
                CaseFilter = CaseFilter.Where(c => c.OrderID.ToString().Equals(filter.OrderID));
            }
            if (!string.IsNullOrEmpty(filter.LabelID))
            {
                CaseFilter = CaseFilter.Where(c => c.LabelID.ToString().Equals(filter.LabelID));
            }
            if (filter.CreateDate.HasValue)
            {
                DateTime dateFrom = timeZoneConvert.InitDateTime(filter.CreateDate.Value, TimeZone).Utc;
                DateTime dateTO   = timeZoneConvert.Utc.AddDays(1);
                CaseFilter = CaseFilter.Where(c => c.Create_at.CompareTo(dateFrom) >= 0 && c.Create_at.CompareTo(dateTO) < 0);
            }
            if (filter.RequestDate.HasValue)
            {
                DateTime dateFrom = timeZoneConvert.InitDateTime(filter.RequestDate.Value, TimeZone).Utc;
                DateTime dateTO   = timeZoneConvert.Utc.AddDays(1);
                CaseFilter = CaseFilter.Where(c => c.Request_at.HasValue && c.Request_at.Value.CompareTo(dateFrom) >= 0 && c.Request_at.Value.CompareTo(dateTO) < 0);
            }
            if (filter.ResponseDate.HasValue)
            {
                DateTime dateFrom = timeZoneConvert.InitDateTime(filter.ResponseDate.Value, TimeZone).Utc;
                DateTime dateTO   = timeZoneConvert.Utc.AddDays(1);
                CaseFilter = CaseFilter.Where(c => c.Response_at.HasValue && c.Response_at.Value.CompareTo(dateFrom) >= 0 && c.Response_at.Value.CompareTo(dateTO) < 0);
            }
            if (filter.CaseType.HasValue)
            {
                CaseFilter = CaseFilter.Where(c => c.Type.Equals(filter.CaseType.Value));
            }
            if (filter.CaseRequest.HasValue)
            {
                CaseFilter = CaseFilter.Where(c => c.Request.Equals(filter.CaseRequest.Value));
            }
            if (filter.CaseStatus.HasValue)
            {
                CaseFilter = CaseFilter.Where(c => c.Status.Equals(filter.CaseStatus.Value));
            }

            List <CaseEvent> results = CaseFilter.ToList();

            if (results.Any())
            {
                int length = rows;
                int start  = (page - 1) * length;
                total = results.Count();

                if (!string.IsNullOrEmpty(filter.Sort) && filter.Sort.Equals("RequestDate"))
                {
                    results = filter.Order.Equals("asc") ? results.OrderBy(c => c.Request_at).ToList() : results.OrderByDescending(c => c.Request_at).ToList();
                }

                Dictionary <int, string> DirectLine = db.DirectLine.Where(d => d.IsEnable).ToDictionary(d => d.ID, d => d.Abbreviation);
                Dictionary <int, string> AdminName  = db.AdminUsers.AsNoTracking().Where(u => u.IsEnable).ToDictionary(u => u.Id, u => u.Name);

                dataList.AddRange(results.Skip(start).Take(length).Select(c => new
                {
                    CaseID = c.ID,
                    c.OrderID,
                    LabelID      = DirectLine[c.Packages.Method.DirectLine].Equals("Sendle") ? string.Format("{0}-{1}-{2}", c.Packages.Items.First(i => i.IsEnable.Value).ProductID, c.OrderID, c.Packages.TrackingNumber) : c.LabelID,
                    CreateDate   = timeZoneConvert.InitDateTime(c.Create_at, EnumData.TimeZone.UTC).ConvertDateTime(TimeZone).ToString("MM/dd/yyyy tt hh:mm"),
                    RequestDate  = c.Request_at.HasValue ? timeZoneConvert.InitDateTime(c.Request_at.Value, EnumData.TimeZone.UTC).ConvertDateTime(TimeZone).ToString("MM/dd/yyyy tt hh:mm") : "",
                    ResponseDate = c.Response_at.HasValue ? timeZoneConvert.InitDateTime(c.Response_at.Value, EnumData.TimeZone.UTC).ConvertDateTime(TimeZone).ToString("MM/dd/yyyy tt hh:mm") : "",
                    CaseType     = EnumData.CaseEventTypeList()[(EnumData.CaseEventType)c.Type],
                    CaseRequest  = Enum.GetName(typeof(EnumData.CaseEventRequest), c.Request),
                    CaseStatus   = c.Status,
                    UpdateBy     = AdminName.ContainsKey(c.Update_by) ? string.Format("{0}﹙{1}﹚", AdminName[c.Update_by], DirectLine[c.Packages.Method.DirectLine]) : DirectLine[c.Packages.Method.DirectLine]
                }));
            }

            return(Json(new { total, rows = dataList }, JsonRequestBehavior.AllowGet));
        }