GithubHelp home page GithubHelp logo

quickbooks-ruby's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

quickbooks-ruby's Issues

Possible to create a persistent connection between QBO and a Rails app?

Is there anyway I can create a persistent connection between our app and QBO without requiring the "Connect to QuickBooks" button or the oauth_callback token & secret or atleast persisting it to the DB or saving as constants (realmID, etc) in the app after getting it once or do they have a preset TTL?

Hardy Service

Hey there, so I'm working with this gem heavily now and I'm wondering if it would make sense to implement some kind of "hardy service" like the Harvested gem has... essentially instead of throwing an error when the server rate-limits the calls, it would detect the rate limiting and wait the appropriate amount of time before calling the same request over again.

Thoughts on a mechanism like this?

Random odd error during invoice generation

Getting this error, even though I'm not invoking the PhysicalAddress model at all.

ArgumentError (lat: invalid value for Float(): "INVALID" for class Quickbooks::Model::PhysicalAddress for class Quickbooks::Model::Invoice):

Should the Collection class implement Enumberable.

Either with or without support for pagination?

You can call enumerable methods on #entries, but it seems like the collection should implement it, even if it just delegates 'each' to entries.

It seems easy to add an #each, and get a lot of nice stuff.

Bad Error message with no company ID

If you make a query without setting the realm, you just get "RuntimeError: HTTP Error Code: 404" with a HTML error message from Intuit. I can imagine a few reasonable things that could happen:

  • Since (I think) each token is only good for the realm, we could wrap the OAuth::AccessToken with something that keeps track of the realm for the token.
  • We could raise a better exception if there is no realm id. I /think/ that every endpoint requires it, so it could check in BaseService.
  • There might be some way to figure out what it should be with an API call, but I don't think so.

If you tell me which you think is best, I'll be happy it implement it.

inconsistancy in EmailAddress and Phone number.

To make a new customer, for instance, you (I think) say:

