public BoxManage(HttpSessionStateBase session) { db = new QDLogisticsEntities(); TimeZoneConvert = new TimeZoneConvert(); Session = session; }
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")); }
internal PageList <OutboundOrderData> GetOutboundOrderDatas(string pageNum = "1", string pageSize = "100", int days = 7) { TimeZoneConvert timeZone = new TimeZoneConvert(); DateTime endDate = timeZone.ConvertDateTime(QDLogistics.Commons.EnumData.TimeZone.TST); DateTime startDate = endDate.AddDays(-days); var data = new { dateOrderedStartDate = startDate.ToString("yyyy-MM-dd"), dateOrderedEndDate = endDate.ToString("yyyy-MM-dd"), status = "valid", pageSize, pageNum }; return(GetAPI <PageList <OutboundOrderData> >("queryOutboundOrderList", data)); }
public OrderResponse Create(Packages package) { Addresses address = package.Orders.Addresses; Dictionary <string, StockKeepingUnit.SkuData> SkuData; using (StockKeepingUnit stock = new StockKeepingUnit()) { var IDs = package.Items.Where(i => i.IsEnable.Value).Select(i => i.ProductID).Distinct().ToArray(); SkuData = stock.GetSkuData(IDs); } DateTime pickup_date = new TimeZoneConvert().ConvertDateTime(QDLogistics.Commons.EnumData.TimeZone.AEST); decimal weight = package.Items.Where(i => i.IsEnable.Value).Sum(i => (i.Qty.Value * (decimal)(SkuData[i.ProductID]?.Weight ?? i.Skus.ShippingWeight)) / 1000); OrderRequest request = new OrderRequest() { pickup_date = MyHelp.SkipWeekend(pickup_date.AddDays(2)).ToString("yyyy-MM-dd"), description = "Merchandise", kilogram_weight = weight.ToString(), customer_reference = package.OrderID.Value.ToString(), sender = SetSender(), receiver = new AddressDetail() { instructions = weight > 0.5M ? "Must have signature on delivery. Thank you!" : null, contact = new Contact() { name = string.Join(" ", new string[] { address.FirstName, address.MiddleInitial, address.LastName }), phone = address.PhoneNumber, company = address.CompanyName }, address = new Address() { address_line1 = address.StreetLine1, address_line2 = address.StreetLine2, suburb = address.City, postcode = address.PostalCode, state_name = address.StateName, country = address.CountryName } } }; return(Request <OrderResponse>("orders", "POST", request)); }
protected virtual void Dispose(bool disposing) { if (Disposed) { return; } if (disposing) { } db.Dispose(); db = null; boxData = null; TimeZoneConvert = null; Session = null; Disposed = true; }
public void CheckWorkDays(int OrderID) { int workDays = 0; var order = db.Orders.Find(OrderID); var paymentDate = new TimeZoneConvert(order.Payments.FirstOrDefault()?.AuditDate ?? order.TimeOfOrder.Value, EnumData.TimeZone.EST).Utc; var updateDate = new DateTime(2019, 4, 24, 8, 1, 0, DateTimeKind.Utc); var checkPoint = new DateTime(paymentDate.Year, paymentDate.Month, paymentDate.Day, 7, 0, 0, DateTimeKind.Utc); do { if (paymentDate.CompareTo(checkPoint) < 0) { if (!checkPoint.DayOfWeek.Equals(DayOfWeek.Saturday) && !checkPoint.DayOfWeek.Equals(DayOfWeek.Sunday)) { workDays++; } } checkPoint = checkPoint.AddDays(1); } while (checkPoint.CompareTo(updateDate) < 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); }
public Received SearchOrder(string pageNum = "1", string pageSize = "100", int days = 7) { TimeZoneConvert timeZone = new TimeZoneConvert(); DateTime endDate = timeZone.ConvertDateTime(QDLogistics.Commons.EnumData.TimeZone.TST); DateTime startDate = endDate.AddDays(-days); queryOutboundOrderList_data data = new queryOutboundOrderList_data() { dateOrderedStartDate = startDate.ToString("yyyy-MM-dd"), dateOrderedEndDate = endDate.ToString("yyyy-MM-dd"), status = "valid", pageSize = pageSize, pageNum = pageNum }; queryOutboundOrderList request = _RequestInit <queryOutboundOrderList>("queryOutboundOrderList", JsonConvert.SerializeObject(data)); request.data = data; Received result = Resfun.funresult(request, api_url); return(result); }
public void RecordOrderSkuStatement(int OrderID, string State) { Orders order = db.Orders.Find(OrderID); DateTime Date = DateTime.UtcNow; if (State.Equals("New")) { var paymentDate = order.PaymentDate.HasValue && !order.PaymentDate.Equals(DateTime.MinValue) ? order.PaymentDate : order.Payments.FirstOrDefault(p => p.IsEnable.Value && p.PaymentStatus.Value.Equals((int)PaymentStatus.Cleared))?.AuditDate; Date = new TimeZoneConvert(paymentDate ?? order.TimeOfOrder.Value, EnumData.TimeZone.EST).Utc; } MyHelp.Log("SkuStatement", OrderID, string.Format("State: {0}, Date: {1}", State, Date.ToString("yyyy-MM-dd HH:mm:ss"))); List <dynamic> data = new List <dynamic>(); data.AddRange(order.Items.Where(i => i.IsEnable.Value).Select(i => new { OrderID, SCID = i.ShipFromWarehouseID.Value, SkuNo = i.ProductID.Split(splitChar)[0], Qty = i.Qty.Value, State, Date = Date.ToString("yyyy-MM-dd HH:mm:ss") }).ToList()); if (!data.Any()) { throw new Exception("沒有找到任何資料"); } Response <object> response = Request <object>("Ajax/OrderLogList", "post", data); if (!response.status) { throw new Exception("PO Error: " + response.message); } }
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 string Update_Tracking(Packages package) { string Message = ""; try { MyHelp.Log("Packages", package.ID, string.Format("訂單【{0}】包裹SC更新", package.OrderID), Session); if (!SCWS.Is_login) { throw new Exception("SC is not logged in!"); } OrderData orderData = SCWS.Get_OrderData(package.OrderID.Value); Order SC_order = orderData.Order; Package SC_package = SC_order.Packages.FirstOrDefault(p => p.ID.Equals(package.ID)); if (SC_package == null) { MyHelp.Log("Packages", package.ID, "Not find package on SC website!", Session); package.IsEnable = false; SC_package = SC_order.Packages.First(p => p.ID.Equals(SC_order.Items.First(i => i.ID.Equals(package.Items.First(ii => ii.IsEnable.Value).ID)).PackageID)); var newPackage = db.Packages.AsNoTracking().First(p => p.ID.Equals(package.ID)); newPackage.ID = SC_package.ID; db.Packages.Add(newPackage); foreach (var item in package.Items) { item.PackageID = newPackage.ID; } foreach (var pick in db.PickProduct.Where(pick => pick.PackageID.Value.Equals(package.ID))) { pick.PackageID = newPackage.ID; } if (package.Label != null) { package.Label.PackageID = newPackage.ID; } db.SaveChanges(); MyHelp.Log("Packages", package.ID, string.Format("Change package {0} to {1}", package.ID, newPackage.ID), Session); package = newPackage; } string carrier = ""; try { if (package.Method == null) { throw new Exception("Not find method!"); } if (package.Method.Carriers == null) { throw new Exception("Not find carrir"); } carrier = package.Method.Carriers.Name; } catch (Exception e) { MyHelp.Log("Packages", package.ID, e.Message, Session); carrier = db.ShippingMethod.Find(package.ShippingMethod.Value).Carriers.Name; } SCWS.Update_PackageShippingStatus(SC_package, (package.UploadTracking ? package.TrackingNumber : ""), carrier); if (db.Packages.AsNoTracking().Where(p => p.IsEnable.Value && p.OrderID.Value.Equals(package.OrderID.Value)).All(p => p.ProcessStatus.Equals((byte)EnumData.ProcessStatus.已出貨))) { if (SCWS.Update_OrderShippingStatus(SC_order, carrier)) { var updatePackage = db.Packages.Find(package.ID); updatePackage.WorkDays = 0; var paymentDate = new TimeZoneConvert(package.Orders.Payments.FirstOrDefault()?.AuditDate ?? package.Orders.TimeOfOrder.Value, EnumData.TimeZone.EST).Utc; var updateDate = DateTime.UtcNow; var checkPoint = new DateTime(paymentDate.Year, paymentDate.Month, paymentDate.Day, 7, 0, 0, DateTimeKind.Utc); do { if (paymentDate.CompareTo(checkPoint) < 0) { if (!checkPoint.DayOfWeek.Equals(DayOfWeek.Saturday) && !checkPoint.DayOfWeek.Equals(DayOfWeek.Sunday)) { updatePackage.WorkDays++; } } checkPoint = checkPoint.AddDays(1); } while (checkPoint.CompareTo(updateDate) < 0); db.SaveChanges(); MyHelp.Log("Packages", package.ID, string.Format("訂單【{0}】SC完成出貨", package.OrderID), Session); } } foreach (Items item in package.Items.Where(i => i.IsEnable.Value).ToList()) { if (item.SerialNumbers.Any()) { SCWS.Update_ItemSerialNumber(item.ID, item.SerialNumbers.Select(s => s.SerialNumber).ToArray()); } } Message = Sync_Order(package.OrderID.Value); } catch (Exception e) { string[] serials = package.Items.Where(i => i.IsEnable.Value).SelectMany(i => i.SerialNumbers.Select(s => s.SerialNumber)).ToArray(); MyHelp.ErrorLog(e, string.Format("訂單包裹【{0}】更新失敗: #serials {1}", package.OrderID, string.Join(",", serials)), package.OrderID.ToString()); Message = e.InnerException != null && !string.IsNullOrEmpty(e.InnerException.Message) ? e.InnerException.Message : e.Message; } return(Message); }
public ActionResult Dispatch(int[] packageIDs, int?method, string tracking) { AjaxResult result = new AjaxResult(); try { if (!packageIDs.Any()) { throw new Exception("沒有給訂單!"); } int warehouseID = 0; if (!int.TryParse(Session["warehouseId"].ToString(), out warehouseID)) { throw new Exception("找不到出貨倉!"); } SC_WebService SCWS = new SC_WebService(Session["ApiUserName"].ToString(), Session["ApiPassword"].ToString()); if (!SCWS.Is_login) { throw new Exception("SC is not login"); } Packages = new GenericRepository <Packages>(db); IRepository <Box> Box = new GenericRepository <Box>(db); IRepository <DirectLineLabel> Label = new GenericRepository <DirectLineLabel>(db); TaskFactory factory = System.Web.HttpContext.Current.Application.Get("TaskFactory") as TaskFactory; ThreadTask threadTask = new ThreadTask("Dropship DL 訂單 Dispatch"); lock (factory) { threadTask.AddWork(factory.StartNew(Session => { threadTask.Start(); string message = ""; HttpSessionStateBase session = (HttpSessionStateBase)Session; try { TimeZoneConvert timeZoneConvert = new TimeZoneConvert(); List <Packages> dispatchList = new List <Packages>(); List <string> errorList = new List <string>(); List <Packages> packageList = db.Packages.AsNoTracking().Where(p => p.IsEnable.Value && packageIDs.Contains(p.ID)).ToList(); DirectLine directLine = db.DirectLine.Find(packageList[0].Method.DirectLine); string boxID = string.Format("{0}-{1}", directLine.Abbreviation, timeZoneConvert.Utc.ToString("yyyyMMdd")); int count = db.Box.Where(b => b.IsEnable && b.DirectLine.Equals(directLine.ID) && b.BoxID.Contains(boxID)).Select(b => b.MainBox).Distinct().Count() + 1; byte[] Byte = BitConverter.GetBytes(count); Byte[0] += 64; boxID = string.Format("{0}-{1}", boxID, System.Text.Encoding.ASCII.GetString(Byte.Take(1).ToArray())); foreach (Packages package in packageList) { DirectLineLabel label = package.Label; OrderData order = SCWS.Get_OrderData(package.OrderID.Value); if (CheckOrderStatus(package, order.Order)) { ThreadTask uploadPOTask = new ThreadTask(string.Format("直發商待出貨區 - 更新訂單【{0}】以及PO【{1}】資料至SC", package.OrderID, package.POId), session); lock (factory) { uploadPOTask.AddWork(factory.StartNew(() => { uploadPOTask.Start(); string error = ""; try { SyncProcess Sync = new SyncProcess(session, factory); error = Sync.Update_PurchaseOrder(package.ID, false); if (string.IsNullOrEmpty(error)) { //if (directLine.Abbreviation.Equals("ECOF")) //{ // ThreadTask SyncTask = new ThreadTask(string.Format("Direct Line 訂單【{0}】SC更新", package.OrderID)); // SyncTask.AddWork(factory.StartNew(() => // { // SyncTask.Start(); // SyncProcess sync = new SyncProcess(session); // return sync.Update_Tracking(package); // })); //} //else //{ // foreach (Items item in package.Items.Where(i => i.IsEnable.Value).ToList()) // { // if (item.SerialNumbers.Any()) SCWS.Update_ItemSerialNumber(item.ID, item.SerialNumbers.Select(s => s.SerialNumber).ToArray()); // } //} foreach (Items item in package.Items.Where(i => i.IsEnable.Value).ToList()) { if (item.SerialNumbers.Any()) { SCWS.Update_ItemSerialNumber(item.ID, item.SerialNumbers.Select(s => s.SerialNumber).ToArray()); } } } } catch (Exception e) { error = e.InnerException != null && !string.IsNullOrEmpty(e.InnerException.Message) ? e.InnerException.Message : e.Message; } return(error); })); } package.ProcessStatus = (int)EnumData.ProcessStatus.已出貨; package.BoxID = label.BoxID = boxID; label.Status = (byte)EnumData.LabelStatus.正常; dispatchList.Add(package); } else { MyHelp.Log("DirectLineLabel", label.LabelID, string.Format("標籤【{0}】狀態異常", label.LabelID), session); package.Orders.StatusCode = (int)order.Order.StatusCode; package.Orders.PaymentStatus = (int)order.Order.PaymentStatus; label.Status = (byte)EnumData.LabelStatus.鎖定中; if (order.Order.StatusCode.Equals((int)OrderStatusCode.Canceled)) { label.Status = (byte)EnumData.LabelStatus.作廢; SerialNumbers = new GenericRepository <SerialNumbers>(db); foreach (var ss in SerialNumbers.GetAll().Where(s => s.OrderID.Equals(package.OrderID))) { SerialNumbers.Delete(ss); } ; } errorList.Add(string.Format("標籤【{0}】狀態異常,請重新取出!", package.OrderID.Value)); } Packages.Update(package, package.ID); Label.Update(label, label.LabelID); } if (dispatchList.Any()) { Box box = new Box() { IsEnable = true, BoxID = boxID, MainBox = boxID, DirectLine = directLine.ID, FirstMileMethod = method ?? 0, WarehouseFrom = warehouseID, ShippingStatus = method.HasValue ? (byte)EnumData.DirectLineStatus.運輸中 : (byte)EnumData.DirectLineStatus.已到貨, BoxType = (byte)EnumData.DirectLineBoxType.DirectLine, TrackingNumber = tracking, Create_at = timeZoneConvert.Utc }; db.Entry(box).State = System.Data.Entity.EntityState.Added; db.SaveChanges(); MyHelp.Log("Box", boxID, string.Format("Box【{0}】建立成功", boxID), session); MyHelp.Log("Box", box.BoxID, string.Format("寄送 Box【{0}】DL資料", box.BoxID), session); SendMailToCarrier(box, db.DirectLine.AsNoTracking().First(d => d.ID.Equals(box.DirectLine))); MyHelp.Log("Box", box.BoxID, string.Format("Box【{0}】完成出貨", box.BoxID), session); } Packages.SaveChanges(); if (errorList.Any()) { message = string.Join("\n", errorList.ToArray()); } } catch (Exception e) { message = e.InnerException != null && !string.IsNullOrEmpty(e.InnerException.Message) ? e.InnerException.Message : e.Message; } return(message); }, HttpContext.Session)); } } catch (Exception e) { result.status = false; result.message = e.InnerException != null && !string.IsNullOrEmpty(e.InnerException.Message) ? e.InnerException.Message : e.Message; } return(Json(result, JsonRequestBehavior.AllowGet)); }
private List <OrderJoinData> DataFilter(DataFilter filter, IQueryable <Orders> OrderFilter, IQueryable <ShippingMethod> MethodFilter, EnumData.ProcessStatus processStatus, int warehouseID) { /** Order Filter **/ if (!filter.StatusCode.Equals(null)) { OrderFilter = OrderFilter.Where(o => o.StatusCode.Value.Equals(filter.StatusCode.Value)); } if (!filter.ShippingStatus.Equals(null)) { OrderFilter = OrderFilter.Where(o => o.ShippingStatus.Equals(filter.ShippingStatus)); } if (!filter.Source.Equals(null)) { OrderFilter = OrderFilter.Where(o => o.OrderSource.Equals(filter.Source)); } if (!string.IsNullOrWhiteSpace(filter.OrderID)) { OrderFilter = OrderFilter.Where(o => o.OrderID.ToString().Equals(filter.OrderID)); } if (!string.IsNullOrWhiteSpace(filter.UserID)) { OrderFilter = OrderFilter.Where(o => !string.IsNullOrWhiteSpace(o.eBayUserID) && o.eBayUserID.Contains(filter.UserID)); } if (!string.IsNullOrWhiteSpace(filter.SourceID)) { OrderFilter = OrderFilter.Where(o => (o.OrderSource.Equals(1) && (o.eBaySalesRecordNumber.Equals(filter.SourceID) || o.OrderSourceOrderId.Contains(filter.SourceID))) || (o.OrderSource.Equals(4) && o.OrderSourceOrderId.Equals(filter.SourceID))); } /** Package Filter **/ var PackageFilter = db.Packages.AsNoTracking().Where(p => p.IsEnable.Value && p.ProcessStatus.Equals((byte)processStatus)); if (!filter.MethodID.Equals(null)) { PackageFilter = PackageFilter.Where(p => p.ShippingMethod.Value.Equals(filter.MethodID.Value)); } if (!string.IsNullOrWhiteSpace(filter.Tracking)) { PackageFilter = PackageFilter.Where(p => p.TrackingNumber.ToLower().Contains(filter.Tracking.ToLower())); } /** Item Filter **/ var ItemFilter = db.Items.AsNoTracking().Where(i => i.IsEnable.Value && i.ShipFromWarehouseID.Value.Equals(warehouseID)); if (!string.IsNullOrWhiteSpace(filter.ItemName)) { ItemFilter = ItemFilter.Where(i => i.DisplayName.ToLower().Contains(filter.ItemName.ToLower()) || i.ProductID.Equals(filter.ItemName)); } /** Address Filter **/ var AddressFilter = db.Addresses.AsNoTracking().Where(a => a.IsEnable.Value); if (!string.IsNullOrWhiteSpace(filter.Country)) { AddressFilter = AddressFilter.Where(a => a.CountryCode.Equals(filter.Country)); } /** Payment Filter **/ var PaymentFilter = db.Payments.AsNoTracking().Where(p => p.IsEnable.Value && p.PaymentType.Value.Equals((int)PaymentRecordType.Payment)); if (!filter.DateFrom.Equals(new DateTime())) { DateTime dateFrom = new DateTime(filter.DateFrom.Year, filter.DateFrom.Month, filter.DateFrom.Day, 0, 0, 0); dateFrom = new TimeZoneConvert(dateFrom, MyHelp.GetTimeZone((int)Session["TimeZone"])).ConvertDateTime(EnumData.TimeZone.EST); PaymentFilter = PaymentFilter.Where(p => DateTime.Compare(p.AuditDate.Value, dateFrom) >= 0); } if (!filter.DateTo.Equals(new DateTime())) { DateTime dateTo = new DateTime(filter.DateTo.Year, filter.DateTo.Month, filter.DateTo.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, dateTo) < 0); } return(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 => ii.Qty + ii.KitItemCount).Value }) .Join(AddressFilter, oData => oData.order.ShippingAddress, a => a.Id, (oData, a) => new OrderJoinData(oData) { address = a }) .Join(MethodFilter, oData => oData.package.ShippingMethod, m => m.ID, (oData, m) => new OrderJoinData(oData) { method = m }) .GroupJoin(PaymentFilter, oData => oData.order.OrderID, p => p.OrderID.Value, (oData, p) => new { orderJoinData = oData, payment = p.Take(1) }) .SelectMany(o => o.payment.DefaultIfEmpty(), (o, p) => new OrderJoinData(o.orderJoinData) { payment = p }).ToList()); }
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)); }