Skip to content

Commit 8f8a331

Browse files
committed
Push the risk analysis details to the payment partial
AVS and CVV are a legacy coming from an age in which everything could be done with ActiveMerchant and PCI compliance didn't exist. Moving away from specific risk checks paves the way for payment-method specific risky checks and display, although the underlying tables didn't change.
1 parent bca3790 commit 8f8a331

File tree

6 files changed

+72
-50
lines changed

6 files changed

+72
-50
lines changed

backend/app/controllers/spree/admin/payments_controller.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ class PaymentsController < Spree::Admin::BaseController
1111
before_action :load_data
1212
before_action :require_bill_address, only: [:index]
1313

14+
helper ::Spree::Admin::OrdersHelper
15+
1416
respond_to :html
1517

1618
def index
Lines changed: 18 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,26 @@
1-
<% latest_payment = @order.payments.reorder("created_at DESC").first %>
1+
<details id="risk_analysis">
2+
<summary><%= t('spree.risk_analysis') %>: <%= t('spree.risky') %></summary>
23

3-
<fieldset class="no-border-bottom" id="risk_analysis">
4-
<legend><%= "#{t('spree.risk_analysis')}: #{t('spree.not') unless @order.is_risky?} #{t('spree.risky')}" %></legend>
54
<table>
65
<thead>
6+
<th><%= t('spree.payment') %></th>
77
<th><%= t('spree.risk') %></th>
88
<th><%= t('spree.status') %></th>
99
</thead>
10-
<tbody id="risk-analysis" data-hook="order_details_adjustments" class="with-border">
11-
<tr class="">
12-
<td><strong>
13-
<%= t('spree.failed_payment_attempts') %>:
14-
</strong></td>
15-
<td>
16-
<span class="pill pill-<%= @order.payments.failed.count > 0 ? 'warning' : 'complete' %>">
17-
<%= t(
18-
'spree.payments_failed_count',
19-
count: @order.payments.failed.count
20-
) %>
21-
</span>
22-
</td>
23-
</tr>
24-
25-
<tr>
26-
<td><strong><%= t('spree.avs_response') %>:</strong></td>
27-
<td>
28-
<span class="pill pill-<%= latest_payment.is_avs_risky? ? 'warning' : 'complete' %>">
29-
<% if latest_payment.is_avs_risky? %>
30-
<%= avs_response_code[latest_payment.avs_response] %>
31-
<% else %>
32-
<%= t('spree.success') %>
33-
<% end %>
34-
</span>
35-
</td>
36-
</tr>
37-
38-
<tr>
39-
<td><strong><%= t('spree.cvv_response') %>:</strong></td>
40-
<td>
41-
<span class="pill pill-<%= latest_payment.is_cvv_risky? ? 'warning' : 'complete' %>">
42-
<% if latest_payment.is_cvv_risky? %>
43-
<%= cvv_response_code[latest_payment.cvv_response_code] %>
44-
<% else %>
45-
<%= t('spree.success') %>
46-
<% end %>
47-
</span>
48-
</td>
49-
</tr>
10+
<tbody id="risk-analysis" data-hook="order_details_adjustments" class="with-border">
11+
<% order.payments.risky.each do |payment| %>
12+
<tr class="">
13+
<td><%= link_to payment.number, admin_order_payment_path(order, payment) %></td>
14+
<td>
15+
<span class="pill pill-warning"><%= t('spree.risky') %></span>
16+
</td>
17+
<td>
18+
<span class="pill pill-<%= payment.state %>">
19+
<%= t(payment.state, scope: 'spree.payment_states') %>
20+
</span>
21+
</td>
22+
</tr>
23+
<% end %>
5024
</tbody>
5125
</table>
52-
</fieldset>
26+
</details>

backend/app/views/spree/admin/orders/cart.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
</div>
1717

1818
<% if @order.is_risky? %>
19-
<%= render 'spree/admin/orders/risk_analysis' %>
19+
<%= render 'spree/admin/orders/risk_analysis', order: @order %>
2020
<% end %>
2121

