示例#1
0
        public virtual void Test()
        {
            if (Plugin.Current != null)
            {
                Save.Press();

                ICarrierService plugin = CreateCarrierService(this, Plugin.Current);
                if (plugin != null)
                {
                    CarrierResult <string> result = plugin.Test();
                    if (result.IsSuccess)
                    {
                        Plugin.Ask(Plugin.Current, Messages.ConnectionCarrierAskSuccessHeader, Messages.ConnectionCarrierAskSuccess, MessageButtons.OK, MessageIcon.Information);
                    }
                    else
                    {
                        StringBuilder errorMessages = new StringBuilder();

                        foreach (Message message in result.Messages)
                        {
                            errorMessages.AppendLine(message.Description);
                        }

                        if (errorMessages.Length > 0)
                        {
                            throw new PXException(PXMessages.LocalizeFormatNoPrefixNLA(Messages.TestFailed, errorMessages.ToString()));
                        }
                    }
                }
            }
        }
        private void PrepareCertificationData(CarrierPlugin cp)
        {
            ICarrierService plugin = CreateCarrierService(this, cp);

            if (plugin != null)
            {
                UploadFileMaintenance upload = PXGraph.CreateInstance <UploadFileMaintenance>();
                CarrierResult <IList <CarrierCertificationData> > result = plugin.GetCertificationData();

                if (result != null)
                {
                    StringBuilder sb = new StringBuilder();
                    foreach (Message message in result.Messages)
                    {
                        sb.AppendFormat("{0}:{1} ", message.Code, message.Description);
                    }

                    if (result.IsSuccess)
                    {
                        CarrierPlugin copy = (CarrierPlugin)Plugin.Cache.CreateCopy(cp);

                        using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
                        {
                            ZipArchive zip = new ZipArchive(ms, false);

                            foreach (CarrierCertificationData d in result.Result)
                            {
                                using (System.IO.Stream zipStream = zip.OpenWrite(string.Format("{0}.{1}", d.Description, d.Format)))
                                {
                                    zipStream.Write(d.File, 0, d.File.Length);
                                }
                            }

                            FileInfo file = new FileInfo("CertificationData.zip", null, ms.ToArray());
                            upload.SaveFile(file, FileExistsAction.CreateVersion);
                            PXNoteAttribute.SetFileNotes(Plugin.Cache, copy, file.UID.Value);
                        }

                        Plugin.Update(copy);

                        this.Save.Press();
                    }
                    else
                    {
                        throw new PXException(SO.Messages.CarrierServiceError, sb.ToString());
                    }
                }
            }
        }
