mirror of
https://github.com/rickbarrette/redmine_qbo.git
synced 2025-11-08 08:54:23 -05:00
Merge branch 'master' into redmine-4
This commit is contained in:
@@ -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?
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user