[ 
https://issues.apache.org/jira/browse/OFBIZ-767?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12476855
 ] 

Jacopo Cappellato commented on OFBIZ-767:
-----------------------------------------

Am I wrong or OFBiz already supports this?
I think that the code is already written in the 
OrderPaymentPreference.securityCode field and then removed by the sysytem alter 
the transaction is done.
One quick way to enamble it is this:

1) add the following input field to the billsettings.ftl file (order component):
<input type="text" size="4" class="inputBox" 
name="securityCode_${paymentMethod.paymentMethodId}" value=""/>

2) add the following code to the CheckOutEvents.getSelectedPaymentMethods(...):
                String securityCode = request.getParameter("securityCode_" + 
paymentMethods[i]);
                if (securityCode != null && securityCode.length() > 0) {
                    paymentMethodInfo.put("securityCode", securityCode);
                }
the trick here is that you'll have to change the paymentMethodInfo from a list 
to a map

3) in CheckOutHelper.setCheckOutPaymentInternal(...) you'll have to retrieve 
the cvv value from the above map; here is the method from an older modified 
version of OFBiz:

    public List setCheckOutPaymentInternal(Map selectedPaymentMethods, List 
singleUsePayments, String billingAccountId, Double billingAccountAmt) {
        List errorMessages = new ArrayList();
        String errMsg = null;

        if (singleUsePayments == null) {
            singleUsePayments = new ArrayList();
        }

        // set the payment method option
        if (selectedPaymentMethods != null && selectedPaymentMethods.size() > 
0) {
            // clear out the old payments
            cart.clearPayments();

            if (billingAccountId != null && billingAccountAmt != null && 
!billingAccountId.equals("_NA_")) {
                // set cart billing account data and generate a payment method 
containing the amount we will be charging
                cart.setBillingAccount(billingAccountId, 
billingAccountAmt.doubleValue());
            } else if ("_NA_".equals(billingAccountId)) {
                // if _NA_ was supplied, erase all billing account data
                cart.setBillingAccount(null, 0.0);
            }
            // TODO: the following code needs some review (JAC20061213)
            // if checkoutPaymentId == EXT_BILLACT, then we have billing 
account only, so make sure we have enough credit
            if (selectedPaymentMethods.containsKey("EXT_BILLACT") && 
selectedPaymentMethods.size() == 1) {
                double accountCredit = 
this.availableAccountBalance(cart.getBillingAccountId());
                double amountToUse = cart.getBillingAccountAmount();

                // if an amount was entered, check that it doesn't exceed 
availalble amount
                if (amountToUse > 0 && amountToUse > accountCredit) {
                    errMsg = 
UtilProperties.getMessage(resource,"checkhelper.insufficient_credit_available_on_account",
                            (cart != null ? cart.getLocale() : 
Locale.getDefault()));
                    errorMessages.add(errMsg);
                } else {
                    // otherwise use the available account credit (The user 
might enter 10.00 for an order worth 20.00 from an account with 30.00. This 
makes sure that the 30.00 is used)
                    amountToUse = accountCredit;
                }

                // check that the amount to use is enough to fulfill the order
                double grandTotal = cart.getGrandTotal();
                if (grandTotal > amountToUse) {
                    cart.setBillingAccount(null, 0.0); // erase existing 
billing account data
                    errMsg = 
UtilProperties.getMessage(resource,"checkhelper.insufficient_credit_available_on_account",
                            (cart != null ? cart.getLocale() : 
Locale.getDefault()));
                    errorMessages.add(errMsg);
                } else {
                    // since this is the only selected payment method, let's 
make this amount the grand total for convenience
                    amountToUse = grandTotal;
                }

                // associate the cart billing account amount and EXT_BILLACT 
selected payment method with whatever amount we have now
                // XXX: Note that this step is critical for the billing account 
to be charged correctly
                if (amountToUse > 0) {
                    cart.setBillingAccount(billingAccountId, amountToUse);
                    selectedPaymentMethods.put("EXT_BILLACT", new 
Double(amountToUse));
                }
            }

            Set paymentMethods = selectedPaymentMethods.keySet();
            Iterator i = paymentMethods.iterator();
            while (i.hasNext()) {
                String checkOutPaymentId = (String) i.next();

                // get the selected amount to use
                Double paymentAmount = null;
                String securityCode = null;
                if (selectedPaymentMethods.get(checkOutPaymentId) != null) {
                    Map checkOutPaymentInfo = (Map) 
selectedPaymentMethods.get(checkOutPaymentId);
                    paymentAmount = (Double) checkOutPaymentInfo.get("amount");
                    securityCode = (String) 
checkOutPaymentInfo.get("securityCode");
                }

                boolean singleUse = 
singleUsePayments.contains(checkOutPaymentId);
                cart.addPaymentAmount(checkOutPaymentId, paymentAmount, 
singleUse);
                
                ShoppingCart.CartPaymentInfo cpi = 
cart.getPaymentInfo(cart.selectedPayments() - 1);
                cpi.securityCode = securityCode;
            }
        } else if (cart.getGrandTotal() != 0.00) {
            // only return an error if the order total is not 0.00
            errMsg = 
UtilProperties.getMessage(resource,"checkhelper.select_method_of_payment",
                    (cart != null ? cart.getLocale() : Locale.getDefault()));
            errorMessages.add(errMsg);
        }

        return errorMessages;
    }

Hope it helps


> Add support for cvvNumber field in CreditCard entity
> ----------------------------------------------------
>
>                 Key: OFBIZ-767
>                 URL: https://issues.apache.org/jira/browse/OFBIZ-767
>             Project: OFBiz (The Open for Business Project)
>          Issue Type: Improvement
>          Components: accounting
>    Affects Versions: SVN trunk
>            Reporter: Ashish Vijaywargiya
>            Priority: Trivial
>         Attachments: CvvNumber_Field_Support.patch
>
>
> Hi,
> I have added support for cvvNumber field in CreditCard entity.
> In future , If somebody wants to use this field in his/her custom 
> form/application.
> Any comments are most welcome.
> Thanks & Regards
> Ashish Vijaywargiya

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to