public static Line ToIppInvoiceLine(this Models.Services.QuickBooksOnlineServicesSdk.CreateInvoice.Line line)
        {
            var ippInvoiceLine = new Line();

            var lineDetail = new SalesItemLineDetail()
            {
                Qty          = line.Qty,
                QtySpecified = true,
                ItemRef      = new ReferenceType()
                {
                    Value = line.ItemValue,
                    name  = line.ItemName
                },
                ItemElementName = ItemChoiceType.UnitPrice,
                AnyIntuitObject = line.UnitPrice,
            };

            ippInvoiceLine.AnyIntuitObject     = lineDetail;
            ippInvoiceLine.DetailType          = LineDetailTypeEnum.SalesItemLineDetail;
            ippInvoiceLine.DetailTypeSpecified = true;
            ippInvoiceLine.Amount          = line.UnitPrice * line.Qty;
            ippInvoiceLine.AmountSpecified = true;

            return(ippInvoiceLine);
        }
Exemple #2
0
        /// <summary>
        /// Create Invoice
        /// </summary>
        /// <param name="context"></param>
        /// <param name="customer"></param>
        /// <returns>invoice</returns>
        public static Invoice InvoiceCreate(ServiceContext context, Customer customer)
        {
            Item item = QBOHelper.QBO.ItemCreate(context);
            Line line = new Line
            {
                DetailType          = LineDetailTypeEnum.SalesItemLineDetail,
                DetailTypeSpecified = true,
                Description         = "Sample for Reimburse Charge with Invoice.",
                Amount          = new Decimal(40),
                AmountSpecified = true
            };
            SalesItemLineDetail lineDetail = new SalesItemLineDetail
            {
                ItemRef = new ReferenceType {
                    name = item.Name, Value = item.Id
                }
            };

            line.AnyIntuitObject = lineDetail;

            Line[] lines = { line };

            Invoice invoice = new Invoice
            {
                Line        = lines,
                CustomerRef = new ReferenceType {
                    name = customer.DisplayName, Value = customer.Id
                },
                TxnDate = DateTime.Now.Date
            };

            Invoice apiResponse = QBOHelper.Helper.AddToQBO(context, invoice);

            return(apiResponse);
        }
