Looking for Ruby on Rails development company?
Contact Us

Integration of Quickbooks in Rails App | Part 1 | Inkoop Blog

Quickbooks is a software which is mainly used to organize the expenses of a small scale or medium scaled business. We talk about how to use Quickbooks ruby gem to manage customers on Quickbooks.

Posted by Ameena on 20 Mar 2017
Integration of Quickbooks in Rails App | Part 1 | Inkoop Blog

Quickbooks is a software which is mainly used to organize the expenses of a small scale or medium scaled business.

Setup

  • Install gems omniauth and omniauth-quickbooks to authenticate with Quickbooks.

  • By default, the gem quickbooks-ruby will be in production mode but you can run it in other mode (development or testing).

  • Create a rails initializer and set the OAUTH_CONSUMER_KEY and OAUTH_CONSUMER_SECRET properly and set the callback in the routes in order to inform rails about the request.

  • You can set the OAuth access credentials with four fields access_token, access_secret, company_id, token_expires_at to avoid connecting to Quickbooks often.

How to create/update users

After, all the important and basic setup is done now its time to learn how to generate invoices for the user. Without an user generating invoices makes no sense. Hence, the first thing is to know the user. There are two possible cases for this:

  1. If the user does not exist in Quickbooks, create the user and generate the invoice.

  2. If the user already exists in Quickbooks, update the user and generate the invoice.

Case 1:

If the user does not exist then instantiate a Service object on the Customer and create it.

...
def build_user_information
  service = Quickbooks::Service::Customer.new
  service.access_token = access_token
  service.company_id = company_id
  quickbooks_customer = Quickbooks::Model::Customer.new
  quickbooks_customer = set_user_information quickbooks_customer
  service.create(quickbooks_customer)
end

def set_user_information quickbooks_customer
  # Name
  quickbooks_customer.given_name = quickbooks_customer.display_name =
  quickbooks_customer.print_on_check_name =
  quickbooks_customer.fully_qualified_name = "First Last"
  # Email
  quickbooks_email = Quickbooks::Model::EmailAddress.new
  quickbooks_email.address = "firstlast@abc.com"
  quickbooks_customer.primary_email_address = quickbooks_email
  # Phone Number
  quickbooks_phone_number = Quickbooks::Model::TelephoneNumber.new
  quickbooks_phone_number.free_form_number = 9876543210
  quickbooks_customer.primary_phone = quickbooks_phone_number
  # Address
  quickbooks_address = Quickbooks::Model::PhysicalAddress.new
  quickbooks_address.line1 = "line1"
  quickbooks_address.line2 = "line2"
  quickbooks_address.city = "city"
  quickbooks_address.country = "country"
  quickbooks_customer.billing_address = quickbooks_address
  quickbooks_customer
end

The above piece of code has two methods,

  • The first method is to create the user in the Quickbooks.

  • The second method is to set the data using an object of Quickbooks's customer.

service.create(quickbooks_customer) will create a new Quickbooks customer with an id as its primary key, say 21 in this case.

Case 2:

If the user already exists in Quickbooks then get the customer and update it.

...
def update_user_information
  service = Quickbooks::Service::Customer.new
  service.access_token = access_token
  service.company_id = company_id
  quickbooks_customer = service.fetch_by_id(21)
  quickbooks_customer = set_user_information quickbooks_customer
  service.update(quickbooks_customer)
end

update_user_information is to update the data of the existing customer.

There are couples of things that you can play with the service object

users = service.all

users will be an array with all the objects of the service (customer in our case).

users = service.query()

It will be a SQL like structure to retrieve objects.

In the next post there will be a procedure to generate the invoices for the created customer.

Read part 2 of the blog which talks about managing invoices in Quickbooks.

Ameena


Looking for Ruby on Rails development company?
Contact Us

Related Services.



Hire ReactJS Developers
Hire Gatsby Developers
Hire NextJS Developers

We support the Open Source community.



Have a Project in mind?