From 7a09d8aa23f56fc1c56fcd70c5a4dcd01ded95f4 Mon Sep 17 00:00:00 2001 From: Suzanne Paterno Date: Thu, 10 Aug 2017 13:15:39 -0400 Subject: [PATCH] LP#1688398: revamp public catalog bill payment page - Changed table layout of the credit card charges on the Account screen. Moved checkbox to left of screen, added a column for Billing Type. - Add button to Pay Selected vs All Charges. - Include image of credit cards accepted (need to update with one with AmEx) - Reformatted page for inputting credit card - Updated confirmation screen to bold amount, and list the titles as the ones the user is paying for. - Changed Print reciept template in seed data to look more readable and like other itemized reciepts. Signed-off-by: Suzanne Paterno Signed-off-by: Cesar Velez Signed-off-by: Galen Charlton --- Open-ILS/src/sql/Pg/950.data.seed-values.sql | 88 +++++---- Open-ILS/src/templates/opac/css/style.css.tt2 | 98 +++++++++- Open-ILS/src/templates/opac/myopac/main.tt2 | 184 ++++++++++--------- Open-ILS/src/templates/opac/myopac/main_pay.tt2 | 10 +- .../templates/opac/myopac/main_payment_form.tt2 | 197 ++++++++++++--------- .../src/templates/opac/parts/myopac/main_base.tt2 | 14 +- Open-ILS/web/images/credit_card_logo.png | Bin 0 -> 21921 bytes 7 files changed, 361 insertions(+), 230 deletions(-) create mode 100644 Open-ILS/web/images/credit_card_logo.png diff --git a/Open-ILS/src/sql/Pg/950.data.seed-values.sql b/Open-ILS/src/sql/Pg/950.data.seed-values.sql index cad9960820..0c1e7c9c04 100644 --- a/Open-ILS/src/sql/Pg/950.data.seed-values.sql +++ b/Open-ILS/src/sql/Pg/950.data.seed-values.sql @@ -11347,64 +11347,56 @@ $$ 'xact.usr', 'print-on-demand', $$ + [%- USE date -%][%- SET user = target.0.xact.usr -%] -
-
[% date.format %]

+
+ + +
+
+ [% date.format %] +

