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)); }
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;