effective_orders 5.4.2 → 5.5.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: cfd2223bf4174301697911662e02c29a03994f21b40e51e00cd0d1f0634982d0
4
- data.tar.gz: 2fae7688c156279f71ae1cd4cb2555389cd18160adb5e638245ce76eaca06bb1
3
+ metadata.gz: 9c608a4f1f72b5f82b0afe786bcc71ba8b951ff22e121ae2e2492afa08410966
4
+ data.tar.gz: fd836b344d52cb4cc9047aecc243dc2bf43d2b7b69bc0524331449e005e49789
5
5
  SHA512:
6
- metadata.gz: 2c7541e2b7135d8e7e0a84aa02b933e5adf8b78eaf18634675a488c8eb1eb709ecc357b6228e745342728d40199e2380f39f03ae9a5956ae59a32aa01aaace34
7
- data.tar.gz: 573805f2bef985cba327539b5661756d1ca002ff139f7a9983cf215db90cda0db08e31646c1138859e9e8079539402782ad1ca3042bb2f7f5dd35a15d2bca907
6
+ metadata.gz: 4b7a575224a3cfbcbc271dcbce0f6e4b8d4943995696a3a57372356747faea7b454df6a2202d6c0b9a1ec55b8296ae78511665111841117066f4d2f4366881a4
7
+ data.tar.gz: d84ada9221fb3c57d2d92254e9925641a53a5bf772b143373616e239f22c4d52b88d131d9983d94a2d57e81cbdccf761a33e0e99d5da0941c7f462eff78307a1
@@ -15,7 +15,7 @@ module Admin
15
15
  submit :save, 'Checkout', redirect: -> { effective_orders.checkout_admin_order_path(resource) }
16
16
 
17
17
  def create
18
- @user = current_user.class.find_by_id(order_params[:user_id])
18
+ @user = current_user.class.find_by_id(permitted_params[:user_id])
19
19
  @order = Effective::Order.new(user: @user)
20
20
 
21
21
  authorize_effective_order!
@@ -23,12 +23,12 @@ module Admin
23
23
 
24
24
  Effective::Order.transaction do
25
25
  begin
26
- (order_params[:order_items_attributes] || {}).each do |_, item_attrs|
26
+ (permitted_params[:order_items_attributes] || {}).each do |_, item_attrs|
27
27
  purchasable = Effective::Product.new(item_attrs[:purchasable_attributes])
28
28
  @order.add(purchasable, quantity: item_attrs[:quantity])
29
29
  end
30
30
 
31
- @order.attributes = order_params.except(:order_items_attributes, :user_id)
31
+ @order.attributes = permitted_params.except(:order_items_attributes, :user_id)
32
32
  @order.pending!
33
33
 
34
34
  message = 'Successfully created order'
@@ -123,7 +123,7 @@ module Admin
123
123
 
124
124
  private
125
125
 