+ + [% SET grand_total = 0.00 %]
    [% SET xact_mp_hash = {} %] - [% FOR mp IN target %][%# Template is hooked around payments, but let us make the receipt focused on transactions %] + [% FOR mp IN target %][%# Create an array of transactions/amount paid for each payment made %] [% SET xact_id = mp.xact.id %] - [% IF ! xact_mp_hash.defined( xact_id ) %][% xact_mp_hash.$xact_id = { 'xact' => mp.xact, 'payments' => [] } %][% END %] - [% xact_mp_hash.$xact_id.payments.push(mp) %] + [% SET amount = mp.amount %] + [% IF ! xact_mp_hash.defined( xact_id ) %] + [% xact_mp_hash.$xact_id = { 'xact' => mp.xact, 'payment' => amount } %] + [% END %] [% END %] + [% FOR xact_id IN xact_mp_hash.keys.sort %] [% SET xact = xact_mp_hash.$xact_id.xact %] -
  1. Transaction ID: [% xact_id %] - [% IF xact.circulation %][% helpers.get_copy_bib_basics(xact.circulation.target_copy).title %] - [% ELSE %]Miscellaneous - [% END %] - Line item billings:
      - [% SET mb_type_hash = {} %] - [% FOR mb IN xact.billings %][%# Group billings by their btype %] - [% IF mb.voided == 'f' %] - [% SET mb_type = mb.btype.id %] - [% IF ! mb_type_hash.defined( mb_type ) %][% mb_type_hash.$mb_type = { 'sum' => 0.00, 'billings' => [] } %][% END %] - [% IF ! mb_type_hash.$mb_type.defined( 'first_ts' ) %][% mb_type_hash.$mb_type.first_ts = mb.billing_ts %][% END %] - [% mb_type_hash.$mb_type.last_ts = mb.billing_ts %] - [% mb_type_hash.$mb_type.sum = mb_type_hash.$mb_type.sum + mb.amount %] - [% mb_type_hash.$mb_type.billings.push( mb ) %] - [% END %] - [% END %] - [% FOR mb_type IN mb_type_hash.keys.sort %] -
    1. [% IF mb_type == 1 %][%# Consolidated view of overdue billings %] - $[% mb_type_hash.$mb_type.sum %] for [% mb_type_hash.$mb_type.billings.0.btype.name %] - on [% mb_type_hash.$mb_type.first_ts %] through [% mb_type_hash.$mb_type.last_ts %] - [% ELSE %][%# all other billings show individually %] - [% FOR mb IN mb_type_hash.$mb_type.billings %] - $[% mb.amount %] for [% mb.btype.name %] on [% mb.billing_ts %] [% mb.note %] - [% END %] - [% END %]
    2. - [% END %] -
    - Line item payments:
      - [% FOR mp IN xact_mp_hash.$xact_id.payments %] -
    1. Payment ID: [% mp.id %] - Paid [% mp.amount %] via [% SWITCH mp.payment_type -%] - [% CASE "cash_payment" %]cash - [% CASE "check_payment" %]check - [% CASE "credit_card_payment" %]credit card - [%- IF mp.credit_card_payment.cc_number %] ([% mp.credit_card_payment.cc_number %])[% END %] - [% CASE "credit_payment" %]credit - [% CASE "forgive_payment" %]forgiveness - [% CASE "goods_payment" %]goods - [% CASE "work_payment" %]work - [%- END %] on [% mp.payment_ts %] [% mp.note %] -
    2. - [% END %] -
    +
  2. + Transaction ID: [% xact_mp_hash.$xact_id.xact.id %]
    + [% IF xact.circulation %] + Title: "[% helpers.get_copy_bib_basics(xact.circulation.target_copy).title %]"
    + [% END %] + + [%# Go get all the date needed from xact_summary %] + + [% SET mbts = xact.summary %] + + Transaction Type: [% mbts.last_billing_type%]
    + Date: [% mbts.last_billing_ts %]
    + + Note: [% mbts.last_billing_note %]
    + + Amount: $[% xact_mp_hash.$xact_id.payment | format("%.2f") %] + [% grand_total = grand_total + xact_mp_hash.$xact_id.payment %]
  3. +
    [% END %]
+ +
+ Payment Type: Credit Card
+ Total: $[% grand_total | format("%.2f") %] +
+
$$ ) diff --git a/Open-ILS/src/templates/opac/css/style.css.tt2 b/Open-ILS/src/templates/opac/css/style.css.tt2 index bdbb2d3b1c..aade957dc9 100644 --- a/Open-ILS/src/templates/opac/css/style.css.tt2 +++ b/Open-ILS/src/templates/opac/css/style.css.tt2 @@ -1214,9 +1214,17 @@ div.result_table_utils_cont { float:right; padding: 15px 0px 0px 23px; [% END -%] - background-color: [% css_colors.accent_ultralight %]; width: 177px; - height: 166px; +} + +.cc_logo_img +{ + width: 79%; + [% IF rtl == 't' -%] + padding-right: .5em; + [% ELSE -%] + padding-left: .5em; + [% END -%] } #myopac_sum_fines_placehold { @@ -1245,23 +1253,91 @@ div.result_table_utils_cont { [% END -%] } -#acct_checked_main_header, #acct_holds_main_header, #acct_checked_hist_header, #acct_holds_hist_header, #acct_list_header, #acct_list_header_anon, #temp_list_holds, #acct_messages_main_header, #ebook_circs_main_table, #ebook_holds_main_table { +#acct_checked_main_header, #acct_holds_main_header, #acct_fines_main_header, #acct_fees_main_header, #acct_checked_hist_header, #acct_holds_hist_header, #acct_list_header, #acct_list_header_anon, #temp_list_holds, #acct_messages_main_header, #ebook_circs_main_table, #ebook_holds_main_table { border-collapse: collapse; } +.acct_fines_header +{ + width: 100%; + padding-bottom:1em; + [% IF rtl == 't' -%] + float: right; + [% ELSE -%] + float:left; + [% END -%] +} + +/* tables for entering payment information */ +#acct_fines_main_header, +#acct_fees_main_header +{ + width: 100%; +} + +/* tables for entering payment information */ +#billing_info_table +{ + width: auto; + [% IF rtl == 't' -%] + float: right; + [% ELSE -%] + float:left; + [% END -%] + display:inline; + padding-left: 1em; + padding-right: 1em; +} + +/* tables for entering payment information */ +#credit_card_info_table +{ + width: auto; + display: block; +} + +/* tables for entering payment information */ +#billing_info_table td, +#credit_card_info_table td +{ + [% IF rtl == 't' -%] + padding-right: .5em; + [% ELSE -%] + padding-left: .5em; + [% END -%] + +} + +/* div for the payment buttons with the total */ +#payment_actions +{ + width: auto; + display: block; + padding: 1em 0 0 1em; + text-align:center; +} + +/* text to state what is seen on cc statement */ +.cc_disclaimer +{ + font-style:italic; + font-size: 90%; + color:[% css_colors.primary_fade %]; +} + .hold_notes { text-transform: none; font-weight: normal; } .hold_note_title { font-weight: bold; } - -#acct_checked_main_header td, #acct_holds_main_header td, #acct_checked_hist_header td, #acct_holds_hist_header td, #acct_list_header td, #acct_list_header_anon td, #temp_list_holds td, #acct_messages_main_header, #ebook_circs_main_table td, #ebook_holds_main_table td { - background-color: [% css_colors.accent_lighter2 %]; +#acct_checked_main_header td, #acct_holds_main_header td, #acct_fines_main_header td, #acct_fines_confirm_header td, #acct_fees_main_header td,#acct_checked_hist_header td, #acct_holds_hist_header td, #acct_list_header td, #acct_list_header_anon td, #temp_list_holds td, #acct_messages_main_header td, #ebook_circs_main_table td, #ebook_holds_main_table td { + background-color: [% css_colors.background %]; padding: 10px; -} + border: 1px solid #d3d3d3; +} -#acct_checked_main_header th, #acct_holds_main_header th, #acct_checked_hist_header th, acct_holds_hist_header th, #acct_list_header th, #acct_list_header_anon th, #temp_list_holds th, #acct_messages_main_header, #ebook_circs_main_table th, #ebook_holds_main_table th { +#acct_checked_main_header th, #acct_holds_main_header th, #acct_fines_main_header th, #acct_fines_confirm_header th, #acct_fees_main_header th, #acct_checked_hist_header th, #acct_holds_hist_header th, #acct_list_header th, #acct_list_header_anon th, #temp_list_holds th, #acct_messages_main_header th, #ebook_holds_main_table th { [% IF rtl == 't' -%] text-align: right; [% ELSE -%] @@ -1324,6 +1400,12 @@ div.result_table_utils_cont { .myopac_payments_table form { display: inline; } .myopac_payments_table input[type="submit"] { padding: 1px; } +.cc_header +{ + padding-top:1em; + background-color: [% css_colors.accent_lighter %]; +} + .payment-error { font-weight: bold; color: [% css_colors.text_alert %]; padding: 10px; border: 1px solid [% css_colors.accent_medium_dark %]; diff --git a/Open-ILS/src/templates/opac/myopac/main.tt2 b/Open-ILS/src/templates/opac/myopac/main.tt2 index 8c5aa3c126..efe94531c7 100644 --- a/Open-ILS/src/templates/opac/myopac/main.tt2 +++ b/Open-ILS/src/templates/opac/myopac/main.tt2 @@ -12,33 +12,46 @@ [% IF myopac_cc_allowed; # http://www.w3.org/TR/WCAG20-TECHS/H32.html # avoid forms w/ no submit action %] -
+ [% END %] [% IF ctx.fines.circulation.size > 0 %]
- + +
+ + + [% IF myopac_cc_allowed %] + [% l("Pay Selected Circulation Charges") %] + [% ELSE %] + [% l("Circulation Charges") %] + [% END %] + + +
+ +
+ - - - - - - - - - - [% IF myopac_cc_allowed %] - [% END %] + + + + + + + @@ -50,6 +63,24 @@ attrs.title = f.xact.reservation.target_resource_type.name; END %] + [% IF myopac_cc_allowed %] + + [% END %] + + + + + - - - - - - [% IF myopac_cc_allowed %] - - [% END %] + [% END %]
- [% l("Pay Selected Circulation Charges") %] -
[% l("Title") %][% l("Author") %][% l("Checkout Date") %][% l("Due Date") %][% l("Date Returned") %][% l("Balance Owed") %] + + [% IF myopac_cc_allowed %] + - - + title="[% l('Click to (un)select all charges') %]" /> + [% l("Owed") %][% l("Billing Type") %][% l("Title") %][% l("Checkout") %][% l(" Due ") %] + [% l(" Returned/Renewed") %] + [% l(" Returned*") %] +
+ + + + [% money(f.xact.balance_owed)%] + + + [% f.xact.last_billing_type %] + [% recid = f.xact.circulation.target_copy.call_number.record.id || f.xact.reservation.target_resource_type.record.id; IF recid; %] @@ -59,127 +90,118 @@ [% attrs.title | html %] [% END %] [%- author_query = attrs.author.replace('[,\.:;]', ''); %] - [% attrs.author | html %] - + + [% ts = f.xact.circulation.xact_start || f.xact.reservation.start_time || 0; IF ts; date.format(ctx.parse_datetime(ts), DATE_FORMAT); END %] + + [% ts = f.xact.circulation.due_date || f.xact.reservation.end_time || 0; due_org = f.xact.circulation.circ_lib || f.xact.reservation.pickup_lib; IF ts; date.format(ctx.parse_datetime(ts, due_org), DATE_FORMAT); END %] + + [% ts = f.xact.circulation.checkin_time || f.xact.reservation.return_time || 0; IF ts; date.format(ctx.parse_datetime(ts), DATE_FORMAT); ELSE %] + here? --> [% l('(fines accruing)') %] [% END %] - - [% money(f.xact.balance_owed) %] - - - -
+ + *Items may have been renewed.
[% END %] [% IF ctx.fines.grocery.size > 0 %]
-
-
-
- +

+
+ + + [% IF myopac_cc_allowed %] + [% l("Pay Selected Other Charges") %] + [% ELSE %] + [% l("Other Charges") %] + [% END %] + + +
+ +
- - - - - - - - - - [% IF myopac_cc_allowed %] - [% END %] + + + + + + [% FOR f IN ctx.fines.grocery %] - - - - + [% END %] + + - [% IF myopac_cc_allowed %] + - [% END %] + + + [% END %]
- [% l("Pay Selected Other Charges") %] -
[% l("Transaction Start Time") %][% l("Last Payment Time") %][% l("Initial Amount Owed") %][% l("Total Amount Paid") %][% l("Balance Owed") %][% l("Billing Type") %] + + [% IF myopac_cc_allowed %] + - - + title="[% l('Click to (un)select all fines') %]" /> + [% l("Owed") %][% l("Billing Type") %][% l("Note") %] [% l("Date") %]
[% date.format( - ctx.parse_datetime(f.xact.xact_start), - DATE_FORMAT - ) %] - [% IF f.xact.last_payment_ts; - date.format( - ctx.parse_datetime( - f.xact.last_payment_ts - ), DATE_FORMAT - ); - END %] + + [% IF myopac_cc_allowed %] + + [% money(f.xact.total_owed) %][% money(f.xact.total_paid) %] [% money(f.xact.balance_owed) %] [% f.xact.last_billing_type %] - + [% f.xact.last_billing_note %] [% date.format( + ctx.parse_datetime(f.xact.xact_start), + DATE_FORMAT + ) %]
+
[% END %] [% UNLESS ctx.fines.grocery.size OR ctx.fines.circulation.size %]
[% l('You have no current fines.') %]
[% ELSIF myopac_cc_allowed %] -
+
- [% - l('Go back to try again or to cancel this payment attempt.') - %] + + [% l('Account Home') %] + [% l('Try Payment Again') %]

[% ELSE %]

[% l('Your payment has been approved.') %]

@@ -38,9 +38,11 @@ END %]

[ [% l('Print receipt') %] ]

[% ctx.printable_receipt.template_output.data %] +
[% ELSE %]
@@ -52,7 +54,7 @@ ) | html %]
[% END %] -