Quickbooks::Model::Customer.new(
...
primary_email_address: Quickbooks::Model::EmailAddress.new("[email protected]"), 
primary_phone: Quickbooks::Model::TelephoneNumber.new(free_form_number: "123.123.1234")

It seems like at the least, either phone number should be able to be initialized with a string, or email address should be able to be initialized with a hash. Perhaps each should take both.

Thoughts?

Issues with updating :track_quantity_on_hand? field in Item Model

Hey Guys:

Seeing an issue when trying to update the :track_quantity_on_hand field in the Item. So for instance, if I want to set that particular field to True, and I assign a date value to the :inv_start_date field in addition to assigning a BigDecimal value to the :quantity_on_hand field, and then when I call the .update on the Item Service, I get the below error. I've done a bit of research and I'm thinking this may be an error on QB's side but not completely positive. Has anyone seen this error before?

Quickbooks::IntuitRequestException: An application error has occurred while processing your request:
System Failure Error: java.lang.NullPointerException
from /Users/sunnyisrani/.bundler/ruby/1.9.1/quickbooks-ruby-141059e9b88b/lib/quickbooks/service/base_service.rb:258:in parse_and_raise_exception' from /Users/sunnyisrani/.bundler/ruby/1.9.1/quickbooks-ruby-141059e9b88b/lib/quickbooks/service/base_service.rb:243:incheck_response'
from /Users/sunnyisrani/.bundler/ruby/1.9.1/quickbooks-ruby-141059e9b88b/lib/quickbooks/service/base_service.rb:212:in do_http' from /Users/sunnyisrani/.bundler/ruby/1.9.1/quickbooks-ruby-141059e9b88b/lib/quickbooks/service/base_service.rb:176:indo_http_post'
from /Users/sunnyisrani/.bundler/ruby/1.9.1/quickbooks-ruby-141059e9b88b/lib/quickbooks/service/service_crud.rb:47:in update' from (irb):17 from /Users/sunnyisrani/.rvm/gems/ruby-1.9.3-p448/gems/railties-4.0.0/lib/rails/commands/console.rb:90:instart'
from /Users/sunnyisrani/.rvm/gems/ruby-1.9.3-p448/gems/railties-4.0.0/lib/rails/commands/console.rb:9:in start' from /Users/sunnyisrani/.rvm/gems/ruby-1.9.3-p448/gems/railties-4.0.0/lib/rails/commands.rb:64:in<top (required)>'
from bin/rails:4:in require' from bin/rails:4:in

'

Unable to query resources using where and operators?

Hi!

Thanks for the gem ๐Ÿป!

I've been trying to query the Item service like this:

item_service.query "select * from Item where Name = 'Something'"

But I always get:

IntuitRequestException: An application error has occurred while processing your request

Regardless of the presence of the record.

This is what the request looks like:

RESOURCE = https://qb.sbfinance.intuit.com/v3/company/<id>/query?query=select%20*%20from%20Item%20where%20Name%20=%20'Something'%20STARTPOSITION%201%20MAXRESULTS%2020
BODY(Hash) = {}
HEADERS = {"Content-Type"=>"application/xml"}

I've managed to successfully perform this request on the APIExplorer, and the request created by your gem looks perfect.

Do you have any suspicion on what might be happening?

Nokogiri runtime dependency version

First, thank you for creating this gem. It's a huge help for me!

quickbooks-ruby has a runtime dependency on Nokogiri ~>1.5.9. Is there a reason it can't be bumped to 1.6.1?

The 1.6.0 release of Nokogiri was a big one, as it now "compiles libxml2 and libxslt with the gem. This should fix most installation issues." The 1.5.9 dependency in a Rails Gemfile conflicts with gems with runtime dependencies on more recent versions of Nokogiri - capybara and roo to name two.

I forked, bumped the version, and ran the specs. Everything passes, but I don't know if there are bigger upstream concerns for quickbooks-ruby.

Can't access Bill line item line_num

New to Quickbooks and API-ing it Making good headway with your gem (big Tx) but can't seem to retrieve the line number of bill lines - I can do this for invoices no problem, and I can get various other attributes of the bill line e.g. description.

Still checking my code and not a confident enough developer to be sure but think there may be an issue.

Note. as part of my troubleshoot I checked the intuit API to make sure attributes were mapped OK - it is there. However, I used the API explorer on the Intuit dev site to query a test bill and test invoice - the line numbers do get returned for the invoice but not the bill. Both test records were created in QuickBooks and appear to have line numbers. Is this an Intuit problem?

System Failure Error when Updating Purchase Order

Hey Guys:

Not too sure if this error is just specific to my account or not, but when updating a purchase order i get the following error:

System Failure Error: Could not find resource for relative

Has anyone encountered this before?

Serialize Collection or Array of objects (entries)?

Hi there. Thanks for a great gem.

A quick question. I would like to serialize and persist the query or query_in_batches result (for debugging purposes). I would normally use Marshal.dump, but Marshal doesn't support singleton_methods (same problem with to_yaml and procs).

Have anyone been able to accomplish something similar?

How to add a line item to an invoice?

Hey guys, thank you so much for this library!

I'm trying to figure out how to add a new line item to an existing invoice. Do I use the Invoice Service? Or the Item Service? If you have any reference URLs for me, I'd be most appreciative.

Thanks in advance for your help for rookies like me :)

Nokogirl exception

I get a XPath::SyntaxError on parsing a sales receipt. I don't know xpath too well but looking into it.

The sales receipt is created

Any suggestions?

Exception:

Nokogiri::XML::XPath::SyntaxError: Undefined namespace prefix: //xmlns:IntuitResponse/xmlns:SalesReceipt
    from /Users/jwils/.rvm/gems/ruby-2.0.0-p353@intuit_clover/gems/nokogiri-1.5.11/lib/nokogiri/xml/node.rb:159:in `evaluate'
    from /Users/jwils/.rvm/gems/ruby-2.0.0-p353@intuit_clover/gems/nokogiri-1.5.11/lib/nokogiri/xml/node.rb:159:in `block in xpath'
    from /Users/jwils/.rvm/gems/ruby-2.0.0-p353@intuit_clover/gems/nokogiri-1.5.11/lib/nokogiri/xml/node.rb:150:in `map'
    from /Users/jwils/.rvm/gems/ruby-2.0.0-p353@intuit_clover/gems/nokogiri-1.5.11/lib/nokogiri/xml/node.rb:150:in `xpath'    

Steps to reproduce

service = Quickbooks::Service::SalesReceipt.new
service.company_id = [relm_id]
service.access_token = [access_token]

line = Quickbooks::Model::Line.new
line.line_num = 1
line.description = "My first order."
line.amount = 4.00
line.detail_type = 'SalesItemLineDetail'
detail = Quickbooks::Model::SalesItemLineDetail.new
line.sales_item_line_detail = detail

detail.unit_price = 4.00
detail.quantity = 1

receipt = Quickbooks::Model::SalesReceipt.new


receipt.line_items = [line]

receipt.placed_on = Time.now

service.create(receipt)

Error calculating max_results when using paging options.

IntuitRequestException: Invalid query:
QueryValidationError: value 1500 is too large. Max allowed value is 1000

