示例#1
0
        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);
        }