public IHttpActionResult ValidateAddress(VirtoCommerce.Domain.Customer.Model.Address address) { IHttpActionResult retVal = BadRequest(); LogInvoker<AvalaraLogger.TaxRequestContext>.Execute(log => { if (!_taxSettings.IsValidateAddress) { retVal = BadRequest("AvaTax address validation disabled"); throw new Exception((retVal as BadRequestErrorMessageResult).Message); } if (!string.IsNullOrEmpty(_taxSettings.Username) && !string.IsNullOrEmpty(_taxSettings.Password) && !string.IsNullOrEmpty(_taxSettings.ServiceUrl) && !string.IsNullOrEmpty(_taxSettings.CompanyCode)) { var addressSvc = new JsonAddressSvc(_taxSettings.Username, _taxSettings.Password, _taxSettings.ServiceUrl); var request = address.ToValidateAddressRequest(_taxSettings.CompanyCode); var validateAddressResult = addressSvc.Validate(request); if (!validateAddressResult.ResultCode.Equals(SeverityLevel.Success)) { var error = string.Join(Environment.NewLine, validateAddressResult.Messages.Where(ms => ms.Severity == SeverityLevel.Error).Select( m => m.Summary + string.Format(" [{0} - {1}] ", m.RefersTo, m.Details == null ? string.Empty : string.Join(", ", m.Details)))); retVal = BadRequest(error); throw new Exception((retVal as BadRequestErrorMessageResult).Message); } retVal = Ok(validateAddressResult); } if (!(retVal is OkNegotiatedContentResult<ValidateResult>)) { retVal = BadRequest("AvaTax credentials not provided"); throw new Exception((retVal as BadRequestErrorMessageResult).Message); } }) .OnError(_logger, AvalaraLogger.EventCodes.AddressValidationError) .OnSuccess(_logger, AvalaraLogger.EventCodes.ValidateAddress); return retVal; }
public AddSettingValueViewModel(VirtoCommerce.ManagementClient.AppConfig.Infrastructure.Enumerations.ValueType valueType, OperationType operationType) { _valueType = valueType; _operationType = operationType; switch (_valueType) { case Infrastructure.Enumerations.ValueType.Boolean: IsBooleanValue = true; OnPropertyChanged("IsBooleanValue"); break; case Infrastructure.Enumerations.ValueType.DataTime: IsDateTimeValue = true; OnPropertyChanged("IsDateTimeValue"); break; case Infrastructure.Enumerations.ValueType.Decimal: IsDecimalValue = true; OnPropertyChanged("IsDecimalValue"); break; case Infrastructure.Enumerations.ValueType.Integer: IsIntegerValue = true; OnPropertyChanged("IsIntegerValue"); break; case Infrastructure.Enumerations.ValueType.LongText: IsLongStringValue = true; OnPropertyChanged("IsLongStringValue"); break; case Infrastructure.Enumerations.ValueType.ShortText: IsShortStringValue = true; OnPropertyChanged("IsShortStringValue"); break; } }
public static Checkout AsCheckoutWebModel( this Data.ShoppingCart cart, VirtoCommerce.ApiClient.DataContracts.Orders.CustomerOrder order = null) { var checkoutModel = new Checkout(); checkoutModel.TaxLines = new List<TaxLine>(); if (cart.Addresses != null) { var billingAddress = cart.Addresses.FirstOrDefault(a => a.Type == AddressType.Billing); if (billingAddress != null) { checkoutModel.BillingAddress = billingAddress.AsCartWebModel(); checkoutModel.Email = billingAddress.Email; } var shippingAddress = cart.Addresses.FirstOrDefault(a => a.Type == AddressType.Shipping); if (shippingAddress != null) { checkoutModel.ShippingAddress = shippingAddress.AsCartWebModel(); checkoutModel.Email = shippingAddress.Email; } } checkoutModel.BuyerAcceptsMarketing = true; checkoutModel.Currency = cart.Currency; checkoutModel.CustomerId = cart.CustomerId; if (cart.Discounts != null) { checkoutModel.Discounts = new List<VirtoCommerce.Web.Models.Discount>(); foreach (var discount in cart.Discounts) { checkoutModel.Discounts.Add(new VirtoCommerce.Web.Models.Discount { Amount = (decimal)discount.DiscountAmount, Code = discount.PromotionId, Id = discount.Id }); } } checkoutModel.Email = ""; // TODO: Gift cards checkoutModel.Id = cart.Id; if (cart.Items != null) { checkoutModel.LineItems = new List<LineItem>(); foreach (var item in cart.Items) { checkoutModel.LineItems.Add(item.AsWebModel()); } checkoutModel.TaxLines.Add(new TaxLine { Title = "Line items taxes", Price = cart.Items.Sum(i => i.TaxTotal) }); } checkoutModel.Name = cart.Name; //checkoutModel.Note = cart.Note; if (order != null) { checkoutModel.Order = order.AsWebModel(); } if (cart.Payments != null) { var payment = cart.Payments.FirstOrDefault(); // Remake for multipayment if (payment != null) { checkoutModel.PaymentMethod = new Models.PaymentMethod { Code = payment.PaymentGatewayCode }; } checkoutModel.TaxLines.Add(new TaxLine { Title = "Payments taxes", Price = 0 }); } if (cart.Shipments != null) { var shipment = cart.Shipments.FirstOrDefault(); // Remake for multishipment if (shipment != null) { checkoutModel.ShippingMethod = new ShippingMethod { Handle = shipment.ShipmentMethodCode, Price = shipment.ShippingPrice, Title = shipment.ShipmentMethodCode }; } checkoutModel.TaxLines.Add(new TaxLine { Title = "Shipping taxes", Price = cart.Shipments.Sum(s => s.TaxTotal) }); } // Transactions return checkoutModel; }
public void RegisterCompositeCommand(VirtoCommerce.ManagementClient.Core.Infrastructure.IViewModel viewModel) { }
public string Serialise(VirtoCommerce.Web.Client.Caching.ActionSettings actionSettings) { var serialisedActionSettings = _serialiser.Serialise(actionSettings); return _encryptor.Encrypt(serialisedActionSettings); }
public static GetTaxRequest ToAvaTaxAdjustmentRequest(this VirtoCommerce.Domain.Order.Model.CustomerOrder modifiedOrder, string companyCode, Contact contact, VirtoCommerce.Domain.Order.Model.CustomerOrder originalOrder, bool commit = false) { if (modifiedOrder.Addresses != null && modifiedOrder.Addresses.Any() && originalOrder.Items != null && originalOrder.Items.Any()) { // Document Level Elements // Required Request Parameters var getTaxRequest = new GetTaxRequest { CustomerCode = modifiedOrder.CustomerId, DocDate = DateTime.UtcNow.ToString("yyyy-MM-dd"), CompanyCode = companyCode, Client = "VirtoCommerce,2.x,VirtoCommerce", DocCode = string.Format("{0}.{1}", originalOrder.Number, DateTime.UtcNow.ToString("yy-MM-dd-hh-mm")), DetailLevel = DetailLevel.Tax, Commit = commit, DocType = DocType.ReturnInvoice, TaxOverride = new TaxOverrideDef { TaxOverrideType = "TaxDate", Reason = "Adjustment for return", TaxDate = originalOrder.CreatedDate == DateTime.MinValue ? DateTime.UtcNow.ToString("yyyy-MM-dd") : originalOrder.CreatedDate.ToString("yyyy-MM-dd"), TaxAmount = "0" } }; // Best Practice Request Parameters // Situational Request Parameters // getTaxRequest.CustomerUsageType = "G"; // getTaxRequest.ExemptionNo = "12345"; // getTaxRequest.BusinessIdentificationNo = "234243"; //for VAT tax calculations // getTaxRequest.Discount = 50; // Optional Request Parameters //getTaxRequest.PurchaseOrderNo = order.Number; getTaxRequest.ReferenceCode = originalOrder.Number; //getTaxRequest.PosLaneCode = "09"; getTaxRequest.CurrencyCode = modifiedOrder.Currency.ToString(); //add customer tax exemption code to cart if exists getTaxRequest.ExemptionNo = contact.GetDynamicPropertyValue("Tax exempt", string.Empty); string destinationAddressIndex = "0"; // Address Data var addresses = new List<Address>(); foreach (var address in modifiedOrder.Addresses.Select((x, i) => new { Value = x, Index = i })) { addresses.Add(new Address { AddressCode = address.Index.ToString(CultureInfo.InvariantCulture), Line1 = address.Value.Line1, City = address.Value.City, Region = address.Value.RegionName ?? address.Value.RegionId, PostalCode = address.Value.PostalCode, Country = address.Value.CountryName }); if (address.Value.AddressType == AddressType.Shipping || address.Value.AddressType == AddressType.Shipping) destinationAddressIndex = address.Index.ToString(CultureInfo.InvariantCulture); } getTaxRequest.Addresses = addresses.ToArray(); // Line Data // Required Parameters getTaxRequest.Lines = originalOrder.Items.Where(i => !modifiedOrder.Items.Any(mli => mli.Id.Equals(i.Id)) || i.Quantity > (modifiedOrder.Items.Single(oi => oi.Id.Equals(i.Id)).Quantity)).Select(li => new Line { LineNo = li.Id, ItemCode = li.ProductId, Qty = modifiedOrder.Items.Any(mli => mli.Id.Equals(li.Id)) ? Math.Abs(li.Quantity - modifiedOrder.Items.Single(oi => oi.Id.Equals(li.Id)).Quantity) : li.Quantity, Amount = modifiedOrder.Items.Any(mli => mli.Id.Equals(li.Id)) ? -(li.Price * li.Quantity - modifiedOrder.Items.Single(oi => oi.Id.Equals(li.Id)).Price * modifiedOrder.Items.Single(mli => mli.Id.Equals(li.Id)).Quantity) : -li.Price * li.Quantity, OriginCode = destinationAddressIndex, //TODO set origin address (fulfillment?) DestinationCode = destinationAddressIndex, Description = li.Name, TaxCode = li.TaxType } ).ToList(); return getTaxRequest; } return null; }
private void SetBillingAddress(VirtoCommerce.Domain.Commerce.Model.Address address, Hashtable request) { request.Add("billTo_firstName", address.FirstName); request.Add("billTo_lastName", address.LastName); request.Add("billTo_street1", address.Line1); if (!string.IsNullOrEmpty(address.Line2)) request.Add("billTo_street2", address.Line2); request.Add("billTo_city", address.City); request.Add("billTo_state", address.RegionName); request.Add("billTo_postalCode", address.PostalCode); request.Add("billTo_country", address.CountryName); if (!string.IsNullOrEmpty(address.Email)) request.Add("billTo_email", address.Email); if (!string.IsNullOrEmpty(address.Phone)) request.Add("billTo_phone", address.Phone); }
public async Task UpdateOrderAsync( VirtoCommerce.ApiClient.DataContracts.Orders.CustomerOrder order) { await _orderClient.UpdateOrderAsync(order); }