The relevant line is in base_service.rb line 100. When calculating max_results you shouldn't multiply by the page number. That will keep increasing the max_results value until it overruns the maximum value allowed by Quickbooks online.

I believe the line should be:
max_results = per_page

Creating SalesReceipt (& SalesItemLineDetail).

I've been trying to create a SalesReceipt unsuccessfully. I've looked at the spec examples, but I keep running into a few errors.

  1. undefined method each' for #<Quickbooks::Model::Line:0x007fac35488558> if I addModel::Line` as given in the specs.
  2. I get various different errors if I opt for Model::SalesItemLineDetail, such as the one above (with a different model name), or this undefined method to_xml for "[email protected]":String`

Feature: Implement Reports API

It looks like QBO recently exposed a reports API. I'd like to take a stab at implementing some of the more important reports (Balance Sheet, P&L).

Any tips as to approach? I was planning to create a Report base class and inherit for the individual reports, but I'm not sure how much is shared.

Documentation needs update for Rails 4.1

The Rails 4.1 session api changed a bit, so you'd have to use

session[:qb_request_token] = Marshal.dump(token)
and
at = Marshal.load(session[:qb_request_token]).get_access_token(:oauth_verifier => params[:oauth_verifier])

I'll be happy to make a PR, if you like.

System Failure Error: Bad arguments passed

When I try to create an Invoice, I am getting the following error:

/Users/dlindahl/app/qbo/.bundle/gems/quickbooks-ruby-0.0.5/lib/quickbooks/service/base_service.rb:268:in `parse_and_raise_exception': An application error has occurred while processing your request: (IntuitRequestException)
  System Failure Error: Bad arguments passed to public com.intuit.schema.finance.v3.IntuitResponse com.intuit.qbo.servicev3.rest.Customer.create(java.lang.String,com.intuit.schema.finance.v3.Customer,java.lang.String,java.lang.String,java.lang.String) throws com.intuit.qbo.servicev3.FdmException  ( java.lang.String 1032845425, com.intuit.schema.finance.v3.Invoice com.intuit.schema.finance.v3.Invoice@59687eb7, null, null, null )
  from /Users/dlindahl/app/qbo/.bundle/gems/quickbooks-ruby-0.0.5/lib/quickbooks/service/base_service.rb:255:in `check_response'
  from /Users/dlindahl/app/qbo/.bundle/gems/quickbooks-ruby-0.0.5/lib/quickbooks/service/base_service.rb:228:in `do_http'
  from /Users/dlindahl/app/qbo/.bundle/gems/quickbooks-ruby-0.0.5/lib/quickbooks/service/base_service.rb:194:in `do_http_post'
  from /Users/dlindahl/app/qbo/.bundle/gems/quickbooks-ruby-0.0.5/lib/quickbooks/service/service_crud.rb:17:in `create'
  from /Users/dlindahl/app/qbo/lib/qbo/tasks/invoicing.rb:63:in `create'
  from /Users/dlindahl/app/qbo/.bundle/gems/thor-0.18.1/lib/thor/command.rb:27:in `run'
  from /Users/dlindahl/app/qbo/.bundle/gems/thor-0.18.1/lib/thor/invocation.rb:120:in `invoke_command'
  from /Users/dlindahl/app/qbo/.bundle/gems/thor-0.18.1/lib/thor.rb:363:in `dispatch'
  from /Users/dlindahl/app/qbo/.bundle/gems/thor-0.18.1/lib/thor/base.rb:439:in `start'
  from bin/qbo:5:in `<main>'

Any ideas what I'm missing or might be doing wrong?

The invoice and line item validations return true if that helps weed out anything.

Payment against invoices

Is there anyway I can create a payment against a specific invoice id? I was looking at payment.rb, but wasn't sure where to set the invoice id. Any ideas?

Can't Access Customer Currency

Hi, I raised 130 - turned out to be an Intuit bug, but I now need the customer currency and it is in the response but doesn't seem to come through the model. I can get it fine (as the name and value hash) for the other entities where I need it i.e. vendors, invoice lines and bill lines.

e.g. fake company below

 ------ QUICKBOOKS-RUBY REQUEST ------
