예제 #1
0
        public string CreateEntity(string accessToken, string realmID, string refreshToken, int entityType, string XML, bool IsProd)
        {
            try
            {
                if (!string.IsNullOrEmpty(accessToken) && !string.IsNullOrEmpty(realmID))
                {
                    string         output         = "";
                    ServiceContext serviceContext = BuildServiceContext(accessToken, realmID, IsProd);
                    DataService    dataService    = new DataService(serviceContext);
                    QBObjectType   QBEntityType   = (QBObjectType)entityType;

                    Output("Making CreateEntity " + QBEntityType + " API Call.");

                    switch (QBEntityType)
                    {
                    case QBObjectType.Customer:
                        XmlSerializer customerSerializer = new XmlSerializer(typeof(Customer));
                        StringReader  customerReader     = new StringReader(XML);
                        Customer      customer           = (Customer)customerSerializer.Deserialize(customerReader);
                        Customer      newCustomer        = dataService.Add(customer);

                        StringWriter customerWriter = new StringWriter();
                        customerSerializer.Serialize(customerWriter, newCustomer);

                        output = customerWriter.ToString();
                        break;

                    case QBObjectType.Invoice:
                        XmlSerializer invoiceSerializer = new XmlSerializer(typeof(Invoice));
                        StringReader  invoiceReader     = new StringReader(XML);
                        Invoice       invoice           = (Invoice)invoiceSerializer.Deserialize(invoiceReader);
                        Invoice       newInvoice        = dataService.Add(invoice);

                        StringWriter invoiceWriter = new StringWriter();
                        invoiceSerializer.Serialize(invoiceWriter, newInvoice);

                        output = invoiceWriter.ToString();
                        break;

                    case QBObjectType.InvoiceCreditMemo:
                        XmlSerializer creditMemoSerializer = new XmlSerializer(typeof(CreditMemo));
                        StringReader  creditMemoReader     = new StringReader(XML);
                        CreditMemo    creditMemo           = (CreditMemo)creditMemoSerializer.Deserialize(creditMemoReader);
                        CreditMemo    newCreditMemo        = dataService.Add(creditMemo);

                        StringWriter creditMemoWriter = new StringWriter();
                        creditMemoSerializer.Serialize(creditMemoWriter, newCreditMemo);

                        output = creditMemoWriter.ToString();
                        break;

                    case QBObjectType.Vendor:
                    case QBObjectType.VendorDeduction:
                        XmlSerializer vendorSerializer = new XmlSerializer(typeof(Vendor));
                        StringReader  reader           = new StringReader(XML);
                        Vendor        vendor           = (Vendor)vendorSerializer.Deserialize(reader);
                        Vendor        newVendor        = dataService.Add(vendor);

                        StringWriter vendorWriter = new StringWriter();
                        vendorSerializer.Serialize(vendorWriter, newVendor);

                        output = vendorWriter.ToString();
                        break;

                    case QBObjectType.CarrierPay:
                    case QBObjectType.DriverPay:
                        XmlSerializer billSerializer = new XmlSerializer(typeof(Bill));
                        StringReader  billReader     = new StringReader(XML);
                        Bill          bill           = (Bill)billSerializer.Deserialize(billReader);
                        Bill          newBill        = dataService.Add(bill);

                        StringWriter billWriter = new StringWriter();
                        billSerializer.Serialize(billWriter, newBill);

                        output = billWriter.ToString();
                        break;

                    case QBObjectType.DriverDeduction:
                        XmlSerializer vendorCreditSerializer = new XmlSerializer(typeof(VendorCredit));
                        StringReader  vendorCreditReader     = new StringReader(XML);
                        VendorCredit  vendorCredit           = (VendorCredit)vendorCreditSerializer.Deserialize(vendorCreditReader);
                        VendorCredit  newVendorCredit        = dataService.Add(vendorCredit);

                        StringWriter vendorCreditWriter = new StringWriter();
                        vendorCreditSerializer.Serialize(vendorCreditWriter, newVendorCredit);

                        output = vendorCreditWriter.ToString();
                        break;

                    case QBObjectType.TaxCode:
                        XmlSerializer taxCodeSerializer = new XmlSerializer(typeof(TaxCode));
                        StringReader  taxCodeReader     = new StringReader(XML);
                        TaxCode       taxCode           = (TaxCode)taxCodeSerializer.Deserialize(taxCodeReader);
                        TaxCode       newTaxCode        = dataService.Add(taxCode);

                        StringWriter taxCodeWriter = new StringWriter();
                        taxCodeSerializer.Serialize(taxCodeWriter, newTaxCode);

                        output = taxCodeWriter.ToString();
                        break;

                    case QBObjectType.TaxRate:
                        XmlSerializer taxRateSerializer = new XmlSerializer(typeof(TaxRate));
                        StringReader  taxRateReader     = new StringReader(XML);
                        TaxRate       taxRate           = (TaxRate)taxRateSerializer.Deserialize(taxRateReader);
                        TaxRate       newTaxRate        = dataService.Add(taxRate);

                        StringWriter taxRateWriter = new StringWriter();
                        taxRateSerializer.Serialize(taxRateWriter, newTaxRate);

                        output = taxRateWriter.ToString();
                        break;
                    }
                    Output("QBO CreateEntity successful.");
                    return(output);
                }
                else
                {
                    Output("AccessToken or RealmID cannot be empty");
                }
            }
            catch (IdsException ex)
            {
                if (ex.Message == "Unauthorized-401")
                {
                    Output("Invalid/Expired Access Token.");

                    RefreshTokens(refreshToken);

                    if (oauthTokens.ContainsKey("accessToken") && oauthTokens.ContainsKey("refreshToken"))
                    {
                        Output("Refreshed Access Token");
                        return(CreateEntity(oauthTokens["accessToken"], realmID, oauthTokens["refreshToken"], entityType, XML, IsProd));
                    }
                    else
                    {
                        Output("Error while refreshing tokens");
                        return("REVOKE");
                    }
                }
                else if (ex.Message == "429")
                {
                    Output("Too Many Concurrent Requests - Retrying in 1 minute...");
                    System.Threading.Thread.Sleep(60000);
                    return(CreateEntity(accessToken, realmID, refreshToken, entityType, XML, IsProd));
                }
                else
                {
                    Output("IdsException = " + ex.Message);
                    return(ex.Message);
                }
            }
            catch (Exception ex)
            {
                Output("Exception = " + ex.Message);
                return(ex.Message);
            }
            return("");
        }
