Author: jleroux
Date: Sat Jul 5 03:14:21 2008 New Revision: 674173 URL: http://svn.apache.org/viewvc?rev=674173&view=rev Log: Merged by hand from a Rashko Rejmer's patch "capturePaymentsByInvoice service doesn't return not optional parameter while processing multiple orders invoice" (https://issues.apache.org/jira/browse/OFBIZ-1221) - -1221 Modified: ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/payment/PaymentGatewayServices.java Modified: ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/payment/PaymentGatewayServices.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/payment/PaymentGatewayServices.java?rev=674173&r1=674172&r2=674173&view=diff ============================================================================== --- ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/payment/PaymentGatewayServices.java (original) +++ ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/payment/PaymentGatewayServices.java Sat Jul 5 03:14:21 2008 @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -79,13 +79,13 @@ // set zero to the proper scale if (decimals != -1) ZERO = ZERO.setScale(decimals); } - + /** * Authorizes a single order preference with an option to specify an amount. The result map has the Booleans * "errors" and "finished" which notify the user if there were any errors and if the authorizatoin was finished. - * There is also a List "messages" for the authorization response messages and a Double, "processAmount" as the - * amount processed. - * + * There is also a List "messages" for the authorization response messages and a Double, "processAmount" as the + * amount processed. + * * TODO: it might be nice to return the paymentGatewayResponseId */ public static Map authOrderPaymentPreference(DispatchContext dctx, Map context) { @@ -147,7 +147,7 @@ } else { transAmount = orderPaymentPreference.getDouble("maxAmount"); } - + // round this before moving on just in case a funny number made it this far transAmount = (new BigDecimal(transAmount)).setScale(decimals, rounding).doubleValue(); @@ -186,7 +186,7 @@ // TODO: what do we do with this? we need to fail the auth but still allow the order through so it can be fixed later // NOTE: this is called through a different path for auto re-orders, so it should be good to go... will leave this comment here just in case... } - + // if we have a failure at this point and no NSF retry is needed, then try other credit cards on file, if the user has any if (!needsNsfRetry) { // is this an auto-order? @@ -196,16 +196,16 @@ if ("Y".equals(productStore.getString("autoOrderCcTryOtherCards"))) { // get other credit cards for the bill to party List otherPaymentMethodAndCreditCardList = null; - String billToPartyId = null; + String billToPartyId = null; GenericValue billToParty = orh.getBillToParty(); if (billToParty != null) { billToPartyId = billToParty.getString("partyId"); } else { // TODO optional: any other ways to find the bill to party? perhaps look at info from OrderPaymentPreference, ie search back from other PaymentMethod... } - + if (UtilValidate.isNotEmpty(billToPartyId)) { - otherPaymentMethodAndCreditCardList = delegator.findByAnd("PaymentMethodAndCreditCard", + otherPaymentMethodAndCreditCardList = delegator.findByAnd("PaymentMethodAndCreditCard", UtilMisc.toMap("partyId", billToPartyId, "paymentMethodTypeId", "CREDIT_CARD")); otherPaymentMethodAndCreditCardList = EntityUtil.filterByDate(otherPaymentMethodAndCreditCardList, true); } @@ -214,18 +214,18 @@ Iterator otherPaymentMethodAndCreditCardIter = otherPaymentMethodAndCreditCardList.iterator(); while (otherPaymentMethodAndCreditCardIter.hasNext()) { GenericValue otherPaymentMethodAndCreditCard = (GenericValue) otherPaymentMethodAndCreditCardIter.next(); - + // change OrderPaymentPreference in memory only and call auth service orderPaymentPreference.set("paymentMethodId", otherPaymentMethodAndCreditCard.getString("paymentMethodId")); Map authRetryResult = authPayment(dispatcher, userLogin, orh, orderPaymentPreference, totalRemaining, reAuth, transAmount); try { boolean processRetryResult = processResult(dctx, authPaymentResult, userLogin, orderPaymentPreference); - + if (processRetryResult) { // wow, we got here that means the other card was successful... // on success save the OrderPaymentPreference, and then return finished (which will break from loop) orderPaymentPreference.store(); - + Map results = ServiceUtil.returnSuccess(); results.put("messages", authRetryResult.get("customerRespMsgs")); results.put("processAmount", thisAmount); @@ -242,7 +242,7 @@ results.put("errors", Boolean.TRUE); return results; } - + // if no sucess, fall through to return not finished } } @@ -376,7 +376,7 @@ if (ServiceUtil.isError(results)) { hadError += 1; - messages.add("Could not authorize OrderPaymentPreference [" + paymentPref.getString("orderPaymentPreferenceId") + "] for order [" + orderId + "]: " + results.get(ModelService.ERROR_MESSAGE)); + messages.add("Could not authorize OrderPaymentPreference [" + paymentPref.getString("orderPaymentPreferenceId") + "] for order [" + orderId + "]: " + results.get(ModelService.ERROR_MESSAGE)); continue; } @@ -466,7 +466,7 @@ if (paymentPreference.get("securityCode") != null) { processContext.put("cardSecurityCode", paymentPreference.get("securityCode")); } - + // get the billing information getBillingInformation(orh, paymentPreference, processContext); @@ -504,9 +504,9 @@ Map processorResult = null; try { // invoke the payment processor; allow 5 minute transaction timeout and require a new tx; we'll capture the error and pass back nicely - + GenericValue creditCard = (GenericValue) processContext.get("creditCard"); - + // only try other exp dates if orderHeader.autoOrderShoppingListId is not empty, productStore.autoOrderCcTryExp=Y and this payment is a creditCard boolean tryOtherExpDates = "Y".equals(productStore.getString("autoOrderCcTryExp")) && creditCard != null && UtilValidate.isNotEmpty(orderHeader.getString("autoOrderShoppingListId")); @@ -514,15 +514,15 @@ if (!tryOtherExpDates || UtilValidate.isDateAfterToday(creditCard.getString("expireDate"))) { processorResult = dispatcher.runSync(serviceName, processContext, TX_TIME, true); } - - // try other expire dates if the expireDate is not after today, or if we called the auth service and resultBadExpire = true + + // try other expire dates if the expireDate is not after today, or if we called the auth service and resultBadExpire = true if (tryOtherExpDates && (!UtilValidate.isDateAfterToday(creditCard.getString("expireDate")) || (processorResult != null && Boolean.TRUE.equals((Boolean) processorResult.get("resultBadExpire"))))) { // try adding 2, 3, 4 years later with the same month String expireDate = creditCard.getString("expireDate"); int dateSlash1 = expireDate.indexOf("/"); String month = expireDate.substring(0, dateSlash1); String year = expireDate.substring(dateSlash1 + 1); - + // start adding 2 years, if comes back with resultBadExpire try again up to twice incrementing one year year = StringUtil.addToNumberString(year, 2); // note that this is set in memory only for now, not saved to the database unless successful @@ -537,14 +537,14 @@ creditCard.set("expireDate", month + "/" + year); processorResult = dispatcher.runSync(serviceName, processContext, TX_TIME, true); } - + if (!ServiceUtil.isError(processorResult) && Boolean.TRUE.equals((Boolean) processorResult.get("resultBadExpire"))) { // okay, try one more year... and this is the last try year = StringUtil.addToNumberString(year, 1); creditCard.set("expireDate", month + "/" + year); processorResult = dispatcher.runSync(serviceName, processContext, TX_TIME, true); } - + // at this point if we have a successful result, let's save the new creditCard expireDate if (!ServiceUtil.isError(processorResult) && Boolean.TRUE.equals((Boolean) processorResult.get("authResult"))) { // TODO: this is bad; we should be expiring the old card and creating a new one instead of editing it @@ -725,7 +725,7 @@ Debug.logError(ServiceUtil.getErrorMessage(releaseResult), module); return ServiceUtil.returnError(ServiceUtil.getErrorMessage(releaseResult)); } else if (! ServiceUtil.isFailure(releaseResult)) { - finished.add(paymentPref); + finished.add(paymentPref); } } result = ServiceUtil.returnSuccess(); @@ -739,7 +739,7 @@ } /** - * + * * Releases authorization for a single OrderPaymentPreference through service calls to the defined processing service for the ProductStore/PaymentMethodType * @return SUCCESS|FAILED|ERROR for complete processing of payment. */ @@ -756,14 +756,14 @@ try { paymentPref = delegator.findByPrimaryKey("OrderPaymentPreference", UtilMisc.toMap("orderPaymentPreferenceId", orderPaymentPreferenceId)); } catch( GenericEntityException e ) { - String errMsg = "Problem getting OrderPaymentPreference for orderPaymentPreferenceId " + orderPaymentPreferenceId; + String errMsg = "Problem getting OrderPaymentPreference for orderPaymentPreferenceId " + orderPaymentPreferenceId; Debug.logWarning(e, errMsg, module); return ServiceUtil.returnError(errMsg); } // Error if no OrderPaymentPreference was found if (paymentPref == null) { - String errMsg = "Could not find OrderPaymentPreference with orderPaymentPreferenceId: " + orderPaymentPreferenceId; + String errMsg = "Could not find OrderPaymentPreference with orderPaymentPreferenceId: " + orderPaymentPreferenceId; Debug.logWarning(errMsg, module); return ServiceUtil.returnError(errMsg); } @@ -773,14 +773,14 @@ try { orderHeader = delegator.findByPrimaryKey("OrderHeader", UtilMisc.toMap("orderId", paymentPref.getString("orderId"))); } catch( GenericEntityException e ) { - String errMsg = "Problem getting OrderHeader for orderId " + paymentPref.getString("orderId"); + String errMsg = "Problem getting OrderHeader for orderId " + paymentPref.getString("orderId"); Debug.logWarning(e, errMsg, module); return ServiceUtil.returnError(errMsg); } // Error if no OrderHeader was found if (orderHeader == null) { - String errMsg = "Could not find OrderHeader with orderId: " + paymentPref.getString("orderId") + "; not processing payments."; + String errMsg = "Could not find OrderHeader with orderId: " + paymentPref.getString("orderId") + "; not processing payments."; Debug.logWarning(errMsg, module); return ServiceUtil.returnError(errMsg); } @@ -798,12 +798,12 @@ paymentConfig = paymentSettings.getString("paymentPropertiesPath"); serviceName = paymentSettings.getString("paymentService"); if (serviceName == null) { - String errMsg = "No payment release service for - " + paymentPref.getString("paymentMethodTypeId"); + String errMsg = "No payment release service for - " + paymentPref.getString("paymentMethodTypeId"); Debug.logWarning(errMsg, module); return ServiceUtil.returnError(errMsg); } } else { - String errMsg = "No payment release settings found for - " + paymentPref.getString("paymentMethodTypeId"); + String errMsg = "No payment release settings found for - " + paymentPref.getString("paymentMethodTypeId"); Debug.logWarning(errMsg, module); return ServiceUtil.returnError(errMsg); } @@ -996,7 +996,9 @@ if (testOrderId == null || !allSameOrder) { Debug.logWarning("Attempt to settle Invoice #" + invoiceId + " which contained none/multiple orders", module); - return ServiceUtil.returnSuccess(); + Map result = ServiceUtil.returnSuccess(); + result.put("processResult", "FAILED"); + return result; } // get the invoice amount (amount to bill) @@ -1109,7 +1111,7 @@ return ServiceUtil.returnError(ex.getMessage()); } if (captureResult != null) { - + Double amountCaptured = (Double) captureResult.get("captureAmount"); Debug.logInfo("Amount captured for order [" + orderId + "] from unapplied payments associated to billing account [" + billingAccountId + "] is: " + amountCaptured, module); @@ -1215,7 +1217,7 @@ amountCapturedBd = amountCapturedBd.setScale(decimals, rounding); // decrease amount of next payment preference to capture - amountToCapture = amountToCapture.subtract(amountCapturedBd); + amountToCapture = amountToCapture.subtract(amountCapturedBd); // add the invoiceId to the result for processing captureResult.put("invoiceId", invoiceId); @@ -1330,12 +1332,12 @@ Double captureAmount = (Double) context.get("captureAmount"); String orderId = (String) context.get("orderId"); Map results = ServiceUtil.returnSuccess(); - + try { // Note that the partyIdFrom of the Payment should be the partyIdTo of the invoice, since you're receiving a payment from the party you billed GenericValue invoice = delegator.findByPrimaryKey("Invoice", UtilMisc.toMap("invoiceId", invoiceId)); - Map paymentParams = UtilMisc.toMap("paymentTypeId", "CUSTOMER_PAYMENT", "paymentMethodTypeId", "EXT_BILLACT", - "partyIdFrom", invoice.getString("partyId"), "partyIdTo", invoice.getString("partyIdFrom"), + Map paymentParams = UtilMisc.toMap("paymentTypeId", "CUSTOMER_PAYMENT", "paymentMethodTypeId", "EXT_BILLACT", + "partyIdFrom", invoice.getString("partyId"), "partyIdTo", invoice.getString("partyIdFrom"), "statusId", "PMNT_RECEIVED", "effectiveDate", UtilDateTime.nowTimestamp()); paymentParams.put("amount", captureAmount); paymentParams.put("currencyUomId", invoice.getString("currencyUomId")); @@ -1343,10 +1345,10 @@ Map tmpResult = dispatcher.runSync("createPayment", paymentParams); if (ServiceUtil.isError(tmpResult)) { return tmpResult; - } - + } + String paymentId = (String) tmpResult.get("paymentId"); - tmpResult = dispatcher.runSync("createPaymentApplication", UtilMisc.<String, Object>toMap("paymentId", paymentId, "invoiceId", invoiceId, "billingAccountId", billingAccountId, + tmpResult = dispatcher.runSync("createPaymentApplication", UtilMisc.<String, Object>toMap("paymentId", paymentId, "invoiceId", invoiceId, "billingAccountId", billingAccountId, "amountApplied", captureAmount, "userLogin", userLogin)); if (ServiceUtil.isError(tmpResult)) { return tmpResult; @@ -1355,7 +1357,7 @@ return ServiceUtil.returnError("No payment created for invoice [" + invoiceId + "] and billing account [" + billingAccountId + "]"); } results.put("paymentId", paymentId); - + if (orderId != null && captureAmount.doubleValue() > 0) { // Create a paymentGatewayResponse, if necessary GenericValue order = delegator.findByPrimaryKey("OrderHeader", UtilMisc.toMap("orderId", orderId)); @@ -1366,10 +1368,10 @@ List orderPaymentPreferences = delegator.findByAnd("OrderPaymentPreference", UtilMisc.toMap("orderId", orderId, "paymentMethodTypeId", "EXT_BILLACT")); if (orderPaymentPreferences != null && orderPaymentPreferences.size() > 0) { GenericValue orderPaymentPreference = EntityUtil.getFirst(orderPaymentPreferences); - + // Check the productStore setting to see if we need to do this explicitly GenericValue productStore = order.getRelatedOne("ProductStore"); - if (productStore.getString("manualAuthIsCapture") == null || (! productStore.getString("manualAuthIsCapture").equalsIgnoreCase("Y"))) { + if (productStore.getString("manualAuthIsCapture") == null || (! productStore.getString("manualAuthIsCapture").equalsIgnoreCase("Y"))) { String responseId = delegator.getNextSeqId("PaymentGatewayResponse"); GenericValue pgResponse = delegator.makeValue("PaymentGatewayResponse"); pgResponse.set("paymentGatewayResponseId", responseId); @@ -1390,7 +1392,7 @@ // Update the orderPaymentPreference orderPaymentPreference.set("statusId", "PAYMENT_SETTLED"); orderPaymentPreference.store(); - + results.put("paymentGatewayResponseId", responseId); } } @@ -1415,7 +1417,7 @@ captureAmount = captureAmount.setScale(decimals, rounding); String orderId = (String) context.get("orderId"); BigDecimal capturedAmount = BigDecimal.ZERO; - + try { // Select all the unapplied payment applications associated to the billing account List conditionList = UtilMisc.toList(EntityCondition.makeCondition("billingAccountId", EntityOperator.EQUALS, billingAccountId), @@ -1468,7 +1470,7 @@ results.put("captureAmount", new Double(capturedAmount.doubleValue())); return results; } - + private static Map capturePayment(DispatchContext dctx, GenericValue userLogin, OrderReadHelper orh, GenericValue paymentPref, double amount) { return capturePayment(dctx, userLogin, orh, paymentPref, amount, null); } @@ -1544,17 +1546,17 @@ ModelService captureService = dctx.getModelService(serviceName); Set inParams = captureService.getInParamNames(); if (inParams.contains("captureAmount")) { - captureContext.put("captureAmount", new Double(amount)); + captureContext.put("captureAmount", new Double(amount)); } else if (inParams.contains("processAmount")) { - captureContext.put("processAmount", new Double(amount)); + captureContext.put("processAmount", new Double(amount)); } else { return ServiceUtil.returnError("Service [" + serviceName + "] does not have a captureAmount or processAmount. Its parameters are: " + inParams); } } catch (GenericServiceException ex) { return ServiceUtil.returnError("Cannot get model service for " + serviceName); } - - + + if (authTrans != null) { captureContext.put("authTrans", authTrans); } @@ -1564,7 +1566,7 @@ // now invoke the capture service Map captureResult = null; try { - // NOTE DEJ20070819 calling this with a new transaction synchronously caused a deadlock because in this + // NOTE DEJ20070819 calling this with a new transaction synchronously caused a deadlock because in this //transaction OrderHeader was updated and with this transaction paused and waiting for the new transaction //and the new transaction was waiting trying to read the same OrderHeader record; note that this only happens //for FinAccounts because they are processed internally whereas others are not @@ -1673,7 +1675,7 @@ // in case we rollback make sure this service gets called dispatcher.addRollbackService(model.name, context, true); - // invoke the service + // invoke the service Map resResp; try { resResp = dispatcher.runSync(model.name, context); @@ -1683,7 +1685,7 @@ } if (ServiceUtil.isError(resResp)) { throw new GeneralException(ServiceUtil.getErrorMessage(resResp)); - } + } } public static Map processAuthResult(DispatchContext dctx, Map context) { @@ -1725,7 +1727,7 @@ response.set("paymentMethodId", orderPaymentPreference.get("paymentMethodId")); response.set("transCodeEnumId", "PGT_AUTHORIZE"); response.set("currencyUomId", currencyUomId); - + // set the avs/fraud result response.set("gatewayAvsResult", context.get("avsCode")); response.set("gatewayCvResult", context.get("cvCode")); @@ -1739,7 +1741,7 @@ response.set("gatewayFlag", context.get("authFlag")); response.set("gatewayMessage", context.get("authMessage")); response.set("transactionDate", UtilDateTime.nowTimestamp()); - + if (Boolean.TRUE.equals((Boolean) context.get("resultDeclined"))) response.set("resultDeclined", "Y"); if (Boolean.TRUE.equals((Boolean) context.get("resultNsf"))) response.set("resultNsf", "Y"); if (Boolean.TRUE.equals((Boolean) context.get("resultBadExpire"))) response.set("resultBadExpire", "Y"); @@ -1747,7 +1749,7 @@ // save the response savePgr(dctx, response); - + // create the internal messages List messages = (List) context.get("internalRespMsgs"); if (messages != null && messages.size() > 0) { @@ -1762,11 +1764,11 @@ savePgr(dctx, respMsg); } } - + if (response.getDouble("amount").doubleValue() != ((Double) context.get("processAmount")).doubleValue()) { Debug.logWarning("The authorized amount does not match the max amount : Response - " + response + " : result - " + context, module); } - + // set the status of the OrderPaymentPreference if (context != null && authResult.booleanValue()) { orderPaymentPreference.set("statusId", "PAYMENT_AUTHORIZED"); @@ -1775,11 +1777,11 @@ } else { orderPaymentPreference.set("statusId", "PAYMENT_ERROR"); } - + // remove sensitive credit card data regardless of outcome orderPaymentPreference.set("securityCode", null); - orderPaymentPreference.set("track2", null); - + orderPaymentPreference.set("track2", null); + boolean needsNsfRetry = needsNsfRetry(orderPaymentPreference, context, delegator); if (needsNsfRetry) { orderPaymentPreference.set("needsNsfRetry", "Y"); @@ -1799,7 +1801,7 @@ creditCard.set("consecutiveFailedAuths", new Long(consecutiveFailedAuths.longValue() + 1)); } creditCard.set("lastFailedAuthDate", nowTimestamp); - + if (Boolean.TRUE.equals((Boolean) context.get("resultNsf"))) { Long consecutiveFailedNsf = creditCard.getLong("consecutiveFailedNsf"); if (consecutiveFailedNsf == null) { @@ -1812,7 +1814,7 @@ creditCard.store(); } } - + // auth was successful, to clear out any failed auth or nsf info if (authResult.booleanValue()) { if ((creditCard != null) && (creditCard.get("lastFailedAuthDate") != null)) { @@ -1831,7 +1833,7 @@ return ServiceUtil.returnSuccess(); } - + private static boolean needsNsfRetry(GenericValue orderPaymentPreference, Map processContext, GenericDelegator delegator) throws GenericEntityException { boolean needsNsfRetry = false; if (Boolean.TRUE.equals((Boolean) processContext.get("resultNsf"))) { @@ -1840,16 +1842,16 @@ if (UtilValidate.isNotEmpty(orderHeader.getString("autoOrderShoppingListId"))) { GenericValue productStore = orderHeader.getRelatedOne("ProductStore"); if ("Y".equals(productStore.getString("autoOrderCcTryLaterNsf"))) { - // one last condition: make sure there have been less than ProductStore.autoOrderCcTryLaterMax + // one last condition: make sure there have been less than ProductStore.autoOrderCcTryLaterMax // PaymentGatewayResponse records with the same orderPaymentPreferenceId and paymentMethodId (just in case it has changed) // and that have resultNsf = Y, ie only consider other NSF responses Long autoOrderCcTryLaterMax = productStore.getLong("autoOrderCcTryLaterMax"); if (autoOrderCcTryLaterMax != null) { - long failedTries = delegator.findCountByCondition("PaymentGatewayResponse", + long failedTries = delegator.findCountByCondition("PaymentGatewayResponse", EntityCondition.makeCondition(UtilMisc.toMap( - "orderPaymentPreferenceId", orderPaymentPreference.get("orderPaymentPreferenceId"), + "orderPaymentPreferenceId", orderPaymentPreference.get("orderPaymentPreferenceId"), "paymentMethodId", orderPaymentPreference.get("paymentMethodId"), - "resultNsf", "Y"), + "resultNsf", "Y"), EntityOperator.AND), null, null); if (failedTries < autoOrderCcTryLaterMax.longValue()) { @@ -2085,7 +2087,7 @@ Debug.logError(e, message, module); return ServiceUtil.returnError(message ); } - } + } // determine the partyIdFrom for the payment, which is who made the payment String partyIdFrom = null; @@ -2118,7 +2120,7 @@ } else { // otherwise default to Company and print a big warning about this partyIdTo = "Company"; - Debug.logWarning("Using default value of [" + partyIdTo + "] for payTo on invoice [" + invoiceId + "] and orderPaymentPreference [" + + Debug.logWarning("Using default value of [" + partyIdTo + "] for payTo on invoice [" + invoiceId + "] and orderPaymentPreference [" + paymentPreference.getString("orderPaymentPreferenceId") + "]", module); } @@ -2486,12 +2488,12 @@ return ServiceUtil.returnSuccess(); } - + public static Map retryFailedAuthNsfs(DispatchContext dctx, Map context) { GenericDelegator delegator = dctx.getDelegator(); LocalDispatcher dispatcher = dctx.getDispatcher(); GenericValue userLogin = (GenericValue) context.get("userLogin"); - + // get the date/time for one week before now since we'll only retry once a week for NSFs Calendar calcCal = Calendar.getInstance(); calcCal.setTimeInMillis(System.currentTimeMillis()); @@ -2501,7 +2503,7 @@ EntityListIterator eli = null; try { eli = delegator.find("OrderPaymentPreference", - EntityCondition.makeCondition(EntityCondition.makeCondition("needsNsfRetry", EntityOperator.EQUALS, "Y"), EntityOperator.AND, EntityCondition.makeCondition(ModelEntity.STAMP_FIELD, EntityOperator.LESS_THAN_EQUAL_TO, oneWeekAgo)), + EntityCondition.makeCondition(EntityCondition.makeCondition("needsNsfRetry", EntityOperator.EQUALS, "Y"), EntityOperator.AND, EntityCondition.makeCondition(ModelEntity.STAMP_FIELD, EntityOperator.LESS_THAN_EQUAL_TO, oneWeekAgo)), null, null, UtilMisc.toList("orderId"), null); List processList = new ArrayList(); @@ -2535,7 +2537,7 @@ return ServiceUtil.returnSuccess(); } - + public static GenericValue getCaptureTransaction(GenericValue orderPaymentPreference) { GenericValue capTrans = null; try { @@ -2555,7 +2557,7 @@ /** * Gets the chronologically latest PaymentGatewayResponse from an OrderPaymentPreference which is either a PRDS_PAY_AUTH - * or PRDS_PAY_REAUTH. Used for capturing. + * or PRDS_PAY_REAUTH. Used for capturing. * @param orderPaymentPreference * @return */ @@ -2648,7 +2650,7 @@ } // safe payment gateway store - private static void savePgr(DispatchContext dctx, GenericValue pgr) { + private static void savePgr(DispatchContext dctx, GenericValue pgr) { Map context = UtilMisc.toMap("paymentGatewayResponse", pgr); LocalDispatcher dispatcher = dctx.getDispatcher(); GenericDelegator delegator = dctx.getDelegator(); @@ -2957,7 +2959,7 @@ } } } - + return ServiceUtil.returnSuccess(); } @@ -3044,7 +3046,7 @@ result.put("processAmount", context.get("processAmount")); result.put("authRefNum", refNum); result.put("authAltRefNum", refNum); - result.put("authCode", "100"); + result.put("authCode", "100"); result.put("authMessage", "This is a test processor; no payments were captured or authorized."); return result; @@ -3156,7 +3158,7 @@ String expireDate = creditCard.getString("expireDate"); String lastNumberStr = expireDate.substring(expireDate.length() - 1); int lastNumber = Integer.parseInt(lastNumberStr); - + if ((float) lastNumber / 2.0 == 0.0) { return alwaysBadExpireProcessor(dctx, context); } else { |
Free forum by Nabble | Edit this page |