effective_orders 4.4.3 → 4.4.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 53a918aa7baad340d52b29cbee1606af5d82f823dc4f66ba94463e697f8beeb6
4
- data.tar.gz: f27dd98180e0cc5d01ec02bbb9a693ec16b01c1874aae1f7f050b8aaf8631e0f
3
+ metadata.gz: f1c9cb84422232f69446f9612ffa08cebcdc62b85430377f42a7da21c716d10e
4
+ data.tar.gz: c72f1703bc93f608862bd55b093fb3fe0d2e239b5030ab43ccd90df616c7ed89
5
5
  SHA512:
6
- metadata.gz: 79cc98eaa1bc9dc98d267e61f30045acaf2e7a4b70119706d93559b4afbf49018bb4d5161a6dc38a1fa9626815557589d57d8fb36b7710e3d02827de5be5c8ae
7
- data.tar.gz: dc79e38e4cbfa81a1feb580dc18fbaf0dab4da8f212c659332be24acc19f08228541ea48fac35e2a2fd60e8fc2004bb589933b971af1ca98a568d277332d3839
6
+ metadata.gz: e28e1ffc282e08b81a2f85407fb084d4117ed0744a55f7b85e78c1dbe62711f04c80d6aee7cc814e4b1ef167edf4d21da88232a1b07023dc6af2f8ec8af1bce2
7
+ data.tar.gz: ed68a2d78bcae4af39223adb8ec445f9d7ccbc61a891717018e166021fa0f5f9ed193aba08c265cc998335438acf05b58f3619d82529233530e366488493d60e
@@ -43,7 +43,7 @@ module Admin
43
43
  @order.pending!
44
44
 
45
45
  message = 'Successfully created order'
46
- message << ". A request for payment has been sent to #{@order.user.email}" if @order.send_payment_request_to_buyer?
46
+ message << ". A request for payment has been sent to #{@order.emails_send_to}" if @order.send_payment_request_to_buyer?
47
47
  flash[:success] = message
48
48
 
49
49
  redirect_to(admin_redirect_path) and return
@@ -149,7 +149,7 @@ module Admin
149
149
  authorize_effective_order!
150
150
 
151
151
  if @order.send_payment_request_to_buyer!
152
- flash[:success] = "A request for payment has been sent to #{@order.user.email}"
152
+ flash[:success] = "A request for payment has been sent to #{@order.emails_send_to}"
153
153
  else
154
154
  flash[:danger] = 'Unable to send payment request'
155
155
  end
@@ -179,8 +179,8 @@ module Admin
179
179
  private
180
180
 
181
181
  def order_params