126
- def order_params
126
+ def permitted_params
127
127
  params.require(:effective_order).permit(:user_id, :user_type, :cc,
128
128
  :send_payment_request_to_buyer, :note_internal, :note_to_buyer,
129
129
  :payment_provider, :payment_card, :payment, :send_mark_as_paid_email_to_buyer,
@@ -26,7 +26,7 @@ module Effective
26
26
  def mark_as_paid_params
27
27
  params.require(:effective_order).permit(
28
28
  :purchased_at, :payment, :payment_provider, :payment_card,
29
- :note_to_buyer, :send_mark_as_paid_email_to_buyer
29
+ :note_to_buyer, :note_internal, :send_mark_as_paid_email_to_buyer
30
30
  )
31
31
  end
32
32
 
@@ -72,7 +72,7 @@ class Admin::EffectiveOrdersDatatable < Effective::Datatable
72
72
 
73
73
  col :total, as: :price
74
74
 
75
- col :payment_provider, label: 'Provider', visible: false, search: { collection: EffectiveOrders.payment_providers }
75
+ col :payment_provider, label: 'Provider', visible: false, search: { collection: EffectiveOrders.admin_payment_providers }
76
76
  col :payment_card, label: 'Card', visible: false
77
77
 
78
78
  if EffectiveOrders.collect_note
@@ -47,6 +47,16 @@ module EffectiveStripeHelper
47
47
 
48
48
  def stripe_payment_intent(order)
49
49
  customer = Effective::Customer.for_user(order.user)
50
+
51
+ begin
52
+ stripe_payment_intent_payload(order, customer)
53
+ rescue => e
54
+ raise unless Rails.env.development?
55
+ stripe_payment_intent_payload(order, Effective::Customer.new(user: order.user))
56
+ end
57
+ end
58
+
59
+ def stripe_payment_intent_payload(order, customer)
50
60
  customer.create_stripe_customer! # Only creates if customer not already present
51
61
 
52
62
  payment = {
@@ -120,7 +120,7 @@ module Effective
120
120
  validates :payment_provider, presence: true
121
121
 
122
122
  validate do
123
- self.errors.add(:payment_provider, "unknown payment provider") unless EffectiveOrders.payment_providers.include?(payment_provider)
123
+ self.errors.add(:payment_provider, "unknown payment provider") unless (EffectiveOrders.payment_providers + EffectiveOrders.admin_payment_providers).include?(payment_provider)
124
124
  end
125
125
 
126
126
  validates :payment_card, presence: true
@@ -323,6 +323,8 @@ module Effective
323
323
  def payment_method
324
324
  return nil unless purchased?
325
325
 
326
+ provider = payment_provider if ['cheque', 'phone'].include?(payment_provider)
327
+
326
328
  # Normalize payment card
327
329
  card = case payment_card.to_s.downcase.gsub(' ', '').strip
328
330
  when '' then nil
@@ -331,7 +333,19 @@ module Effective
331
333
  when 'a', 'ax', 'american', 'americanexpress' then 'American Express'
332
334
  when 'd', 'discover' then 'Discover'
333
335
  else payment_card.to_s
334
- end unless payment_provider == 'free'
336
+ end
337
+
338
+ # Try again
339
+ if card == 'none' && payment['card_type'].present?
340
+ card = case payment['card_type'].to_s.downcase.gsub(' ', '').strip
341
+ when '' then nil
342
+ when 'v', 'visa' then 'Visa'
343
+ when 'm', 'mc', 'master', 'mastercard' then 'MasterCard'
344
+ when 'a', 'ax', 'american', 'americanexpress' then 'American Express'
345
+ when 'd', 'discover' then 'Discover'
346
+ else payment_card.to_s
347
+ end
348
+ end
335
349
 
336
350
  last4 = if payment[:active_card] && payment[:active_card].include?('**** **** ****')
337
351
  payment[:active_card][15,4]
@@ -340,7 +354,7 @@ module Effective
340
354
  # stripe, moneris, moneris_checkout
341
355
  last4 ||= (payment['f4l4'] || payment['first6last4']).to_s.last(4)
342
356
 
343
- [card, '-', last4].compact.join(' ')
357
+ [provider.presence, card.presence, last4.presence].compact.join(' - ')
344
358
  end
345
359
 
346
360
  def duplicate
@@ -484,14 +498,18 @@ module Effective
484
498
 
485
499
  # Effective::Order.new(items: Product.first, user: User.first).purchase!(email: false)
486
500
  def purchase!(payment: 'none', provider: 'none', card: 'none', email: true, skip_buyer_validations: false, skip_quickbooks: false)
501
+ return true if purchased?
502
+
487
503
  # Assign attributes
488
- self.state = EffectiveOrders::PURCHASED
489
- self.skip_buyer_validations = skip_buyer_validations
504
+ assign_attributes(
505
+ state: EffectiveOrders::PURCHASED,
506
+ skip_buyer_validations: skip_buyer_validations,
490
507
 
491
- self.payment_provider ||= provider
492
- self.payment_card ||= (card.presence || 'none')
493
- self.purchased_at ||= Time.zone.now
494
- self.payment = payment_to_h(payment) if self.payment.blank?
508
+ payment_provider: provider,
509
+ payment_card: (card.presence || 'none'),
510
+ purchased_at: Time.zone.now,
511
+ payment: payment_to_h(payment)
512
+ )
495
513
 
496
514
  begin
497
515
  Effective::Order.transaction do
@@ -7,20 +7,21 @@
7
7
  = effective_form_with(model: order, url: effective_orders.mark_as_paid_order_path(order), method: :post) do |f|
8
8
  = f.hidden_field :purchased_at, value: Time.zone.now
9
9
 
10
- = f.select :payment_provider, EffectiveOrders.payment_providers, required: true
10
+ = f.select :payment_provider, EffectiveOrders.admin_payment_providers, required: true
11
11
 
12
12
  = f.text_field :payment_card,
13
13
  label: 'Payment card type, cheque or transaction number',
14
14
  hint: 'Do not enter credit card numbers here, or anywhere.'
15
15
 
16
- = f.text_area :payment,
17
- label: 'Additional payment details',
18
- input_html: { value: f.object.payment.kind_of?(Hash) ? f.object.payment[:details] : f.object.payment.presence }
16
+ .row
17
+ .col
18
+ = f.text_area :note_to_buyer, hint: 'This message will be displayed to the buyer on the receipt.'
19
+ .col
20
+ = f.text_area :note_internal, hint: 'For or internal admin use only. This note will never be displayed to the buyer.'
19
21
 
20
22
  = f.check_box :send_mark_as_paid_email_to_buyer,
21
23
  label: 'Yes, send a receipt email to the buyer.',
22
24
  input_html: { checked: (f.object.send_mark_as_paid_email_to_buyer.nil? ? EffectiveOrders.send_order_receipts_when_mark_as_paid : f.object.send_mark_as_paid_email_to_buyer?) }
23
25
 
24
- = f.text_area :note_to_buyer, hint: 'This message will be displayed on the receipt.'
25
26
 
26
- = f.submit 'Admin: ' + order_checkout_label(order.refund? ? :refund : :mark_as_paid)
27
+ = f.submit order_checkout_label(order.refund? ? :refund : :mark_as_paid)
@@ -1,3 +1,3 @@
1
1
  module EffectiveOrders
2
- VERSION = '5.4.2'.freeze
2
+ VERSION = '5.5.0'.freeze
3
3
  end
@@ -142,6 +142,24 @@ module EffectiveOrders
142
142
  ].compact
143
143
  end
144
144
 
145
+ # For the Admin Mark as Paid screen
146
+ def self.admin_payment_providers
147
+ [
148
+ ('cheque' if mark_as_paid?),
149
+ ('credit card' if mark_as_paid?),
150
+ #('free' if free?),
151
+ ('moneris' if moneris?),
152
+ ('moneris_checkout' if moneris_checkout?),
153
+ ('paypal' if paypal?),
154
+ ('phone' if mark_as_paid?),
155
+ #('pretend' if pretend?),
156
+ #('refund' if refund?),
157
+ ('stripe' if stripe?),
158
+ ('other' if mark_as_paid?),
159
+ 'none'
160
+ ].compact
161
+ end
162
+
145
163
  def self.deferred_providers
146
164
  [('cheque' if cheque?), ('phone' if phone?)].compact
147
165
  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: 5.4.2
4
+ version: 5.5.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: 2022-03-09 00:00:00.000000000 Z
11
+ date: 2022-03-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails