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")); }
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); }
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); }
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)); }
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)); }