示例#1
0
        public static CancelTaxRequest ToAvaTaxCancelRequest(this VirtoCommerce.Domain.Order.Model.CustomerOrder order, string companyCode, CancelCode cancelCode)
        {
            if (order.Addresses != null && order.Addresses.Any() && order.Items != null && order.Items.Any())
            {
                // Document Level Elements
                // Required Request Parameters
                var cancelTaxRequest = new CancelTaxRequest
                {
                    CompanyCode = companyCode,
                    DocCode     = order.Number,
                    DocType     = DocType.SalesInvoice,
                    CancelCode  = cancelCode
                };

                return(cancelTaxRequest);
            }

            return(null);
        }
        public static GetTaxRequest ToAvaTaxRequest(this VirtoCommerce.Domain.Order.Model.CustomerOrder order, string companyCode, Contact contact, bool commit = false)
        {
            if (order.Addresses != null && order.Addresses.Any() && order.Items != null && order.Items.Any())
            {
                // Document Level Elements
                // Required Request Parameters
                var getTaxRequest = new GetTaxRequest
                {
                    CustomerCode = order.CustomerId,
                    DocDate      =
                        order.CreatedDate == DateTime.MinValue
                            ? DateTime.UtcNow.ToString("yyyy-MM-dd")
                            : order.CreatedDate.ToString("yyyy-MM-dd"),
                    CompanyCode  = companyCode,
                    Client       = "VirtoCommerce,2.x,VirtoCommerce",
                    DetailLevel  = DetailLevel.Tax,
                    Commit       = commit,
                    DocType      = DocType.SalesInvoice,
                    DocCode      = order.Number,
                    CurrencyCode = order.Currency.ToString()
                };

                // Best Practice Request Parameters

                // Situational Request Parameters
                // getTaxRequest.CustomerUsageType = "G";
                // getTaxRequest.ExemptionNo = "12345";
                // getTaxRequest.BusinessIdentificationNo = "234243";
                // getTaxRequest.Discount = 50;
                // getTaxRequest.TaxOverride = new TaxOverrideDef();
                // getTaxRequest.TaxOverride.TaxOverrideType = "TaxDate";
                // getTaxRequest.TaxOverride.Reason = "Adjustment for return";
                // getTaxRequest.TaxOverride.TaxDate = "2013-07-01";
                // getTaxRequest.TaxOverride.TaxAmount = "0";

                // Optional Request Parameters
                //getTaxRequest.PurchaseOrderNo = order.Number;
                //getTaxRequest.ReferenceCode = "ref123456";
                //getTaxRequest.PosLaneCode = "09";

                //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 order.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 = order.Items.Select(li =>
                                                         new Line
                {
                    LineNo          = li.Id,
                    ItemCode        = li.ProductId,
                    Qty             = li.Quantity,
                    Amount          = li.Price * li.Quantity,
                    OriginCode      = destinationAddressIndex, //TODO set origin address (fulfillment?)
                    DestinationCode = destinationAddressIndex,
                    Description     = li.Name,
                    TaxCode         = li.TaxType
                }
                                                         ).ToList();

                //Add shipments as lines
                if (order.Shipments != null && order.Shipments.Any())
                {
                    order.Shipments.ForEach(sh =>
                                            getTaxRequest.Lines.Add(new Line
                    {
                        LineNo          = sh.Id ?? sh.ShipmentMethodCode,
                        ItemCode        = sh.ShipmentMethodCode,
                        Qty             = 1,
                        Amount          = sh.Sum,
                        OriginCode      = destinationAddressIndex, //TODO set origin address (fulfillment?)
                        DestinationCode = destinationAddressIndex,
                        Description     = sh.ShipmentMethodCode,
                        TaxCode         = sh.TaxType ?? "FR"
                    })
                                            );
                }

                return(getTaxRequest);
            }
            return(null);
        }
示例#3
0
        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);
        }
示例#4
0
        public static OrdersOrder ToShipstationOrder(this VirtoCommerce.Domain.Order.Model.CustomerOrder order)
        {
            if (order.Shipments != null && order.Shipments.Any())
            {
                var retVal = new OrdersOrder
                {
                    OrderNumber             = order.Number,
                    OrderID                 = order.Id,
                    OrderStatus             = order.Status,
                    OrderDate               = String.Format("{0:MM'/'dd'/'yyyy HH:mm}", order.CreatedDate),
                    LastModified            = String.Format("{0:MM'/'dd'/'yyyy HH:mm}", order.ModifiedDate),
                    OrderTotal              = (float)order.Sum,
                    ShippingAmount          = (float)order.Shipments.Sum(sh => sh.Sum),
                    TaxAmount               = (float)order.Tax,
                    ShippingMethod          = order.Shipments.First().ShipmentMethodCode,
                    ShippingAmountSpecified = true,
                    PaymentMethod           = order.InPayments.First().GatewayCode
                };
                var items = new List <OrdersOrderItem>();
                order.Shipments.Where(s => s.Items != null && s.Items.Any()).ForEach(sh =>
                {
                    sh.Items.ForEach(shi =>
                    {
                        var item = new OrdersOrderItem
                        {
                            SKU             = shi.LineItem.ProductId,
                            ImageUrl        = shi.LineItem.ImageUrl,
                            LineItemID      = shi.LineItemId,
                            Name            = shi.LineItem.Name,
                            Quantity        = (sbyte)shi.Quantity,
                            UnitPrice       = (float)order.Items.Single(i => i.ProductId == shi.LineItem.ProductId).Price,
                            Weight          = (float)(order.Items.Single(i => i.ProductId == shi.LineItem.ProductId).Weight ?? 0),
                            WeightSpecified = order.Items.Single(i => i.ProductId == shi.LineItem.ProductId).Weight != null,
                            WeightUnits     = order.Items.Single(i => i.ProductId == shi.LineItem.ProductId).WeightUnit,
                        };

                        items.Add(item);
                    });

                    retVal.Items = items.ToArray();
                });

                var customer = new OrdersOrderCustomer
                {
                    CustomerCode = order.CustomerId
                };

                var billAddress =
                    order.Addresses.FirstOrDefault(
                        a => a.AddressType == AddressType.Billing || a.AddressType == AddressType.BillingAndShipping);

                if (billAddress != null)
                {
                    var billTo = new OrdersOrderCustomerBillTo
                    {
                        Company = billAddress.Organization,
                        Name    = billAddress.FirstName + " " + billAddress.LastName,
                        Phone   = billAddress.Phone
                    };

                    customer.BillTo = billTo;
                }

                var shipAddress =
                    order.Addresses.FirstOrDefault(
                        a => a.AddressType == AddressType.Shipping || a.AddressType == AddressType.BillingAndShipping);

                if (shipAddress != null)
                {
                    var shipTo = new OrdersOrderCustomerShipTo
                    {
                        Company    = shipAddress.Organization,
                        Name       = shipAddress.FirstName + " " + shipAddress.LastName,
                        Phone      = shipAddress.Phone,
                        Address1   = shipAddress.Line1,
                        City       = shipAddress.City,
                        PostalCode = shipAddress.PostalCode,
                        Country    = shipAddress.CountryCode,
                        State      = shipAddress.RegionId ?? shipAddress.RegionName
                    };

                    customer.ShipTo = shipTo;
                }

                retVal.Customer = customer;

                return(retVal);
            }

            return(null);
        }