2222
<div data-hook="admin_order_edit_form">

backend/app/views/spree/admin/orders/edit.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
</div>
1616

1717
<% if @order.is_risky? %>
18-
<%= render 'spree/admin/orders/risk_analysis' %>
18+
<%= render 'spree/admin/orders/risk_analysis', order: @order %>
1919
<% end %>
2020

2121
<div data-hook="admin_order_edit_sub_header"></div>

backend/app/views/spree/admin/payments/_list.html.erb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,10 @@
2222
<tbody>
2323
<% payments.each do |payment| %>
2424
<tr id="<%= dom_id(payment) %>" data-hook="payments_row" class="payment vertical-middle" data-payment-id="<%= payment.id %>">
25-
<td><%= link_to payment.number, spree.admin_order_payment_path(@order, payment) %></td>
25+
<td>
26+
<%= tag :i, class: "fa fa-warning red", title: t('spree.risky') if payment.risky? %>
27+
<%= link_to payment.number, spree.admin_order_payment_path(@order, payment) %>
28+
</td>
2629
<td><%= l(payment.created_at, format: :short) %></td>
2730
<td><%= payment.payment_method.name %></td>
2831
<td><%= payment.transaction_id %></td>

backend/app/views/spree/admin/payments/source_views/_gateway.html.erb

Lines changed: 46 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,53 @@
1515

1616
<dt><%= Spree::CreditCard.human_attribute_name(:expiration) %>:</dt>
1717
<dd><%= payment.source.month %>/<%= payment.source.year %></dd>
18+
19+
<% if payment.source.address %>
20+
<dt><%= Spree::CreditCard.human_attribute_name(:source_address) %>:</dt>
21+
<dd><%= render partial: 'spree/admin/shared/address', locals: {address: payment.source.address} %></dd>
22+
<% end %>
23+
</dl>
24+
</div>
25+
26+
<div class="col-2">
27+
</div>
28+
29+
<div class="col-4">
30+
<dl>
31+
<dt><%= Spree::CreditCard.human_attribute_name(:code) %>:</dt>
32+
<dd><%= payment.number %></dd>
33+
34+
<dt><%= t('spree.risk_analysis') %></dt>
35+
<dd>
36+
<span class="pill pill-<%= payment.risky? ? 'error' : 'complete' %>">
37+
<%= "#{t('spree.not') unless payment.risky?} #{t('spree.risky').downcase}".capitalize %>
38+
</span>
39+
</dd>
40+
41+
<dt><%= t('spree.status')%></dt>
42+
<dd><span class="pill pill-<%= payment.state %>"><%= t(payment.state, scope: 'spree.payment_states') %></span></dd>
43+
44+
45+
<dt><%= Spree::CreditCard.human_attribute_name(:avs_response) %>:</dt>
46+
<dd>
47+
<%= content_tag(
48+
:span,
49+
payment.is_avs_risky? ? t('spree.failure') : t('spree.success'),
50+
class: "pill pill-#{payment.is_avs_risky? ? 'warning' : 'complete'}",
51+
title: avs_response_code[payment.avs_response],
52+
) %>
53+
</dd>
54+
55+
<dt><%= Spree::CreditCard.human_attribute_name(:cvv_response_code) %>:</dt>
56+
<dd>
57+
<%= content_tag(
58+
:span,
59+
payment.is_cvv_risky? ? t('spree.failure') : t('spree.success'),
60+
class: "pill pill-#{payment.is_cvv_risky? ? 'warning' : 'complete'}",
61+
title: cvv_response_code[payment.cvv_response_code],
62+
) %>
63+
</dd>
1864
</dl>
19-
<% if payment.source.address %>
20-
<%= render partial: 'spree/admin/shared/address', locals: {address: payment.source.address} %>
21-
<% end %>
2265
</div>
2366
</div>
2467
</fieldset>

0 commit comments

Comments
 (0)