示例#3
0
        private void CalculateFreightCost(bool supressErrors)
        {
            Carrier carrier = Carrier.PK.Find(Base, "UPSGROUND");

            if (carrier != null && carrier.IsExternal == true)
            {
                var _doc = new SOOrder();
                //_doc = SelectFrom<SOOrder>.Where<SOOrder.orderNbr.IsEqual<P.AsString>.And<SOOrder.orderType.IsEqual<P.AsString>>>.View.Select(Base, "SUS2100212", "SO").RowCast<SOOrder>().FirstOrDefault();
                _doc.CuryID          = Base.Quote.Current.CuryID;
                _doc.ShipVia         = "UPSGROUND";
                _doc.CuryInfoID      = Base.Quote.Current.CuryInfoID;
                _doc.DocDate         = Base.Quote.Current.DocumentDate;
                _doc.IsPackageValid  = false;
                _doc.IsManualPackage = false;
                CarrierPlugin   plugin = CarrierPlugin.PK.Find(Base, carrier.CarrierPluginID);
                ICarrierService cs     = CarrierPluginMaint.CreateCarrierService(Base, plugin);
                cs.Method = carrier.PluginMethod;

                var graph = PXGraph.CreateInstance <SOOrderEntry>();
                _doc = graph.Document.Insert(_doc);
                graph.Shipping_Address.Cache.Current = new SOShippingAddress();
                CarrierRatesExt(graph).RecalculatePackagesForOrder(graph.Document.Current);
                CarrierRequest            cr     = CarrierRatesExt(graph).BuildRateRequest(_doc);
                CarrierResult <RateQuote> result = cs.GetRateQuote(cr);

                if (result != null)
                {
                    StringBuilder sb = new StringBuilder();
                    foreach (Message message in result.Messages)
                    {
                        sb.AppendFormat("{0}:{1} ", message.Code, message.Description);
                    }

                    if (result.IsSuccess)
                    {
                        throw new PXException(result.Result.Amount.ToString());
                        //decimal baseCost = ConvertAmtToBaseCury(result.Result.Currency, arsetup.Current.DefaultRateTypeID, Document.Current.OrderDate.Value, result.Result.Amount);
                        //SetFreightCost(baseCost);
                    }
                }
            }
        }
        public virtual void UpdateRates()
        {
            if (Documents.Current != null)
            {
                CarrierRates.Cache.Clear();

                ValidatePackages();
                bool autoPackWarning = false;

                List <CarrierRequestInfo> requests = new List <CarrierRequestInfo>();
                foreach (CarrierPlugin plugin in GetApplicableCarrierPlugins())
                {
                    ICarrierService cs = CarrierPluginMaint.CreateCarrierService(Base, plugin);
                    if (cs != null)
                    {
                        CarrierRequest cRequest = BuildQuoteRequest(Documents.Current, plugin);
                        if (cRequest.PackagesEx.Count == 0)
                        {
                            PXTrace.WriteWarning(Messages.AutoPackagingZeroPackWarning, plugin.CarrierPluginID);
                            autoPackWarning = true;
                            continue;
                        }

                        requests.Add(new CarrierRequestInfo
                        {
                            Plugin  = plugin,
                            Service = cs,
                            Request = cRequest
                        });
                    }
                }

                Parallel.ForEach(requests, info => info.Result = info.Service.GetRateList(info.Request));

                int           cx            = 0;
                StringBuilder errorMessages = new StringBuilder();
                foreach (CarrierRequestInfo info in requests)
                {
                    CarrierResult <IList <RateQuote> > result = info.Result;

                    if (result.IsSuccess)
                    {
                        foreach (RateQuote item in result.Result)
                        {
                            if (item.IsSuccess && item.Currency != Documents.Current.CuryID)
                            {
                                if (string.IsNullOrEmpty(arsetup.Current.DefaultRateTypeID))
                                {
                                    throw new PXException(Messages.RateTypeNotSpecified);
                                }
                            }

                            PXSelectBase <Carrier> selectCarrier = new PXSelectReadonly <Carrier,
                                                                                         Where <Carrier.carrierPluginID, Equal <Required <Carrier.carrierPluginID> >,
                                                                                                And <Carrier.pluginMethod, Equal <Required <Carrier.pluginMethod> >,
                                                                                                     And <Carrier.isExternal, Equal <True> > > > >(Base);

                            foreach (Carrier shipVia in selectCarrier.Select(info.Plugin.CarrierPluginID, item.Method.Code))
                            {
                                var r = new SOCarrierRate
                                {
                                    LineNbr      = cx++,
                                    Method       = shipVia.CarrierID,
                                    Description  = item.Method.Description,
                                    Amount       = ConvertAmt(item.Currency, Documents.Current.CuryID, arsetup.Current.DefaultRateTypeID, Documents.Current.DocumentDate.Value, item.Amount),
                                    DeliveryDate = item.DeliveryDate
                                };

                                r.Selected = r.Method == Documents.Current.ShipVia;
                                if (item.DaysInTransit > 0)
                                {
                                    r.DaysInTransit = item.DaysInTransit;
                                }
                                r = CarrierRates.Insert(r);

                                if (!item.IsSuccess)
                                {
                                    CarrierRates.Cache.RaiseExceptionHandling(typeof(SOCarrierRate.method).Name, r, null, new PXSetPropertyException("{0}: {1}", PXErrorLevel.RowError, item.Messages[0].Code, item.Messages[0].Description));
                                }
                            }
                        }
                    }
                    else
                    {
                        foreach (Message message in result.Messages)
                        {
                            errorMessages.AppendFormat(PXMessages.LocalizeNoPrefix(Messages.ReturnedError), info.Plugin.CarrierPluginID, message.ToString());
                        }

                        if (!string.IsNullOrEmpty(result.RequestData))
                        {
                            PXTrace.WriteInformation(result.RequestData);
                        }
                    }
                }


                if (errorMessages.Length > 0)
                {
                    throw new PXException(Messages.CarrierServiceError, errorMessages.ToString());
                }

                if (autoPackWarning)
                {
                    throw new PXException(Messages.AutoPackagingIssuesCheckTrace);
                }
            }
        }
