mirror of
https://github.com/rickbarrette/redmine_qbo.git
synced 2025-11-08 17:04:23 -05:00
Added TimeActivty Creation
A new Time Activity is now created when an issue is closed.
This commit is contained in:
3
Gemfile
3
Gemfile
@@ -3,3 +3,6 @@ source 'https://rubygems.org'
|
||||
|
||||
gem 'quickbooks-ruby'#, :git => 'https://github.com/ruckus/quickbooks-ruby.git'
|
||||
gem 'oauth-plugin'#, '~> 0.5.1'
|
||||
gem 'oauth'
|
||||
gem 'roxml'
|
||||
gem 'nokogiri'
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
class QboController < ApplicationController
|
||||
unloadable
|
||||
|
||||
# Load OAuth Token
|
||||
QB_KEY = Setting.plugin_redmine_qbo['settingsOAuthConsumerKey']
|
||||
QB_SECRET = Setting.plugin_redmine_qbo['settingsOAuthConsumerSecret']
|
||||
|
||||
@@ -25,6 +26,9 @@ class QboController < ApplicationController
|
||||
def index
|
||||
end
|
||||
|
||||
#
|
||||
# Called when the user requests that Redmine to connect to QBO
|
||||
#
|
||||
def authenticate
|
||||
callback = "https://rickbarrette.org/redmine/oauth_callback"
|
||||
token = $qb_oauth_consumer.get_request_token(:oauth_callback => callback)
|
||||
@@ -32,6 +36,9 @@ class QboController < ApplicationController
|
||||
redirect_to("https://appcenter.intuit.com/Connect/Begin?oauth_token=#{token.token}") and return
|
||||
end
|
||||
|
||||
#
|
||||
# Called by QBO after authentication has been processed
|
||||
#
|
||||
def oauth_callback
|
||||
at = session[:qb_request_token].get_access_token(:oauth_verifier => params[:oauth_verifier])
|
||||
token = at.token
|
||||
@@ -41,6 +48,7 @@ class QboController < ApplicationController
|
||||
#There can only be one...
|
||||
Qbo.destroy_all
|
||||
|
||||
# Save the authentication information
|
||||
qbo = Qbo.new
|
||||
qbo.token = token
|
||||
qbo.secret = secret
|
||||
@@ -55,6 +63,9 @@ class QboController < ApplicationController
|
||||
|
||||
end
|
||||
|
||||
#
|
||||
# Synchronizes the QboCustomer table with QBO
|
||||
#
|
||||
def sync
|
||||
if Qbo.exists? then
|
||||
qbo = Qbo.first
|
||||
|
||||
@@ -23,8 +23,6 @@ class QboHookListener < Redmine::Hook::ViewListener
|
||||
# Generate the drop down list of quickbooks contacts
|
||||
select = context[:form].select :qbo_customer_id, QboCustomers.all.pluck(:name, :id), :selected => selected, include_blank: true
|
||||
return "<p>#{select}</p>"
|
||||
|
||||
#TODO save selection to Issues.qbp_customer_id
|
||||
end
|
||||
|
||||
# View Issue
|
||||
@@ -42,14 +40,48 @@ class QboHookListener < Redmine::Hook::ViewListener
|
||||
end
|
||||
|
||||
# New Issue Saved
|
||||
def controller_issues_new_after_save(context={})
|
||||
def controller_issues_edit_after_save(context={})
|
||||
issue = context[:issue]
|
||||
#TODO check if closed then create new quickbooks billable time entery
|
||||
end
|
||||
qbo = Qbo.first
|
||||
|
||||
# Existing Issue updated
|
||||
def controller_issues_edit_after_save (context={})
|
||||
issue = context[:issue]
|
||||
#TODO check if closed then create new quickbooks billable time entery
|
||||
qb_oauth_consumer = OAuth::Consumer.new(Setting.plugin_redmine_qbo['settingsOAuthConsumerKey'], Setting.plugin_redmine_qbo['settingsOAuthConsumerSecret'], {
|
||||
:site => "https://oauth.intuit.com",
|
||||
:request_token_path => "/oauth/v1/get_request_token",
|
||||
:authorize_url => "https://appcenter.intuit.com/Connect/Begin",
|
||||
:access_token_path => "/oauth/v1/get_access_token"
|
||||
})
|
||||
|
||||
# Check to see if we have registered with QBO
|
||||
if not qbo.nil? then
|
||||
# Connect to QBO
|
||||
oauth_client = OAuth::AccessToken.new(qb_oauth_consumer, qbo.token, qbo.secret)
|
||||
|
||||
# Prepare to create a new Time Activity
|
||||
time_service = Quickbooks::Service::TimeActivity.new(:company_id => qbo.realmId, :access_token => oauth_client)
|
||||
time_entry = Quickbooks::Model::TimeActivity.new
|
||||
|
||||
# Convert float spent time to hours and minutes
|
||||
hours = issue.spent_hours.to_i
|
||||
minutesDecimal = (( issue.spent_hours - hours) * 60)
|
||||
minutes = minutesDecimal.to_i
|
||||
|
||||
# If the issue is closed, then create a new billable time activty for the customer
|
||||
# TODO Add configuration settings for employee_id, hourly_rate, item_id
|
||||
if issue.status.is_closed? then
|
||||
time_entry.description = issue.subject
|
||||
time_entry.employee_id = 59
|
||||
time_entry.customer_id = issue.qbo_customer_id
|
||||
time_entry.billable_status = "Billable"
|
||||
time_entry.hours = hours
|
||||
time_entry.minutes = minutes
|
||||
time_entry.name_of = "Employee"
|
||||
time_entry.txn_date = Date.today
|
||||
time_entry.hourly_rate = 50
|
||||
time_entry.item_id = 19
|
||||
time_entry.start_time = issue.start_date
|
||||
time_entry.end_time = Time.now
|
||||
time_service.create(time_entry)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user