Skip to content

Commit 6f4cf61

Browse files
committed
Offline credit card payment: Option to exclude credit card types
1 parent 100f055 commit 6f4cf61

File tree

9 files changed

+111
-58
lines changed

9 files changed

+111
-58
lines changed

src/Plugins/SmartStore.OfflinePayment/Controllers/OfflinePaymentController.cs

Lines changed: 41 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,18 @@ public OfflinePaymentController(
3838

3939
#region Global
4040

41+
private List<SelectListItem> GetTransactModes()
42+
{
43+
var list = new List<SelectListItem>
44+
{
45+
new SelectListItem { Text = T("Enums.SmartStore.Core.Domain.Payments.PaymentStatus.Pending"), Value = ((int)TransactMode.Pending).ToString() },
46+
new SelectListItem { Text = T("Enums.SmartStore.Core.Domain.Payments.PaymentStatus.Authorized"), Value = ((int)TransactMode.Authorize).ToString() },
47+
new SelectListItem { Text = T("Enums.SmartStore.Core.Domain.Payments.PaymentStatus.Paid"), Value = ((int)TransactMode.Paid).ToString() }
48+
};
49+
50+
return list;
51+
}
52+
4153
[NonAction]
4254
private TModel ConfigureGet<TModel, TSetting>(Action<TModel, TSetting> fn = null)
4355
where TModel : ConfigurationModelBase, new()
@@ -414,7 +426,17 @@ public ActionResult ManualConfigure()
414426
var model = ConfigureGet<ManualConfigurationModel, ManualPaymentSettings>((m, s) =>
415427
{
416428
m.TransactMode = s.TransactMode;
417-
m.TransactModeValues = s.TransactMode.ToSelectList();
429+
m.TransactModeValues = GetTransactModes();
430+
m.ExcludedCreditCards = s.ExcludedCreditCards.SplitSafe(",");
431+
432+
m.AvailableCreditCards = ManualProvider.CreditCardTypes
433+
.Select(x => new SelectListItem
434+
{
435+
Text = x.Text,
436+
Value = x.Value,
437+
Selected = m.ExcludedCreditCards.Contains(x.Value)
438+
})
439+
.ToList();
418440
});
419441

420442
return View(model);
@@ -429,66 +451,51 @@ public ActionResult ManualConfigure(ManualConfigurationModel model, FormCollecti
429451
ConfigurePost<ManualConfigurationModel, ManualPaymentSettings>(model, form, s =>
430452
{
431453
s.TransactMode = model.TransactMode;
432-
433-
model.TransactModeValues = s.TransactMode.ToSelectList();
454+
s.ExcludedCreditCards = string.Join(",", model.ExcludedCreditCards ?? new string[0]);
434455
});
435456

436457
return ManualConfigure();
437458
}
438459

439460
public ActionResult ManualPaymentInfo()
440461
{
441-
var model = PaymentInfoGet<ManualPaymentInfoModel, ManualPaymentSettings>();
442-
443-
// CC types
444-
model.CreditCardTypes.Add(new SelectListItem()
462+
var model = PaymentInfoGet<ManualPaymentInfoModel, ManualPaymentSettings>((m, s) =>
445463
{
446-
Text = "Visa",
447-
Value = "Visa",
448-
});
449-
model.CreditCardTypes.Add(new SelectListItem()
450-
{
451-
Text = "Master card",
452-
Value = "MasterCard",
453-
});
454-
model.CreditCardTypes.Add(new SelectListItem()
455-
{
456-
Text = "Discover",
457-
Value = "Discover",
458-
});
459-
model.CreditCardTypes.Add(new SelectListItem()
460-
{
461-
Text = "Amex",
462-
Value = "Amex",
464+
var excludedCreditCards = s.ExcludedCreditCards.SplitSafe(",");
465+
466+
foreach (var creditCard in ManualProvider.CreditCardTypes)
467+
{
468+
if (!excludedCreditCards.Any(x => x.IsCaseInsensitiveEqual(creditCard.Value)))
469+
{
470+
m.CreditCardTypes.Add(new SelectListItem
471+
{
472+
Text = creditCard.Text,
473+
Value = creditCard.Value
474+
});
475+
}
476+
}
463477
});
464478

465479
// years
466480
for (int i = 0; i < 15; i++)
467481
{
468482
string year = Convert.ToString(DateTime.Now.Year + i);
469-
model.ExpireYears.Add(new SelectListItem()
470-
{
471-
Text = year,
472-
Value = year,
473-
});
483+
model.ExpireYears.Add(new SelectListItem { Text = year, Value = year });
474484
}
475485

476486
// months
477487
for (int i = 1; i <= 12; i++)
478488
{
479489
string text = (i < 10) ? "0" + i.ToString() : i.ToString();
480-
model.ExpireMonths.Add(new SelectListItem()
481-
{
482-
Text = text,
483-
Value = i.ToString(),
484-
});
490+
model.ExpireMonths.Add(new SelectListItem { Text = text, Value = i.ToString() });
485491
}
486492

487493
// set postback values
488494
var form = this.GetPaymentData();
489495
model.CardholderName = form["CardholderName"];
490496
model.CardNumber = form["CardNumber"];
491497
model.CardCode = form["CardCode"];
498+
492499
var selectedCcType = model.CreditCardTypes.Where(x => x.Value.Equals(form["CreditCardType"], StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault();
493500
if (selectedCcType != null)
494501
selectedCcType.Selected = true;

src/Plugins/SmartStore.OfflinePayment/Localization/resources.de-de.xml

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
<LocaleResource Name="AdditionalFeePercentage.Hint">
2626
<Value>Zusätzliche prozentuale Gebühr zum Gesamtbetrag. Ein fester Wert wird verwendet, falls diese Option nicht aktiviert ist.</Value>
2727
</LocaleResource>
28-
28+
2929
<!-- CashOnDelivery -->
3030
<LocaleResource Name="Plugins.FriendlyName.Payments.CashOnDelivery" AppendRootKey="false">
3131
<Value>Nachnahme</Value>
@@ -122,10 +122,16 @@
122122
</Value>
123123
</LocaleResource>
124124
<LocaleResource Name="Fields.TransactMode">
125-
<Value>Markiere die Zahlung nach dem Abschluß der Bestellung als</Value>
125+
<Value>Zahlungsstatus nach Bestellabschluss</Value>
126126
</LocaleResource>
127127
<LocaleResource Name="Fields.TransactMode.Hint">
128-
<Value>Bestimmen Sie den Transaktionsmodus.</Value>
128+
<Value>Legt den Zahlungsstatus nach Bestellabschluss fest.</Value>
129+
</LocaleResource>
130+
<LocaleResource Name="ExcludedCreditCards">
131+
<Value>Auszuschließende Kreditkarten</Value>
132+
</LocaleResource>
133+
<LocaleResource Name="ExcludedCreditCards.Hint">
134+
<Value>Kreditkarten mit denen Kunden nicht zahlen dürfen.</Value>
129135
</LocaleResource>
130136
</Children>
131137
</LocaleResource>

src/Plugins/SmartStore.OfflinePayment/Localization/resources.en-us.xml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,10 +115,16 @@
115115
</Value>
116116
</LocaleResource>
117117
<LocaleResource Name="Fields.TransactMode">
118-
<Value>After checkout mark payment as</Value>
118+
<Value>Payment status after order completion</Value>
119119
</LocaleResource>
120120
<LocaleResource Name="Fields.TransactMode.Hint">
121-
<Value>Specify transaction mode.</Value>
121+
<Value>Specifies the payment status after order completion.</Value>
122+
</LocaleResource>
123+
<LocaleResource Name="ExcludedCreditCards">
124+
<Value>Excluded credit cards</Value>
125+
</LocaleResource>
126+
<LocaleResource Name="ExcludedCreditCards.Hint">
127+
<Value>Credit cards that customers may not pay with.</Value>
122128
</LocaleResource>
123129
</Children>
124130
</LocaleResource>

src/Plugins/SmartStore.OfflinePayment/Models/ConfigurationModel.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,11 @@ public class ManualConfigurationModel : ConfigurationModelBase
3535
{
3636
[SmartResourceDisplayName("Plugins.Payments.Manual.Fields.TransactMode")]
3737
public TransactMode TransactMode { get; set; }
38-
public SelectList TransactModeValues { get; set; }
38+
public List<SelectListItem> TransactModeValues { get; set; }
39+
40+
[SmartResourceDisplayName("Plugins.Payments.Manual.ExcludedCreditCards")]
41+
public string[] ExcludedCreditCards { get; set; }
42+
public List<SelectListItem> AvailableCreditCards { get; set; }
3943
}
4044

4145
public class PayInStoreConfigurationModel : ConfigurationModelBase

src/Plugins/SmartStore.OfflinePayment/Providers/ManualProvider.cs

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
using System.Collections.Generic;
2+
using System.Web.Mvc;
13
using SmartStore.Core.Domain.Payments;
24
using SmartStore.Core.Plugins;
35
using SmartStore.OfflinePayment.Settings;
@@ -10,12 +12,28 @@ namespace SmartStore.OfflinePayment
1012
[DisplayOrder(1)]
1113
public class ManualProvider : OfflinePaymentProviderBase<ManualPaymentSettings>, IConfigurable
1214
{
15+
public static List<SelectListItem> CreditCardTypes
16+
{
17+
get
18+
{
19+
var creditCardTypes = new List<SelectListItem>
20+
{
21+
new SelectListItem { Text = "Visa", Value = "Visa" },
22+
new SelectListItem { Text = "Master Card", Value = "MasterCard" },
23+
new SelectListItem { Text = "Discover", Value = "Discover" },
24+
new SelectListItem { Text = "Amex", Value = "Amex" }
25+
};
26+
return creditCardTypes;
27+
}
28+
}
29+
1330
public override ProcessPaymentResult ProcessPayment(ProcessPaymentRequest processPaymentRequest)
1431
{
1532
var result = new ProcessPaymentResult();
1633
var settings = CommonServices.Settings.LoadSetting<ManualPaymentSettings>(processPaymentRequest.StoreId);
1734

1835
result.AllowStoringCreditCardNumber = true;
36+
1937
switch (settings.TransactMode)
2038
{
2139
case TransactMode.Pending:
@@ -24,14 +42,12 @@ public override ProcessPaymentResult ProcessPayment(ProcessPaymentRequest proces
2442
case TransactMode.Authorize:
2543
result.NewPaymentStatus = PaymentStatus.Authorized;
2644
break;
27-
case TransactMode.AuthorizeAndCapture:
45+
case TransactMode.Paid:
2846
result.NewPaymentStatus = PaymentStatus.Paid;
2947
break;
3048
default:
31-
{
32-
result.AddError(T("Common.Payment.TranactionTypeNotSupported"));
33-
return result;
34-
}
49+
result.AddError(T("Common.Payment.TranactionTypeNotSupported"));
50+
return result;
3551
}
3652

3753
return result;
@@ -51,7 +67,7 @@ public override ProcessPaymentResult ProcessRecurringPayment(ProcessPaymentReque
5167
case TransactMode.Authorize:
5268
result.NewPaymentStatus = PaymentStatus.Authorized;
5369
break;
54-
case TransactMode.AuthorizeAndCapture:
70+
case TransactMode.Paid:
5571
result.NewPaymentStatus = PaymentStatus.Paid;
5672
break;
5773
default:

src/Plugins/SmartStore.OfflinePayment/Providers/PurchaseOrderNumberProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public override ProcessPaymentResult ProcessPayment(ProcessPaymentRequest proces
3939
case TransactMode.Authorize:
4040
result.NewPaymentStatus = PaymentStatus.Authorized;
4141
break;
42-
case TransactMode.AuthorizeAndCapture:
42+
case TransactMode.Paid:
4343
result.NewPaymentStatus = PaymentStatus.Paid;
4444
break;
4545
default:

src/Plugins/SmartStore.OfflinePayment/Settings/OfflinePaymentSettings.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
using System;
2-
using System.Collections.Generic;
3-
using System.Linq;
1+
using System.Collections.Generic;
42
using SmartStore.Core.Configuration;
53

64
namespace SmartStore.OfflinePayment.Settings
@@ -27,6 +25,7 @@ public class InvoicePaymentSettings : PaymentSettingsBase, ISettings
2725
public class ManualPaymentSettings : PaymentSettingsBase, ISettings
2826
{
2927
public TransactMode TransactMode { get; set; }
28+
public string ExcludedCreditCards { get; set; }
3029
}
3130

3231
public class PurchaseOrderNumberPaymentSettings : PaymentSettingsBase, ISettings
@@ -45,19 +44,21 @@ public class PrepaymentPaymentSettings : PaymentSettingsBase, ISettings
4544
/// <summary>
4645
/// Represents manual payment processor transaction mode
4746
/// </summary>
48-
public enum TransactMode : int
47+
public enum TransactMode
4948
{
5049
/// <summary>
5150
/// Pending
5251
/// </summary>
5352
Pending = 0,
53+
5454
/// <summary>
5555
/// Authorize
5656
/// </summary>
5757
Authorize = 1,
58+
5859
/// <summary>
59-
/// Authorize and capture
60+
/// Paid
6061
/// </summary>
61-
AuthorizeAndCapture = 2
62+
Paid = 2
6263
}
6364
}

src/Plugins/SmartStore.OfflinePayment/Views/OfflinePayment/ManualConfigure.cshtml

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
@model SmartStore.OfflinePayment.Models.ManualConfigurationModel
22
@using SmartStore.Web.Framework;
3-
43
@{
54
Layout = "";
65
}
@@ -16,9 +15,19 @@
1615
</td>
1716
<td class="adminData">
1817
@Html.SettingOverrideCheckbox(model => model.TransactMode)
19-
@Html.DropDownList("TransactMode", Model.TransactModeValues)
18+
@Html.DropDownListFor(model => model.TransactMode, Model.TransactModeValues)
2019
</td>
2120
</tr>
21+
<tr>
22+
<td class="adminTitle">
23+
@Html.SmartLabelFor(model => model.ExcludedCreditCards)
24+
</td>
25+
<td class="adminData">
26+
@Html.SettingOverrideCheckbox(model => model.ExcludedCreditCards)
27+
@Html.ListBoxFor(x => x.ExcludedCreditCards, new MultiSelectList(Model.AvailableCreditCards, "Value", "Text"), new { multiple = "multiple" })
28+
@Html.ValidationMessageFor(model => model.ExcludedCreditCards)
29+
</td>
30+
</tr>
2231
<tr>
2332
<td class="adminTitle">
2433
@Html.SmartLabelFor(model => model.AdditionalFee)
Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1-
#Release Notes#
1+
#Release Notes
22

3-
##Offline Payment Methods 1.1##
4-
###Improvements###
3+
##Offline Payment Methods 2.5.0
4+
###New Features
5+
* Option to exclude credit card types
6+
7+
##Offline Payment Methods 1.1
8+
###Improvements
59
* Multistore configuration

0 commit comments

Comments
 (0)