Exemple #3
0
        internal static Invoice CreateInvoice(DataService dataService, QueryService <Account> queryService, Customer customer)
        {
            Item item = ItemCreate(dataService, queryService);
            Line line = new Line
            {
                DetailType          = LineDetailTypeEnum.SalesItemLineDetail,
                DetailTypeSpecified = true,
                Description         = "Sample for Reimburse Charge with Invoice.",
                Amount          = new Decimal(40),
                AmountSpecified = true
            };
            SalesItemLineDetail lineDetail = new SalesItemLineDetail
            {
                ItemRef = new ReferenceType {
                    name = item.Name, Value = item.Id
                }
            };

            line.AnyIntuitObject = lineDetail;

            Line[] lines = { line };

            Invoice invoice = new Invoice
            {
                Line        = lines,
                CustomerRef = new ReferenceType {
                    name = customer.DisplayName, Value = customer.Id
                },
                TxnDate = DateTime.Now.Date
            };

            Invoice response = dataService.Add(invoice);

            return(response);
        }
        /// <summary>
        /// Test QBO api call
        /// </summary>
        public async System.Threading.Tasks.Task QboApiCall()
        {
            //try
            //{
            //    if ((dictionary.ContainsKey("accessToken")) && (dictionary.ContainsKey("realmId")))
            //    {
            //        Output("Making QBO API Call.");
            OAuth2RequestValidator oauthValidator = new OAuth2RequestValidator(dictionary["accessToken"]);
            ServiceContext         context        = new ServiceContext(dictionary["realmId"], IntuitServicesType.QBO, oauthValidator);

            context.IppConfiguration.BaseUrl.Qbo = "https://sandbox-quickbooks.api.intuit.com/";
            //        //serviceContext.IppConfiguration.BaseUrl.Qbo = "https://quickbooks.api.intuit.com/";//prod
            context.IppConfiguration.MinorVersion.Qbo = "62";
            //context.IppConfiguration.Logger.RequestLog.EnableRequestResponseLogging =
            //context.IppConfiguration.Logger.RequestLog.ServiceRequestLoggingLocation = @"C:\Documents\Serilog_log";

            CLogger cu = new CLogger();

            context.IppConfiguration.AdvancedLogger.RequestAdvancedLog.CustomLogger = cu.GetCustomLogger();
            //context.IppConfiguration.AdvancedLogger.RequestAdvancedLog.EnableSerilogRequestResponseLoggingForRollingFile = true;
            //context.IppConfiguration.AdvancedLogger.RequestAdvancedLog.EnableSerilogRequestResponseLoggingForConsole = true;
            //context.IppConfiguration.AdvancedLogger.RequestAdvancedLog.EnableSerilogRequestResponseLoggingForTrace = true;
            //context.IppConfiguration.AdvancedLogger.RequestAdvancedLog.EnableSerilogRequestResponseLoggingForDebug = true;
            //context.IppConfiguration.AdvancedLogger.RequestAdvancedLog.ServiceRequestLoggingLocationForFile = @"C:\Documents\Serilog_log";
            QueryService <Invoice> in2 = new QueryService <Invoice>(context);
            var inn22 = in2.ExecuteIdsQueryForCount("Select * From Invoice");
            var inn23 = in2.ExecuteIdsQueryForCount("Select count(*) From Invoice");
            var inn24 = in2.ExecuteIdsQueryForCount("Select * From Invoice where Id='27' StartPosition 1 MaxResults 1");


            QueryService <Invoice> in1 = new QueryService <Invoice>(context);
            var     inn2 = in1.ExecuteIdsQuery("Select * From Invoice").ToList();
            Invoice inn1 = in1.ExecuteIdsQuery("Select * From Invoice where Id='27' StartPosition 1 MaxResults 1").First();

            QueryService <ReimburseCharge> rb1 = new QueryService <ReimburseCharge>(context);
            var             rb2  = rb1.ExecuteIdsQuery("Select * From ReimburseCharge").ToList();
            ReimburseCharge rbb1 = rb1.ExecuteIdsQuery("Select * From ReimburseCharge StartPosition 1 MaxResults 1").First();



            QueryService <RecurringTransaction> re1 = new QueryService <RecurringTransaction>(context);
            RecurringTransaction r1 = re1.ExecuteIdsQuery("Select * From RecurringTransaction StartPosition 1 MaxResults 1").First();


            DataService dataService = new DataService(context);
            //List<Intuit.Ipp.Data.IEntity> entityList1 = new List<Intuit.Ipp.Data.IEntity>();
            //entityList1.Add(new Intuit.Ipp.Data.Customer());
            //DateTimeOffset do1 = new DateTimeOffset(2020, 7, 1, 4, 29, 52, new TimeSpan(-7, 0, 0));

            //var CDCResponse1 = dataService.CDC(entityList1, do1.LocalDateTime).entities;


            //Customer cust = new Customer();
            //cust.DisplayName = "memo11";



            //Batch batch = dataService.CreateNewBatch();
            //batch.Add(cust, "CreateCustomer", OperationEnum.create);
            //batch.Add("select * from Customer", "CustomerQuery");
            //batch.Execute();

            //RecurringTransaction recur1 = new RecurringTransaction();
            //Invoice inv1 = new Invoice();
            //inv1.Id = r1.AnyIntuitObject.Id;
            //inv1.SyncToken = r1.AnyIntuitObject.SyncToken;
            //recur1.AnyIntuitObject = inv1;
            //var s = dataService.Delete(recur1);

            RecurringTransaction recur = new RecurringTransaction();
            //Find Customer
            QueryService <Customer> customerQueryService = new QueryService <Customer>(context);
            Customer customer = customerQueryService.ExecuteIdsQuery("Select * From Customer StartPosition 1 MaxResults 1").FirstOrDefault <Customer>();

            //Find Tax Code for Invoice - Searching for a tax code named 'StateSalesTax' in this example
            QueryService <TaxCode> stateTaxCodeQueryService = new QueryService <TaxCode>(context);
            TaxCode stateTaxCode = stateTaxCodeQueryService.ExecuteIdsQuery("Select * From TaxCode StartPosition 1 MaxResults 1").FirstOrDefault <TaxCode>();

            //Find Account - Accounts Receivable account required
            QueryService <Account> accountQueryService = new QueryService <Account>(context);
            Account account = accountQueryService.ExecuteIdsQuery("Select * From Account Where AccountType='Accounts Receivable' StartPosition 1 MaxResults 1").FirstOrDefault <Account>();

            //Find Item
            QueryService <Item> itemQueryService = new QueryService <Item>(context);
            Item item = itemQueryService.ExecuteIdsQuery("Select * From Item StartPosition 1 MaxResults 1").FirstOrDefault <Item>();

            //Find Term
            QueryService <Term> termQueryService = new QueryService <Term>(context);
            Term term = termQueryService.ExecuteIdsQuery("Select * From Term StartPosition 1 MaxResults 1").FirstOrDefault <Term>();

            Invoice invoice = new Invoice();

            //SalesReceipt invoice = new SalesReceipt();

            //DocNumber - QBO Only, otherwise use DocNumber
            invoice.AutoDocNumber          = true;
            invoice.AutoDocNumberSpecified = true;

            //TxnDate
            invoice.TxnDate          = DateTime.Now.Date;
            invoice.TxnDateSpecified = true;

            //PrivateNote
            invoice.PrivateNote = "This is a private note";

            //Line
            Line invoiceLine = new Line();

            //Line Description
            invoiceLine.Description = "Invoice line description.";
            //Line Amount
            invoiceLine.Amount          = 330m;
            invoiceLine.AmountSpecified = true;
            //Line Detail Type
            invoiceLine.DetailType          = LineDetailTypeEnum.SalesItemLineDetail;
            invoiceLine.DetailTypeSpecified = true;
            //Line Sales Item Line Detail
            SalesItemLineDetail lineSalesItemLineDetail = new SalesItemLineDetail();

            //Line Sales Item Line Detail - ItemRef
            lineSalesItemLineDetail.ItemRef = new ReferenceType()
            {
                name = item.Name,

                Value = item.Id
            };
            //Line Sales Item Line Detail - UnitPrice
            lineSalesItemLineDetail.AnyIntuitObject = 33m;
            lineSalesItemLineDetail.ItemElementName = ItemChoiceType.UnitPrice;
            //Line Sales Item Line Detail - Qty
            lineSalesItemLineDetail.Qty          = 10;
            lineSalesItemLineDetail.QtySpecified = true;
            //Line Sales Item Line Detail - TaxCodeRef
            //For US companies, this can be 'TAX' or 'NON'
            lineSalesItemLineDetail.TaxCodeRef = new ReferenceType()
            {
                Value = "NON"
            };
            //Line Sales Item Line Detail - ServiceDate
            //lineSalesItemLineDetail.ServiceDate = DateTime.Now.Date;
            //lineSalesItemLineDetail.ServiceDateSpecified = true;
            //Assign Sales Item Line Detail to Line Item
            invoiceLine.AnyIntuitObject = lineSalesItemLineDetail;
            //Assign Line Item to Invoice
            invoice.Line = new Line[] { invoiceLine };

            //TxnTaxDetail
            TxnTaxDetail txnTaxDetail = new TxnTaxDetail();

            txnTaxDetail.TxnTaxCodeRef = new ReferenceType()
            {
                name  = stateTaxCode.Name,
                Value = stateTaxCode.Id
            };
            //Line taxLine = new Line();
            //taxLine.DetailType = LineDetailTypeEnum.TaxLineDetail;
            //TaxLineDetail taxLineDetail = new TaxLineDetail();
            ////Assigning the fist Tax Rate in this Tax Code
            //taxLineDetail.TaxRateRef = stateTaxCode.SalesTaxRateList.TaxRateDetail[0].TaxRateRef;
            //taxLine.AnyIntuitObject = taxLineDetail;
            //txnTaxDetail.TaxLine = new Line[] { taxLine };
            invoice.TxnTaxDetail = txnTaxDetail;

            //Customer (Client)
            invoice.CustomerRef = new ReferenceType()
            {
                name  = customer.DisplayName,
                Value = customer.Id
            };

            //Billing Address
            PhysicalAddress billAddr = new PhysicalAddress();

            billAddr.Line1 = "123 Main St.";
            billAddr.Line2 = "Unit 506";
            billAddr.City  = "Brockton";
            billAddr.CountrySubDivisionCode = "MA";
            billAddr.Country    = "United States";
            billAddr.PostalCode = "02301";
            billAddr.Note       = "Billing Address Note";
            invoice.BillAddr    = billAddr;

            //Shipping Address
            PhysicalAddress shipAddr = new PhysicalAddress();

            shipAddr.Line1 = "100 Fifth Ave.";
            shipAddr.City  = "Waltham";
            shipAddr.CountrySubDivisionCode = "MA";
            shipAddr.Country    = "United States";
            shipAddr.PostalCode = "02452";
            shipAddr.Note       = "Shipping Address Note";
            invoice.ShipAddr    = shipAddr;

            //SalesTermRef
            invoice.SalesTermRef = new ReferenceType()
            {
                name  = term.Name,
                Value = term.Id
            };

            //DueDate
            invoice.DueDate          = DateTime.Now.AddDays(30).Date;
            invoice.DueDateSpecified = true;

            //ARAccountRef
            invoice.ARAccountRef = new ReferenceType()
            {
                name  = account.Name,
                Value = account.Id
            };
            invoice.RecurringInfo = new RecurringInfo()
            {
                Active          = true,
                ActiveSpecified = true,
                Name            = "RecurTemplate143",
                RecurType       = "Automated",
                ScheduleInfo    = new RecurringScheduleInfo()
                {
                    DayOfMonth              = 1,
                    DayOfMonthSpecified     = true,
                    DaysBefore              = 2,
                    DaysBeforeSpecified     = true,
                    IntervalType            = "Monthly",
                    MaxOccurrences          = 2,
                    MaxOccurrencesSpecified = true,
                    NumInterval             = 1,
                    NumIntervalSpecified    = true
                }
            };

            // List<IEntity> n = new List<IEntity>();
            // n.Add(invoice) ;

            recur.AnyIntuitObject = invoice;


            RecurringTransaction recurAdded = dataService.Add <RecurringTransaction>(recur);



            //QueryService<Customer> customerQueryService = new QueryService<Customer>(context);
            //Customer customer = customerQueryService.ExecuteIdsQuery("Select * From Customer StartPosition 1 MaxResults 1").FirstOrDefault<Customer>();



            ReportService reportService = new ReportService(context);

            //Date should be in the format YYYY - MM - DD
            //Response format hsold be JSON as that is only supported rigth now for reports
            //reportService.accounting_method = "Index";
            //reportService.start_date = "2018-01-01";
            //reportService.end_date = "2018-07-01";
            reportService.low_pp_date  = "2020-01-01";
            reportService.high_pp_date = "2020-06-01";
            reportService.custom_pp    = "yes";
            //reportService.classid = "2800000000000634813";
            //reportService.date_macro = "Last Month";
            //reportService.summarize_column_by = "Month";


            //List<String> columndata = new List<String>();
            //columndata.Add("tx_date");
            //columndata.Add("dept_name");
            //string coldata = String.Join(",", columndata);
            //reportService.columns = coldata;

            var report1 = reportService.ExecuteReport("ProfitAndLoss");

            //        try
            //        {
            //            //Find Customer
            //            QueryService<Customer> customerQueryService = new QueryService<Customer>(context);
            //            Customer customer = customerQueryService.ExecuteIdsQuery("Select * From Customer StartPosition 1 MaxResults 1").FirstOrDefault<Customer>();

            //            //Find Tax Code for Invoice - Searching for a tax code named 'StateSalesTax' in this example
            //            QueryService<TaxCode> stateTaxCodeQueryService = new QueryService<TaxCode>(context);
            //            TaxCode stateTaxCode = stateTaxCodeQueryService.ExecuteIdsQuery("Select * From TaxCode StartPosition 1 MaxResults 1").FirstOrDefault<TaxCode>();

            //            //Find Account - Accounts Receivable account required
            //            QueryService<Account> accountQueryService = new QueryService<Account>(context);
            //            Account account = accountQueryService.ExecuteIdsQuery("Select * From Account Where AccountType='Accounts Receivable' StartPosition 1 MaxResults 1").FirstOrDefault<Account>();

            //            //Find Item
            //            QueryService<Item> itemQueryService = new QueryService<Item>(context);
            //            Item item = itemQueryService.ExecuteIdsQuery("Select * From Item StartPosition 1 MaxResults 1").FirstOrDefault<Item>();

            //            //Find Term
            //            QueryService<Term> termQueryService = new QueryService<Term>(context);
            //            Term term = termQueryService.ExecuteIdsQuery("Select * From Term StartPosition 1 MaxResults 1").FirstOrDefault<Term>();

            //            Invoice invoice = new Invoice();

            //            //DocNumber - QBO Only, otherwise use DocNumber
            //            invoice.AutoDocNumber = true;
            //            invoice.AutoDocNumberSpecified = true;

            //            //TxnDate
            //            invoice.TxnDate = DateTime.Now.Date;
            //            invoice.TxnDateSpecified = true;

            //            //PrivateNote
            //            invoice.PrivateNote = "This is a private note";

            //            //Line
            //            Line invoiceLine = new Line();
            //            //Line Description
            //            invoiceLine.Description = "Invoice line description.";
            //            //Line Amount
            //            invoiceLine.Amount = 330m;
            //            invoiceLine.AmountSpecified = true;
            //            //Line Detail Type
            //            invoiceLine.DetailType = LineDetailTypeEnum.SalesItemLineDetail;
            //            invoiceLine.DetailTypeSpecified = true;
            //            //Line Sales Item Line Detail
            //            SalesItemLineDetail lineSalesItemLineDetail = new SalesItemLineDetail();
            //            //Line Sales Item Line Detail - ItemRef
            //            lineSalesItemLineDetail.ItemRef = new ReferenceType()
            //            {
            //                //name = item.Name,
            //                Value = "9321"
            //                //Value = item.Id
            //            };
            //            //Line Sales Item Line Detail - UnitPrice
            //            lineSalesItemLineDetail.AnyIntuitObject = 33m;
            //            lineSalesItemLineDetail.ItemElementName = ItemChoiceType.UnitPrice;
            //            //Line Sales Item Line Detail - Qty
            //            lineSalesItemLineDetail.Qty = 10;
            //            lineSalesItemLineDetail.QtySpecified = true;
            //            //Line Sales Item Line Detail - TaxCodeRef
            //            //For US companies, this can be 'TAX' or 'NON'
            //            lineSalesItemLineDetail.TaxCodeRef = new ReferenceType()
            //            {
            //                Value = "NON"
            //            };
            //            //Line Sales Item Line Detail - ServiceDate
            //            //lineSalesItemLineDetail.ServiceDate = DateTime.Now.Date;
            //            //lineSalesItemLineDetail.ServiceDateSpecified = true;
            //            //Assign Sales Item Line Detail to Line Item
            //            invoiceLine.AnyIntuitObject = lineSalesItemLineDetail;
            //            //Assign Line Item to Invoice
            //            invoice.Line = new Line[] { invoiceLine };

            //            //TxnTaxDetail
            //            //TxnTaxDetail txnTaxDetail = new TxnTaxDetail();
            //            //txnTaxDetail.TxnTaxCodeRef = new ReferenceType()
            //            //{
            //            //    name = stateTaxCode.Name,
            //            //    Value = stateTaxCode.Id
            //            //};
            //            //Line taxLine = new Line();
            //            //taxLine.DetailType = LineDetailTypeEnum.TaxLineDetail;
            //            //TaxLineDetail taxLineDetail = new TaxLineDetail();
            //            ////Assigning the fist Tax Rate in this Tax Code
            //            //taxLineDetail.TaxRateRef = stateTaxCode.SalesTaxRateList.TaxRateDetail[0].TaxRateRef;
            //            //taxLine.AnyIntuitObject = taxLineDetail;
            //            //txnTaxDetail.TaxLine = new Line[] { taxLine };
            //            //invoice.TxnTaxDetail = txnTaxDetail;

            //            //Customer (Client)
            //            invoice.CustomerRef = new ReferenceType()
            //            {
            //                name = customer.DisplayName,
            //                Value = customer.Id
            //            };

            //            //Billing Address
            //            PhysicalAddress billAddr = new PhysicalAddress();
            //            billAddr.Line1 = "123 Main St.";
            //            billAddr.Line2 = "Unit 506";
            //            billAddr.City = "Brockton";
            //            billAddr.CountrySubDivisionCode = "MA";
            //            billAddr.Country = "United States";
            //            billAddr.PostalCode = "02301";
            //            billAddr.Note = "Billing Address Note";
            //            invoice.BillAddr = billAddr;

            //            //Shipping Address
            //            PhysicalAddress shipAddr = new PhysicalAddress();
            //            shipAddr.Line1 = "100 Fifth Ave.";
            //            shipAddr.City = "Waltham";
            //            shipAddr.CountrySubDivisionCode = "MA";
            //            shipAddr.Country = "United States";
            //            shipAddr.PostalCode = "02452";
            //            shipAddr.Note = "Shipping Address Note";
            //            invoice.ShipAddr = shipAddr;

            //            //SalesTermRef
            //            invoice.SalesTermRef = new ReferenceType()
            //            {
            //                name = term.Name,
            //                Value = term.Id
            //            };

            //            //DueDate
            //            invoice.DueDate = DateTime.Now.AddDays(30).Date;
            //            invoice.DueDateSpecified = true;

            //            //ARAccountRef
            //            invoice.ARAccountRef = new ReferenceType()
            //            {
            //                name = account.Name,
            //                Value = account.Id
            //            };

            //            Invoice invoiceAdded = dataService.Add<Invoice>(invoice);



            //            //ReportService reportService = new ReportService(serviceContext);

            //            ////Date should be in the format YYYY-MM-DD
            //            ////Response format hsold be JSON as that is pnly supported rigth now for reports
            //            //reportService.accounting_method = "Index";
            //            //reportService.start_date = "2018-01-01";
            //            //reportService.end_date = "2018-07-01";
            //            //////reportService.classid = "2800000000000634813";
            //            ////reportService.date_macro = "Last Month";
            //            //reportService.summarize_column_by = "Month";


            //            ////List<String> columndata = new List<String>();
            //            ////columndata.Add("tx_date");
            //            ////columndata.Add("dept_name");
            //            ////string coldata = String.Join(",", columndata);
            //            ////reportService.columns = coldata;

            //            //var report1 = reportService.ExecuteReport("TrialBalance");
            //        }
            //        catch(IdsException ex)
            //        {
            //            throw ex;

            //        }

            //        //List<BatchItem> bItems = new List<BatchItem>();
            //        //BatchItem b1 = new BatchItem(OperationEnum.create, new Customer());
            //        //BatchItem b2= new BatchItem(OperationEnum.create, new Customer());

            //        //bItems.Add(b1);
            //        //bItems.Add(b2);
            //        //var result = Batch<Customer>(serviceContext, bItems);



            //        QueryService<Invoice> inv = new QueryService<Invoice>(context);
            //        var respInvoice = inv.ExecuteIdsQuery("select * from Invoice where Id='8633'").FirstOrDefault();
            //        DataService objService = new DataService(context);
            //        var respVoidedInvoice=objService.Void(respInvoice);



            //        DataService commonServiceQBO = new DataService(context);
            //        //Item item = new Item();
            //        //List<Item> results = commonServiceQBO.FindAll<Item>(item, 1, 1).ToList<Item>();
            //        QueryService<Invoice> inService = new QueryService<Invoice>(context);
            //        var In = inService.ExecuteIdsQuery("SELECT count(*) FROM Invoice").Count();



            //        Batch batch = commonServiceQBO.CreateNewBatch();


            //        batch.Add("select count(*) from Account", "queryAccount");
            //        batch.Execute();

            //        if (batch.IntuitBatchItemResponses != null && batch.IntuitBatchItemResponses.Count() > 0)
            //        {
            //            IntuitBatchResponse res = batch.IntuitBatchItemResponses.FirstOrDefault();
            //            List<Account> acc = res.Entities.ToList().ConvertAll(item => item as Account);
            //        };
            //            Output("QBO call successful.");
            //        lblQBOCall.Visible = true;
            //        lblQBOCall.Text = "QBO Call successful";
            //    }
            //}
            //catch (IdsException ex)
            //{
            //    //if (ex.Message == "Unauthorized-401")
            //    //{
            //    //    Output("Invalid/Expired Access Token.");

            //    //    var tokenResp = await oauthClient.RefreshTokenAsync(dictionary["refreshToken"]);
            //    //    if (tokenResp.AccessToken != null && tokenResp.RefreshToken != null)
            //    //    {
            //    //        dictionary["accessToken"] = tokenResp.AccessToken;
            //    //        dictionary["refreshToken"] = tokenResp.RefreshToken;
            //    //        await QboApiCall();
            //    //    }
            //    //    else
            //    //    {
            //    //        Output("Error while refreshing tokens: " + tokenResp.Raw);
            //    //    }
            //    //}
            //    //else
            //    //{
            //    //    Output(ex.Message);
            //    //}
            //}
            //catch (Exception ex)
            //{
            //    Output("Invalid/Expired Access Token.");
            //}
        }
        private Invoice CreateInvoice(DataService dataService, ServiceContext serviceContext, Item item)
        {
            //Initialize an Invoice object
            Invoice invoice = new Invoice();
            //invoice.Deposit = new Decimal(0.00);
            //invoice.DepositSpecified = true;

            //Invoice is always created for a customer so lets retrieve reference to a customer and set it in Invoice
            QueryService <Customer> querySvc = new QueryService <Customer>(serviceContext);
            Customer customer = querySvc.ExecuteIdsQuery("SELECT * FROM Customer WHERE CompanyName like 'Amy%'").FirstOrDefault();

            invoice.CustomerRef = new ReferenceType()
            {
                Value = customer.Id
            };


            List <Line> lineList = new List <Line>();
            Line        line     = new Line();

            line.Description     = "Description";
            line.Amount          = new Decimal(100.00);
            line.AmountSpecified = true;
            lineList.Add(line);
            invoice.Line = lineList.ToArray();

            SalesItemLineDetail salesItemLineDetail = new SalesItemLineDetail();

            salesItemLineDetail.Qty          = new Decimal(1.0);
            salesItemLineDetail.QtySpecified = true;
            salesItemLineDetail.ItemRef      = new ReferenceType()
            {
                Value = item.Id
            };
            line.AnyIntuitObject = salesItemLineDetail;

            line.DetailType          = LineDetailTypeEnum.SalesItemLineDetail;
            line.DetailTypeSpecified = true;

            //Set other properties such as Total Amount, Due Date, Email status and Transaction Date
            invoice.DueDate          = DateTime.UtcNow.Date;
            invoice.DueDateSpecified = true;

            invoice.TotalAmt          = new Decimal(10.00);
            invoice.TotalAmtSpecified = true;

            invoice.EmailStatus          = EmailStatusEnum.NotSet;
            invoice.EmailStatusSpecified = true;

            invoice.Balance          = new Decimal(10.00);
            invoice.BalanceSpecified = true;

            invoice.TxnDate          = DateTime.UtcNow.Date;
            invoice.TxnDateSpecified = true;
            invoice.TxnTaxDetail     = new TxnTaxDetail()
            {
                TotalTax          = Convert.ToDecimal(10),
                TotalTaxSpecified = true,
            };
            return(dataService.Add <Invoice>(invoice));
        }
