add eway as an agent payment gateway, RT#71906, update list of gateways from http...
[freeside.git] / httemplate / edit / payment_gateway.html
index a9909c3..b44b315 100644 (file)
@@ -5,31 +5,33 @@
             'fields'         => $fields,
             'field_callback' => $field_callback,
             'labels'         => {
-                                  'gatewaynum'           => 'Gateway #',
+                                  'gatewaynum'           => 'Gateway',
+                                  'gateway_namespace'    => 'Gateway type',
                                   'gateway_module'       => 'Gateway',
                                   'gateway_username'     => 'Username',
                                   'gateway_password'     => 'Password',
                                   'gateway_action'       => 'Action',
-                                  'gateway_options'      => 'Options: (Name/Value pairs, one element per line)',
+                                  'gateway_options'      => 'Options (Name/Value pairs, <BR>one element per line)',
                                   'gateway_callback_url' => 'Callback URL',
+                                  'gateway_cancel_url'   => 'Cancel URL',
                                 },
           )
 %>
 
 
 <SCRIPT TYPE="text/javascript">
-  var gatewayNamespace = new Array;
-
-% foreach my $module ( sort { lc($a) cmp lc ($b) } keys %modules ) {
-    gatewayNamespace.push('<% $modules{$module} %>')
-% } 
-
-  // document.getElementById('gateway_namespace').value = gatewayNamespace[0];
-  function setNamespace(what) {
-    document.getElementById('gateway_namespace').value =
-      gatewayNamespace[what.selectedIndex];
+  var modulesForNamespace = <% $json->encode(\%modules) %>;
+  function changeNamespace() {
+    var ns = document.getElementById('gateway_namespace').value;
+    var select_module = document.getElementById('gateway_module');
+    select_module.options.length = 0;
+    for (var x in modulesForNamespace[ns]) {
+      var o = document.createElement('option');
+      o.value = o.text = modulesForNamespace[ns][x];
+      select_module.add(o, null);
+    }
   }
-
+  window.onload = changeNamespace;
 </SCRIPT>
 
 <%init>
 die "access denied"
   unless $FS::CurrentUser::CurrentUser->access_right('Configuration');
 
-my %modules =  (
-  '2CheckOut'             => 'Business::OnlinePayment',
-  'AuthorizeNet'          => 'Business::OnlinePayment',
-  'BankOfAmerica'         => 'Business::OnlinePayment', #deprecated?
-  'Beanstream'            => 'Business::OnlinePayment',
-  'Capstone'              => 'Business::OnlinePayment',
-  'Cardstream'            => 'Business::OnlinePayment',
-  'CashCow'               => 'Business::OnlinePayment',
-  'CyberSource'           => 'Business::OnlinePayment',
-  'eSec'                  => 'Business::OnlinePayment',
-  'eSelectPlus'           => 'Business::OnlinePayment',
-  'ElavonVirtualMerchant' => 'Business::OnlinePayment',
-  'Exact'                 => 'Business::OnlinePayment',
-  'iAuthorizer'           => 'Business::OnlinePayment',
-  'Ingotz'                => 'Business::OnlinePayment',
-  'InternetSecure'        => 'Business::OnlinePayment',
-  'Interswitchng'         => 'Business::OnlineThirdPartyPayment',
-  'IPaymentTPG'           => 'Business::OnlinePayment',
-  'IPPay'                 => 'Business::OnlinePayment',
-  'Iridium'               => 'Business::OnlinePayment',
-  'Jettis'                => 'Business::OnlinePayment',
-  'Jety'                  => 'Business::OnlinePayment',
-  'LinkPoint'             => 'Business::OnlinePayment',
-  'MerchantCommerce'      => 'Business::OnlinePayment',
-  'Network1Financial'     => 'Business::OnlinePayment',
-  'OCV'                   => 'Business::OnlinePayment',
-  'OpenECHO'              => 'Business::OnlinePayment',
-  'PayConnect'            => 'Business::OnlinePayment',
-  'PayflowPro'            => 'Business::OnlinePayment',
-  'PaymenTech'            => 'Business::OnlinePayment',
-  'PaymentsGateway'       => 'Business::OnlinePayment',
-  'PayPal'                => 'Business::OnlinePayment',
-  #'PaySystems'            => 'Business::OnlinePayment',
-  'PlugnPay'              => 'Business::OnlinePayment',
-  'PPIPayMover'           => 'Business::OnlinePayment',
-  'Protx'                 => 'Business::OnlinePayment', #now SagePay
-  'PXPost'                => 'Business::OnlinePayment',
-  'SagePay'               => 'Business::OnlinePayment',
-  'SecureHostingUPG'      => 'Business::OnlinePayment',
-  'Skipjack'              => 'Business::OnlinePayment',
-  'StGeorge'              => 'Business::OnlinePayment',
-  'SurePay'               => 'Business::OnlinePayment',
-  'TCLink'                => 'Business::OnlinePayment',
-  'TransactionCentral'    => 'Business::OnlinePayment',
-  'TransFirsteLink'       => 'Business::OnlinePayment',
-  'Vanco'                 => 'Business::OnlinePayment',
-  'viaKLIX'               => 'Business::OnlinePayment',
-  'VirtualNet'            => 'Business::OnlinePayment',
-  'WesternACH'            => 'Business::OnlinePayment',
-  'WorldPay'              => 'Business::OnlinePayment',
-); 
+my $json = Cpanel::JSON::XS->new;
+$json->canonical(1);
+my %modules = (
+  'Business::OnlinePayment' => [
+    '2CheckOut',
+    'AuthorizeNet',
+    'BankOfAmerica', #deprecated?
+    'Beanstream',
+    'Braintree',
+    'Capstone',
+    'CardFortress',
+    'Cardstream',
+    'CashCow',
+    'CyberSource',
+    'eSec',
+    'eSelectPlus',
+    'ElavonVirtualMerchant',
+    'eWay',
+    'Exact',
+    'FirstDataGlobalGateway',
+    'GlobalPayments',
+    'iAuthorizer',
+    'Ingotz',
+    'InternetSecure',
+    #'IPaymentTPG',
+    'IPPay',
+    'Iridium',
+    'Jettis',
+    'Jety',
+    'LinkPoint',
+    'Litle',
+    'MerchantCommerce',
+    'Network1Financial',
+    'NMI',
+    'OCV',
+    'Ogone',
+    'OpenECHO',
+    'PaperlessTrans',
+    'PayConnect',
+    'PayflowPro',
+    'PaymenTech',
+    'PaymentsGateway',
+    'PayPal',
+    #'PaySystems',
+    'PlugnPay',
+    'PPIPayMover',
+    'Protx', #now SagePay
+    'PXPost',
+    'SagePay',
+    'SecureHostingUPG',
+    'Skipjack',
+    'StGeorge',
+    'SurePay',
+    'SynapseGateway',
+    'TCLink',
+    'TransactionCentral',
+    'TransFirsteLink',
+    'USAePay',
+    'Vanco',
+    'viaKLIX',
+    'VirtualNet',
+    'vSecureProcessing',
+    'WesternACH',
+    'WorldPay',
+  ],
+  'Business::OnlineThirdPartyPayment' => [
+    #'eWayShared', support currently broken
+    'FCMB',
+    #'Interswitchng', #incomplete?
+    'PayPal',
+  ],
+  'Business::BatchPayment' => [
+    'BillBuddy',
+    'CardFortress',
+    'KeyBank',
+    'Paymentech',
+    'RBC',
+    'TD_EFT',
+  ],
+);
 
 my @actions = (
                 'Normal Authorization',
                 'Authorization Only',
-                'Authorization Only, Post Authorization',
+                'Authorization Only,Post Authorization',
               );
 
-my $fields = [
-               {
+my $fields = [ {
                  field               => 'gateway_namespace',
-                 type                => 'hidden',
-                 curr_value_callback => sub { my($cgi, $object, $fref) = @_;
-                                              $modules{$object->gateway_module}
-                                              || 'Business::OnlinePayment'
-                                            },
+                 type                => 'select',
+                 options             => [ qw(
+                   Business::OnlinePayment
+                   Business::BatchPayment
+                   Business::OnlineThirdPartyPayment
+                 ) ],
+                 labels       => {
+                   'Business::OnlinePayment' => 'Direct',
+                   'Business::BatchPayment'  => 'Batch',
+                   'Business::OnlineThirdPartyPayment'  => 'Hosted',
+                 },
+                 onchange => 'changeNamespace',
                },
                {
                  field    => 'gateway_module',
                  type     => 'select',
-                 options  => [ sort { lc($a) cmp lc ($b) } keys %modules ],
-                 onchange => 'setNamespace',
+                 # does it even make sense to list all modules here?
+                 options  => [ sort { lc($a) cmp lc($b) }
+                               map { @$_ } values %modules ],
                },
                'gateway_username',
                'gateway_password',
@@ -117,10 +155,21 @@ my $fields = [
                  type     => 'select',
                  options  => \@actions,
                },
-               'gateway_callback_url',
+               {
+                 field    => 'gateway_callback_url',
+                 type     => 'text',
+                 size     => 40,
+               },
+               {
+                 field    => 'gateway_cancel_url',
+                 type     => 'text',
+                 size     => 40,
+               },
                {
                  field               => 'gateway_options',
                  type                => 'textarea',
+                 rows                => '12',
+                 cols                => '40', 
                  curr_value_callback => sub { my($cgi, $object, $fref) = @_;
                                               join("\r", $object->options );
                                             },
@@ -132,6 +181,9 @@ my $field_callback = sub {
   if ($object->gatewaynum) {
     if ( $field_hashref->{field} eq 'gateway_module' ) {
       $field_hashref->{type} = 'fixed';
+    } elsif ( $field_hashref->{field} eq 'gateway_namespace' ) {
+      $field_hashref->{type} = 'fixed';
+      $field_hashref->{formatted_value} = $object->namespace_description;
     }
   }
 };