METHOD = get
RESOURCE = https://qb.sbfinance.intuit.com/v3/company/1230511455/customer/5
REQUEST BODY:
{}
REQUEST HEADERS = {"Content-Type"=>"application/xml", "Accept"=>"application/xml",   "Accept-Encoding"=>"gzip, deflate"}
Completed 200 OK in 1545ms (Views: 1.1ms | ActiveRecord: 27.7ms)
 ------ QUICKBOOKS-RUBY RESPONSE ------
 RESPONSE CODE = 200
 RESPONSE BODY:
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <IntuitResponse xmlns="http://schema.intuit.com/finance/v3" time="2014-06-  30T05:00:18.470-07:00">
  <Customer domain="QBO" sparse="false">
    <Id>5</Id>
 <SyncToken>1</SyncToken>
<MetaData>
  <CreateTime>2014-06-23T08:49:53-07:00</CreateTime>
  <LastUpdatedTime>2014-06-23T08:53:04-07:00</LastUpdatedTime>
</MetaData>
<FullyQualifiedName>Delta Services ltd.</FullyQualifiedName>
<CompanyName>Delta Services ltd.</CompanyName>
<DisplayName>Delta Services ltd.</DisplayName>
<PrintOnCheckName>Delta Services ltd.</PrintOnCheckName>
<Active>true</Active>
<Taxable>false</Taxable>
<Job>false</Job>
<BillWithParent>false</BillWithParent>
<Balance>0</Balance>
<BalanceWithJobs>0</BalanceWithJobs>
<CurrencyRef name="British Pound Sterling">GBP</CurrencyRef>
<PreferredDeliveryMethod>Email</PreferredDeliveryMethod>
{"id"=>5, "sync_token"=>1, "meta_data"=>{"create_time"=>2014-06-23 16:49:53 +0100, "last_updated_time"=>2014-06-23 16:53:04 +0100}, "title"=>nil, "given_name"=>nil, "middle_name"=>nil, "family_name"=>nil, "company_name"=>"Delta Services ltd.", "display_name"=>"Delta Services ltd.", "print_on_check_name"=>"Delta Services ltd.", "active?"=>true, "primary_phone"=>nil, "alternate_phone"=>nil, "mobile_phone"=>nil, "fax_phone"=>nil, "primary_email_address"=>nil, "web_site"=>nil, "billing_address"=>nil, "shipping_address"=>nil, "job"=>"false", "bill_with_parent"=>"false", "parent_ref"=>nil, "level"=>nil, "sales_term_ref"=>nil, "payment_method_ref"=>nil, "balance"=>#<BigDecimal:7ff5f1b7edc0,'0.0',9(18)>, "open_balance_date"=>nil, "balance_with_jobs"=>#<BigDecimal:7ff5ed890130,'0.0',9(18)>, "preferred_delivery_method"=>"Email", "resale_num"=>nil, "suffix"=>nil, "fully_qualified_name"=>"Delta Services ltd.", "taxable"=>"false", "notes"=>nil}

Unable to create an invoice

I'm sure not whether this is bug or not. Here is my code of creating an invoice:

def create_invoice_test
  current_user.invoices do |invoice|
    data = { 
      "Line" => [
        {
          "Amount" => 100.00, 
          "DetailType" => "SalesItemLineDetail", "SalesItemLineDetail" => {"ItemRef" => {value: 1, name: "Services"}}
        }
      ],
      "CustomerRef" => {value: 21}
    }

    consumer = create_consumer
    response = consumer.post "https://quickbooks.api.intuit.com/v3/company/#{my_company_id}/invoice", data
    p "-------response:-------", response
  end
end

def create_consumer
    access_token = current_user.organization.qb_access_token
    access_token_secret = current_user.organization.qb_access_token_secret
    OAuth::AccessToken.new(QuickBooksHelper.oauth_consumer, access_token, access_token_secret)
end

It doesn't print anything. What am I doing wrong? How do I create an invoice?
Yes, I'm using quickbooks-ruby gem.

Invoice Preferences

There doesn't seem to be a way to set the Invoice terms and to_be_email variable to allow email delivery in this version as there were in Quickeebooks.

Undefined method 'each' for InvoiceLineItem

I keep getting this when it hits: created_invoice = service.create(invoice)

NoMethodError (undefined method 'each' for #<Quickbooks::Model::InvoiceLineItem:0x007ffadb78f310>): lib/quickbooks_api/model/base_model.rb:14:in 'to_xml_inject_ns' lib/quickbooks_api/model/base_model.rb:26:in 'to_xml_ns' lib/quickbooks_api/service/service_crud.rb:20:in 'create'

Support Refund Receipts

Refund receipts were just recently added to the api, docs can be found here.

An app I am working on requires this integration so I have forked the repo and will take a stab at adding support myself.

Having trouble with apostrophes in queries

I am trying to search a customer with an apostrophe in the name. The query that the query explorer generates is

Select * from customer where companyname %3D'mcgee%5C's'

which returns the correct data. The gem generates the following query which fails

Select+*+from+customer+where+companyname+%3D%27mcgee%255C%27s%27

The query builder uses URI.encode_www_form_component to generate the proper encoded string but i think apostrophes need to be ignored.

Standard way to page through collections

It feels like there should be a standard way to page through a Quickbooks::Collection instance.

I'm currently using something like this pattern most of the time.

page = 1
begin
  results = Vendor.query(nil, page: page, per_page: 1_000)
  results.entries.each do |entry|
    # ...
  end
  page += 1
end until results.count < per_page

I'd be happy to implement the feature but wanted to get thoughts from others about the design before I start. Is this something that others would want to? Are there any thoughts about the design?

Is it possible to set a customer_id while creating a new customer?

Is it possible to set a customer_id (for eg: their unique user_id in the Rails app), so that we can also generate Invoices / Sales Receipt for the customer with the same id?

If we can't, are there any other ways to creating Invoices / Sales receipts for particular customers?

Usecase: I'll be creating customers on QBO only after they initiate a transaction, and later on refer to the recently created customer_id to record payment / generate invoices / sales receipts, etc.

Getting all results from a given service

Not an issue per se, but I figured I'd post my methodology for getting ALL records from a given service using the drained design pattern.

Lets take customers for instance. I've got more than 1000 customers, so I'm going to have to make more than one API call to get these customers. Here's how I'm doing it:

class QuickbooksHelper
  def self.all_customers
    all('Customer')
  end

  def self.all(model)
    drained = false
    page = 1
    count = 1000
    v = []
    while !drained
      res = new_service(model).query("Select * From #{model}", :page => page, :per_page => count)
      v.concat(res.entries)
      page = page + 1
      drained = true if res.entries.count < count
    end
    v
  end

  def self.new_service(name)
    service_class = "Quickbooks::Service::#{name}".split('::').inject(Object) {|o,c| o.const_get c}
    service_class.new(access_token: access_token, company_id: REALM)
  end
end

# Now I can get all customers by using:
QuickbooksHelper.all_customers

Wondering if this might be something we might want to integrate into the base service class so that we can do something like:

customers_service = Quickbooks::Service::Customer.new
all_customers = customers_service.all

This would provide a more "activerecord" style interface for getting all the results from the api. If we don't integrate it into the base service class, at least this comment is here for people to reference ๐Ÿ˜„

Drop 1.8.7/REE support?

Hello! While working with the gem, we noticed it is locked to the last version of nokogiri that supports 1.8.7. However, when you do a fresh install of the gem, it grabs the latest activemodel (and activesupport) that only supports 1.9.3.

Is there a reason why REE support is being kept in?

Add Company

Hi,

I tried create company with name Children's
and got error

Display name :display_name cannot contain a colon (:).

also, can you update gem in rubygems
QueryBuilder not available from there.

Thanks!

Sparse update and inactivate name list entities with batch operation

There are 2 related issues:

  1. The interface of BatchRequest#add does not take options (e.g. sparse). Changing that seems non-trivial.
  2. Similar to Customer#delete, the batch operation should be smart enough to inactivate a Name List Entity instead of deleting it. When the operation is set to "delete", BatchRequest#add can covert the operation to "update" and set active = false as a sparse update.

Query error with quotes

when you try select Customer with Name = 'Children's etc....'
request like this - you get an error
customer = @service.query("SELECT * FROM CUSTOMER WHERE DisplayName = '#{company.name[0..49]}'").entries.first
if you try use gsub("'", "'") for escape quote it's doesn't work correct

Uploading a file (pdf, jpeg, xls....)

I've got a Python script which is supposed to upload files to Quick Books by their API. I've faced into some issues which I couldn't have solved such as "This type can't be consumed" (for application/pdf, xml and others) or when I used "multipart/form-data" it said "Could find no content-disposition header with in a part" or when I'd changed it a bit, it seemed to work well (there were no errors in the response) but the attachments weren't really uploaded.

I'd like to upload a file (pdf, jpeg, xls....) using this gem to make sure it really works well and there is no mistake in the API of Quick Books. I'm familiar with this gem but didn't find a model or service in its source code which looked like the one I was looking for (Attachable, File or something else).

So is there any simple example?

NameError: uninitialized constant Quickbooks

I am getting following errors, when I am trying to instantiate a customer service:

service = Quickbooks::Service::Customer.new

NameError: uninitialized constant Quickbooks

[NOTE: Quickbooks connection is successful and is able to generate new access_token, access_secret and realmid].

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.