Merge branch 'master' into redmine-4

This commit is contained in:
2022-02-12 09:19:36 -05:00
2 changed files with 30 additions and 3 deletions

View File

@@ -88,6 +88,8 @@ class QboController < ApplicationController
# Quickbooks Webhook Callback
def qbo_webhook
logger.debug "Quickbooks is calling webhook"
# check the payload
signature = request.headers['intuit-signature']
key = Setting.plugin_redmine_qbo['settingsWebhookToken']
@@ -111,6 +113,8 @@ 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
@@ -122,7 +126,13 @@ class QboController < ApplicationController
obj.destroy(id)
#if not then update!
else
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?

View File

@@ -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