diff --git a/app/controllers/qbo_controller.rb b/app/controllers/qbo_controller.rb index 4851a59..c73cf67 100644 --- a/app/controllers/qbo_controller.rb +++ b/app/controllers/qbo_controller.rb @@ -87,6 +87,8 @@ class QboController < ApplicationController # Quickbooks Webhook Callback def qbo_webhook + + logger.debug "Quickbooks is calling webhook" # check the payload signature = request.headers['intuit-signature'] @@ -110,10 +112,12 @@ class QboController < ApplicationController # TODO rename all other models! name.prepend("Qbo") if not name.eql? "Customer" - + + logger.debug "Casting #{name.constantize} to obj" + # Magicly initialize the correct class obj = name.constantize - + # for merge events obj.destroy(entity['deletedId']) if entity['deletedId'] @@ -122,7 +126,13 @@ class QboController < ApplicationController obj.destroy(id) #if not then update! else - obj.sync_by_id(id) + begin + obj.sync_by_id(id) + rescue => e + logger.error "Failed to call sync_by_id on obj" + logger.error e.message + logger.error e.backtrace.join("\n") + end end end @@ -134,12 +144,15 @@ class QboController < ApplicationController else render nothing: true, status: 400 end + + logger.debug "Quickbooks webhook complete" end # # Synchronizes the QboCustomer table with QBO # def sync + logger.debug "Syncing EVERYTHING" # Update info in background Thread.new do if Qbo.exists? diff --git a/app/models/qbo_invoice.rb b/app/models/qbo_invoice.rb index 184e413..0f23906 100644 --- a/app/models/qbo_invoice.rb +++ b/app/models/qbo_invoice.rb @@ -23,6 +23,7 @@ class QboInvoice < ActiveRecord::Base # sync ALL the invoices def self.sync + logger.debug "Syncing all invoices" last = Qbo.first.last_sync query = "SELECT Id, DocNumber FROM Invoice" @@ -42,6 +43,7 @@ class QboInvoice < ActiveRecord::Base #sync by invoice ID def self.sync_by_id(id) + logger.debug "Syncing invoice #{id}" #update the information in the database invoice = get_base.fetch_by_id(id) process_invoice invoice @@ -56,6 +58,8 @@ class QboInvoice < ActiveRecord::Base # skip this issue if the issue customer is not the same as the invoice customer return if issue.customer_id != invoice.customer_ref.value.to_i + logger.debug "Attaching invoice #{invoice.id} to issue #{issue.id}" + # Load the invoice into the database qbo_invoice = QboInvoice.find_or_create_by(id: invoice.id) qbo_invoice.doc_number = invoice.doc_number @@ -73,6 +77,7 @@ class QboInvoice < ActiveRecord::Base # processes the invoice into the system def self.process_invoice(invoice) + logger.debug "Processing invoice" # Check the private notes if not invoice.private_note.nil? invoice.private_note.scan(/#(\w+)/).flatten.each { |issue| @@ -105,6 +110,7 @@ class QboInvoice < ActiveRecord::Base break if vin.nil? if not cf.string_value.to_s.eql? vin cf.string_value = vin.to_s + logger.debug "VIN has changed" is_changed = true end end @@ -154,6 +160,14 @@ class QboInvoice < ActiveRecord::Base rescue # Do nothing, probaly too many vehicles on the invoice. This is a problem with how it's billed # TODO Add notes in memo area + if is_changed + logger.debug "Trying to update invoice" + get_base.update(invoice) if is_changed + end + rescue + #do nothing + logger.fatal "Failed to update invoice" + end end end