Beispiel #1
0
        public static async Task CalculateSingleAvalaraTaxAsync(ParametersHeader parameters)
        {
            const string licenseKey  = "3C154FC03B81D3D5";
            const int    accountId   = 2000160773;
            const string companyCode = "DEFAULT";

            AvaTaxClient client = new AvaTaxClient("MyConsoleApp", "1.0", Environment.MachineName, AvaTaxEnvironment.Production)
                                  .WithSecurity(accountId, licenseKey);

            TransactionBuilder t1 = new TransactionBuilder(client, companyCode, DocumentType.SalesOrder, parameters.customer_code_string)
                                    .WithAddress(TransactionAddressType.SingleLocation, parameters.to_street, null, null, parameters.to_city,
                                                 parameters.to_state.ToString(), parameters.to_zip, parameters.to_country)
                                    .WithDate(parameters.InvoiceDate)
                                    .WithReportingLocationCode("DEFAULT")
                                    .WithPurchaseOrderNumber(parameters.PoNumber);



            int i = 1;

            foreach (ParameterLine lineItem in parameters.line_items)
            {
                decimal qty = decimal.Zero;
                decimal.TryParse(lineItem.quantity, out qty);

                decimal unit_price = decimal.Zero;
                decimal.TryParse(lineItem.unit_price, out unit_price);

                string avaTaxCode = lineItem.avaTaxCode;
                string id         = lineItem.id;

                t1.WithLine(unit_price, qty, avaTaxCode, lineItem.description, id, null, i.ToString());

                i++;
            }

            try
            {
                TransactionModel tm = await t1.CreateAsync();

                if (tm.lines != null)
                {
                    foreach (TransactionLineModel line in tm.lines)
                    {
                        Guid.TryParse(line.itemCode, out Guid Id);

                        var a = parameters.line_items.Find(l => l.id == Id.ToString());
                        a.taxAmount = line.taxCalculated ?? 0;
                        Console.WriteLine(a.taxAmount);
                    }
                }
            }
            catch (AvaTaxError ex)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine(ex.error);
                Console.ResetColor();
            }
        }