예제 #2
0
        public string MakeQBOQuery(string accessToken, string realmID, string refreshToken, int queryType, string query, bool IsProd)
        {
            try
            {
                if (!string.IsNullOrEmpty(accessToken) && !string.IsNullOrEmpty(realmID))
                {
                    ServiceContext serviceContext = BuildServiceContext(accessToken, realmID, IsProd);
                    string         output         = "";
                    QBObjectType   QBQueryType    = (QBObjectType)queryType;

                    Output("Making MakeQBOQuery " + QBQueryType + " API Call.");

                    switch (QBQueryType)
                    {
                    case QBObjectType.cClass:
                        QueryService <Class> classQuerySvc = new QueryService <Class>(serviceContext);
                        Class classQuery = classQuerySvc.ExecuteIdsQuery(query).FirstOrDefault();

                        XmlSerializer classSerializer = new XmlSerializer(typeof(Class));
                        StringWriter  classWriter     = new StringWriter();
                        classSerializer.Serialize(classWriter, classQuery);

                        output = classWriter.ToString();
                        break;

                    case QBObjectType.Customer:
                        QueryService <Customer> customerQuery = new QueryService <Customer>(serviceContext);
                        Customer customer = customerQuery.ExecuteIdsQuery(query).FirstOrDefault();

                        XmlSerializer customerSerializer = new XmlSerializer(typeof(Customer));
                        StringWriter  customerWriter     = new StringWriter();
                        customerSerializer.Serialize(customerWriter, customer);

                        output = customerWriter.ToString();
                        break;

                    case QBObjectType.Invoice:
                        QueryService <Invoice> invoiceQuery = new QueryService <Invoice>(serviceContext);
                        Invoice invoice = invoiceQuery.ExecuteIdsQuery(query).FirstOrDefault();

                        XmlSerializer invoiceSerializer = new XmlSerializer(typeof(Invoice));
                        StringWriter  invoiceWriter     = new StringWriter();
                        invoiceSerializer.Serialize(invoiceWriter, invoice);

                        output = invoiceWriter.ToString();
                        break;

                    case QBObjectType.InvoiceCreditMemo:
                        QueryService <CreditMemo> creditMemoQuery = new QueryService <CreditMemo>(serviceContext);
                        CreditMemo creditMemo = creditMemoQuery.ExecuteIdsQuery(query).FirstOrDefault();

                        XmlSerializer creditMemoSerializer = new XmlSerializer(typeof(CreditMemo));
                        StringWriter  creditMemoWriter     = new StringWriter();
                        creditMemoSerializer.Serialize(creditMemoWriter, creditMemo);

                        output = creditMemoWriter.ToString();
                        break;

                    case QBObjectType.Vendor:
                    case QBObjectType.VendorDeduction:
                        QueryService <Vendor> vendorQuery = new QueryService <Vendor>(serviceContext);
                        Vendor vendor = vendorQuery.ExecuteIdsQuery(query).FirstOrDefault();

                        XmlSerializer vendorSerializer = new XmlSerializer(typeof(Vendor));
                        StringWriter  vendorWriter     = new StringWriter();
                        vendorSerializer.Serialize(vendorWriter, vendor);

                        output = vendorWriter.ToString();
                        break;

                    case QBObjectType.CarrierPay:
                    case QBObjectType.DriverPay:
                        QueryService <Bill> billQuery = new QueryService <Bill>(serviceContext);
                        Bill bill = billQuery.ExecuteIdsQuery(query).FirstOrDefault();

                        XmlSerializer billSerializer = new XmlSerializer(typeof(Bill));
                        StringWriter  billWriter     = new StringWriter();
                        billSerializer.Serialize(billWriter, bill);

                        output = billWriter.ToString();
                        break;

                    case QBObjectType.DriverDeduction:
                        QueryService <VendorCredit> vendorCreditQuery = new QueryService <VendorCredit>(serviceContext);
                        VendorCredit vendorCredit = vendorCreditQuery.ExecuteIdsQuery(query).FirstOrDefault();

                        XmlSerializer vendorCreditSerializer = new XmlSerializer(typeof(VendorCredit));
                        StringWriter  vendorCreditWriter     = new StringWriter();
                        vendorCreditSerializer.Serialize(vendorCreditWriter, vendorCredit);

                        output = vendorCreditWriter.ToString();
                        break;

                    case QBObjectType.Term:
                        QueryService <Term> termQuery = new QueryService <Term>(serviceContext);
                        Term term = termQuery.ExecuteIdsQuery(query).FirstOrDefault();

                        XmlSerializer termSerializer = new XmlSerializer(typeof(Term));
                        StringWriter  termWriter     = new StringWriter();
                        termSerializer.Serialize(termWriter, term);

                        output = termWriter.ToString();
                        break;

                    case QBObjectType.COA:
                        QueryService <Account> accountQuery = new QueryService <Account>(serviceContext);
                        Account account = accountQuery.ExecuteIdsQuery(query).FirstOrDefault();

                        XmlSerializer accountSerializer = new XmlSerializer(typeof(Account));
                        StringWriter  accountWriter     = new StringWriter();
                        accountSerializer.Serialize(accountWriter, account);

                        output = accountWriter.ToString();
                        break;

                    case QBObjectType.TaxCode:
                        QueryService <TaxCode> taxCodeQuery = new QueryService <TaxCode>(serviceContext);
                        TaxCode taxCode = taxCodeQuery.ExecuteIdsQuery(query).FirstOrDefault();

                        XmlSerializer taxCodeSerializer = new XmlSerializer(typeof(TaxCode));
                        StringWriter  taxCodeWriter     = new StringWriter();
                        taxCodeSerializer.Serialize(taxCodeWriter, taxCode);

                        output = taxCodeWriter.ToString();
                        break;

                    case QBObjectType.TaxRate:
                        QueryService <TaxRate> taxRateQuery = new QueryService <TaxRate>(serviceContext);
                        TaxRate taxRate = taxRateQuery.ExecuteIdsQuery(query).FirstOrDefault();

                        XmlSerializer taxRateSerializer = new XmlSerializer(typeof(TaxRate));
                        StringWriter  taxRateWriter     = new StringWriter();
                        taxRateSerializer.Serialize(taxRateWriter, taxRate);

                        output = taxRateWriter.ToString();
                        break;

                    case QBObjectType.Item:
                        QueryService <Item> itemQuery = new QueryService <Item>(serviceContext);
                        Item item = itemQuery.ExecuteIdsQuery(query).FirstOrDefault();

                        XmlSerializer itemSerializer = new XmlSerializer(typeof(Item));
                        StringWriter  itemWriter     = new StringWriter();
                        itemSerializer.Serialize(itemWriter, item);

                        output = itemWriter.ToString();
                        break;
                    }

                    Output("MakeQBOQuery call successful.");
                    return(output);
                }
                else
                {
                    Output("AccessToken or RealmID cannot be empty");
                }
            }
            catch (IdsException ex)
            {
                if (ex.Message == "Unauthorized-401")
                {
                    Output("Invalid/Expired Access Token.");

                    RefreshTokens(refreshToken);

                    if (oauthTokens.ContainsKey("accessToken") && oauthTokens.ContainsKey("refreshToken"))
                    {
                        Output("Refreshed Access Token");
                        return(MakeQBOQuery(oauthTokens["accessToken"], realmID, oauthTokens["refreshToken"], queryType, query, IsProd));
                    }
                    else
                    {
                        Output("Error while refreshing tokens");
                        return("REVOKE");
                    }
                }
                else if (ex.Message == "429")
                {
                    Output("Too Many Concurrent Requests - Retrying in 1 minute...");
                    System.Threading.Thread.Sleep(60000);
                    return(MakeQBOQuery(accessToken, realmID, refreshToken, queryType, query, IsProd));
                }
                else
                {
                    Output("IdsException = " + ex.Message);
                }
            }
            catch (Exception ex)
            {
                Output("Exception = " + ex.Message);
                Output("StackTrace = " + ex.StackTrace);
                Output("HelpLink = " + ex.HelpLink);
                Output("InnerException.Message = " + ex.InnerException.Message);
            }
            return("");
        }