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