mirror of
https://github.com/rickbarrette/redmine_qbo.git
synced 2026-02-13 09:13:58 -05:00
Compare commits
7 Commits
2026.1.3
...
16fe07f177
| Author | SHA1 | Date | |
|---|---|---|---|
| 16fe07f177 | |||
| 9257b2f938 | |||
| 0227681e92 | |||
| c034696810 | |||
| ffdabccd84 | |||
| 1f03908040 | |||
| 43a5317b4e |
13
README.md
13
README.md
@@ -35,6 +35,7 @@ The goal of this project is to allow Redmine to connect with QuickBooks Online t
|
|||||||
* **Invoices:** Automatically attached to an Issue if a line item contains a hashtag number (e.g., `#123`).
|
* **Invoices:** Automatically attached to an Issue if a line item contains a hashtag number (e.g., `#123`).
|
||||||
* **Custom Fields:** Invoice Custom Fields are matched to Issue Custom Fields and are automatically updated in QuickBooks. (Useful for extracting Mileage In/Out from the Issue to update the Invoice).
|
* **Custom Fields:** Invoice Custom Fields are matched to Issue Custom Fields and are automatically updated in QuickBooks. (Useful for extracting Mileage In/Out from the Issue to update the Invoice).
|
||||||
* **Sync:** Customers are automatically updated in the local database.
|
* **Sync:** Customers are automatically updated in the local database.
|
||||||
|
* **Plugin View Hooks** Allows intergration of other features supported by capainion plugins, for example [redmine_qbo_vehicles](https://github.com/rickbarrette/redmine_qbo_vehicles) adds customer vehicle interation
|
||||||
|
|
||||||
## Prerequisites
|
## Prerequisites
|
||||||
|
|
||||||
@@ -88,13 +89,13 @@ The goal of this project is to allow Redmine to connect with QuickBooks Online t
|
|||||||
|
|
||||||
To enable automatic Time Activity entries for an Issue, you simply need to assign a Customer to an Issue via the dropdowns in the issue creation/update form.
|
To enable automatic Time Activity entries for an Issue, you simply need to assign a Customer to an Issue via the dropdowns in the issue creation/update form.
|
||||||
|
|
||||||
**Note:** After the initial synchronization, this plugin will receive push notifications via Intuit's webhook service.
|
**Note:** After the initial synchronization, this plugin will receive push notifications via Intuit's webhook service.
|
||||||
|
|
||||||
## TODO
|
## Companion Plugin Hooks
|
||||||
|
* :pdf_left, { issue: issue }
|
||||||
* Add hooks to intergrate other plugins, i.e. customer vehicles for example
|
* :pdf_right, { issue: issue }
|
||||||
* MORE Stuff as I make it up...
|
* :process_invoice_custom_fields, { issue: issue, invoice: invoice }
|
||||||
|
* :show_customer_view_right, {customer: @customer}
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ class Employee < ActiveRecord::Base
|
|||||||
return unless employees
|
return unless employees
|
||||||
|
|
||||||
transaction do
|
transaction do
|
||||||
# Update the item table
|
|
||||||
employees.each { |e|
|
employees.each { |e|
|
||||||
logger.info "Processing employee #{e.id}"
|
logger.info "Processing employee #{e.id}"
|
||||||
employee = find_or_create_by(id: e.id)
|
employee = find_or_create_by(id: e.id)
|
||||||
|
|||||||
@@ -56,7 +56,6 @@ class Estimate < ActiveRecord::Base
|
|||||||
|
|
||||||
# update an estimate
|
# update an estimate
|
||||||
def self.update(id)
|
def self.update(id)
|
||||||
# Update the item table
|
|
||||||
qbo = Qbo.first
|
qbo = Qbo.first
|
||||||
estimate = qbo.perform_authenticated_request do |access_token|
|
estimate = qbo.perform_authenticated_request do |access_token|
|
||||||
service = Quickbooks::Service::Estimate.new(:company_id => qbo.realm_id, :access_token => access_token)
|
service = Quickbooks::Service::Estimate.new(:company_id => qbo.realm_id, :access_token => access_token)
|
||||||
|
|||||||
@@ -21,9 +21,9 @@
|
|||||||
<%= issue_fields_rows do |rows|
|
<%= issue_fields_rows do |rows|
|
||||||
rows.left l(:field_status), @issue.status.name, :class => 'status'
|
rows.left l(:field_status), @issue.status.name, :class => 'status'
|
||||||
rows.left l(:field_priority), @issue.priority.name, :class => 'priority'
|
rows.left l(:field_priority), @issue.priority.name, :class => 'priority'
|
||||||
unless @issue.disabled_core_fields.include?('assigned_to_id')
|
# unless @issue.disabled_core_fields.include?('assigned_to_id')
|
||||||
rows.left l(:field_assigned_to), avatar(@issue.assigned_to, :size => "14").to_s.html_safe + (@issue.assigned_to ? @issue.assigned_to : "-"), :class => 'assigned-to'
|
# rows.left l(:field_assigned_to), avatar(@issue.assigned_to, :size => "14").to_s.html_safe + (@issue.assigned_to ? @issue.assigned_to : "-"), :class => 'assigned-to'
|
||||||
end
|
# end
|
||||||
unless @issue.disabled_core_fields.include?('category_id') || (@issue.category.nil? && @issue.project.issue_categories.none?)
|
unless @issue.disabled_core_fields.include?('category_id') || (@issue.category.nil? && @issue.project.issue_categories.none?)
|
||||||
rows.left l(:field_category), (@issue.category ? @issue.category.name : "-"), :class => 'category'
|
rows.left l(:field_category), (@issue.category ? @issue.category.name : "-"), :class => 'category'
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -12,7 +12,6 @@
|
|||||||
# Usage I18n.t(:label)
|
# Usage I18n.t(:label)
|
||||||
en:
|
en:
|
||||||
field_customer: "Customer"
|
field_customer: "Customer"
|
||||||
field_item: "Item"
|
|
||||||
field_employee: "Employee"
|
field_employee: "Employee"
|
||||||
field_invoice: "Invoice"
|
field_invoice: "Invoice"
|
||||||
field_estimate: "Estimate"
|
field_estimate: "Estimate"
|
||||||
@@ -54,7 +53,6 @@ en:
|
|||||||
label_customer_count: "Customer Count"
|
label_customer_count: "Customer Count"
|
||||||
label_invoice_count: "Invoice Count"
|
label_invoice_count: "Invoice Count"
|
||||||
label_estimate_count: "Estimate Count"
|
label_estimate_count: "Estimate Count"
|
||||||
label_item_count: "Item Count"
|
|
||||||
label_employee_count: "Employee Count"
|
label_employee_count: "Employee Count"
|
||||||
label_client_id: "Intuit QBO OAuth2 Client ID"
|
label_client_id: "Intuit QBO OAuth2 Client ID"
|
||||||
label_client_secret: "Intuit QBO OAuth2 Client Secret"
|
label_client_secret: "Intuit QBO OAuth2 Client Secret"
|
||||||
|
|||||||
5
init.rb
5
init.rb
@@ -11,10 +11,10 @@
|
|||||||
Redmine::Plugin.register :redmine_qbo do
|
Redmine::Plugin.register :redmine_qbo do
|
||||||
|
|
||||||
# About
|
# About
|
||||||
name 'Redmine QBO DEVELOPMENT plugin'
|
name 'Redmine QBO plugin'
|
||||||
author 'Rick Barrette'
|
author 'Rick Barrette'
|
||||||
description 'This is a plugin for Redmine to intergrate with Quickbooks Online to allow for seamless intergration CRM and invoicing of completed issues'
|
description 'This is a plugin for Redmine to intergrate with Quickbooks Online to allow for seamless intergration CRM and invoicing of completed issues'
|
||||||
version '2026.1.3'
|
version '2026.1.4'
|
||||||
url 'https://github.com/rickbarrette/redmine_qbo'
|
url 'https://github.com/rickbarrette/redmine_qbo'
|
||||||
author_url 'https://barrettefabrication.com'
|
author_url 'https://barrettefabrication.com'
|
||||||
settings :default => {'empty' => true}, :partial => 'qbo/settings'
|
settings :default => {'empty' => true}, :partial => 'qbo/settings'
|
||||||
@@ -22,7 +22,6 @@ Redmine::Plugin.register :redmine_qbo do
|
|||||||
|
|
||||||
# Add safe attributes for core models
|
# Add safe attributes for core models
|
||||||
Issue.safe_attributes 'customer_id'
|
Issue.safe_attributes 'customer_id'
|
||||||
Issue.safe_attributes 'item_id'
|
|
||||||
Issue.safe_attributes 'estimate_id'
|
Issue.safe_attributes 'estimate_id'
|
||||||
Issue.safe_attributes 'invoice_id'
|
Issue.safe_attributes 'invoice_id'
|
||||||
User.safe_attributes 'employee_id'
|
User.safe_attributes 'employee_id'
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
require File.expand_path('../../test_helper', __FILE__)
|
|
||||||
|
|
||||||
class QboItemTest < ActiveSupport::TestCase
|
|
||||||
|
|
||||||
# Replace this with your real tests.
|
|
||||||
def test_truth
|
|
||||||
assert true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
Reference in New Issue
Block a user