public void RunShipmentApplication(IShipmentApplicationHelper applicationHelper, string shipmentNbr = null) { try { var shipment = GetShipment(shipmentNbr); //Validate shipment var shipmentValidationResult = new ShipmentValidationContext(shipment, _acumaticaNetworkProvider).Validate(); if (shipmentValidationResult.Any()) { _messagesProvider.Warn(shipmentValidationResult.First().Value); return; } if (applicationHelper.RunShipmentApplication(shipment.ShipmentNbr.Value) && applicationHelper.PopulateApplicaitonControlMap()) { _messagesProvider.Log(string.Format(InformationResources.INFO_RECEIVED_SHIPMENT, shipment.ShipmentNbr.Value, shipment.Packages.Count)); applicationHelper.PopulateApplicaitonByShipmentData(shipment); } } catch (Exception e) { if (!(e is NetworkException)) //IAcumaticaNetworkProvider handles own errors someself { _messagesProvider.Fatal(e); } } }
public virtual async Task <CartAggregate> AddShipmentAsync(Shipment shipment, IEnumerable <ShippingRate> availRates) { EnsureCartExists(); var validationContext = new ShipmentValidationContext { Shipment = shipment, AvailShippingRates = availRates }; await AbstractTypeFactory <CartShipmentValidator> .TryCreateInstance().ValidateAsync(validationContext, options => options.IncludeRuleSets(ValidationRuleSet).ThrowOnFailures()); await RemoveExistingShipmentAsync(shipment); shipment.Currency = Cart.Currency; if (shipment.DeliveryAddress != null) { //Reset address key because it can equal a customer address from profile and if not do that it may cause //address primary key duplication error for multiple carts with the same address shipment.DeliveryAddress.Key = null; } Cart.Shipments.Add(shipment); if (availRates != null && !string.IsNullOrEmpty(shipment.ShipmentMethodCode) && !Cart.IsTransient()) { var shippingMethod = availRates.First(sm => shipment.ShipmentMethodCode.EqualsInvariant(sm.ShippingMethod.Code) && shipment.ShipmentMethodOption.EqualsInvariant(sm.OptionName)); shipment.Price = shippingMethod.Rate; shipment.DiscountAmount = shippingMethod.DiscountAmount; //PT-5421: use new model for resolve taxable logic for ShippingRate/ShippingMethod //shipment.TaxType = shippingMethod.TaxType; } return(this); }