182
- params.require(:effective_order).permit(:user_id, :send_payment_request_to_buyer,
183
- :note_internal, :note_to_buyer,
182
+ params.require(:effective_order).permit(:user_id, :cc,
183
+ :send_payment_request_to_buyer, :note_internal, :note_to_buyer,
184
184
  :payment_provider, :payment_card, :payment, :send_mark_as_paid_email_to_buyer,
185
185
  order_items_attributes: [
186
186
  :quantity, :_destroy, purchasable_attributes: [
@@ -13,7 +13,7 @@ module Effective
13
13
 
14
14
  if flash[:success].blank?
15
15
  if EffectiveOrders.mailer[:send_order_receipt_to_buyer] && email
16
- flash[:success] = "Payment successful! A receipt has been sent to #{@order.user.email}"
16
+ flash[:success] = "Payment successful! A receipt has been sent to #{@order.emails_send_to}"
17
17
  else
18
18
  flash[:success] = "Payment successful! An email receipt has not been sent."
19
19
  end
@@ -36,7 +36,7 @@ module Effective
36
36
 
37
37
  if flash[:success].blank?
38
38
  if email
39
- flash[:success] = "Deferred payment created! A request for payment has been sent to #{@order.user.email}"
39
+ flash[:success] = "Deferred payment created! A request for payment has been sent to #{@order.emails_send_to}"
40
40
  else
41
41
  flash[:success] = "Deferred payment created!"
42
42
  end
@@ -110,7 +110,7 @@ module Effective
110
110
  EffectiveOrders.authorize!(self, :show, @order)
111
111
 
112
112
  if @order.send_order_receipt_to_buyer!
113
- flash[:success] = "A receipt has been sent to #{@order.user.email}"
113
+ flash[:success] = "A receipt has been sent to #{@order.emails_send_to}"
114
114
  else
115
115
  flash[:danger] = "Unable to send receipt."
116
116
  end
@@ -39,10 +39,12 @@ class Admin::EffectiveOrdersDatatable < Effective::Datatable
39
39
 
40
40
  if attributes[:user_id].blank?
41
41
  col :user
42
- col 'user.email', visible: false
43
42
  col :billing_name, visible: false
43
+ col :email, visible: false
44
44
  end
45
45
 
46
+ col :cc, visible: false
47
+
46
48
  if EffectiveOrders.billing_address
47
49
  col :billing_address, visible: false
48
50
  end
@@ -86,8 +88,6 @@ class Admin::EffectiveOrdersDatatable < Effective::Datatable
86
88
 
87
89
  if attributes[:user_id].present?
88
90
  scope = scope.where(user: user)
89
- else
90
- scope = scope.joins(:user)
91
91
  end
92
92
 
93
93
  scope
@@ -24,7 +24,7 @@ module Effective
24
24
 
25
25
  @subject = subject_for(@order, :order_receipt_to_buyer, "Order Receipt: ##{@order.to_param}")
26
26
 
27
- mail(to: @order.user.email, subject: @subject)
27
+ mail(to: @order.email, cc: @order.cc, subject: @subject)
28
28
  end
29
29
 
30
30
  # This is sent when an admin creates a new order or /admin/orders/new
@@ -38,7 +38,7 @@ module Effective
38
38
 
39
39
  @subject = subject_for(@order, :payment_request_to_buyer, "Request for Payment: Invoice ##{@order.to_param}")
40
40
 
41
- mail(to: @order.user.email, subject: @subject)
41
+ mail(to: @order.email, cc: @order.cc, subject: @subject)
42
42
  end
43
43
 
44
44
  # This is sent when someone chooses to Pay by Cheque
@@ -50,7 +50,7 @@ module Effective
50
50
 
51
51
  @subject = subject_for(@order, :pending_order_invoice_to_buyer, "Pending Order: ##{@order.to_param}")
52
52
 
53
- mail(to: @order.user.email, subject: @subject)
53
+ mail(to: @order.email, cc: @order.cc, subject: @subject)
54
54
  end
55
55
 
56
56
  # This is sent to admin when someone Accepts Refund
@@ -42,9 +42,11 @@ module Effective
42
42
  # note_to_buyer :text # From admin to buyer
43
43
  # note_internal :text # Internal admin only
44
44
  #
45
- # billing_name :string # name of buyer
46
- # payment :text # serialized hash containing all the payment details.
45
+ # billing_name :string # name of buyer
46
+ # email :string # same as user.email
47
+ # cc :string # can be set by admin
47
48
  #
49
+ # payment :text # serialized hash containing all the payment details.
48
50
  # payment_provider :string
49
51
  # payment_card :string
50
52
  #
@@ -60,6 +62,7 @@ module Effective
60
62
 
61
63
  before_validation { assign_order_totals }
62
64
  before_validation { assign_billing_name }
65
+ before_validation { assign_email }
63
66
  before_validation { assign_last_address }
64
67
 
65
68
  before_validation(if: -> { confirmed_checkout }) do
@@ -68,6 +71,9 @@ module Effective
68
71
 
69
72
  # Order validations
70
73
  validates :user_id, presence: true
74
+ validates :email, presence: true, email: true # email and cc validators are from effective_resources
75
+ validates :cc, email_cc: true
76
+
71
77
  validates :order_items, presence: { message: 'No items are present. Please add additional items.' }
72
78
  validates :state, inclusion: { in: EffectiveOrders::STATES.keys }
73
79
  validates :subtotal, presence: true
@@ -411,6 +417,11 @@ module Effective
411
417
  true
412
418
  end
413
419
 
420
+ # Doesn't control anything. Purely for the flash messaging
421
+ def emails_send_to
422
+ [email, cc.presence].compact.to_sentence
423
+ end
424
+
414
425
  def send_order_receipts!
415
426
  send_order_receipt_to_admin! if EffectiveOrders.mailer[:send_order_receipt_to_admin]
416
427
  send_order_receipt_to_buyer! if EffectiveOrders.mailer[:send_order_receipt_to_buyer]
@@ -470,6 +481,10 @@ module Effective
470
481
  self.billing_name = [(billing_address.full_name.presence if billing_address.present?), (user.to_s.presence)].compact.first
471
482
  end
472
483
 
484
+ def assign_email
485
+ self.email = user&.email
486
+ end
487
+
473
488
  def assign_last_address
474
489
  return unless user.present?
475
490
  return unless (EffectiveOrders.billing_address || EffectiveOrders.shipping_address)
@@ -20,8 +20,8 @@ module Effective
20
20
  validates :price, presence: true
21
21
  validates :tax_exempt, inclusion: { in: [true, false] }
22
22
 
23
- scope :sold, -> { joins(:order).where(orders: { state: EffectiveOrders::PURCHASED }) }
24
- scope :sold_by, lambda { |user| sold().where(seller_id: user.id) }
23
+ scope :purchased, -> { where(order_id: Effective::Order.purchased) }
24
+ scope :purchased_by, lambda { |user| where(order_id: Effective::Order.purchased_by(user)) }
25
25
 
26
26
  def to_s
27
27
  (quantity || 0) > 1 ? "#{quantity}x #{name}" : name
@@ -6,11 +6,11 @@
6
6
 
7
7
  - if order.purchased?
8
8
  = dropdown_link_to 'Email receipt to buyer', effective_orders.send_buyer_receipt_order_path(order),
9
- data: { confirm: "Send receipt to #{order.user.email}?" }
9
+ data: { confirm: "Send receipt to #{order.emails_send_to}?" }
10
10
 
11
11
  - if order.pending? || order.confirmed? || order.deferred?
12
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.user.email}?" }
13
+ data: { method: :post, confirm: "Send request for payment to #{order.emails_send_to}?" }
14
14
 
15
15
  = dropdown_link_to 'Admin: Checkout', effective_orders.checkout_admin_order_path(order)
16
16
 
@@ -1,20 +1,24 @@
1
1
  = effective_form_with(model: [:admin, order], url: (order.persisted? ? effective_orders.admin_order_path(order) : effective_orders.admin_orders_path)) do |f|
2
2
  - if f.object.new_record?
3
- = f.select :user_id, @users || User.all.to_a.sort { |user1, user2| user1.to_s <=> user2.to_s }, label: 'Buyer', required: true
3
+ = f.select :user_id, @users || User.all.to_a.sort { |user1, user2| user1.to_s <=> user2.to_s },
4
+ label: 'Buyer', required: true, hint: 'The user that should purchase this order.'
5
+
6
+ = f.cc_field :cc, hint: "Cc the above on any emailed receipts or payment requests."
4
7
 
5
8
  %h2 Order Items
6
9
  .order_items
7
10
  - f.object.order_items.build unless f.object.order_items.present?
11
+
8
12
  = f.fields_for :order_items, f.object.order_items do |order_item|
9
13
  = render 'order_item_fields', f: order_item
10
14
 
11
15
  .links
12
- = link_to_add_association "Add line item".html_safe, f, :order_items, class: 'btn btn-success', partial: 'order_item_fields'
16
+ = link_to_add_association (icon('plus') + 'Add item'), f, :order_items, class: 'btn btn-secondary', partial: 'order_item_fields'
13
17
 
14
18
  %hr
15
19
 
16
20
  = f.check_box :send_payment_request_to_buyer,
17
- label: 'Yes, send a payment request email to the buyer.',
21
+ label: 'Yes, send a payment request email to the buyer and any cc.',
18
22
  value: (f.object.send_payment_request_to_buyer.nil? ? EffectiveOrders.mailer[:send_payment_request_to_buyer] : f.object.send_payment_request_to_buyer?)
19
23
 
20
24
  .row
@@ -1,7 +1,7 @@
1
1
  .nested-fields.order-item
2
2
  .row.align-items-center
3
3
  = f.fields_for :purchasable, (f.object.purchasable || Effective::Product.new) do |pf|
4
- .col-md-1= f.number_field :quantity, input_html: { value: f.object.quantity || 1, min: 1 }
4
+ .col-md-2= f.number_field :quantity, input_html: { value: f.object.quantity || 1, min: 1 }
5
5
  .col-md-4= pf.text_field :name, maxlength: 255
6
6
  .col-md-2= pf.price_field :price
7
7
 
@@ -9,6 +9,6 @@
9
9
  .col-md-2= pf.text_field :qb_item_name, maxlength: 255, label: 'Quickbooks Item'
10
10
 
11
11
  .col-md-2.mt-4= pf.check_box :tax_exempt, label: "Tax&nbsp;Exempt", title: 'When checked, tax will not be applied to this item'
12
- .col-md-1.mt-4
13
- = link_to_remove_association(f, 'data-confirm': 'Really remove this item?') do
14
- = icon('x', class: 'btn-danger')
12
+ .col-md-1
13
+ = link_to_remove_association(f, 'data-confirm': 'Remove?') do
14
+ = icon('trash-2', class: 'text-danger')
@@ -5,13 +5,13 @@
5
5
  - if order.purchased?
6
6
  = link_to 'Email receipt to buyer', effective_orders.send_buyer_receipt_order_path(order),
7
7
  class: 'btn btn-secondary',
8
- data: { confirm: "Send receipt to #{order.user.email}?" }
8
+ data: { confirm: "Send receipt to #{order.emails_send_to}?" }
9
9
 
10
10
  - if order.persisted? && EffectiveOrders.authorized?(controller, :admin, :effective_orders)
11
11
  - if order.pending? || order.confirmed? || order.deferred?
12
12
  = link_to 'Email request for payment to buyer', effective_orders.send_payment_request_admin_order_path(order),
13
13
  class: 'btn btn-secondary',
14
- data: { method: :post, confirm: "Send request for payment to #{order.user.email}?" }
14
+ data: { method: :post, confirm: "Send request for payment to #{order.emails_send_to}?" }
15
15
 
16
16
  = link_to 'Delete', effective_orders.admin_order_path(order),
17
17
  class: 'btn btn-danger',
@@ -14,8 +14,16 @@
14
14
  %br
15
15
 
16
16
  - if order.billing_address.present?
17
- = render partial: 'effective/addresses/address',
18
- locals: { address: order.billing_address, email: order.user.email }
17
+ = render partial: 'effective/addresses/address', locals: { address: order.billing_address }
18
+ %br
19
+
20
+ = mail_to(order.email)
21
+
22
+ - if order.cc.present?
23
+ %br
24
+ Cc:
25
+ - order.cc.split(',').each do |email|
26
+ = mail_to(email)
19
27
 
20
28
  - if order.shipping_address.present?
21
29
  %td
@@ -7,7 +7,7 @@
7
7
  = price_to_currency(@order.total)
8
8
  to
9
9
  = @order.billing_name
10
- = @order.user.email
10
+ = @order.email
11
11
 
12
12
 
13
13
  %p Thanks and have a great day!
@@ -10,8 +10,10 @@ class CreateEffectiveOrders < ActiveRecord::Migration[4.2]
10
10
  t.text :note_internal
11
11
 
12
12
  t.string :billing_name
13
- t.text :payment
13
+ t.string :email
14
+ t.string :cc
14
15
 
16
+ t.text :payment
15
17
  t.string :payment_provider
16
18
  t.string :payment_card
17
19
 
@@ -88,7 +88,7 @@ module EffectiveOrders
88
88
 
89
89
  def self.permitted_params
90
90
  [
91
- :note, :terms_and_conditions, :confirmed_checkout,
91
+ :cc, :note, :terms_and_conditions, :confirmed_checkout,
92
92
  billing_address: EffectiveAddresses.permitted_params,
93
93
  shipping_address: EffectiveAddresses.permitted_params,
94
94
  subscripter: [:stripe_plan_id, :stripe_token]
@@ -1,3 +1,3 @@
1
1
  module EffectiveOrders
2
- VERSION = '4.4.3'.freeze
2
+ VERSION = '4.4.4'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_orders
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.4.3
4
+ version: 4.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code and Effect