public virtual decimal ConvertLinearValue(decimal value, CarrierPlugin plugin)
        {
            var linearUnit = commonsetup.Current.LinearUOM;

            if (string.IsNullOrEmpty(linearUnit))
            {
                throw new PXSetPropertyException(CS.Messages.CompanyLinearUOMIsEmpty);
            }
            return(ConvertValue(value, linearUnit, plugin.LinearUOM));
        }
        protected virtual void ValidatePlugin(CarrierPlugin plugin)
        {
            if (plugin == null)
            {
                throw new PXException(Messages.CarrierPluginWithIdNotFound);
            }

            if (string.IsNullOrEmpty(plugin.UOM))
            {
                throw new PXException(Messages.CarrierWeightUOMIsEmpty, plugin.CarrierPluginID);
            }

            if (string.IsNullOrEmpty(plugin.LinearUOM))
            {
                throw new PXException(Messages.CarrierLinearUOMIsEmpty, plugin.CarrierPluginID);
            }
        }
        protected virtual CarrierBox BuildCarrierPackage(SOPackageInfoEx boxInfo, CarrierPlugin plugin)
        {
            decimal weightInStandardUnit = ConvertWeightValue(boxInfo.GrossWeight ?? 0, plugin);

            CarrierBox box = new CarrierBox(0, weightInStandardUnit);

            box.DeclaredValue  = boxInfo.DeclaredValue.GetValueOrDefault();
            box.CarrierPackage = boxInfo.CarrierBox;
            box.Length         = ConvertLinearValue(boxInfo.Length ?? 0, plugin);
            box.Width          = ConvertLinearValue(boxInfo.Width ?? 0, plugin);
            box.Height         = ConvertLinearValue(boxInfo.Height ?? 0, plugin);
            if (boxInfo.COD == true)
            {
                box.COD = boxInfo.DeclaredValue ?? 1;
            }
            return(box);
        }
        protected virtual CarrierRequest BuildRateRequest(Document doc)
        {
            if (string.IsNullOrEmpty(doc.ShipVia))
            {
                return(null);
            }

            Carrier carrier = Carrier.PK.Find(Base, doc.ShipVia);

            if (carrier == null)
            {
                throw new PXException(Messages.CarrierWithIdNotFound);
            }

            if (carrier.IsExternal != true)
            {
                return(null);
            }

            CarrierPlugin plugin = CarrierPlugin.PK.Find(Base, carrier.CarrierPluginID);

            ValidatePlugin(plugin);

            List <string> methods = GetCarrierMethods(plugin.CarrierPluginID);

            IList <SOPackageEngine.PackSet> packSets = GetPackages(doc, suppressRecalc: true);

            if (packSets.Count == 0)
            {
                throw new PXException(Messages.AtleastOnePackageIsRequired);
            }

            List <CarrierBoxEx> boxes = new List <CarrierBoxEx>();

            foreach (SOPackageEngine.PackSet packSet in packSets)
            {
                INSite  shipToWarehouse  = INSite.PK.Find(Base, packSet.SiteID);
                Address warehouseAddress = PXSelect <Address, Where <Address.addressID, Equal <Required <Address.addressID> > > > .Select(Base, shipToWarehouse.AddressID);

                boxes.Add(BuildCarrierBoxes(packSet.Packages, warehouseAddress, carrier.PluginMethod, plugin));
            }

            return(GetCarrierRequest(doc, GetUnitsType(plugin), methods, boxes));
        }
示例#5
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);
                    }
                }
            }
        }
        protected virtual CarrierRequest BuildQuoteRequest(Document doc, CarrierPlugin plugin)
        {
            ValidatePlugin(plugin);

            List <string> methods = GetCarrierMethods(plugin.CarrierPluginID);

            List <CarrierBoxEx> boxes = new List <CarrierBoxEx>();

            foreach (string method in methods)
            {
                IList <SOPackageEngine.PackSet> packSets = GetPackages(doc);

                foreach (SOPackageEngine.PackSet packSet in packSets)
                {
                    INSite  shipToWarehouse  = INSite.PK.Find(Base, packSet.SiteID);
                    Address warehouseAddress = PXSelect <Address, Where <Address.addressID, Equal <Required <Address.addressID> > > > .Select(Base, shipToWarehouse.AddressID);

                    boxes.Add(BuildCarrierBoxes(packSet.Packages, warehouseAddress, method, plugin));
                }
            }

            return(GetCarrierRequest(doc, GetUnitsType(plugin), methods, boxes));
        }
        protected virtual CarrierBoxEx BuildCarrierBoxes(List <SOPackageInfoEx> list, IAddressBase origin, string method, CarrierPlugin plugin)
        {
            List <CarrierBox> boxes = new List <CarrierBox>();

            foreach (SOPackageInfoEx boxInfo in list)
            {
                boxes.Add(BuildCarrierPackage(boxInfo, plugin));
            }

            CarrierBoxEx result = new CarrierBoxEx(0, 0);

            result.Packages = boxes;
            result.Method   = method;
            result.Origin   = origin;

            return(result);
        }
 public virtual decimal ConvertWeightValue(decimal value, CarrierPlugin plugin)
 => ConvertValue(value, commonsetup.Current.WeightUOM, plugin.UOM);
 protected virtual UnitsType GetUnitsType(CarrierPlugin plugin)
 => plugin.UnitType == CarrierUnitsType.US
                         ? UnitsType.US
                         : UnitsType.SI;