effective_qb_sync 1.1.5 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/MIT-LICENSE +1 -1
- data/app/controllers/admin/qb_syncs_controller.rb +26 -8
- data/app/controllers/effective/qb_sync_controller.rb +1 -1
- data/app/datatables/effective_qb_sync_datatable.rb +24 -26
- data/app/models/effective/qb_log.rb +3 -4
- data/app/models/effective/qb_order_item.rb +3 -4
- data/app/models/effective/qb_request.rb +9 -12
- data/app/models/effective/qb_ticket.rb +15 -17
- data/app/views/admin/qb_syncs/_actions.html.haml +8 -2
- data/app/views/admin/qb_syncs/_form.html.haml +19 -0
- data/app/views/admin/qb_syncs/_qb_item_names.html.haml +2 -5
- data/app/views/admin/qb_syncs/_simple_form.html.haml +19 -0
- data/app/views/admin/qb_syncs/index.html.haml +1 -4
- data/app/views/admin/qb_syncs/instructions.html.haml +11 -0
- data/app/views/admin/qb_syncs/show.html.haml +4 -19
- data/config/routes.rb +6 -5
- data/db/migrate/01_create_effective_qb_sync.rb.erb +1 -1
- data/lib/effective_qb_sync.rb +13 -4
- data/lib/effective_qb_sync/engine.rb +1 -14
- data/lib/effective_qb_sync/version.rb +1 -1
- data/lib/generators/effective_qb_sync/install_generator.rb +1 -1
- metadata +6 -117
- data/app/models/effective/datatables/qb_syncs.rb +0 -45
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: abb025ece9f83664fc48e4373b7844bd26537f6f
|
4
|
+
data.tar.gz: 49bc39d12877b462f3c7bd034de5463a6067c3be
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0c3aadb7bb349781904a08d0082e7a491cd7e7413432446660391baf662f4a287eff505b32fdf4b98ed2cf76a602a5778e5f875aeeb4796fc41fac4b91e40c57
|
7
|
+
data.tar.gz: 4f19589875ac5fa5a47f6ad318e10d1cca50cf6ca08e043aea26517721d1488f7cded108cf0eca4b5c9f91cec5b14f3376835e1416eb64d5ee073c522e1752f5
|
data/MIT-LICENSE
CHANGED
@@ -1,16 +1,12 @@
|
|
1
1
|
module Admin
|
2
2
|
class QbSyncsController < ApplicationController
|
3
|
-
|
4
|
-
|
3
|
+
before_action :authenticate_user!
|
4
|
+
before_action :restrict_access
|
5
5
|
|
6
6
|
layout (EffectiveQbSync.layout.kind_of?(Hash) ? EffectiveQbSync.layout[:admin_qb_tickets] : EffectiveQbSync.layout)
|
7
7
|
|
8
8
|
def index
|
9
|
-
|
10
|
-
@datatable = Effective::Datatables::QbSyncs.new()
|
11
|
-
else
|
12
|
-
@datatable = EffectiveQbSyncDatatable.new(self)
|
13
|
-
end
|
9
|
+
@datatable = EffectiveQbSyncDatatable.new(self)
|
14
10
|
|
15
11
|
@page_title = 'Quickbooks Synchronizations'
|
16
12
|
end
|
@@ -50,10 +46,32 @@ module Admin
|
|
50
46
|
render '/effective/qb_web_connector/quickbooks.qwc', layout: false
|
51
47
|
end
|
52
48
|
|
49
|
+
def set_all_orders_finished
|
50
|
+
Effective::QbTicket.transaction do
|
51
|
+
begin
|
52
|
+
@qb_ticket = Effective::QbTicket.new(state: 'Finished')
|
53
|
+
@qb_ticket.qb_logs.build(message: 'Set all orders Finished')
|
54
|
+
@qb_ticket.save!
|
55
|
+
|
56
|
+
Effective::QbRequest.new_requests_for_unsynced_items.each do |qb_request|
|
57
|
+
qb_request.qb_ticket = @qb_ticket
|
58
|
+
qb_request.transition_to_finished
|
59
|
+
end
|
60
|
+
|
61
|
+
flash[:success] = 'Successfully set all orders finished'
|
62
|
+
rescue => e
|
63
|
+
flash[:danger] = "Unable to set all orders finished: #{e.message}"
|
64
|
+
raise ActiveRecord::Rollback
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
redirect_to effective_qb_sync.admin_qb_syncs_path
|
69
|
+
end
|
70
|
+
|
53
71
|
private
|
54
72
|
|
55
73
|
def restrict_access
|
56
|
-
EffectiveQbSync.
|
74
|
+
EffectiveQbSync.authorize!(self, :admin, :effective_qb_sync)
|
57
75
|
end
|
58
76
|
|
59
77
|
def permitted_qb_order_items_params
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Effective
|
2
2
|
class QbSyncController < ApplicationController
|
3
3
|
skip_authorization_check if defined?(CanCan)
|
4
|
-
|
4
|
+
skip_before_action :verify_authenticity_token
|
5
5
|
|
6
6
|
def api
|
7
7
|
# respond successfully to a GET which some versions of the Web Connector send to verify the url
|
@@ -1,36 +1,34 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
order :created_at, :desc
|
1
|
+
class EffectiveQbSyncDatatable < Effective::Datatable
|
2
|
+
datatable do
|
3
|
+
order :created_at, :desc
|
5
4
|
|
6
|
-
|
7
|
-
|
5
|
+
col :created_at
|
6
|
+
col :state, search: { collection: Effective::QbTicket::STATES }
|
8
7
|
|
9
|
-
|
10
|
-
|
11
|
-
|
8
|
+
val :num_orders, visible: false do |qb_ticket|
|
9
|
+
qb_ticket.qb_requests.length
|
10
|
+
end
|
12
11
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
12
|
+
val :orders, sort: false, as: :obfuscated_id do |qb_ticket|
|
13
|
+
qb_ticket.qb_requests.select { |qb_request| qb_request.order.present? }
|
14
|
+
end.format do |requests|
|
15
|
+
requests.map { |qb_request| link_to "##{qb_request.order.to_param}", effective_orders.admin_order_path(qb_request.order) }
|
16
|
+
.join('<br>').html_safe
|
17
|
+
end.search do |collection, term, column, sql_column|
|
18
|
+
order = Effective::Order.where(id: search_term).first
|
20
19
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
end
|
20
|
+
if order.present?
|
21
|
+
collection.where(id: Effective::QbRequest.where(order_id: order.id).pluck(:qb_ticket_id))
|
22
|
+
else
|
23
|
+
collection.none
|
26
24
|
end
|
27
|
-
|
28
|
-
actions_col partial: 'admin/qb_syncs/actions', partial_as: :qb_sync
|
29
25
|
end
|
30
26
|
|
31
|
-
|
32
|
-
|
33
|
-
end
|
27
|
+
actions_col partial: 'admin/qb_syncs/actions', partial_as: :qb_sync
|
28
|
+
end
|
34
29
|
|
30
|
+
collection do
|
31
|
+
Effective::QbTicket.includes(qb_requests: :order)
|
35
32
|
end
|
33
|
+
|
36
34
|
end
|
@@ -2,10 +2,9 @@ module Effective
|
|
2
2
|
class QbLog < ActiveRecord::Base
|
3
3
|
belongs_to :qb_ticket
|
4
4
|
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
# end
|
5
|
+
# Attributes
|
6
|
+
# message :text
|
7
|
+
# timestamps
|
9
8
|
|
10
9
|
validates :qb_ticket, presence: true
|
11
10
|
validates :message, presence: true
|
@@ -2,10 +2,9 @@ module Effective
|
|
2
2
|
class QbOrderItem < ActiveRecord::Base
|
3
3
|
belongs_to :order_item
|
4
4
|
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
# end
|
5
|
+
# Attributes
|
6
|
+
# name :string
|
7
|
+
# timestamps
|
9
8
|
|
10
9
|
validates :order_item, presence: true
|
11
10
|
validates :name, presence: true
|
@@ -3,26 +3,23 @@ module Effective
|
|
3
3
|
belongs_to :qb_ticket
|
4
4
|
belongs_to :order
|
5
5
|
|
6
|
-
# NOTE: Anything that is 'raise' here finds its way to qb_ticket#error
|
6
|
+
# NOTE: Anything that is 'raise' here finds its way to qb_ticket#error
|
7
7
|
|
8
8
|
# these are the states that signal a request is finished
|
9
9
|
COMPLETED_STATES = ['Finished', 'Error']
|
10
10
|
PROCESSING_STATES = ['Processing', 'CustomerQuery', 'CreateCustomer', 'OrderSync']
|
11
11
|
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
12
|
+
# Attributes
|
13
|
+
# request_qbxml :text
|
14
|
+
# response_qbxml :text
|
15
15
|
|
16
|
-
#
|
17
|
-
#
|
16
|
+
# request_sent_at :datetime
|
17
|
+
# response_received_at :datetime
|
18
18
|
|
19
|
-
#
|
20
|
-
#
|
19
|
+
# state :string
|
20
|
+
# error :text
|
21
21
|
|
22
|
-
#
|
23
|
-
|
24
|
-
# timestamps
|
25
|
-
# end
|
22
|
+
# timestamps
|
26
23
|
|
27
24
|
validates :state, inclusion: { in: COMPLETED_STATES + PROCESSING_STATES }
|
28
25
|
validates :qb_ticket, presence: true
|
@@ -7,26 +7,23 @@ module Effective
|
|
7
7
|
|
8
8
|
STATES = ['Ready', 'Authenticated', 'Processing', 'Finished', 'ConnectionError', 'RequestError']
|
9
9
|
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
13
|
-
#
|
10
|
+
# Attributes
|
11
|
+
# username :string
|
12
|
+
# company_file_name :string
|
13
|
+
# country :string
|
14
14
|
|
15
|
-
#
|
16
|
-
#
|
15
|
+
# qbxml_major_version :string
|
16
|
+
# qbxml_minor_version :string
|
17
17
|
|
18
|
-
#
|
19
|
-
#
|
18
|
+
# state :string, default: 'Ready'
|
19
|
+
# percent :integer
|
20
20
|
|
21
|
-
#
|
22
|
-
#
|
23
|
-
#
|
24
|
-
#
|
21
|
+
# hpc_response :text
|
22
|
+
# connection_error_hresult :text
|
23
|
+
# connection_error_message :text
|
24
|
+
# last_error :text
|
25
25
|
|
26
|
-
#
|
27
|
-
|
28
|
-
# timestamps
|
29
|
-
# end
|
26
|
+
# timestamps
|
30
27
|
|
31
28
|
validates :state, inclusion: { in: STATES }
|
32
29
|
|
@@ -42,7 +39,7 @@ module Effective
|
|
42
39
|
to: EffectiveQbSync.error_email,
|
43
40
|
subject: "Quickbooks failed to synchronize order ##{qb_request.try(:order).try(:to_param) || 'unknown'}",
|
44
41
|
template: 'qb_sync_error'
|
45
|
-
).
|
42
|
+
).public_send(EffectiveOrders.mailer[:deliver_method])
|
46
43
|
|
47
44
|
self.update_attributes!(atts.reverse_merge({last_error: error}))
|
48
45
|
end
|
@@ -51,5 +48,6 @@ module Effective
|
|
51
48
|
def log(message)
|
52
49
|
qb_logs.create(message: message, qb_ticket: self)
|
53
50
|
end
|
51
|
+
|
54
52
|
end
|
55
53
|
end
|
@@ -1,2 +1,8 @@
|
|
1
|
-
=
|
2
|
-
|
1
|
+
- show_path = effective_qb_sync.admin_qb_sync_path(qb_sync)
|
2
|
+
|
3
|
+
- if defined?(EffectiveBootstrap)
|
4
|
+
= dropdown(variation: :dropleft) do
|
5
|
+
= dropdown_link_to 'View', show_path
|
6
|
+
- else
|
7
|
+
= link_to show_path, title: 'View' do
|
8
|
+
%span.glyphicon.glyphicon-eye-open
|
@@ -0,0 +1,19 @@
|
|
1
|
+
= effective_form_with(model: qb_order_items_form, url: effective_qb_sync.admin_qb_sync_path(qb_order_items_form)) do |f|
|
2
|
+
%table.table
|
3
|
+
%thead
|
4
|
+
%tr
|
5
|
+
%th Order
|
6
|
+
%th Order Item
|
7
|
+
%th Quickbooks Item Name
|
8
|
+
%tbody
|
9
|
+
- qb_ticket.orders.each do |order|
|
10
|
+
- order.order_items.each_with_index do |order_item, index|
|
11
|
+
%tr
|
12
|
+
%td= (link_to(('#' + order.to_param.to_s), effective_orders.admin_order_path(order)) if index == 0)
|
13
|
+
%td= order_item
|
14
|
+
%td
|
15
|
+
= f.fields_for :qb_order_items, order_item.qb_order_item do |foi|
|
16
|
+
= f.hidden_field :order_item_id, order_item.id
|
17
|
+
= foi.text_field :name, label: false, required: false
|
18
|
+
|
19
|
+
= effective_save(f, 'Save QuickBooks Item Names')
|
@@ -0,0 +1,19 @@
|
|
1
|
+
= simple_form_for qb_order_items_form, (EffectiveOrders.admin_simple_form_options || {}).merge(url: effective_qb_sync.admin_qb_sync_path(qb_order_items_form)) do |f|
|
2
|
+
%table.table
|
3
|
+
%thead
|
4
|
+
%tr
|
5
|
+
%th Order
|
6
|
+
%th Order Item
|
7
|
+
%th Quickbooks Item Name
|
8
|
+
%tbody
|
9
|
+
- qb_ticket.orders.each do |order|
|
10
|
+
- order.order_items.each_with_index do |order_item, index|
|
11
|
+
%tr
|
12
|
+
%td= (link_to(('#' + order.to_param.to_s), effective_orders.admin_order_path(order)) if index == 0)
|
13
|
+
%td= order_item
|
14
|
+
%td
|
15
|
+
= f.simple_fields_for :qb_order_items, order_item.qb_order_item do |foi|
|
16
|
+
= foi.input :order_item_id, as: :hidden, value: order_item.id
|
17
|
+
= foi.input :name, label: false, required: false
|
18
|
+
|
19
|
+
%p= f.button :submit, 'Save Quickbooks Item Names', data: { disable_with: 'Saving...' }
|
@@ -133,4 +133,15 @@
|
|
133
133
|
%strong= EffectiveQbSync.error_email || EffectiveOrders.mailer[:admin_email]
|
134
134
|
will receive an email with instructions on how to fix the error
|
135
135
|
|
136
|
+
%h3 6. Troubleshooting
|
137
|
+
|
138
|
+
%p
|
139
|
+
Don't actually use this, but click below to skip all unsynced orders.
|
140
|
+
|
141
|
+
%ul
|
142
|
+
%li This action will create a finished QbTicket containing all orders.
|
143
|
+
%li All orders will be considered already synced, and will not be sent to QuickBooks again.
|
144
|
+
%li You might need a developer's help to undo this.
|
145
|
+
- unsynced = Effective::QbRequest.new_requests_for_unsynced_items.length
|
146
|
+
%li= link_to "Mark all #{unsynced} unsynced orders as already synchronized", effective_qb_sync.set_all_orders_finished_admin_qb_syncs_path, 'data-method': :post, 'data-confirm': 'Are you sure?'
|
136
147
|
|
@@ -9,25 +9,10 @@
|
|
9
9
|
|
10
10
|
%h3 Orders
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
%th Order
|
17
|
-
%th Order Item
|
18
|
-
%th Quickbooks Item Name
|
19
|
-
%tbody
|
20
|
-
- @qb_ticket.orders.each do |order|
|
21
|
-
- order.order_items.each_with_index do |order_item, index|
|
22
|
-
%tr
|
23
|
-
%td= (link_to(('#' + order.to_param.to_s), effective_orders.admin_order_path(order)) if index == 0)
|
24
|
-
%td= order_item
|
25
|
-
%td
|
26
|
-
= f.simple_fields_for :qb_order_items, order_item.qb_order_item do |foi|
|
27
|
-
= foi.input :order_item_id, as: :hidden, value: order_item.id
|
28
|
-
= foi.input :name, label: false, required: false
|
29
|
-
|
30
|
-
%p= f.button :submit, 'Save Quickbooks Item Names', data: { disable_with: 'Saving...' }
|
12
|
+
- if defined?(EffectiveBootstrap)
|
13
|
+
= render 'form', qb_order_items_form: @qb_order_items_form, qb_ticket: @qb_ticket
|
14
|
+
- else
|
15
|
+
= render 'simple_form', qb_order_items_form: @qb_order_items_form, qb_ticket: @qb_ticket
|
31
16
|
|
32
17
|
%h3 Sync Log
|
33
18
|
|
data/config/routes.rb
CHANGED
@@ -1,9 +1,5 @@
|
|
1
|
-
Rails.application.routes.draw do
|
2
|
-
mount EffectiveQbSync::Engine => '/', as: 'effective_qb_sync'
|
3
|
-
end
|
4
|
-
|
5
1
|
EffectiveQbSync::Engine.routes.draw do
|
6
|
-
scope module
|
2
|
+
scope :module => 'effective' do
|
7
3
|
match 'quickbooks/api', to: 'qb_sync#api', as: 'qb_sync', via: :all
|
8
4
|
end
|
9
5
|
|
@@ -11,6 +7,11 @@ EffectiveQbSync::Engine.routes.draw do
|
|
11
7
|
resources :qb_syncs, only: [:index, :show, :update] do
|
12
8
|
get :instructions, on: :collection
|
13
9
|
get :qwc, on: :collection
|
10
|
+
post :set_all_orders_finished, on: :collection
|
14
11
|
end
|
15
12
|
end
|
16
13
|
end
|
14
|
+
|
15
|
+
Rails.application.routes.draw do
|
16
|
+
mount EffectiveQbSync::Engine => '/', as: 'effective_qb_sync'
|
17
|
+
end
|
data/lib/effective_qb_sync.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'simple_form'
|
2
1
|
require 'effective_orders'
|
3
2
|
require 'effective_qb_sync/engine'
|
4
3
|
require 'effective_qb_sync/version'
|
@@ -26,10 +25,20 @@ module EffectiveQbSync
|
|
26
25
|
end
|
27
26
|
|
28
27
|
def self.authorized?(controller, action, resource)
|
29
|
-
if
|
30
|
-
|
28
|
+
@_exceptions ||= [Effective::AccessDenied, (CanCan::AccessDenied if defined?(CanCan)), (Pundit::NotAuthorizedError if defined?(Pundit))].compact
|
29
|
+
|
30
|
+
return !!authorization_method unless authorization_method.respond_to?(:call)
|
31
|
+
controller = controller.controller if controller.respond_to?(:controller)
|
32
|
+
|
33
|
+
begin
|
34
|
+
!!(controller || self).instance_exec((controller || self), action, resource, &authorization_method)
|
35
|
+
rescue *@_exceptions
|
36
|
+
false
|
31
37
|
end
|
32
|
-
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.authorize!(controller, action, resource)
|
41
|
+
raise Effective::AccessDenied unless authorized?(controller, action, resource)
|
33
42
|
end
|
34
43
|
|
35
44
|
def self.permitted_params
|
@@ -9,19 +9,6 @@ module EffectiveQbSync
|
|
9
9
|
eval File.read("#{config.root}/config/effective_qb_sync.rb")
|
10
10
|
end
|
11
11
|
|
12
|
-
# Ensure every acts_as_purchasable object responds to qb_item_name
|
13
|
-
initializer 'effective_qb_sync.assert_qb_item_names_present' do |app|
|
14
|
-
if Rails.env.development?
|
15
|
-
ActiveSupport.on_load :active_record do
|
16
|
-
invalids = (ActsAsPurchasable.descendants || []).reject { |klass| (klass.new().try(:qb_item_name).present? rescue false) }
|
17
|
-
|
18
|
-
if invalids.present?
|
19
|
-
puts "WARNING: (effective_qb_sync) expected acts_as_purchasable objects #{invalids.map(&:to_s).to_sentence} .qb_item_name() to be present."
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
12
|
# Include acts_as_addressable concern and allow any ActiveRecord object to call it
|
26
13
|
initializer 'effective_qb_sync.active_record' do |app|
|
27
14
|
Rails.application.config.to_prepare do
|
@@ -31,7 +18,7 @@ module EffectiveQbSync
|
|
31
18
|
|
32
19
|
# first or build
|
33
20
|
def qb_item_name
|
34
|
-
(qb_order_item || build_qb_order_item(name: purchasable.
|
21
|
+
(qb_order_item || build_qb_order_item(name: purchasable.qb_item_name)).name
|
35
22
|
end
|
36
23
|
end
|
37
24
|
end
|
@@ -25,7 +25,7 @@ module EffectiveQbSync
|
|
25
25
|
if mailer_preview_path.present?
|
26
26
|
template 'effective_qb_sync_mailer_preview.rb', File.join(mailer_preview_path, 'effective_qb_sync_mailer_preview.rb')
|
27
27
|
else
|
28
|
-
puts "couldn't find action_mailer.preview_path.
|
28
|
+
puts "couldn't find action_mailer.preview_path. Skipping effective_qb_sync_mailer_preview."
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: effective_qb_sync
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Code and Effect
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-03-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -94,126 +94,14 @@ dependencies:
|
|
94
94
|
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: simple_form
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - ">="
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '0'
|
104
|
-
type: :runtime
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - ">="
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '0'
|
111
97
|
- !ruby/object:Gem::Dependency
|
112
98
|
name: effective_orders
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - ">="
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: 2.0.0
|
118
|
-
type: :runtime
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - ">="
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: 2.0.0
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: effective_datatables
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - ">="
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: 2.0.0
|
132
|
-
type: :runtime
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - ">="
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: 2.0.0
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
|
-
name: factory_girl_rails
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
142
|
-
requirements:
|
143
|
-
- - ">="
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version: '0'
|
146
|
-
type: :development
|
147
|
-
prerelease: false
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
149
|
-
requirements:
|
150
|
-
- - ">="
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version: '0'
|
153
|
-
- !ruby/object:Gem::Dependency
|
154
|
-
name: rspec-rails
|
155
|
-
requirement: !ruby/object:Gem::Requirement
|
156
|
-
requirements:
|
157
|
-
- - ">="
|
158
|
-
- !ruby/object:Gem::Version
|
159
|
-
version: '0'
|
160
|
-
type: :development
|
161
|
-
prerelease: false
|
162
|
-
version_requirements: !ruby/object:Gem::Requirement
|
163
|
-
requirements:
|
164
|
-
- - ">="
|
165
|
-
- !ruby/object:Gem::Version
|
166
|
-
version: '0'
|
167
|
-
- !ruby/object:Gem::Dependency
|
168
|
-
name: sqlite3
|
169
|
-
requirement: !ruby/object:Gem::Requirement
|
170
|
-
requirements:
|
171
|
-
- - ">="
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
version: '0'
|
174
|
-
type: :development
|
175
|
-
prerelease: false
|
176
|
-
version_requirements: !ruby/object:Gem::Requirement
|
177
|
-
requirements:
|
178
|
-
- - ">="
|
179
|
-
- !ruby/object:Gem::Version
|
180
|
-
version: '0'
|
181
|
-
- !ruby/object:Gem::Dependency
|
182
|
-
name: pry
|
183
|
-
requirement: !ruby/object:Gem::Requirement
|
184
|
-
requirements:
|
185
|
-
- - ">="
|
186
|
-
- !ruby/object:Gem::Version
|
187
|
-
version: '0'
|
188
|
-
type: :development
|
189
|
-
prerelease: false
|
190
|
-
version_requirements: !ruby/object:Gem::Requirement
|
191
|
-
requirements:
|
192
|
-
- - ">="
|
193
|
-
- !ruby/object:Gem::Version
|
194
|
-
version: '0'
|
195
|
-
- !ruby/object:Gem::Dependency
|
196
|
-
name: pry-stack_explorer
|
197
|
-
requirement: !ruby/object:Gem::Requirement
|
198
|
-
requirements:
|
199
|
-
- - ">="
|
200
|
-
- !ruby/object:Gem::Version
|
201
|
-
version: '0'
|
202
|
-
type: :development
|
203
|
-
prerelease: false
|
204
|
-
version_requirements: !ruby/object:Gem::Requirement
|
205
|
-
requirements:
|
206
|
-
- - ">="
|
207
|
-
- !ruby/object:Gem::Version
|
208
|
-
version: '0'
|
209
|
-
- !ruby/object:Gem::Dependency
|
210
|
-
name: pry-byebug
|
211
99
|
requirement: !ruby/object:Gem::Requirement
|
212
100
|
requirements:
|
213
101
|
- - ">="
|
214
102
|
- !ruby/object:Gem::Version
|
215
103
|
version: '0'
|
216
|
-
type: :
|
104
|
+
type: :runtime
|
217
105
|
prerelease: false
|
218
106
|
version_requirements: !ruby/object:Gem::Requirement
|
219
107
|
requirements:
|
@@ -233,7 +121,6 @@ files:
|
|
233
121
|
- app/controllers/effective/qb_sync_controller.rb
|
234
122
|
- app/datatables/effective_qb_sync_datatable.rb
|
235
123
|
- app/models/effective/access_denied.rb
|
236
|
-
- app/models/effective/datatables/qb_syncs.rb
|
237
124
|
- app/models/effective/qb_log.rb
|
238
125
|
- app/models/effective/qb_machine.rb
|
239
126
|
- app/models/effective/qb_order_item.rb
|
@@ -242,7 +129,9 @@ files:
|
|
242
129
|
- app/models/effective/qb_ticket.rb
|
243
130
|
- app/models/effective/qbwc_supervisor.rb
|
244
131
|
- app/views/admin/qb_syncs/_actions.html.haml
|
132
|
+
- app/views/admin/qb_syncs/_form.html.haml
|
245
133
|
- app/views/admin/qb_syncs/_qb_item_names.html.haml
|
134
|
+
- app/views/admin/qb_syncs/_simple_form.html.haml
|
246
135
|
- app/views/admin/qb_syncs/index.html.haml
|
247
136
|
- app/views/admin/qb_syncs/instructions.html.haml
|
248
137
|
- app/views/admin/qb_syncs/show.html.haml
|
@@ -338,7 +227,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
338
227
|
version: '0'
|
339
228
|
requirements: []
|
340
229
|
rubyforge_project:
|
341
|
-
rubygems_version: 2.4.
|
230
|
+
rubygems_version: 2.4.5.1
|
342
231
|
signing_key:
|
343
232
|
specification_version: 4
|
344
233
|
summary: Synchronize EffectiveOrders with QuickBooks Web Connector.
|
@@ -1,45 +0,0 @@
|
|
1
|
-
if Gem::Version.new(EffectiveDatatables::VERSION) < Gem::Version.new('3.0')
|
2
|
-
module Effective
|
3
|
-
module Datatables
|
4
|
-
class QbSyncs < Effective::Datatable
|
5
|
-
datatable do
|
6
|
-
default_order :created_at, :desc
|
7
|
-
|
8
|
-
table_column :created_at
|
9
|
-
table_column :state, filter: { values: QbTicket::STATES }
|
10
|
-
|
11
|
-
array_column :num_orders, visible: false do |qb_ticket|
|
12
|
-
qb_ticket.qb_requests.length
|
13
|
-
end
|
14
|
-
|
15
|
-
table_column :orders, sortable: false, as: :obfuscated_id do |qb_ticket|
|
16
|
-
qb_ticket.qb_requests.select { |qb_request| qb_request.order.present? }
|
17
|
-
.map { |qb_request| link_to "##{qb_request.order.to_param}", effective_orders.admin_order_path(qb_request.order) }
|
18
|
-
.join('<br>').html_safe
|
19
|
-
end
|
20
|
-
|
21
|
-
actions_column partial: 'admin/qb_syncs/actions', partial_local: :qb_sync
|
22
|
-
end
|
23
|
-
|
24
|
-
def collection
|
25
|
-
Effective::QbTicket.includes(qb_requests: :order)
|
26
|
-
end
|
27
|
-
|
28
|
-
def search_column(collection, table_column, search_term, sql_column)
|
29
|
-
if table_column[:name] == 'orders'
|
30
|
-
order = Effective::Order.where(id: search_term).first
|
31
|
-
|
32
|
-
if order.present?
|
33
|
-
collection.where(id: Effective::QbRequest.where(order_id: order.id).pluck(:qb_ticket_id))
|
34
|
-
else
|
35
|
-
collection.none
|
36
|
-
end
|
37
|
-
else
|
38
|
-
super
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|