[ [% +

[ [% l("Back to Account Summary") %] ]

[% END %]
diff --git a/Open-ILS/src/templates/opac/myopac/main_payment_form.tt2 b/Open-ILS/src/templates/opac/myopac/main_payment_form.tt2 index 54d079297e..455af6a91c 100644 --- a/Open-ILS/src/templates/opac/myopac/main_payment_form.tt2 +++ b/Open-ILS/src/templates/opac/myopac/main_payment_form.tt2 @@ -10,11 +10,12 @@ ctx.get_org_setting(ctx.user.home_ou.id, 'credit.processor.stripe.enabled') AND ctx.get_org_setting(ctx.user.home_ou.id, 'credit.processor.default') == 'Stripe'; ctx.use_stripe = 1; END %] + +

[% l('Pay Charges') %]

[% IF ctx.fines.balance_owed <= 0 %]
- [% l("You either have no fines to pay or you have selected fines whose " _ - "total is non-positive. We cannot process non-positive amounts.") %] + [% l("The minimum amount you can pay is \$0.01.") %]
[% ELSE %] [% IF ctx.use_stripe %] @@ -26,17 +27,65 @@ [% END %]
[% IF last_chance %] -

[% l("Are you sure you are ready to charge [_1] to your credit card?", money(ctx.fines.balance_owed)) %]

+ +

[% l("Are you sure you are ready to charge ") %] + [% l("[_1] ", money(ctx.fines.balance_owed))%] + [% l("to your credit card?") %]

[% FOR k IN CGI.Vars; NEXT UNLESS k; FOR val IN CGI.param(k) %] [% END; END %] - - [% l('Cancel') %] + + + [% l('Cancel') %] + + + + + + + + + + [% + FOR f IN ctx.fines.circulation; + NEXT IF CGI.param('xact').size && + !CGI.param('xact').grep(f.xact.id).size; + attrs = {marc_xml => f.marc_xml}; + IF f.marc_xml; + PROCESS get_marc_attrs args=attrs; + ELSIF f.xact.reservation; + attrs.title = f.xact.reservation.target_resource_type.name; + END %] + + + + + [% + END; + FOR f IN ctx.fines.grocery; + NEXT IF CGI.param('xact_misc').size && + !CGI.param('xact_misc').grep(f.xact.id).size %] + + + + + [% END %] + +
[% l('Charge/Fee') %][% l('Amount') %]
[% attrs.title | html %][% money(f.xact.balance_owed) %]
[% f.xact.last_billing_type | html %][% money(f.xact.balance_owed) %]
+ +

+ [% l("Are you sure you are ready to charge ") %] + [% l("[_1] ", money(ctx.fines.balance_owed))%] + [% l("to your credit card?") %]

+ + [% l('Cancel') %] [% ELSE %] - [% END %] - - - - - - - - +
[% l('Billing Information') %] -

[% l('Selected fines you are paying for:') %]

- - - - - - - - - [% - FOR f IN ctx.fines.circulation; - NEXT IF CGI.param('xact').size && - !CGI.param('xact').grep(f.xact.id).size; - attrs = {marc_xml => f.marc_xml}; - IF f.marc_xml; - PROCESS get_marc_attrs args=attrs; - ELSIF f.xact.reservation; - attrs.title = f.xact.reservation.target_resource_type.name; - END %] - - - - - [% - END; - FOR f IN ctx.fines.grocery; - NEXT IF CGI.param('xact_misc').size && - !CGI.param('xact_misc').grep(f.xact.id).size %] - - - - - [% END %] - -
[% l('Name') %][% l('Amount') %]
[% attrs.title | html %][% money(f.xact.balance_owed) %]
[% f.xact.last_billing_type | html %][% money(f.xact.balance_owed) %]
-
-
- [% l('Total amount to pay:') %] - [% money(ctx.fines.balance_owed) %] -
-
- [% | l('', '') %]Click [_1]Cancel[_2] to go back and (un)select other fines.[% END %] -
+ + + + + + @@ -112,14 +116,17 @@ + + @@ -138,15 +145,23 @@ - + [% USE zip=String(ctx.user.billing_address.post_code) %] + + +
[% l('Billing Information') %]
- + + [% l("Update") %] -
+ + + - + - @@ -209,14 +226,24 @@ - + - [% INCLUDE "opac/parts/myopac/main_refund_policy.tt2" %] - + +
[% l('Credit Card Information') %][% l('Credit Card Information') %]
+ - + -
- - [% l('Cancel') %] - +
+ [% l('Total amount:') %] + [% money(ctx.fines.balance_owed) %]
+ + + [% l('Cancel') %] +
+ + +
+
+ [% INCLUDE "opac/parts/myopac/main_refund_policy.tt2" %] + [% END %]
diff --git a/Open-ILS/src/templates/opac/parts/myopac/main_base.tt2 b/Open-ILS/src/templates/opac/parts/myopac/main_base.tt2 index ded602185d..ea434eccfa 100644 --- a/Open-ILS/src/templates/opac/parts/myopac/main_base.tt2 +++ b/Open-ILS/src/templates/opac/parts/myopac/main_base.tt2 @@ -21,10 +21,16 @@ [% money(ctx.user_stats.fines.balance_owed) %]
[% IF (ctx.fines.grocery.size OR ctx.fines.circulation.size) AND ctx.get_org_setting(ctx.user.home_ou, 'credit.payments.allow') == 1 %] -
- [% END %] +
+
+ [% l('View Charges') %] + [% l('Credit Card Logo') %] + + [% ELSE %] +
+ [% END %]
[% END %] diff --git a/Open-ILS/web/images/credit_card_logo.png b/Open-ILS/web/images/credit_card_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..7dc238b8e909ea435bda54a046a6f80000d708de GIT binary patch literal 21921 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