示例#5
0
        protected virtual IEnumerable PrintFedexLabel(PXAdapter adapter)
        {
            var shiporder = Base.Document.Current;
            var carrier   = Carrier.PK.Find(Base, shiporder.ShipVia);

            if (!UseCarrierService(shiporder, carrier))
            {
                return(adapter.Get());
            }

            if (shiporder.ShippedViaCarrier != true)
            {
                // Build Fedex Request object
                ICarrierService cs            = CarrierMaint.CreateCarrierService(Base, shiporder.ShipVia);
                CarrierRequest  cr            = Base.CarrierRatesExt.BuildRequest(shiporder);
                var             warehouseInfo = SelectFrom <INSite> .Where <INSite.siteID.IsEqual <P.AsInt> > .View
                                                .Select(Base, shiporder.SiteID).RowCast <INSite>().FirstOrDefault();

                // Replace ShipTo Info to DCL warehouse
                Address warehouseAddress = PXSelect <Address, Where <Address.addressID, Equal <Required <Address.addressID> > > > .Select(Base, warehouseInfo?.AddressID);

                Contact warehouseContact = PXSelect <Contact, Where <Contact.contactID, Equal <Required <Contact.contactID> > > > .Select(Base, warehouseInfo?.ContactID);

                cr.Destination        = warehouseAddress;
                cr.DestinationContact = warehouseContact;

                if (cr.Packages.Count > 0)
                {
                    // Get Fedex web service data
                    CarrierResult <ShipResult> result = cs.Ship(cr);

                    if (result != null)
                    {
                        StringBuilder sb = new StringBuilder();
                        foreach (Message message in result.Messages)
                        {
                            sb.AppendFormat("{0}:{1} ", message.Code, message.Description);
                        }

                        if (result.IsSuccess)
                        {
                            using (PXTransactionScope ts = new PXTransactionScope())
                            {
                                UploadFileMaintenance upload = PXGraph.CreateInstance <UploadFileMaintenance>();

                                foreach (PackageData pd in result.Result.Data)
                                {
                                    if (pd.Image != null)
                                    {
                                        string   fileName = string.Format("Label #{0}.{1}", pd.TrackingNumber, pd.Format);
                                        FileInfo file     = new FileInfo(fileName, null, pd.Image);
                                        try
                                        {
                                            upload.SaveFile(file);
                                        }
                                        catch (PXNotSupportedFileTypeException exc)
                                        {
                                            throw new PXException(exc, Messages.NotSupportedFileTypeFromCarrier, pd.Format);
                                        }
                                        PXNoteAttribute.SetFileNotes(Base.Document.Cache, Base.Document.Current, file.UID.Value);
                                    }
                                    Base.Document.UpdateCurrent();
                                }

                                Base.Save.Press();
                                ts.Complete();
                            }
                            //show warnings:
                            if (result.Messages.Count > 0)
                            {
                                Base.Document.Cache.RaiseExceptionHandling <SOShipment.curyFreightCost>(shiporder, shiporder.CuryFreightCost,
                                                                                                        new PXSetPropertyException(sb.ToString(), PXErrorLevel.Warning));
                            }
                        }
                        else
                        {
                            if (!string.IsNullOrEmpty(result.RequestData))
                            {
                                PXTrace.WriteError(result.RequestData);
                            }

                            Base.Document.Cache.RaiseExceptionHandling <SOShipment.curyFreightCost>(shiporder, shiporder.CuryFreightCost,
                                                                                                    new PXSetPropertyException(Messages.CarrierServiceError, PXErrorLevel.Error, sb.ToString()));

                            throw new PXException(Messages.CarrierServiceError, sb.ToString());
                        }
                    }
                }
            }

            return(adapter.Get());
        }