public ActionResult DirectLineEdit(int?id, [Bind(Include = "start,length,search")] RouteValue routeValue) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } if (!MyHelp.CheckAuth("shipping", "directLine", EnumData.AuthType.Edit)) { RedirectToAction("index", "main"); } using (IRepository <DirectLine> DirectLine = new GenericRepository <DirectLine>()) { DirectLine directLine = DirectLine.Get(id.Value); if (directLine == null) { return(HttpNotFound()); } ViewBag.routeValue = routeValue; return(View(directLine)); } }
public MainPage() { InitializeComponent(); bot = new DirectLine(DirectLineKey); bot.OnNewMessage += Bot_OnNewMessage; }
public ActionResult DirectLineEdit(int id, [Bind(Include = "start,length,search")] RouteValue routeValue) { if (!MyHelp.CheckAuth("shipping", "directLine", EnumData.AuthType.Edit)) { RedirectToAction("index", "main"); } using (IRepository <DirectLine> DirectLine = new GenericRepository <DirectLine>()) { DirectLine directLine = DirectLine.Get(id); if (directLine == null) { return(HttpNotFound()); } if (TryUpdateModel(directLine) && ModelState.IsValid) { directLine.CountryName = MyHelp.GetCountries().First(c => c.TwoCode.Equals(directLine.CountryCode)).Name; DirectLine.SaveChanges(); MyHelp.Log("DirectLine", directLine.ID, "編輯DL運輸廠商"); return(RedirectToAction("directLine", "shipping", routeValue)); } ViewBag.routeValue = routeValue; return(View(directLine)); } }
public Box GetCurrentBox(DirectLine directLine, int warehouseID, int methodID = 0) { MyHelp.Log("Box", null, string.Format("取得當前未出貨的{0} Box", directLine.Abbreviation), Session); boxData = db.Box.Where(b => b.IsEnable && !b.IsReserved && b.DirectLine.Equals(directLine.ID) && b.WarehouseFrom.Equals(warehouseID) && b.FirstMileMethod.Equals(methodID) && b.ShippingStatus.Equals((byte)EnumData.DirectLineStatus.未發貨)) .OrderByDescending(b => b.Create_at).FirstOrDefault(); if (boxData == null) { MyHelp.Log("Box", null, string.Format("開始建立【{0}】新Box", directLine.Abbreviation), Session); string boxID = string.Format("{0}-{1}", directLine.Abbreviation, TimeZoneConvert.Utc.ToString("yyyyMMdd")); int count = db.Box.AsNoTracking().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; boxData = new Box() { IsEnable = true, BoxID = string.Format("{0}-{1}", boxID, System.Text.Encoding.ASCII.GetString(Byte.Take(1).ToArray())), DirectLine = directLine.ID, FirstMileMethod = methodID, WarehouseFrom = warehouseID, BoxType = (byte)EnumData.DirectLineBoxType.DirectLine, Create_at = TimeZoneConvert.Utc }; boxData.MainBox = boxData.BoxID; db.Entry(boxData).State = System.Data.Entity.EntityState.Added; db.SaveChanges(); MyHelp.Log("Box", boxData.BoxID, string.Format("Box【{0}】建立完成", boxData.BoxID), Session); } return(boxData); }
public ActionResult DirectLineCreate() { if (!MyHelp.CheckAuth("shipping", "directLine", EnumData.AuthType.Insert)) { return(RedirectToAction("index", "main")); } using (IRepository <DirectLine> DirectLine = new GenericRepository <DirectLine>()) { DirectLine newDirectLine = new DirectLine() { IsEnable = false }; DirectLine.Create(newDirectLine); DirectLine.SaveChanges(); MyHelp.Log("DirectLine", newDirectLine.ID, "新增DL廠商"); return(RedirectToAction("directLineEdit", new { id = newDirectLine.ID })); } }
public ActionResult DirectLineDelete(int id, [Bind(Include = "start,length,search")] RouteValue routeValue) { if (!MyHelp.CheckAuth("shipping", "directLine", EnumData.AuthType.Delete)) { RedirectToAction("index", "main"); } using (IRepository <DirectLine> DirectLine = new GenericRepository <DirectLine>()) { DirectLine directLine = DirectLine.Get(id); if (directLine == null) { return(HttpNotFound()); } directLine.IsEnable = false; DirectLine.Update(directLine, directLine.ID); DirectLine.SaveChanges(); MyHelp.Log("DirectLine", directLine.ID, "刪除DL運輸廠商"); return(RedirectToAction("directLine", "shipping", routeValue)); } }
private void FedEx_Test(string BoxID) { var boxList = db.Box.Where(b => b.IsEnable && b.MainBox.Equals(BoxID)).ToList(); ShippingMethod method = db.ShippingMethod.Find(boxList.First().FirstMileMethod); DirectLine directLine = db.DirectLine.Find(boxList.First().DirectLine); CarrierAPI api = method.Carriers.CarrierAPI; FedEx_API FedEx = new FedEx_API(api); var result = FedEx.CreateBox(boxList, method, directLine); if (result.HighestSeverity.Equals(FedExShipService.NotificationSeverityType.SUCCESS)) { var Data = result.CompletedShipmentDetail.CompletedPackageDetails.First(); string TrackingNumber = Data.TrackingIds.First().TrackingNumber; //System.IO.File.WriteAllBytes(@"G:\Downloads\FedEx_Test3.pdf", Crop(Data.Label.Parts.First().Image, 29f, 324f, 319f, 762f)); //System.IO.File.WriteAllBytes(@"G:\Downloads\FedEx_Test4.pdf", Data.Label.Parts.First().Image); var zpl = Data.Label.Parts.First().Image; string str = Encoding.ASCII.GetString(zpl); var request = (HttpWebRequest)WebRequest.Create("http://api.labelary.com/v1/printers/8dpmm/labels/4x6.75/"); request.Method = "POST"; request.Accept = "application/pdf"; // omit this line to get PNG images back request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = zpl.Length; var requestStream = request.GetRequestStream(); requestStream.Write(zpl, 0, zpl.Length); requestStream.Close(); try { var response = (HttpWebResponse)request.GetResponse(); var responseStream = response.GetResponseStream(); var fileStream = System.IO.File.Create(@"G:\Downloads\FedEx_Test5.pdf"); // change file name for PNG images responseStream.CopyTo(fileStream); responseStream.Close(); fileStream.Close(); } catch (WebException e) { Console.WriteLine("Error: {0}", e.Status); } } iTextSharp.text.pdf.PdfReader.unethicalreading = true; // Reads the PDF document using (iTextSharp.text.pdf.PdfReader pdfReader = new iTextSharp.text.pdf.PdfReader(@"G:\Downloads\FedEx_Test5.pdf")) { using (MemoryStream ms = new MemoryStream()) { // Create a new document //using (iTextSharp.text.Document doc = // new iTextSharp.text.Document(new iTextSharp.text.Rectangle(288f,432f))) using (iTextSharp.text.Document doc = new iTextSharp.text.Document(iTextSharp.text.PageSize.A4)) { // Make a copy of the document iTextSharp.text.pdf.PdfSmartCopy smartCopy = new iTextSharp.text.pdf.PdfSmartCopy(doc, ms) { PdfVersion = iTextSharp.text.pdf.PdfWriter.VERSION_1_7 }; smartCopy.CloseStream = false; // Open the newly created document doc.Open(); // Loop through all pages of the source document for (int i = pdfReader.NumberOfPages; i >= 1; i--) { doc.NewPage();// net necessary line // Get a page var page = pdfReader.GetPageN(i); // Copy the content and insert into the new document var copiedPage = smartCopy.GetImportedPage(pdfReader, i); smartCopy.AddPage(copiedPage); if (i.Equals(1)) { doc.NewPage(); smartCopy.AddPage(copiedPage); } } smartCopy.FreeReader(pdfReader); smartCopy.Close(); ms.Position = 0; System.IO.File.WriteAllBytes(@"G:\Downloads\FedEx_Test6.pdf", ms.GetBuffer()); // Close the output document doc.Close(); } } } }
public BotConnector(IDirectLineClient client, IOptions <DirectLine> botClientSettings) { this.client = client; this.botClientSettings = botClientSettings.Value; }
public void SendMailToCarrier(Box box, DirectLine directLine) { List <Items> itemsList = box.Packages.Where(p => p.IsEnable.Value).SelectMany(p => p.Items.Where(i => i.IsEnable.Value)).ToList(); if (itemsList.Any()) { string basePath = HostingEnvironment.MapPath("~/FileUploads"); string sendMail = "*****@*****.**"; string mailTitle; string mailBody; string[] receiveMails; string[] ccMails = new string[] { "*****@*****.**", "*****@*****.**", "*****@*****.**" }; switch (directLine.Abbreviation) { case "IDS": case "IDS (US)": MyHelp.Log("PickProduct", null, "寄送IDS出貨通知"); receiveMails = new string[] { "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**" }; mailTitle = "To IDS Peter and Cherry - 1 parcels-sent out"; mailBody = string.Format("{0}<br /><br />Box 1 will send out", string.Join("<br />", box.DirectLineLabel.Where(l => l.IsEnable).Select(l => l.LabelID))); bool IDS_Status = MyHelp.Mail_Send(sendMail, receiveMails, ccMails, mailTitle, mailBody, true, null, null, false); if (IDS_Status) { MyHelp.Log("PickProduct", null, mailTitle); } else { MyHelp.Log("PickProduct", null, string.Format("{0} 寄送失敗", mailTitle)); } break; case "ECOF": MyHelp.Log("PickProduct", null, "寄送ECOF出貨通知"); receiveMails = new string[] { "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**" }; var packageList = box.Packages.Where(p => p.IsEnable.Value).ToList(); mailTitle = string.Format("DISPATCHED: {0}, {1}pcs", box.TrackingNumber, packageList.Count()); mailBody = string.Format("Tracking {0}({1}pcs, {2}<br />", box.TrackingNumber, packageList.Count(), box.BoxID); mailBody += string.Join("<br />", box.Packages.Where(p => p.IsEnable.Value).Select(p => string.Format("{0}-{1}-{2}", p.Items.First().ProductID, p.OrderID.Value, p.TrackingNumber)).ToArray()); List <Tuple <Stream, string> > ECOF_File = new List <Tuple <Stream, string> >(); var memoryStream = new MemoryStream(); using (var file = new ZipFile()) { foreach (Packages package in box.Packages.Where(p => p.IsEnable.Value).ToList()) { string AWB_File = Path.Combine(basePath, package.FilePath, string.Format("{0}-{1}-{2}.pdf", package.Items.First(i => i.IsEnable.Value).ProductID, package.OrderID, package.TrackingNumber)); if (!System.IO.File.Exists(AWB_File)) { System.IO.File.Copy(Path.Combine(basePath, package.FilePath, "AirWaybill.pdf"), AWB_File); } file.AddFile(AWB_File, ""); } file.Save(memoryStream); } memoryStream.Seek(0, SeekOrigin.Begin); ECOF_File.Add(new Tuple <Stream, string>(memoryStream, "Labels.zip")); bool ECOF_Status = MyHelp.Mail_Send(sendMail, receiveMails, ccMails, mailTitle, mailBody, true, null, ECOF_File, false); if (ECOF_Status) { MyHelp.Log("PickProduct", null, mailTitle); } else { MyHelp.Log("PickProduct", null, string.Format("{0} 寄送失敗", mailTitle)); } break; } } }
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)); }
public ShipmentValidateResponse CreateBox(Box box, DirectLine directLine) { ShipmentValidateResponse result; ShipmentValidateRequestEA shipment = new ShipmentValidateRequestEA(); shipment.Request = requsetInit(); //shipment.NewShipper = YesNo1.N; //shipment.NewShipperSpecified = true; shipment.LanguageCode = "tw"; shipment.PiecesEnabled = PiecesEnabled.Y; shipment.PiecesEnabledSpecified = true; shipment.Reference = new Reference1[] { new Reference1() { ReferenceID = box.BoxID } }; shipment.LabelImageFormat = LabelImageFormat.PDF; shipment.LabelImageFormatSpecified = true; shipment.RequestArchiveDoc = YesNo1.Y; shipment.RequestArchiveDocSpecified = true; shipment.Label = new Label() { LabelTemplate = "8X4_A4_PDF" }; shipment.Billing = new Billing1() { ShipperAccountNumber = api_account, ShippingPaymentType = ShipmentPaymentType.S, BillingAccountNumber = api_account, DutyPaymentType = DutyTaxPaymentType1.S, DutyPaymentTypeSpecified = true, DutyAccountNumber = api_account }; Contact2 contact = new Contact2() { PersonName = directLine.ContactName, PhoneNumber = directLine.PhoneNumber }; shipment.Consignee = new Consignee1() { CompanyName = !string.IsNullOrEmpty(directLine.CompanyName) ? directLine.CompanyName : contact.PersonName, AddressLine = new string[] { directLine.StreetLine1, directLine.StreetLine2 }, City = directLine.City, Division = directLine.StateName, PostalCode = directLine.PostalCode, CountryCode = directLine.CountryCode, CountryName = directLine.CountryName, Contact = contact }; List <Items> itemList = box.Packages.Where(p => p.IsEnable.Value).SelectMany(p => p.Items.Where(i => i.IsEnable.Value)).ToList(); List <Piece2> pieceList = new List <Piece2>(); pieceList.Add(new Piece2() { PackageType = PackageType1.YP, Weight = itemList.Sum(i => i.Qty.Value * ((decimal)i.Skus.Weight / 1000)), PieceContents = itemList.First().Skus.ProductType.ProductTypeName }); shipment.ShipmentDetails = new ShipmentDetails2() { NumberOfPieces = pieceList.Count().ToString(), Pieces = pieceList.ToArray(), Weight = pieceList.Sum(p => p.Weight), WeightUnit = WeightUnit.K, GlobalProductCode = "P", LocalProductCode = "P", Date = DateTime.Now, Contents = string.Join(", ", itemList.Select(i => i.Skus.ProductType.ProductTypeName).Distinct().ToArray()), DoorTo = DoorTo.DD, DoorToSpecified = true, DimensionUnit = DimensionUnit.C, DimensionUnitSpecified = true, //InsuredAmount = "0.00", PackageType = PackageType1.YP, IsDutiable = YesNo1.Y, IsDutiableSpecified = true, CurrencyCode = Enum.GetName(typeof(QDLogistics.OrderService.CurrencyCodeType2), box.Packages.First().Orders.OrderCurrencyCode.Value) }; shipment.Dutiable = new Dutiable1() { DeclaredValue = box.Packages.Sum(p => p.DeclaredTotal).ToString(), DeclaredCurrency = shipment.ShipmentDetails.CurrencyCode, TermsOfTrade = "DDP" }; shipment.Shipper = new Shipper1() { ShipperID = api_account, CompanyName = "Zhi You Wan LTD", AddressLine = new string[] { "No.51, Sec.3 Jianguo N. Rd.,", "South Dist.," }, City = "Taichung City", PostalCode = "403", CountryCode = "TW", CountryName = "Taiwan", Contact = new Contact2() { PersonName = "Huai Wei Ho", PhoneNumber = "0423718118" } }; shipment.SpecialService = new SpecialService1[] { new SpecialService1() { SpecialServiceType = "DD", ChargeValue = shipment.Dutiable.DeclaredValue, CurrencyCode = shipment.Dutiable.DeclaredCurrency } }; XmlSerializer serializer = new XmlSerializer(typeof(ShipmentValidateResponse)); string request = SendRequest(shipment); using (TextReader reader = new StringReader(request)) { try { result = (ShipmentValidateResponse)serializer.Deserialize(reader); } catch (Exception e) { TextReader errorReader = new StringReader(request); XmlSerializer errorSerializer = new XmlSerializer(typeof(ShipmentValidateErrorResponse)); ShipmentValidateErrorResponse error = errorSerializer.Deserialize(errorReader) as ShipmentValidateErrorResponse; errorReader.Dispose(); throw new Exception(string.Join("; ", error.Response.Status.Condition.Select(c => c.ConditionData))); } } return(result); }
public ProcessShipmentReply CreateBox(List <Box> boxList, ShippingMethod method, DirectLine directLine) { ProcessShipmentRequest request = _shipmentInit(); request.TransactionDetail = new QDLogistics.FedExShipService.TransactionDetail(); request.TransactionDetail.CustomerTransactionId = "*** Process Shipment Request ***"; request.RequestedShipment = new RequestedShipment() { ShipTimestamp = DateTime.Today, DropoffType = DropoffType.REGULAR_PICKUP, ServiceType = (QDLogistics.FedExShipService.ServiceType)method.MethodType, PackagingType = (QDLogistics.FedExShipService.PackagingType)method.BoxType, Shipper = _shipperInit(), ShippingChargesPayment = new Payment() { PaymentType = PaymentType.SENDER, Payor = new Payor() { ResponsibleParty = _shipperInit() } }, PackageCount = boxList.Count().ToString() }; request.RequestedShipment.Recipient = new Party() { Contact = new QDLogistics.FedExShipService.Contact() { PersonName = directLine.ContactName, CompanyName = directLine.CompanyName, PhoneNumber = directLine.PhoneNumber }, Address = new QDLogistics.FedExShipService.Address() { StreetLines = new string[] { directLine.StreetLine1, directLine.StreetLine2 }, City = directLine.City, StateOrProvinceCode = directLine.StateName, PostalCode = directLine.PostalCode, CountryName = directLine.CountryName, CountryCode = directLine.CountryCode } }; int NumberOfPieces = 1; string[] IDS = new string[] { "IDS", "IDS (US)" }; string currency = IDS.Contains(directLine.Abbreviation) ? "USD" : Enum.GetName(typeof(QDLogistics.OrderService.CurrencyCodeType2), boxList[0].Packages.First(p => p.IsEnable.Value).Orders.OrderCurrencyCode.Value); //string currency = Enum.GetName(typeof(QDLogistics.OrderService.CurrencyCodeType2), box.Packages.First(p => p.IsEnable.Value).Orders.OrderCurrencyCode.Value); var commodityList = new List <QDLogistics.FedExShipService.Commodity>(); var itemLineList = new List <RequestedPackageLineItem>(); QDLogistics.FedExShipService.Money customsValue; Dictionary <string, StockKeepingUnit.SkuData> SkuData; using (StockKeepingUnit stock = new StockKeepingUnit()) { var allPackages = boxList.SelectMany(b => b.Packages.Where(p => p.IsEnable.Value)).ToList(); customsValue = new QDLogistics.FedExShipService.Money() { Currency = currency, Amount = allPackages.Sum(p => p.DeclaredTotal) }; var IDs = allPackages.SelectMany(p => p.Items.Where(i => i.IsEnable.Value)).Select(i => i.ProductID).Distinct().ToArray(); SkuData = stock.GetSkuData(IDs); } foreach (Box box in boxList) { List <Items> itemList = box.Packages.Where(p => p.IsEnable.Value).SelectMany(p => p.Items.Where(i => i.IsEnable.Value)).ToList(); QDLogistics.FedExShipService.Commodity commodity = new QDLogistics.FedExShipService.Commodity { NumberOfPieces = boxList.Count().ToString(), Description = string.Join(", ", itemList.Select(i => i.Skus.ProductType.ProductTypeName).Distinct().ToArray()), CountryOfManufacture = "CN", Weight = new QDLogistics.FedExShipService.Weight() { Units = request.RequestedShipment.Shipper.Address.CountryCode.Equals("US") ? QDLogistics.FedExShipService.WeightUnits.LB : QDLogistics.FedExShipService.WeightUnits.KG, Value = itemList.Sum(i => i.Qty.Value * ((decimal)(SkuData[i.ProductID]?.Weight ?? i.Skus.ShippingWeight) / (request.RequestedShipment.Shipper.Address.CountryCode.Equals("US") ? 453 : 1000))) }, Quantity = 1, QuantityUnits = "EA", UnitPrice = new QDLogistics.FedExShipService.Money() { Currency = currency, Amount = box.Packages.Where(p => p.IsEnable.Value).Sum(p => p.DeclaredTotal) }, CustomsValue = customsValue, QuantitySpecified = true }; commodityList.Add(commodity); itemLineList.Add(new RequestedPackageLineItem() { SequenceNumber = NumberOfPieces++.ToString(), InsuredValue = new QDLogistics.FedExShipService.Money() { Amount = 0, Currency = currency }, Weight = commodity.Weight, CustomerReferences = new CustomerReference[] { new CustomerReference() { CustomerReferenceType = CustomerReferenceType.CUSTOMER_REFERENCE, Value = box.BoxID } } }); } request.RequestedShipment.TotalWeight = new QDLogistics.FedExShipService.Weight() { Units = request.RequestedShipment.Shipper.Address.CountryCode.Equals("US") ? QDLogistics.FedExShipService.WeightUnits.LB : QDLogistics.FedExShipService.WeightUnits.KG, Value = commodityList.Select(c => c.Weight).Sum(w => w.Value) }; request.RequestedShipment.CustomsClearanceDetail = new CustomsClearanceDetail() { DutiesPayment = new Payment() { PaymentType = PaymentType.SENDER, Payor = new Payor() { ResponsibleParty = _shipperInit() } }, DocumentContent = InternationalDocumentContentType.DOCUMENTS_ONLY, Commodities = new QDLogistics.FedExShipService.Commodity[1], DocumentContentSpecified = true }; request.RequestedShipment.RequestedPackageLineItems = new RequestedPackageLineItem[1]; request.RequestedShipment.LabelSpecification = new LabelSpecification() { LabelOrder = LabelOrderType.SHIPPING_LABEL_FIRST, LabelFormatType = LabelFormatType.COMMON2D, ImageType = ShippingDocumentImageType.ZPLII, LabelStockType = LabelStockType.STOCK_4X6, LabelPrintingOrientation = LabelPrintingOrientationType.BOTTOM_EDGE_OF_TEXT_FIRST, LabelOrderSpecified = true, ImageTypeSpecified = true, LabelStockTypeSpecified = true, LabelPrintingOrientationSpecified = true }; ProcessShipmentReply reply = new ProcessShipmentReply(); using (ShipPortTypeClient client = new ShipPortTypeClient()) { var endpoint = client.Endpoint; ConsoleOutputBehavior consoleOutputBehavior = new ConsoleOutputBehavior(); client.Endpoint.Behaviors.Add(consoleOutputBehavior); try { var basePath = HostingEnvironment.MapPath("~/FileUploads"); var filePath = Path.Combine(basePath, "export", "box", boxList[0].Create_at.ToString("yyyy/MM/dd"), boxList[0].MainBox); if (!Directory.Exists(filePath)) { Directory.CreateDirectory(filePath); } for (int i = 0; i < itemLineList.Count(); i++) { if (!i.Equals(0)) { request.RequestedShipment.TotalWeight = null; request.RequestedShipment.MasterTrackingId = reply.CompletedShipmentDetail.MasterTrackingId; } request.RequestedShipment.CustomsClearanceDetail.CustomsValue = commodityList[i].CustomsValue; request.RequestedShipment.CustomsClearanceDetail.Commodities[0] = commodityList[i]; request.RequestedShipment.RequestedPackageLineItems[0] = itemLineList[i]; reply = client.processShipment(request); if (reply.HighestSeverity.Equals(QDLogistics.FedExShipService.NotificationSeverityType.ERROR) || reply.HighestSeverity.Equals(QDLogistics.FedExShipService.NotificationSeverityType.FAILURE)) { throw new Exception(string.Join("\n", reply.Notifications.Select(n => n.Message).ToArray())); } boxList[i].TrackingNumber = reply.CompletedShipmentDetail.CompletedPackageDetails.First().TrackingIds.Select(t => t.TrackingNumber).First(); var content = reply.CompletedShipmentDetail.CompletedPackageDetails.First().Label.Parts.First().Image; System.Net.HttpWebRequest webRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create("http://api.labelary.com/v1/printers/8dpmm/labels/4x6/"); webRequest.Method = "POST"; webRequest.Accept = "application/pdf"; webRequest.ContentType = "application/x-www-form-urlencoded"; webRequest.ContentLength = content.Length; using (Stream requestStream = webRequest.GetRequestStream()) { requestStream.Write(content, 0, content.Length); System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)webRequest.GetResponse(); using (Stream responseStream = response.GetResponseStream()) { using (FileStream fileStream = File.Create(Path.Combine(filePath, boxList[i].BoxID + ".pdf"))) { responseStream.CopyTo(fileStream); } } } } } catch (Exception e) { QDLogistics.FedExShipService.Notification notification = new QDLogistics.FedExShipService.Notification(); if (!string.IsNullOrEmpty(consoleOutputBehavior.ConsoleOutputInspector.ResponseXML)) { XElement element = XElement.Parse(consoleOutputBehavior.ConsoleOutputInspector.ResponseXML); notification.Message = element.Attributes("Message").Any() ? element.Attributes("Message").First().Value : element.Attributes("Desc").First().Value; } else { notification.Message = e.Message; } reply = new ProcessShipmentReply() { Notifications = new QDLogistics.FedExShipService.Notification[] { notification } }; } } return(reply); }