Exemple #6
0
        /// <summary>
        /// Create Receivables Invoice
        /// </summary>
        /// <param name="dtInvoice"></param>
        /// <returns></returns>


        public string CreateReceivablesInvoice(DataTable dtInvoice)
        {
            if (services == null)
            {
                CreateService();
            }

            Invoice invoice = new Invoice();

            //invoice.TemplateRef.name = "Trinity Stairs Invoice";
            invoice.TemplateRef = new ReferenceType()
            {
                type  = Enum.GetName(typeof(objectNameEnumType), objectNameEnumType.CompanyInfo),
                name  = "Type",
                Value = "Trinity Stairs Invoice"
            };
            invoice.Id          = Convert.ToString(dtInvoice.Rows[0]["InvoiceID"]);
            invoice.CustomerRef = new ReferenceType()
            {
                type = Enum.GetName(typeof(objectNameEnumType), objectNameEnumType.Customer),
                //name = "Customer Name",
                Value = (string)dtInvoice.Rows[0]["CustomerName"]
            };

            //invoice.ClassRef.name = (string)dtInvoice.Rows[0]["RegionName"];
            invoice.ClassRef = new ReferenceType()
            {
                type = Enum.GetName(typeof(objectNameEnumType), objectNameEnumType.Class),
                //name = "Class Region",
                Value = (string)dtInvoice.Rows[0]["RegionName"]
            };

            if (dtInvoice.Rows[0]["SalesOrderNumber"] != DBNull.Value)
            {
                string tempPONumber = (string)dtInvoice.Rows[0]["SalesOrderNumber"];
                if (tempPONumber.Length > 25)
                {
                    tempPONumber = tempPONumber.Remove(25);
                }
                invoice.PONumber = tempPONumber;
            }
            invoice.TxnDate = (DateTime)dtInvoice.Rows[0]["InvoiceDate"];
            //invoice.DueDate.SetValue((DateTime)dtInvoice.Rows[0]["InvoiceDate"]);

            //if (dtInvoice.Rows[0]["ScheduledDate"] != DBNull.Value)
            //    invoice.Other.SetValue(((DateTime)dtInvoice.Rows[0]["ScheduledDate"]).ToShortDateString());
            invoice.ShipAddr = new PhysicalAddress()
            {
                Line1 = (string)dtInvoice.Rows[0]["AddressStreet"],
                City  = (string)dtInvoice.Rows[0]["AddressCity"],
                CountrySubDivisionCode = (string)dtInvoice.Rows[0]["AddressState"],
                PostalCode             = (string)dtInvoice.Rows[0]["AddressZip"]
            };


            //invoice.SalesTaxLineAdd.ORSalesTaxLineAdd.Amount.SetValue(Convert.ToDouble(dtInvoice.Rows[0]["InvoiceTax"]));
            // invoice.ShippingLineAdd.Amount.SetValue(Convert.ToDouble(dtInvoice.Rows[0]["InvoiceShipping"]));
            //invoice.ARAccountRef.name = (string)dtInvoice.Rows[0]["RegionARGLCode"];

            bool isTaxable = false;

            if (dtInvoice.Rows[0]["InvoiceTax"] != DBNull.Value && Convert.ToDouble(dtInvoice.Rows[0]["InvoiceTax"]) != 0)
            {
                invoice.TxnTaxDetail                   = new TxnTaxDetail();
                invoice.TxnTaxDetail.TotalTax          = (decimal)dtInvoice.Rows[0]["InvoiceTax"];
                invoice.TxnTaxDetail.TotalTaxSpecified = true;
            }

            {
                isTaxable = true;
            }

            //Add Invoice Lines
            foreach (DataRow dtRow in dtInvoice.Rows)
            {
                Line invoiceLine = new Line();
                //invoiceLine.ItemRef.FullName.SetValue((string)dtRow["Jobtype"]);
                invoiceLine.Description = ((string)dtRow["InvoiceLineText"]);
                invoiceLine.Amount      = (Convert.ToDecimal(dtRow["InvoiceLineTotalAmount"]));
                //if (isTaxable)
                //{
                //    invoiceLine..IsTaxable.SetValue(true);
                //}
            }

            //if (dtInvoice.Rows[0]["InvoiceDiscount"] != null && Convert.ToDouble(dtInvoice.Rows[0]["InvoiceDiscount"]) != 0)
            //{
            //    IORInvoiceLineAdd invoiceLine = invoice.ORInvoiceLineAddList.Append();
            //    invoiceLine.InvoiceLineAdd.ItemRef.FullName.SetValue((string)dtInvoice.Rows[0]["Jobtype"]);
            //    invoiceLine.InvoiceLineAdd.Desc.SetValue("Discount");
            //    invoiceLine.InvoiceLineAdd.Amount.SetValue(Convert.ToDouble(dtInvoice.Rows[0]["InvoiceDiscount"]));
            //    if (isTaxable)
            //    {
            //        invoiceLine.InvoiceLineAdd.IsTaxable.SetValue(true);
            //    }
            //}
            //if (dtInvoice.Rows[0]["InvoiceShipping"] != null && Convert.ToDouble(dtInvoice.Rows[0]["InvoiceShipping"]) != 0)
            //{
            //    IORInvoiceLineAdd invoiceLine = invoice.ORInvoiceLineAddList.Append();
            //    invoiceLine.InvoiceLineAdd.ItemRef.FullName.SetValue((string)dtInvoice.Rows[0]["Jobtype"]);
            //    invoiceLine.InvoiceLineAdd.Desc.SetValue("Shipping");
            //    invoiceLine.InvoiceLineAdd.Amount.SetValue(Convert.ToDouble(dtInvoice.Rows[0]["InvoiceShipping"]));
            //    if (isTaxable)
            //    {
            //        invoiceLine.InvoiceLineAdd.IsTaxable.SetValue(true);
            //    }
            //}



            // invoice.Id = sentInvKey;
            invoice.DocNumber = Guid.NewGuid().ToString("N").Substring(0, 10);

            //invoice.CustomerMemo = new MemoRef()
            //{
            //    Value = sentInvAddr
            //};

            //invoice.TotalAmt = sentInvAmount;
            invoice.TotalAmtSpecified = true;



            //invoice.shipping ?? = sentShippingAmount
            //invoice     = sentDiscountAmount;

            //invoice.DueDate = sentInvoiceDate;
            //invoice.DueDateSpecified = true;

            invoice.ARAccountRef = new ReferenceType()
            {
                type  = Enum.GetName(typeof(objectNameEnumType), objectNameEnumType.Account),
                name  = "Account Receivable",
                Value = string.Concat("QB:", (string)dtInvoice.Rows[0]["RegionARGLCode"])
            };


            invoice.TxnDate          = DateTime.Today.Date;
            invoice.TxnDateSpecified = true;

            invoice.ApplyTaxAfterDiscount          = false;
            invoice.ApplyTaxAfterDiscountSpecified = true;

            List <Line> invLines  = new List <Line>();
            int         ivLineCnt = 0;

            foreach (System.Data.DataRow dtRow in dtInvoice.Rows)
            {
                Line line = new Line();
                line.Description         = (string)dtRow["InvoiceLineText"];
                line.Amount              = decimal.Round((decimal)dtRow["InvoiceLineTotalAmount"], 2);
                line.AmountSpecified     = true;
                line.DetailType          = LineDetailTypeEnum.SalesItemLineDetail;
                line.DetailTypeSpecified = true;
                line.Id = (ivLineCnt + 1).ToString();
                ivLineCnt++;



                if ((string)dtRow["InvoiceLineText"] == "Sales")
                {
                    line.DetailType = LineDetailTypeEnum.SalesItemLineDetail;
                }
                else if ((string)dtRow["InvoiceLineText"] == "Shipping")
                {
                    line.DetailType = LineDetailTypeEnum.SalesItemLineDetail;
                }
                else if ((string)dtRow["InvoiceLineText"] == "Discount")
                {
                    line.DetailType = LineDetailTypeEnum.DiscountLineDetail;
                }
                else if ((string)dtRow["InvoiceLineText"] == "Deposit")
                {
                    line.DetailType = LineDetailTypeEnum.DepositLineDetail;
                }
                else
                {
                    line.DetailType = LineDetailTypeEnum.SalesItemLineDetail;
                }
                line.DetailTypeSpecified = true;
                line.Id = (ivLineCnt + 1).ToString();

                //Line Sales Item Line Detail
                SalesItemLineDetail lineSalesItemLineDetail = new SalesItemLineDetail();
                //Line Sales Item Line Detail - ItemRef
                lineSalesItemLineDetail.ItemRef = new ReferenceType()
                {
                    name  = "Sales",
                    Value = "1"
                };
                //Line Sales Item Line Detail - UnitPrice
                lineSalesItemLineDetail.AnyIntuitObject = decimal.Round((decimal)dtRow["InvoiceLineTotalAmount"], 2);
                lineSalesItemLineDetail.ItemElementName = ItemChoiceType.UnitPrice;
                //Line Sales Item Line Detail - Qty
                lineSalesItemLineDetail.Qty          = 1;
                lineSalesItemLineDetail.QtySpecified = true;
                //Line Sales Item Line Detail - TaxCodeRef
                //For US companies, this can be 'TAX' or 'NON'
                lineSalesItemLineDetail.TaxCodeRef = new ReferenceType()
                {
                    Value = "TAX"
                };
                //Line Sales Item Line Detail - ServiceDate
                lineSalesItemLineDetail.ServiceDate          = DateTime.Now.Date;
                lineSalesItemLineDetail.ServiceDateSpecified = true;
                //Assign Sales Item Line Detail to Line Item
                line.AnyIntuitObject = lineSalesItemLineDetail;

                invLines.Add(line);

                line.DetailTypeSpecified = true;
                line.Id = (ivLineCnt + 1).ToString();
                ivLineCnt++;
                invLines.Add(line);
            }

            invoice.Line = invLines.ToArray();

            Invoice resultBill = services.Add(invoice) as Invoice;

            return("Invoice Loaded");
        }
        public void Invoice_Create()
        {
            //Find Customer
            QueryService <Customer> customerQueryService = GetQueryService <Customer>();
            Customer customer = customerQueryService.ExecuteIdsQuery("Select * From Customer StartPosition 1 MaxResults 1").FirstOrDefault <Customer>();
            //Find Tax Code for Invoice - Searching for a tax code named 'StateSalesTax' in this example
            QueryService <TaxCode> stateTaxCodeQueryService = GetQueryService <TaxCode>();

            TaxCode stateTaxCode = stateTaxCodeQueryService.ExecuteIdsQuery("Select * From TaxCode Where Name='StateSalesTax' StartPosition 1 MaxResults 1").FirstOrDefault <TaxCode>();
            //Find Account - Accounts Receivable account required
            QueryService <Account> accountQueryService = GetQueryService <Account>();
            Account account = accountQueryService.ExecuteIdsQuery("Select * From Account Where AccountType='Accounts Receivable' StartPosition 1 MaxResults 1").FirstOrDefault <Account>();
            //Find Item
            QueryService <Item> itemQueryService = GetQueryService <Item>();
            Item item = itemQueryService.ExecuteIdsQuery("Select * From Item StartPosition 1 MaxResults 1").FirstOrDefault <Item>();
            //Find Term
            QueryService <Term> termQueryService = GetQueryService <Term>();
            Term term = termQueryService.ExecuteIdsQuery("Select * From Term StartPosition 1 MaxResults 1").FirstOrDefault <Term>();

            Invoice qbInvoice = new Invoice();

            //DocNumber - QBO Only, otherwise use DocNumber
            qbInvoice.AutoDocNumber          = true;
            qbInvoice.AutoDocNumberSpecified = true;
            //TxnDate
            qbInvoice.TxnDate          = DateTime.Now.Date;
            qbInvoice.TxnDateSpecified = true;
            //PrivateNote
            qbInvoice.PrivateNote = "This is a private note";
            //Line
            Line invoiceLine = new Line();

            //Line Description
            invoiceLine.Description = "Invoice line description.";
            //Line Amount
            invoiceLine.Amount          = 330m;
            invoiceLine.AmountSpecified = true;
            //Line Detail Type
            invoiceLine.DetailType          = LineDetailTypeEnum.SalesItemLineDetail;
            invoiceLine.DetailTypeSpecified = true;
            //Line Sales Item Line Detail
            SalesItemLineDetail lineSalesItemLineDetail = new SalesItemLineDetail();

            //Line Sales Item Line Detail - ItemRef
            lineSalesItemLineDetail.ItemRef = new ReferenceType()
            {
                name  = item.Name,
                Value = item.Id
            };
            //Line Sales Item Line Detail - UnitPrice
            lineSalesItemLineDetail.AnyIntuitObject = 33m;
            lineSalesItemLineDetail.ItemElementName = ItemChoiceType.UnitPrice;
            //Line Sales Item Line Detail - Qty
            lineSalesItemLineDetail.Qty          = 10;
            lineSalesItemLineDetail.QtySpecified = true;
            //Line Sales Item Line Detail - TaxCodeRef
            //For US companies, this can be 'TAX' or 'NON'
            lineSalesItemLineDetail.TaxCodeRef = new ReferenceType()
            {
                Value = "TAX"
            };
            //Line Sales Item Line Detail - ServiceDate
            lineSalesItemLineDetail.ServiceDate          = DateTime.Now.Date;
            lineSalesItemLineDetail.ServiceDateSpecified = true;
            //Assign Sales Item Line Detail to Line Item
            invoiceLine.AnyIntuitObject = lineSalesItemLineDetail;
            //Assign Line Item to Invoice
            qbInvoice.Line = new Line[] { invoiceLine };
            //TxnTaxDetail

            /*
             * TxnTaxDetail txnTaxDetail = new TxnTaxDetail();
             * txnTaxDetail.TxnTaxCodeRef = new ReferenceType()
             * {
             *  name = stateTaxCode.Name,
             *  Value = stateTaxCode.Id
             * };
             * Line taxLine = new Line();
             * taxLine.DetailType = LineDetailTypeEnum.TaxLineDetail;
             * TaxLineDetail taxLineDetail = new TaxLineDetail();
             * //Assigning the fist Tax Rate in this Tax Code
             * taxLineDetail.TaxRateRef = stateTaxCode.SalesTaxRateList.TaxRateDetail[0].TaxRateRef;
             * taxLine.AnyIntuitObject = taxLineDetail;
             * txnTaxDetail.TaxLine = new Line[] { taxLine };
             * invoice.TxnTaxDetail = txnTaxDetail;*/
            //Customer (Client)
            qbInvoice.CustomerRef = new ReferenceType()
            {
                name  = customer.DisplayName,
                Value = customer.Id
            };
            //Billing Address
            PhysicalAddress billAddr = new PhysicalAddress();

            billAddr.Line1 = "123 Main St.";
            billAddr.Line2 = "Unit 506";
            billAddr.City  = "Brockton";
            billAddr.CountrySubDivisionCode = "MA";
            billAddr.Country    = "United States";
            billAddr.PostalCode = "02301";
            billAddr.Note       = "Billing Address Note";
            qbInvoice.BillAddr  = billAddr;
            //Shipping Address
            PhysicalAddress shipAddr = new PhysicalAddress();

            shipAddr.Line1 = "100 Fifth Ave.";
            shipAddr.City  = "Waltham";
            shipAddr.CountrySubDivisionCode = "MA";
            shipAddr.Country    = "United States";
            shipAddr.PostalCode = "02452";
            shipAddr.Note       = "Shipping Address Note";
            qbInvoice.ShipAddr  = shipAddr;
            //SalesTermRef
            qbInvoice.SalesTermRef = new ReferenceType()
            {
                name  = term.Name,
                Value = term.Id
            };
            //DueDate
            qbInvoice.DueDate          = DateTime.Now.AddDays(30).Date;
            qbInvoice.DueDateSpecified = true;
            //ARAccountRef
            qbInvoice.ARAccountRef = new ReferenceType()
            {
                name  = account.Name,
                Value = account.Id
            };
            var addedInvoice = DataService.Add(qbInvoice);
        }
        public void Invoice_CreateWithLeastRequiredFields()
        {
            //Valid Customer and Item are required.
            //Find Customer
            QueryService <Customer> customerQueryService = GetQueryService <Customer>();
            Customer customer = customerQueryService.ExecuteIdsQuery("Select * From Customer StartPosition 1 MaxResults 1").FirstOrDefault <Customer>();

            //Find Item
            QueryService <Item> itemQueryService = GetQueryService <Item>();
            Item item = itemQueryService.ExecuteIdsQuery("Select * From Item StartPosition 1 MaxResults 1").FirstOrDefault <Item>();

            Invoice qbInvoice = new Invoice();

            //TxnDate
            qbInvoice.TxnDate          = DateTime.Now.Date;
            qbInvoice.TxnDateSpecified = true;

            //Line
            Line invoiceLine = new Line();

            //Line Description
            invoiceLine.Description = "Invoice line description.";
            //Line Amount
            //Amount must be equal to unit price * quantity.
            invoiceLine.Amount          = 100m;
            invoiceLine.AmountSpecified = true;
            //Line Detail Type
            invoiceLine.DetailType          = LineDetailTypeEnum.SalesItemLineDetail;
            invoiceLine.DetailTypeSpecified = true;
            //Line Sales Item Line Detail
            SalesItemLineDetail lineSalesItemLineDetail = new SalesItemLineDetail();

            //Line Sales Item Line Detail - ItemRef
            //****Valid Item Id is require for line Items*****
            lineSalesItemLineDetail.ItemRef = new ReferenceType()
            {
                name  = item.Name,
                Value = item.Id
            };
            //Line Sales Item Line Detail - UnitPrice
            lineSalesItemLineDetail.AnyIntuitObject = 10m;
            lineSalesItemLineDetail.ItemElementName = ItemChoiceType.UnitPrice;
            //Line Sales Item Line Detail - Qty
            lineSalesItemLineDetail.Qty          = 10;
            lineSalesItemLineDetail.QtySpecified = true;
            //Line Sales Item Line Detail - TaxCodeRef
            //For US companies, this can be 'TAX' or 'NON'
            //lineSalesItemLineDetail.TaxCodeRef = new ReferenceType()
            //{
            //    Value = "TAX"
            //};
            //Line Sales Item Line Detail - ServiceDate
            lineSalesItemLineDetail.ServiceDate          = DateTime.Now.Date;
            lineSalesItemLineDetail.ServiceDateSpecified = true;
            //Assign Sales Item Line Detail to Line Item
            invoiceLine.AnyIntuitObject = lineSalesItemLineDetail;
            //Assign Line Item to Invoice
            qbInvoice.Line = new Line[] { invoiceLine, invoiceLine };

            //Customer (Client)
            qbInvoice.CustomerRef = new ReferenceType()
            {
                name  = customer.DisplayName,
                Value = customer.Id
            };

            //SalesTermRef
            //qbInvoice.SalesTermRef = new ReferenceType()
            //{
            //    name = term.Name,
            //    Value = term.Id
            //};
            //DueDate
            qbInvoice.DueDate          = DateTime.Now.AddDays(30).Date;
            qbInvoice.DueDateSpecified = true;

            var addedInvoice = DataService.Add(qbInvoice);
        }
        public void Invoice_Create2()
        {
            Invoice     qbInvoice   = new Invoice();
            Customer    customer    = null;
            Item        item        = null;
            Account     account     = null;
            DataService dataService = new DataService(ServiceContext);

            qbInvoice.TxnDate          = DateTime.Parse("8/15/85");
            qbInvoice.TxnDateSpecified = true;
            qbInvoice.DueDate          = DateTime.Parse("1/1/2111");
            qbInvoice.DueDateSpecified = true;

            //Establish customer
            QueryService <Customer> customerService = new QueryService <Customer>(ServiceContext);
            var    r             = customerService.ExecuteIdsQuery($"Select * From Customer");
            string companyName   = "Children's Miracle Network";
            var    customerMatch = r.FirstOrDefault(x => x.CompanyName == companyName);

            //Create customer, if it does not exist.
            if (customerMatch == null)
            {
                Customer customerToCreate = new Customer {
                    CompanyName = companyName, DisplayName = companyName, Notes = "Created by Nucirrus."
                };
                customer = dataService.Add <Customer>(customerToCreate);
            }
            else
            {
                customer = customerMatch;
            }

            qbInvoice.CustomerRef = new ReferenceType()
            {
                name  = customer.DisplayName,
                Value = customer.Id
            };

            //create an account for nucirrus
            var exportAccounts = GetQueryService <Account>().ExecuteIdsQuery($"Select * from Account where name = 'ExternalInvoice' StartPosition 1 MaxResults 1");

            if (!exportAccounts.Any())
            {
                account = dataService.Add <Account>(new Account {
                    Name = "ExternalInvoice", AccountType = AccountTypeEnum.Income, AccountTypeSpecified = true
                });
            }
            else
            {
                account = exportAccounts.First();
            }


            string jobName = "First Job";

            //QueryService<Item> itemQueryService = GetQueryService<Item>();
            //item = itemQueryService.ExecuteIdsQuery("Select * From Item StartPosition 1 MaxResults 1").FirstOrDefault<Item>();
            ////Find or Create Item
            QueryService <Item> itemQueryService = new QueryService <Item>(ServiceContext);
            var items = itemQueryService.ExecuteIdsQuery($"Select * From Item Where Name = '{jobName}'");

            if (!items.Any())
            {
                //use account in item creation.
                Item newItem = new Item {
                    Name = jobName, Type = ItemTypeEnum.Service, TypeSpecified = true, IncomeAccountRef = new ReferenceType {
                        name = account.Name, Value = account.Id
                    }, PurchaseCost = 10m, PurchaseCostSpecified = true
                };
                item = dataService.Add <Item>(newItem);
            }
            else
            {
                item = items.First();
            }

            List <Line> lineItems = new List <Line>();

            Line invoiceLine = new Line();

            //Line Description
            invoiceLine.Description = $"Description.";
            //Line Amount
            invoiceLine.Amount          = 100m;
            invoiceLine.AmountSpecified = true;
            //Line Detail Type
            invoiceLine.DetailType          = LineDetailTypeEnum.SalesItemLineDetail;
            invoiceLine.DetailTypeSpecified = true;
            //Line Sales Item Line Detail
            SalesItemLineDetail lineSalesItemLineDetail = new SalesItemLineDetail();

            //Line Sales Item Line Detail - ItemRef
            lineSalesItemLineDetail.ItemRef = new ReferenceType()
            {
                name  = item.Name,
                Value = item.Id
            };

            //Line Sales Item Line Detail - UnitPrice
            lineSalesItemLineDetail.AnyIntuitObject = 10m;
            lineSalesItemLineDetail.ItemElementName = ItemChoiceType.UnitPrice;
            //Line Sales Item Line Detail - Qty
            lineSalesItemLineDetail.Qty          = 10m;
            lineSalesItemLineDetail.QtySpecified = true;
            //Line Sales Item Line Detail - TaxCodeRef
            //For US companies, this can be 'TAX' or 'NON'
            lineSalesItemLineDetail.TaxCodeRef = new ReferenceType()
            {
                Value = "TAX"
            };
            //Line Sales Item Line Detail - ServiceDate
            lineSalesItemLineDetail.ServiceDate          = DateTime.Parse("12/1/1999");
            lineSalesItemLineDetail.ServiceDateSpecified = true;
            //Assign Sales Item Line Detail to Line Item
            invoiceLine.AnyIntuitObject = lineSalesItemLineDetail;
            //Assign Line Item to Invoice
            lineItems.Add(invoiceLine);


            qbInvoice.Line = lineItems.ToArray();
            var createdInvoice = DataService.Add(qbInvoice);

            Assert.IsNotNull(createdInvoice);
        }
        /// <summary>
        /// This API creates an Invoice
        /// </summary>
        private Invoice CreateInvoice(string realmId, Customer customer, Item item)
        {
            // Step 1: Initialize OAuth2RequestValidator and ServiceContext
            ServiceContext serviceContext = IntializeContext(realmId);

            // Step 2: Initialize an Invoice object
            Invoice invoice = new Invoice();

            // invoice.Deposit = new Decimal(0.00);
            //invoice.DepositSpecified = true;


            // Step 3: Invoice is always created for a customer so lets retrieve reference to a customer and set it in Invoice

            /*QueryService<Customer> querySvc = new QueryService<Customer>(serviceContext);
             * Customer customer = querySvc.ExecuteIdsQuery("SELECT * FROM Customer WHERE CompanyName like 'Amy%'").FirstOrDefault();*/
            invoice.CustomerRef = new ReferenceType()
            {
                Value = customer.Id
            };


            // Step 4: Invoice is always created for an item so lets retrieve reference to an item and a Line item to the invoice

            /* QueryService<Item> querySvcItem = new QueryService<Item>(serviceContext);
             * Item item = querySvcItem.ExecuteIdsQuery("SELECT * FROM Item WHERE Name = 'Lighting'").FirstOrDefault();*/
            List <Line> lineList = new List <Line>();
            Line        line     = new Line();

            line.Description     = "Description";
            line.Amount          = new Decimal(100.00);
            line.AmountSpecified = true;

            SalesItemLineDetail salesItemLineDetail = new SalesItemLineDetail();

            salesItemLineDetail.Qty     = new Decimal(1.0);
            salesItemLineDetail.ItemRef = new ReferenceType()
            {
                Value = item.Id
            };
            line.AnyIntuitObject = salesItemLineDetail;

            line.DetailType          = LineDetailTypeEnum.SalesItemLineDetail;
            line.DetailTypeSpecified = true;

            lineList.Add(line);
            invoice.Line = lineList.ToArray();

            // Step 5: Set other properties such as Total Amount, Due Date, Email status and Transaction Date
            invoice.DueDate          = DateTime.UtcNow.Date;
            invoice.DueDateSpecified = true;


            invoice.TotalAmt          = new Decimal(10.00);
            invoice.TotalAmtSpecified = true;

            invoice.EmailStatus          = EmailStatusEnum.NotSet;
            invoice.EmailStatusSpecified = true;

            invoice.Balance          = new Decimal(10.00);
            invoice.BalanceSpecified = true;

            invoice.TxnDate          = DateTime.UtcNow.Date;
            invoice.TxnDateSpecified = true;
            invoice.TxnTaxDetail     = new TxnTaxDetail()
            {
                TotalTax          = Convert.ToDecimal(10),
                TotalTaxSpecified = true,
            };
            return(invoice);
        }