Compare commits

...

7 Commits

Author SHA1 Message Date
681e7f8047 2026.3.16 2026-03-26 08:13:01 -04:00
4a6c414d9e Updated customer form to use auto complete to help prevent duplicate customer enteries 2026-03-26 07:56:59 -04:00
925cb1d2bc 2026.3.15
Note: breaking change, need to update settings
2026-03-22 14:24:22 -04:00
1dcccd7b98 Merge branch 'master' into rails-7 2026-03-21 10:28:46 -04:00
f73973a4e1 2026.3.14 2026-03-21 10:27:33 -04:00
7cd388dbd4 Fixed webhook 2026-03-21 10:26:57 -04:00
7149e85d37 Updated how settings are handled.
Note: Breaking change. Will need to update settings after update
2026-03-21 10:25:46 -04:00
8 changed files with 32 additions and 13 deletions

View File

@@ -14,7 +14,7 @@ class QboWebhookProcessor
def self.process!(request:)
body = request.raw_post
signature = request.headers['intuit-signature']
secret = Setting.plugin_redmine_qbo['settingsWebhookToken']
secret = RedmineQbo.webhook_token_secret
raise "Invalid signature" unless valid_signature?(body, signature, secret)

View File

@@ -48,7 +48,7 @@ class WebhookProcessJob < ActiveJob::Base
Redmine::Hook.call_hook( :qbo_additional_entities ).each do |context|
next unless context
Array(context).each do |entity|
jobs.push(entity)
entities.push(entity)
log "Added additional QBO entity #{entity}"
end
end

View File

@@ -75,11 +75,8 @@ module QuickbooksOauth
# This method will construct and return an instance of the OAuth2::Client class that is configured with the consumer key, consumer secret and the appropriate URLs for the Intuit OAuth2 service. It will also set the sandbox mode based on the plugin settings. This method is used by the instance method oauth_client to create a new OAuth2 client for each instance of the model that includes this concern.
def construct_oauth2_client
oauth_consumer_key = Setting.plugin_redmine_qbo['settingsOAuthConsumerKey']
oauth_consumer_secret = Setting.plugin_redmine_qbo['settingsOAuthConsumerSecret']
# Are we are playing in the sandbox?
Quickbooks.sandbox_mode = Setting.plugin_redmine_qbo[:sandbox] ? true : false
Quickbooks.sandbox_mode = RedmineQbo.sandbox_mode?
log "Sandbox mode: #{Quickbooks.sandbox_mode}"
options = {
@@ -87,7 +84,7 @@ module QuickbooksOauth
authorize_url: "https://appcenter.intuit.com/connect/oauth2",
token_url: "https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer"
}
OAuth2::Client.new(oauth_consumer_key, oauth_consumer_secret, options)
OAuth2::Client.new(RedmineQbo.oauth_consumer_key, RedmineQbo.oauth_consumer_secret, options)
end
end

View File

@@ -7,7 +7,7 @@
<div class="clearfix">
<%=t(:label_display_name)%>
<div class="input">
<%= f.text_field :name, required: true, autocomplete: "off" %>
<%= f.text_field :name, required: true, class: "customer-name", autocomplete: "off", data: { autocomplete_url: "/customers/autocomplete" } %>
</div>
</div>

View File

@@ -1,4 +1,4 @@
<h2><%=t(:field_customer)%> #<%= @customer.id %> - <%= link_to @customer.to_s, "https://#{Setting.plugin_redmine_qbo[:sandbox] ? "sandbox" : "app"}.qbo.intuit.com/app/customerdetail?nameId=#{@customer.id}", target: :_blank %> </h2>
<h2><%=t(:field_customer)%> #<%= @customer.id %> - <%= link_to @customer.to_s, "https://#{RedmineQbo.sandbox_mode? ? "sandbox" : "app"}.qbo.intuit.com/app/customerdetail?nameId=#{@customer.id}", target: :_blank %> </h2>
<div class="issue">
<div class="splitcontent">

View File

@@ -6,17 +6,17 @@
<div class="box tabular">
<p>
<label><%= t(:label_client_id) %></label>
<%= text_field_tag 'settings[settingsOAuthConsumerKey]', settings['settingsOAuthConsumerKey'], size: 50 %>
<%= text_field_tag 'settings[oauth_consumer_key]', settings[:oauth_consumer_key], size: 50 %>
</p>
<p>
<label><%= t(:label_client_secret) %></label>
<%= password_field_tag 'settings[settingsOAuthConsumerSecret]', settings['settingsOAuthConsumerSecret'], size: 50 %>
<%= password_field_tag 'settings[oauth_consumer_secret]', settings[:oauth_consumer_secret], size: 50 %>
</p>
<p>
<label><%= t(:label_webhook_token) %></label>
<%= text_field_tag 'settings[settingsWebhookToken]', settings['settingsWebhookToken'], size: 50 %>
<%= text_field_tag 'settings[webhook_token]', settings[:webhook_token], size: 50 %>
</p>
<p>

View File

@@ -14,7 +14,7 @@ Redmine::Plugin.register :redmine_qbo do
name 'Redmine QBO plugin'
author 'Rick Barrette'
description 'A pluging for Redmine to connect with QuickBooks Online to create Time Activity Entries for billable hours logged when an Issue is closed'
version '2026.3.13'
version '2026.3.16'
url 'https://github.com/rickbarrette/redmine_qbo'
author_url 'https://barrettefabrication.com'
settings default: {empty: true}, partial: 'qbo/settings'

View File

@@ -30,4 +30,26 @@ module RedmineQbo
RedmineQbo::Hooks::UsersShowHookListener
RedmineQbo::Hooks::ViewHookListener
end
def self.settings
Setting.plugin_redmine_qbo
end
def self.oauth_consumer_key
settings[:oauth_consumer_key]
end
def self.oauth_consumer_secret
settings[:oauth_consumer_secret]
end
def self.sandbox_mode?
settings[:sandbox] ? true : false
end
def self.webhook_token_secret
settings[:webhook_token]
end
end