public override ProcessShipmentResult ProcessShipment(Order order, ShippingLabelType shippingLabelType) { //return new ProcessShipmentResult() // { // Success = false, // ErrorMessages = new List<string>() { "CustomShipping does not process shipments" } // }; return(new ProcessShipmentResult() { Success = true }); }
public abstract ProcessShipmentResult ProcessShipment(Order order, ShippingLabelType shippingLabelType);
public override ProcessShipmentResult ProcessShipment(Order order, ShippingLabelType shippingLabelType) { ErrorMessages.Clear(); ProcessShipmentResult result = new ProcessShipmentResult(); FedExServiceType serviceType; if (!WA.Enum <FedExServiceType> .TryParse(order.ShippingServiceOption, out serviceType)) { throw new ApplicationException(string.Format("Unable to determine FedEx service type for '{0}'", order.ShippingServiceOption)); } ContactInfo sender = GetSender(); ContactInfo recipient = new ContactInfo() { FirstName = order.CustomerFirstName, LastName = order.CustomerLastName, Email = order.CustomerEmail, Phone = order.ShipTelephone, CompanyName = order.ShipRecipientBusinessName, Address = new WA.Shipping.AddressInfo() { StreetLines = new List <string>() { order.ShipAddress1 }, City = order.ShipCity, RegionCode = order.ShipRegion, PostalCode = order.ShipPostalCode, CountryCode = order.ShipCountryCode } }; if (!string.IsNullOrEmpty(order.ShipAddress2)) { recipient.Address.StreetLines.Add(order.ShipAddress2); } List <PackageInfo> packages = StoreOrderItemsToPackageList(order.OrderItemCollectionByOrderId).ToList(); ShippingDocumentImageType fedexLabelType = ShippingDocumentImageType.PDF; switch (shippingLabelType) { case ShippingLabelType.PNG: fedexLabelType = ShippingDocumentImageType.PNG; break; case ShippingLabelType.PDF: fedexLabelType = ShippingDocumentImageType.PDF; break; } ProcessShipmentReply reply = fedExApi.ProcessShipment(sender, recipient, packages, serviceType, fedexLabelType); if ((reply.HighestSeverity != WA.Shipping.FedExShipService.NotificationSeverityType.ERROR) && (reply.HighestSeverity != WA.Shipping.FedExShipService.NotificationSeverityType.FAILURE)) { List <TrackingId> trackingIds = new List <TrackingId>(); foreach (CompletedPackageDetail pkg in reply.CompletedShipmentDetail.CompletedPackageDetails) { //---- Tracking #'s trackingIds.AddRange(pkg.TrackingIds); //foreach (WA.Shipping.FedExShipService.TrackingId trackingId in pkg.TrackingIds) //{ // //Console.WriteLine(string.Format(@"Tracking #: {0}", trackingId.TrackingNumber)); // trackingNums.Add(trackingId.TrackingNumber); //} //---- Package Info/Weights //foreach (WA.Shipping.FedExShipService.PackageRateDetail ratedPackage in pkg.PackageRating.PackageRateDetails) //{ // Console.WriteLine("\nRate details"); // Console.WriteLine("\nRate Type: " + ratedPackage.RateType); // if (ratedPackage.BillingWeight != null) // Console.WriteLine("Billing weight {0} {1}", ratedPackage.BillingWeight.Value, ratedPackage.BillingWeight.Units); // if (ratedPackage.BaseCharge != null) // Console.WriteLine("Base charge {0} {1}", ratedPackage.BaseCharge.Amount, ratedPackage.BaseCharge.Currency); // if (ratedPackage.NetCharge != null) // Console.WriteLine("Net charge {0} {1}", ratedPackage.NetCharge.Amount, ratedPackage.NetCharge.Currency); // if (ratedPackage.Surcharges != null) // { // // Individual surcharge for each package // foreach (WA.Shipping.FedExShipService.Surcharge surcharge in ratedPackage.Surcharges) // { // Console.WriteLine("{0} surcharge {1} {2}", surcharge.SurchargeType, surcharge.Amount.Amount, surcharge.Amount.Currency); // } // } // if (ratedPackage.TotalSurcharges != null) // { // Console.WriteLine("Total surcharge {0} {1}", ratedPackage.TotalSurcharges.Amount, ratedPackage.TotalSurcharges.Currency); // } //} //---- Route / Transit Details //Console.WriteLine("\nRouting details"); //Console.WriteLine("URSA prefix {0} suffix {1}", reply.CompletedShipmentDetail.RoutingDetail.UrsaPrefixCode, reply.CompletedShipmentDetail.RoutingDetail.UrsaSuffixCode); //Console.WriteLine("Service commitment {0} Airport ID {1}", reply.CompletedShipmentDetail.RoutingDetail.DestinationLocationId, reply.CompletedShipmentDetail.RoutingDetail.AirportId); //if (reply.CompletedShipmentDetail.RoutingDetail.DeliveryDaySpecified) //{ // Console.WriteLine("Delivery day " + reply.CompletedShipmentDetail.RoutingDetail.DeliveryDay); //} //if (reply.CompletedShipmentDetail.RoutingDetail.DeliveryDateSpecified) //{ // Console.WriteLine("Delivery date " + reply.CompletedShipmentDetail.RoutingDetail.DeliveryDate.ToShortDateString()); //} //Console.WriteLine("Transit time " + reply.CompletedShipmentDetail.RoutingDetail.TransitTime); //---- Label //WA.Shipping.FedExShipService.CompletedShipmentDetail completedShipmentDetail = reply.CompletedShipmentDetail; if (pkg.Label.Parts[0].Image != null) { result.ShippingLabelBytes = pkg.Label.Parts[0].Image; result.LabelType = WA.Enum <ShippingLabelType> .TryParseOrDefault(fedexLabelType.ToString(), ShippingLabelType.PDF); //string labelFilename = string.Format(@"{0}.pdf", pkg.TrackingIds[0].TrackingNumber); // Save label buffer to file //using (FileStream labelFile = new FileStream(labelFilename, FileMode.Create)) //{ // labelFile.Write(pkg.Label.Parts[0].Image, 0, pkg.Label.Parts[0].Image.Length); // labelFile.Close(); //} //Console.WriteLine(@"Label file written to ""{0}""", labelFilename); } } if (trackingIds.Count > 0) { result.TrackingNumber = trackingIds.Select(t => string.Format("{0}: {1}", t.TrackingIdType, t.TrackingNumber)).ToList().ToDelimitedString(", "); } else { result.TrackingNumber = trackingIds.Select(t => t.TrackingNumber).First(); } result.Success = true; } else { foreach (var error in reply.Notifications) { if (error.Severity == WA.Shipping.FedExShipService.NotificationSeverityType.ERROR || error.Severity == WA.Shipping.FedExShipService.NotificationSeverityType.FAILURE) { ErrorMessages.Add(string.Format(@"Code: {0}, Error: {1}", error.Code, error.Message)); } } result.ErrorMessages.AddRange(ErrorMessages); } return(result); }