「購入注文」というチェックボックスがあります。オンにすると、すべての CC フィールドが不要になります。ただし、スクリプトが機能していないようです。何か案は?
チェックボックスの名前は purchaseorder です。他のフィールドは CC フィールド名です。デフォルトでは、CC フィールドは必須です。お客様が「購入注文」にチェックを入れた場合のみ、必須ではありません。
function ToggleCreditcardpayment() {
if ($('input[type=checkbox][name=purchaseorder]').is(':checked')) {
$('#NameOnCard').removeClass('required');
$('select[name=CreditCardType]').removeClass('required');
$('select[name=CardExpMonth]').removeClass('required');
$('select[name=CardExpYear]').removeClass('required');
$('#CardNumber').removeClass('required');
$('#CVC').removeClass('required');
$('#NameOnCard').attr('disabled', true);
$('select[name=CreditCardType]').attr('disabled', true);
$('select[name=CardExpMonth]').attr('disabled', true);
$('select[name=CardExpYear]').attr('disabled', true);
$('#CardNumber').attr('disabled', true);
$('#CVC').attr('disabled', true);
$('#customernumber').addClass('required');
$('#customernumber').attr('disabled', false);
$('#payment-method-account .error').removeClass('error');
$('#payment-method-account ul').remove();
$('#payment-method-cc .error').removeClass('error');
$('#payment-method-cc ul').remove();
ResetValidatious()
} else {
$('#NameOnCard').addClass('required');
$('select[name=CreditCardType]').addClass('required');
$('select[name=CardExpMonth]').addClass('required');
$('select[name=CardExpYear]').addClass('required');
$('#CardNumber').addClass('required');
$('#CVC').addClass('required');
$('#NameOnCard').attr('disabled', false);
$('select[name=CreditCardType]').attr('disabled', false);
$('select[name=CardExpMonth]').attr('disabled', false);
$('select[name=CardExpYear]').attr('disabled', false);
$('#CardNumber').attr('disabled', false);
$('#CVC').attr('disabled', false);
$('#customernumber').removeClass('required');
$('#customernumber').attr('disabled', true);
$('#payment-method-account .error').removeClass('error');
$('#payment-method-account ul').remove();
$('#payment-method-cc .error').removeClass('error');
$('#payment-method-cc ul').remove();
ResetValidatious();
}
}
検証サーバー側:
if(form["purchaseorder"].Value == "yes")
{
UserFormElement elementCustomerNumber = form.GetElement("CustomerNumber");
if (null != elementCustomerNumber && elementCustomerNumber.GetValue().Trim() == "")
{
elementCustomerNumber.AddError("<br/>Customer number is required for pre-approved account.");
}
if(form.HasError)
{
Redirect("checkout.aspx",true);
return;
}
Payment payment = new Payment(CustomerCtxt);
payment.PaymentTypeId = DMinSite.Common.DmiProxy.GetInterface<DMinSite.Common.Interfaces.ILookupCommonService>().GetLookupIdByValue(context, DMinSite.Common.Constants.LookupTypeEnum.PaymentType, "PO");
PaymentPurchaseOrder paymentPurchaseOrder = new PaymentPurchaseOrder(context);
paymentPurchaseOrder.Amount = cart.CartTotal;
paymentPurchaseOrder.CustomerNumber = elementCustomerNumber.GetValue().Trim();
payment.PaymentInfo = paymentPurchaseOrder;
cart.AddPayment(payment);
}
else
{
CreditCard card = new CreditCard(CustomerCtxt);
String note = form.GetElement("Special").GetValue();
note = note.Replace('"','\"');
//order level note
cart.Note = note;
UserFormElement elementCCTypeId = form.GetElement("CreditCardType");
card.CreditCardTypeId = elementCCTypeId.GetValue<int>();
UserFormElement elementCCNumber = form.GetElement("CardNumber");
card.Number = elementCCNumber.GetValue();
UserFormElement elementCCName = form.GetElement("NameOnCard");
card.NameOnCard = elementCCName.GetValue();
UserFormElement elementCCExpYear = form.GetElement("CardExpYear");
UserFormElement elementCCExpMonth = form.GetElement("CardExpMonth");
if (elementCCExpMonth.GetValue().Trim() == "" || elementCCExpYear.GetValue().Trim() == "")
{
elementCCExpMonth.AddError("<br/>The expiration month and/or year is not valid. Please check your selections and try again.");
}
else
{
card.ExpirationDate = ControlUtility.ConstructDateTime(
elementCCExpYear.GetValue<int>(),
elementCCExpMonth.GetValue<int>(), 1);
}
UserFormElement elementCCCvv2 = form.GetElement("CVC");
card.Cvv2 = elementCCCvv2.GetValue();
//check fields
if (elementCCNumber.GetValue().Trim() == "" || !card.IsValidCreditCardNumber(CustomerCtxt))
{
elementCCNumber.AddError("<br/>The credit card number is not valid. Please check the number and try again.");
}
if (elementCCExpYear.GetValue().Trim() + elementCCExpMonth.GetValue().Trim() == "" || card.IsExpired(CustomerCtxt))
{
elementCCExpYear.AddError("<br/>The credit card has expired. Please check the expiration date and try again.");
}
if (elementCCCvv2.GetValue().Trim() == "" || !card.IsValidCvv2(CustomerCtxt))
{
elementCCCvv2.AddError("<br/>The credit card CVV2 number is not valid. Please check the CVV2 number and try again.");
}
if (elementCCName.GetValue().Trim() == "")
{
elementCCName.AddError("<br/>The credit card name is not filled out. Please check the name and try again.");
}
if(form.HasError)
{
Redirect("checkout.aspx",true);
return;
}
Payment payment = new Payment(CustomerCtxt);
payment.PaymentTypeId = Core.GetLookupIdByValue("PaymentType", "CreditCard");
payment.PaymentInfo = card;
payment.Amount = cart.CartTotal;
cart.AddPayment(payment);
}