Implement Employee synchronization; add EmployeeSyncJob and EmployeeSyncService for improved background processing and logging

This commit is contained in:
2026-02-27 23:07:12 -05:00
parent 03109d5775
commit 6f8af9bba8
6 changed files with 150 additions and 40 deletions

View File

@@ -12,38 +12,14 @@ class Employee < ActiveRecord::Base
has_many :users
validates_presence_of :id, :name
def self.sync
qbo = Qbo.first
employees = qbo.perform_authenticated_request do |access_token|
service = Quickbooks::Service::Employee.new(company_id: qbo.realm_id, access_token: access_token)
service.all
end
return unless employees
transaction do
employees.each { |e|
logger.info "Processing employee #{e.id}"
employee = find_or_create_by(id: e.id)
employee.name = e.display_name
employee.id = e.id
employee.save!
}
end
def self.sync
EmployeeSyncJob.perform_later(full_sync: true)
end
# Sync a single employee by ID, typically triggered by a webhook notification or manual sync request
def self.sync_by_id(id)
qbo = Qbo.first
employee = qbo.perform_authenticated_request do |access_token|
service = Quickbooks::Service::Employee.new(company_id: qbo.realm_id, access_token: access_token)
service.fetch_by_id(id)
end
return unless employee
employee = find_or_create_by(id: employee.id)
employee.name = employee.display_name
employee.id = employee.id
employee.save!
EmployeeSyncJob.perform_later(id: id)
end
end