effective_orders 6.2.1 → 6.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ee5eb2878e3fa8291b4ea432ca80a7e52e2961f52b9d63ff235350922cc4388e
4
- data.tar.gz: 27a85cedfbdb24ca8d6de87fac7655127960d320d5f09da77818b20fe1d9e29e
3
+ metadata.gz: 6bf799fd1e295b06b3e96d6083298bc3d56af80d2e5fc45aee9a3c45026e13bc
4
+ data.tar.gz: b03d84f686b369b97052b17f5b204b029d5ff79ab67bb8dd095e2b86a36af4be
5
5
  SHA512:
6
- metadata.gz: 8dcb53a3bcb13831db8830265278e922129e9386c58050f337fdee2aefdd39fd551400b77698923141c401157ec2cc8f0a5718ec6f93f522e296eae809c953c6
7
- data.tar.gz: 5118ee092b13b7d4de8a19e78662607e798d0c5c819fe5795a1db30c130acc37e9891ccb74af027d5a5461c782f5b795603f522bb9deac5aa29061fa5e040a98
6
+ metadata.gz: d96a318e778addc0d4174320c64fb54a0cf2c1e79fb0e4ea2286f69b5330562b08bdce127d9a4e02faae31afee9ebe1a1f0e043586623b92416c0256ced24d45
7
+ data.tar.gz: 6750bfa2d3c93be7cf208b0f8cc84dc355f7aab77a02553451e78d6c6a0b7ce10289ca8e4ca40ed1b93bf80594f40bc37b51d4b215d2742036565ef75b499b44
@@ -61,6 +61,7 @@ form.new_effective_order {
61
61
  .effective-order-actions { display: none; }
62
62
  .effective-order-purchase-actions { display: none; }
63
63
  .effective-order-admin-purchase-actions { display: none; }
64
+ .effective-order-admin-logs { display: none; }
64
65
 
65
66
  .effective-heading { display: none; }
66
67
  .effective-admin-heading { display: none; }
@@ -38,7 +38,7 @@ module Admin
38
38
  # The show page posts to this action
39
39
  # See Effective::OrdersController checkout
40
40
  def checkout
41
- @order = Effective::Order.not_purchased.find(params[:id])
41
+ @order = Effective::Order.was_not_purchased.find(params[:id])
42
42
 
43
43
  authorize_effective_order!
44
44
 
@@ -62,7 +62,7 @@ module Admin
62
62
  end
63
63
 
64
64
  def destroy
65
- @order = Effective::Order.all.not_purchased.find(params[:id])
65
+ @order = Effective::Order.all.was_not_purchased.find(params[:id])
66
66
 
67
67
  authorize_effective_order!
68
68
 
@@ -76,7 +76,7 @@ module Admin
76
76
  end
77
77
 
78
78
  def send_payment_request
79
- @order = Effective::Order.not_purchased.find(params[:id])
79
+ @order = Effective::Order.was_not_purchased.find(params[:id])
80
80
  authorize_effective_order!
81
81
 
82
82
  if @order.send_payment_request_to_buyer!
@@ -95,7 +95,7 @@ module Admin
95
95
  end
96
96
 
97
97
  def bulk_send_payment_request
98
- @orders = Effective::Order.not_purchased.where(id: params[:ids])
98
+ @orders = Effective::Order.was_not_purchased.where(id: params[:ids])
99
99
 
100
100
  begin
101
101
  authorize_effective_order!
@@ -10,7 +10,7 @@ module Effective
10
10
 
11
11
  def show
12
12
  @cart = current_cart
13
- @pending_orders = Effective::Order.not_purchased.where(user: current_user) if current_user.present?
13
+ @pending_orders = Effective::Order.was_not_purchased.where(user: current_user) if current_user.present?
14
14
 
15
15
  @page_title ||= 'My Cart'
16
16
  EffectiveResources.authorize!(self, :show, @cart)
@@ -69,13 +69,13 @@ module Effective
69
69
 
70
70
  # Always step1
71
71
  def edit
72
- @order ||= Effective::Order.not_purchased.find(params[:id])
72
+ @order ||= Effective::Order.was_not_purchased.find(params[:id])
73
73
  EffectiveResources.authorize!(self, :edit, @order)
74
74
  end
75
75
 
76
76
  # Confirms the order from existing order
77
77
  def update
78
- @order ||= Effective::Order.not_purchased.find(params[:id])
78
+ @order ||= Effective::Order.was_not_purchased.find(params[:id])
79
79
  EffectiveResources.authorize!(self, :update, @order)
80
80
 
81
81
  @order.assign_attributes(checkout_params)
@@ -88,12 +88,6 @@ module Effective
88
88
  end
89
89
  end
90
90
 
91
- # My Orders History
92
- def index
93
- @datatable = EffectiveOrdersDatatable.new(user_id: current_user.id)
94
- EffectiveResources.authorize!(self, :index, Effective::Order.new(user: current_user))
95
- end
96
-
97
91
  # Thank you for Purchasing this Order. This is where a successfully purchased order ends up
98
92
  def purchased # Thank You!
99
93
  @order = Effective::Order.purchased.find(params[:id])
@@ -110,25 +104,6 @@ module Effective
110
104
  EffectiveResources.authorize!(self, :show, @order)
111
105
  end
112
106
 
113
- def send_buyer_receipt
114
- @order = Effective::Order.purchased.find(params[:id])
115
- EffectiveResources.authorize!(self, :show, @order)
116
-
117
- if @order.send_order_receipt_to_buyer!
118
- flash[:success] = "A receipt has been sent to #{@order.emails_send_to}"
119
- else
120
- flash[:danger] = "Unable to send receipt."
121
- end
122
-
123
- if respond_to?(:redirect_back)
124
- redirect_back(fallback_location: effective_orders.order_path(@order))
125
- elsif request.referrer.present?
126
- redirect_to :back
127
- else
128
- redirect_to effective_orders.order_path(@order)
129
- end
130
- end
131
-
132
107
  def bulk_send_buyer_receipt
133
108
  @orders = Effective::Order.purchased.where(id: params[:ids])
134
109
 
@@ -87,7 +87,7 @@ module Admin
87
87
  col :note_to_buyer, visible: false
88
88
  col :note_internal, visible: false
89
89
 
90
- actions_col partial: 'admin/orders/datatable_actions', partial_as: :order
90
+ actions_col
91
91
 
92
92
  unless attributes[:total] == false
93
93
  aggregate :total
@@ -1,4 +1,4 @@
1
- # This is a user specific EffectiveOrdersDatatable
1
+ # Dashboard Orders
2
2
 
3
3
  class EffectiveOrdersDatatable < Effective::Datatable
4
4
  filters do
@@ -66,25 +66,12 @@ class EffectiveOrdersDatatable < Effective::Datatable
66
66
  end
67
67
 
68
68
  collection do
69
- user_klass = (attributes[:user_type].constantize if attributes[:user_type].present?)
70
- user_klass ||= current_user.class
71
-
72
- user = user_klass.find(attributes[:user_id])
73
-
74
- scope = Effective::Order.all.deep.where(user: user)
69
+ scope = Effective::Order.all.deep.where(user: current_user)
75
70
 
76
71
  if EffectiveOrders.orders_collection_scope.respond_to?(:call)
77
72
  scope = EffectiveOrders.orders_collection_scope.call(scope)
78
73
  end
79
74
 
80
- if attributes[:not_purchased]
81
- scope = scope.not_purchased
82
- end
83
-
84
- if attributes[:parent_id].present? && attributes[:parent_type].present?
85
- scope = scope.where(parent_id: attributes[:parent_id], parent_type: attributes[:parent_type])
86
- end
87
-
88
75
  scope
89
76
  end
90
77
 
@@ -18,6 +18,7 @@ module Effective
18
18
 
19
19
  acts_as_addressable(billing: { singular: true }, shipping: { singular: true })
20
20
  acts_as_reportable if respond_to?(:acts_as_reportable)
21
+ log_changes if respond_to?(:log_changes)
21
22
 
22
23
  attr_accessor :terms_and_conditions # Yes, I agree to the terms and conditions
23
24
  attr_accessor :confirmed_checkout # Set on the Checkout Step 1
@@ -75,7 +76,8 @@ module Effective
75
76
 
76
77
  scope :purchased, -> { where(state: EffectiveOrders::PURCHASED) }
77
78
  scope :purchased_by, lambda { |user| purchased.where(user: user) }
78
- scope :not_purchased, -> { where.not(state: EffectiveOrders::PURCHASED) }
79
+ scope :not_purchased, -> { where.not(state: [EffectiveOrders::PURCHASED, EffectiveOrders::DEFERRED]) }
80
+ scope :was_not_purchased, -> { where.not(state: EffectiveOrders::PURCHASED) }
79
81
 
80
82
  scope :pending, -> { where(state: EffectiveOrders::PENDING) }
81
83
  scope :confirmed, -> { where(state: EffectiveOrders::CONFIRMED) }
@@ -696,6 +698,7 @@ module Effective
696
698
  def send_order_receipt_to_buyer!
697
699
  EffectiveOrders.send_email(:order_receipt_to_buyer, self) if purchased?
698
700
  end
701
+ alias_method :send_buyer_receipt!, :send_order_receipt_to_buyer!
699
702
 
700
703
  def send_payment_request_to_buyer!
701
704
  EffectiveOrders.send_email(:payment_request_to_buyer, self) unless purchased?
@@ -7,6 +7,8 @@ module Effective
7
7
  belongs_to :purchasable, polymorphic: true
8
8
  accepts_nested_attributes_for :purchasable, allow_destroy: false
9
9
 
10
+ log_changes(to: :order) if respond_to?(:log_changes)
11
+
10
12
  if defined?(EffectiveQbSync)
11
13
  has_one :qb_order_item
12
14
  end
@@ -3,8 +3,7 @@ module Effective
3
3
  self.table_name = EffectiveOrders.products_table_name.to_s
4
4
 
5
5
  acts_as_purchasable
6
-
7
- has_many :order_items, as: :purchasable
6
+ log_changes if respond_to?(:log_changes)
8
7
 
9
8
  effective_resource do
10
9
  name :string
@@ -1,35 +1,16 @@
1
- = effective_form_with(model: [:admin, order], engine: true) do |f|
2
- = f.hidden_field :user_type, value: (f.object.user || current_user).class.name
3
-
4
- - ajax_url = (@select2_ajax_path || effective_resources.users_admin_select2_ajax_index_path) unless Rails.env.test?
5
-
6
- = f.select :user_id, current_user.class.all, label: 'Buyer', required: true,
7
- ajax_url: ajax_url, hint: 'The user that should purchase this order.'
8
-
9
- = f.email_cc_field :cc, hint: "Cc the above on any emailed receipts or payment requests."
10
-
11
- - if f.object.new_record?
12
- = f.check_box :send_payment_request_to_buyer,
13
- label: 'Yes, send a payment request email to the buyer and any cc.',
14
- value: (f.object.send_payment_request_to_buyer.nil? ? EffectiveOrders.send_payment_request_to_buyer : f.object.send_payment_request_to_buyer?)
15
-
16
- %hr
17
-
18
- %h2 Order Items
19
- = f.has_many :order_items, remove: true do |fc|
20
- = render 'order_item_fields', f: fc
21
-
22
- %hr
23
-
24
- .row
25
- .col-md-6.effective-order-note-to-buyer
26
- %h2 Note to Buyer
27
- = f.text_area :note_to_buyer, disabled: f.object.purchased?, label: false,
28
- hint: (f.object.purchased? ? 'This message was displayed to the buyer during checkout and appears on the receipt.' : 'This message will be displayed to the buyer during checkout and will appear on the receipt.')
29
-
30
- .col-md-6.effective-order-internal-note
31
- %h2 Internal Note
32
- = f.text_area :note_internal, label: false,
33
- hint: 'For internal admin use only. This note will never be displayed to the buyer.'
34
-
35
- = render partial: '/admin/orders/order_actions', locals: { order: @order, form: f, f: f }
1
+ = tabs do
2
+ = tab(order) do
3
+ - if order.custom_order? && order.in_progress?
4
+ - if order.persisted?
5
+ = collapse('show order') do
6
+ = render 'effective/orders/order', order: order, no_order_actions: true
7
+
8
+ = render 'admin/orders/form_order', order: order
9
+ - else
10
+ - # Order was already purchased. Display same as show action.
11
+ = render 'effective/orders/order', order: order
12
+ = render 'admin/orders/form_note_internal', order: order
13
+
14
+ - if order.persisted? && order.respond_to?(:logs_datatable)
15
+ = tab 'Logs' do
16
+ .effective-order-admin-logs= render_inline_datatable(order.logs_datatable)
@@ -0,0 +1,35 @@
1
+ = effective_form_with(model: [:admin, order], engine: true) do |f|
2
+ = f.hidden_field :user_type, value: (f.object.user || current_user).class.name
3
+
4
+ - ajax_url = (@select2_ajax_path || effective_resources.users_admin_select2_ajax_index_path) unless Rails.env.test?
5
+
6
+ = f.select :user_id, current_user.class.all, label: 'Buyer', required: true,
7
+ ajax_url: ajax_url, hint: 'The user that should purchase this order.'
8
+
9
+ = f.email_cc_field :cc, hint: "Cc the above on any emailed receipts or payment requests."
10
+
11
+ - if f.object.new_record?
12
+ = f.check_box :send_payment_request_to_buyer,
13
+ label: 'Yes, send a payment request email to the buyer and any cc.',
14
+ value: (f.object.send_payment_request_to_buyer.nil? ? EffectiveOrders.send_payment_request_to_buyer : f.object.send_payment_request_to_buyer?)
15
+
16
+ %hr
17
+
18
+ %h2 Order Items
19
+ = f.has_many :order_items, remove: true do |fc|
20
+ = render 'order_item_fields', f: fc
21
+
22
+ %hr
23
+
24
+ .row
25
+ .col-md-6.effective-order-note-to-buyer
26
+ %h2 Note to Buyer
27
+ = f.text_area :note_to_buyer, disabled: f.object.purchased?, label: false,
28
+ hint: (f.object.purchased? ? 'This message was displayed to the buyer during checkout and appears on the receipt.' : 'This message will be displayed to the buyer during checkout and will appear on the receipt.')
29
+
30
+ .col-md-6.effective-order-internal-note
31
+ %h2 Internal Note
32
+ = f.text_area :note_internal, label: false,
33
+ hint: 'For internal admin use only. This note will never be displayed to the buyer.'
34
+
35
+ = render partial: '/admin/orders/order_actions', locals: { order: @order, form: f, f: f }
@@ -0,0 +1,8 @@
1
+ = tabs do
2
+ = tab(order) do
3
+ = render 'effective/orders/order', order: order
4
+ = render 'admin/orders/form_note_internal', order: order
5
+
6
+ - if order.persisted? && order.respond_to?(:logs_datatable)
7
+ = tab 'Logs' do
8
+ .effective-order-admin-logs= render_inline_datatable(order.logs_datatable)
@@ -1,4 +1,9 @@
1
- = render 'layout' do
2
- %h1.effective-admin-heading= @page_title
1
+ - resource = (@_effective_resource || Effective::Resource.new(controller_path))
2
+ - @resource = instance_variable_get('@' + resource.name) if resource.name
3
3
 
4
- = render_checkout(@order, namespace: :admin, purchased_url: effective_orders.admin_order_path(@order), declined_url: effective_orders.admin_order_path(@order))
4
+ - if @resource
5
+ .resource-buttons
6
+ = render_resource_buttons(@resource, checkout: false)
7
+
8
+ = card do
9
+ = render_checkout(@order, namespace: :admin, purchased_url: effective_orders.admin_order_path(@order), declined_url: effective_orders.admin_order_path(@order))
@@ -1,2 +1,6 @@
1
1
  = dropdown(variation: :dropleft) do
2
2
  = dropdown_link_to (order.purchased? ? 'View' : 'Checkout'), effective_orders.order_path(order)
3
+
4
+ - if EffectiveResources.authorized?(controller, :send_buyer_receipt, order)
5
+ = dropdown_link_to 'E-mail Receipt', effective_orders.send_buyer_receipt_order_path(order),
6
+ data: { method: :post, confirm: "Send receipt to #{order.emails_send_to}?" }
@@ -1,25 +1,3 @@
1
1
  .effective-order-actions
2
2
  - if order.persisted?
3
- = link_to 'Print', '#', class: 'btn btn-primary print-button', data: { role: 'print-button' }, onClick: 'window.print(); false;'
4
-
5
- - if order.purchased?
6
- = link_to 'E-mail Receipt', effective_orders.send_buyer_receipt_order_path(order),
7
- class: 'btn btn-secondary',
8
- data: { method: :post, confirm: "Send receipt to #{order.emails_send_to}?" }
9
-
10
- - if controller_path.include?('admin/') && (EffectiveResources.authorized?(controller, :admin, :effective_orders) rescue false)
11
- - if order.persisted? && order.in_progress?
12
- - if params[:action] == 'show'
13
- = link_to('Edit', effective_orders.edit_admin_order_path(order), class: 'btn btn-primary')
14
-
15
- - if params[:action] == 'edit'
16
- = link_to('Show', effective_orders.admin_order_path(order), class: 'btn btn-primary')
17
-
18
- - unless order.refund?
19
- = link_to 'Email request for payment to buyer', effective_orders.send_payment_request_admin_order_path(order),
20
- class: 'btn btn-secondary',
21
- data: { method: :post, confirm: "Send request for payment to #{order.emails_send_to}?" }
22
-
23
- = link_to 'Delete', effective_orders.admin_order_path(order),
24
- class: 'btn btn-danger',
25
- data: { method: :delete, confirm: "Really delete #{order}?" }
3
+ = link_to icon('printer') + ' Print', '#', class: 'btn btn-sm btn-outline-primary print-button', data: { role: 'print-button' }, onClick: 'window.print(); false;'
@@ -1,8 +1,12 @@
1
- = effective_form_with(scope: :pretend, url: effective_orders.pretend_order_path(order), method: :post) do |f|
2
- = f.hidden_field :purchased_url, value: purchased_url
3
- = f.hidden_field :declined_url, value: declined_url
1
+ .card
2
+ .card-body
3
+ %h2 Pretend Checkout
4
4
 
5
- - if EffectiveOrders.pretend_message.present?
6
- %p.text-right= EffectiveOrders.pretend_message
5
+ = effective_form_with(scope: :pretend, url: effective_orders.pretend_order_path(order), method: :post) do |f|
6
+ = f.hidden_field :purchased_url, value: purchased_url
7
+ = f.hidden_field :declined_url, value: declined_url
7
8
 
8
- = f.submit order_checkout_label(:pretend), border: false
9
+ - if EffectiveOrders.pretend_message.present?
10
+ %p= EffectiveOrders.pretend_message
11
+
12
+ = f.submit order_checkout_label(:pretend), border: false, center: true
@@ -3,6 +3,12 @@ en:
3
3
  name: 'Effective Orders'
4
4
  acronym: 'Finance'
5
5
 
6
+ activerecord:
7
+ actions:
8
+ effective/order:
9
+ send_buyer_receipt: 'E-mail receipt to buyer'
10
+ send_buyer_receipt_confirm: 'Send receipt to @resource.emails_send_to?'
11
+
6
12
  datatables:
7
13
  admin/report_transactions_datatable: 'Individual Transactions'
8
14
  admin/report_transactions_grouped_by_name_datatable: 'Transactions Grouped By Name'
data/config/routes.rb CHANGED
@@ -49,10 +49,12 @@ EffectiveOrders::Engine.routes.draw do
49
49
  resources :orders do
50
50
  member do
51
51
  post :send_payment_request
52
+ post :send_buyer_receipt
52
53
 
53
- get :checkout
54
+ # GET should be last here
54
55
  post :checkout
55
56
  patch :checkout
57
+ get :checkout
56
58
  end
57
59
 
58
60
  collection do
@@ -1,3 +1,3 @@
1
1
  module EffectiveOrders
2
- VERSION = '6.2.1'.freeze
2
+ VERSION = '6.3.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_orders
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.2.1
4
+ version: 6.3.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: 2023-03-10 00:00:00.000000000 Z
11
+ date: 2023-03-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -239,17 +239,14 @@ files:
239
239
  - app/views/admin/customers/show.html.haml
240
240
  - app/views/admin/order_items/index.html.haml
241
241
  - app/views/admin/order_reports/index.html.haml
242
- - app/views/admin/orders/_datatable_actions.html.haml
243
242
  - app/views/admin/orders/_form.html.haml
244
243
  - app/views/admin/orders/_form_note_internal.html.haml
244
+ - app/views/admin/orders/_form_order.html.haml
245
245
  - app/views/admin/orders/_layout.html.haml
246
+ - app/views/admin/orders/_order.html.haml
246
247
  - app/views/admin/orders/_order_actions.html.haml
247
248
  - app/views/admin/orders/_order_item_fields.html.haml
248
249
  - app/views/admin/orders/checkout.html.haml
249
- - app/views/admin/orders/edit.html.haml
250
- - app/views/admin/orders/index.html.haml
251
- - app/views/admin/orders/new.html.haml
252
- - app/views/admin/orders/show.html.haml
253
250
  - app/views/effective/carts/_cart.html.haml
254
251
  - app/views/effective/carts/_cart_actions.html.haml
255
252
  - app/views/effective/carts/show.html.haml
@@ -1,18 +0,0 @@
1
- = dropdown(variation: :dropleft) do
2
- = dropdown_link_to 'View', effective_orders.admin_order_path(order)
3
-
4
- - if order.purchased? == false
5
- = dropdown_link_to 'Edit', effective_orders.edit_admin_order_path(order)
6
-
7
- - if order.purchased?
8
- = dropdown_link_to 'Email receipt to buyer', effective_orders.send_buyer_receipt_order_path(order),
9
- data: { method: :post, confirm: "Send receipt to #{order.emails_send_to}?" }
10
-
11
- - if (order.pending? || order.confirmed? || order.deferred?) && !order.refund?
12
- = dropdown_link_to 'Email request for payment to buyer', effective_orders.send_payment_request_admin_order_path(order),
13
- data: { method: :post, confirm: "Send request for payment to #{order.emails_send_to}?" }
14
-
15
- = dropdown_link_to 'Admin: Checkout', effective_orders.checkout_admin_order_path(order)
16
-
17
- = dropdown_link_to "Delete #{order}", effective_orders.admin_order_path(order),
18
- data: { method: :delete, confirm: "Really delete #{order}?" }
@@ -1,16 +0,0 @@
1
- = render 'layout' do
2
- %h1.effective-admin-heading= @page_title
3
-
4
- - if @order.custom_order? && @order.in_progress?
5
- = render 'effective/orders/order_actions', order: @order
6
-
7
- .mb-4
8
- = collapse('show order') do
9
- = render 'effective/orders/order', order: @order, no_order_actions: true
10
-
11
- = render 'admin/orders/form', order: @order
12
-
13
- - else
14
- - # Same as the show action
15
- = render 'effective/orders/order', order: @order
16
- = render 'admin/orders/form_note_internal', order: @order
@@ -1,7 +0,0 @@
1
- = render 'layout' do
2
- %h1.effective-admin-heading= @page_title
3
-
4
- %p.text-right.effective-admin-actions
5
- = link_to 'New Order', effective_orders.new_admin_order_path, class: 'btn btn-primary'
6
-
7
- = render_datatable @datatable
@@ -1,4 +0,0 @@
1
- = render 'layout' do
2
- %h1.effective-admin-heading= @page_title
3
-
4
- = render 'admin/orders/form', order: @order
@@ -1,5 +0,0 @@
1
- = render 'layout' do
2
- %h1.effective-admin-heading= @page_title
3
-
4
- = render 'effective/orders/order', order: @order
5
- = render 'admin/orders/form_note_internal', order: @order