Beispiel #2
0
        private static async Task InvoiceById(Guid invoiceId)
        {
            Invoice invoice = new Invoice()
            {
                Id = invoiceId
            };
            await invoice.ExpandValuesAsync();

            await invoice.ExpandNavAsync(false, nameof(invoice.CustomerBillingInfo), nameof(invoice.SupplierBillingInfo));

            AccountBillingInfo customerBillingInfo = invoice.CustomerBillingInfo;
            await customerBillingInfo.ExpandNavAsync(false, nameof(customerBillingInfo.Country), nameof(customerBillingInfo.Region), nameof(customerBillingInfo.City));

            string ZipCode = await ValidateZipCodeAsync(invoice.CustomerBillingInfo.Name, "", invoice.CustomerBillingInfo.Street, invoice.CustomerBillingInfo.City.Name,
                                                        invoice.CustomerBillingInfo.Region.Name, invoice.CustomerBillingInfo.ZipCode);

            string cAddress = $"Customer: {invoice.CustomerBillingInfo.Name}" +
                              $"{Environment.NewLine}\tCustomer Billing Info Id: {invoice.CustomerBillingInfoId.ToString()}" +
                              $"{Environment.NewLine}\t{invoice.CustomerBillingInfo.Street}" +
                              $"{Environment.NewLine}\t{invoice.CustomerBillingInfo.City.Name}, {invoice.CustomerBillingInfo.Region.Name}" +
                              $"{Environment.NewLine}\t{invoice.CustomerBillingInfo.Country.Name}, {ZipCode}";

            Console.WriteLine(cAddress);
            Console.WriteLine(Environment.NewLine);

            AccountBillingInfo supplierBillingInfo = invoice.SupplierBillingInfo;
            await supplierBillingInfo.ExpandNavAsync(false, nameof(supplierBillingInfo.Country), nameof(supplierBillingInfo.Region), nameof(supplierBillingInfo.City));

            string sAddress = $"Supplier: {invoice.SupplierBillingInfo.Name}" +
                              $"{Environment.NewLine}\tSupplier Billing Info Id: {invoice.SupplierBillingInfoId.ToString()}" +
                              $"{Environment.NewLine}\t{invoice.SupplierBillingInfo.Street}" +
                              $"{Environment.NewLine}\t{invoice.SupplierBillingInfo.City.Name}, {invoice.SupplierBillingInfo.Region.Name}" +
                              $"{Environment.NewLine}\t{invoice.SupplierBillingInfo.Country.Name}, {invoice.SupplierBillingInfo.ZipCode}";

            Console.WriteLine(sAddress);

            ParametersHeader parameters = new ParametersHeader()
            {
                to_street            = invoice.CustomerBillingInfo.Street.Trim(),
                to_city              = invoice.CustomerBillingInfo.City.Name.Trim(),
                to_state             = invoice.CustomerBillingInfo.Region.Name.Trim(),
                to_zip               = ZipCode.Trim(),
                to_country           = "US",
                shipping             = "0",
                customer_code_string = invoice.CustomerBillingInfo.Name.Trim(),
                PoNumber             = invoice.Number.Trim(),
                InvoiceDate          = invoice.StartDate,
                currencyCode         = "USD"
            };

            await invoice.ExpandAssociationsAsync(false, nameof(invoice.InvoiceProductByInvoice));

            ICollection <InvoiceProduct> invoiceProducts = invoice.InvoiceProductByInvoice;

            Console.WriteLine(Environment.NewLine);
            Console.WriteLine("--- INVOICE LINES ---");

            int i = 1;

            foreach (InvoiceProduct invoiceProduct in invoiceProducts)
            {
                await invoiceProduct.ExpandNavAsync(false, nameof(invoiceProduct.Product));

                Product product = invoiceProduct.Product;
                await product.ExpandNavAsync(false, nameof(product.Type), nameof(product.Category), nameof(product.DeliveryType), nameof(product.Kind), nameof(product.DeploymentType));

                string line = $"{Environment.NewLine}Line #:{i.ToString("#")}" +
                              $"{Environment.NewLine}{invoiceProduct.Product.NameENU}\tQty: {invoiceProduct.Quantity.ToString()}, Price: {invoiceProduct.Price.ToString("C2")}, Total: {invoiceProduct.PrimaryAmount.ToString("C2")}" +
                              $"{Environment.NewLine}\tCategory:\t{invoiceProduct.Product.Category.Name} " +
                              $"{Environment.NewLine}\tDeployment:\t{invoiceProduct.Product.Type.Name}" +
                              $"{Environment.NewLine}\tKind:\t\t{invoiceProduct.Product.Kind.Name}" +
                              $"{Environment.NewLine}\tDeployment:\t{invoiceProduct.Product.DeploymentType.Name}" +
                              $"{Environment.NewLine}\tDelivery:\t{invoiceProduct.Product.DeliveryType.Name} ";

                Console.WriteLine(line);
                Console.ForegroundColor = ConsoleColor.Green;

                string avaCode = GetAvalaraTaxCode(invoiceProduct.Product.Category.Name, invoiceProduct.Product.DeploymentType.Name,
                                                   invoiceProduct.Product.Kind.Name, invoiceProduct.Product.Type.Name, invoiceProduct.Product.Name);

                string taxCodes = $"\tTaxJar:\t{invoiceProduct.Product.TaxCode.ToString().Trim()}" +
                                  $"{Environment.NewLine}\tAvaTax:\t{avaCode.Trim()}";

                ParameterLine parameterLine = new ParameterLine
                {
                    quantity    = "1",
                    unit_price  = invoiceProduct.PrimaryAmount.ToString(),
                    avaTaxCode  = avaCode,
                    id          = invoiceProduct.Product.Id.ToString(),
                    description = invoiceProduct.Product.NameENU
                };
                parameters.line_items.Add(parameterLine);

                Console.WriteLine(taxCodes);
                Console.ResetColor();
                i++;
            }
            await CalculateSingleAvalaraTaxAsync(parameters);
        }