Ok - changed the pk id field returned to the following: <cfset theTransID = trans_insert_res.GENERATED_KEY>
Still the same issue. Here is the complete cfc module.... sorry for it being a bit long... <cfcomponent displayname="TransDAO"> <cffunction name="init" access="public" returntype="moneymaker.core.model.trans.TransDAO" output="false"> <cfargument name="datasourceSettings" type="moneymaker.core.model.DatasourceSettings" required="true"/> <cfset variables.dss = arguments.datasourceSettings /> <cfset variables.dsn = variables.dss.getDatasourceName() /> <cfset variables.accountService = application.serviceFactory.getBean("AccountService")> <cfreturn this /> </cffunction> <cffunction name="fetch" access="public" returntype="Trans" displayname="fetch"> </cffunction> <cffunction name="process" access="public" returntype="struct"> <cfargument name="acctid" required="Yes" type="numeric" /> <cfargument name="cardid" required="Yes" type="numeric" /> <cfargument name="cardnumber" required="Yes" type="numeric" /> <cfargument name="amount" required="Yes" type="numeric" /> <cfargument name="type" required="Yes" type="string" /> <cfargument name="paytype" required="Yes" type="numeric" /> <cfargument name="description" required="Yes" type="string" /> <cfargument name="tracenumber" required="no" type="string" default="" /> <cfargument name="stLimits" required="Yes" type="struct" /> <cfset var stTrans = structNew() /> <cftry> <cflog file="transdao_cfc" text="Process tx for #cardnumber#" type="information"> <!--- Get balance ---> <cfset theCurrentAvailableBalance = variables.accountService.getAccountBalance("available", arguments.acctid)> <cfset theCurrentActualBalance = variables.accountService.getAccountBalance("actual", arguments.acctid)> <cfset theNewAvailableBalance = numberformat(theCurrentAvailableBalance, "_.__") + numberformat(arguments.amount, "_.__")> <cfset theNewActualBalance = numberformat(theCurrentActualBalance, "_.__") + numberformat(arguments.amount, "_.__")> <cfset theNewActualRunningBalance = numberformat(theCurrentActualBalance, "_.__") + numberformat(arguments.amount, "_.__")> <!--- If debit, make sure there is enough funds ---> <!--- 2009-09-29 AJK Changed this to enabled debit to push the account into negative. <cfif arguments.type IS "D99" AND theNewAvailableBalance LT 0> <cfthrow errorcode="51" detail="Insuffcient Funds" message="Error 51: Card has insufficient funds"> </cfif> ---> <!--- Check status of card/account ---> <cfquery datasource="#variables.dsn#" name="cardcheck"> SELECT * FROM card WHERE card_id = <cfqueryparam cfsqltype="CF_SQL_NUMERIC" value="#arguments.cardid#"> </cfquery> <cfif cardcheck.status_id NEQ 1> <cfswitch expression="#cardcheck.status_id#"> <!--- Closed account ---> <cfcase value="3"><cflog text="closed card:#cardcheck.card_cardnumber# loaded for #arguments.amount# on #dateformat(now(), 'yyyy-mm-dd')# #timeformat(now(), 'HH:mm:ss')#" file="closed_card_loads" type="Information"></cfcase> <!--- Lost Card ---> <cfcase value="4"><cfif arguments.type NEQ "D98"><cfthrow errorcode="41" detail="Lost Card" message="Error 41: Card has been reported lost"></cfif></cfcase> <!--- Stolen Card ---> <cfcase value="5"><cfif arguments.type NEQ "D98"><cfthrow errorcode="43" detail="Stolen Card" message="Error 43: Card has been reported stolen"></cfif></cfcase> <!--- Restricted Card ---> <cfcase value="10"> <cfthrow errorcode="62" detail="Restricted Card" message="Error 62: Card is restricted"> </cfcase> <!--- New Inactive Card ---> <cfcase value="11"> <cftry> <cfif cardcheck.card_type_id EQ 1 OR cardcheck.bin_prog_link_id EQ 9> <cfquery datasource="#variables.dsn#"> update card set status_id = 1 where card_id = <cfqueryparam cfsqltype="CF_SQL_NUMERIC" value="#arguments.cardid#"> </cfquery> <cflog text="#cardcheck.card_cardnumber# activated on load" file="activate_on_load" type="Information"> </cfif> <cfcatch type="Any"> <cflog text="#cfcatch.toString()#--#cardcheck.card_cardnumber#" file="activate_on_load_error" type="Error"> </cfcatch> </cftry> </cfcase> <!---Invalid Account ---> <cfdefaultcase><cfthrow errorcode="14" detail="Closed account" message="Error 14: Card account has been closed"></cfdefaultcase> </cfswitch> </cfif> <!--- If tracenumber is present, check for duplicate transaction ---> <cfif len(arguments.tracenumber)> <cfquery name="checkTraceNumber" datasource="#variables.dsn#"> SELECT trans_id FROM trans WHERE trans_api_tracenumber = <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.tracenumber#"> AND card_id = <cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#arguments.cardid#"> AND status_id = <cfqueryparam cfsqltype="CF_SQL_INTEGER" value="6"> </cfquery> <cfif checkTraceNumber.recordCount> <cfthrow errorcode="61" detail="Duplicate Transaction" message="Error 61: Duplicate Transaction Attempt"> </cfif> </cfif> <!--- If credit, check load limmits ---> <cfif arguments.type IS "L99" AND isStruct(stLimits)> <cfif stLimits.loads.checkperload AND numberformat(arguments.amount, "_.__") GT numberformat(stLimits.loads.per_load_limit, "_.__")> <cfthrow errorcode="61" detail="Exceeds Transaction Limit" message="Error 61: Exceeds per load limit"> </cfif> <!--- <cflog text="#stLimits.loads.checkperload#|#numberformat(arguments.amount, '_.__')#|#numberformat(stLimits.loads.per_load_limit, '_.__')#" file="perloadcheck" type="Error"> ---> <!--- Check per month limit ---> <cfif stLimits.loads.checkpermonth> <cfset startdttm = createdate(datepart('yyyy',now()), datepart('m',now()), 1)> <cfset enddttm = createdate(datepart('yyyy',now()), datepart('m',now()), daysinmonth(now()))> <cfquery name="getMonthlySum" datasource="#variables.dsn#"> SELECT IF(ISNULL(SUM(trans_amount)),0,SUM(trans_amount)) AS monthlysum FROM trans WHERE acct_id = #arguments.acctid# AND trans_transaction_type = 'L99' AND status_id = 6 AND trans_datetime >= <cfqueryparam cfsqltype="cf_sql_varchar" value="#DateFormat(startdttm, 'yyyy-mm-dd')# 00:00:00"> AND trans_datetime <= <cfqueryparam cfsqltype="cf_sql_varchar" value="#DateFormat(enddttm, 'yyyy-mm-dd')# 23:59:59"> </cfquery> <cfset t = numberformat(getMonthlySum.monthlysum + arguments.amount, "_.__")> <!--- <cflog text="#stLimits.loads.checkpermonth#|#startdttm#|#enddttm#|#numberformat(stLimits.loads.per_month_limit, '_.__')#|#t#" file="permonthcheck" type="Error"> ---> <cfif t GT numberformat(stLimits.loads.per_month_limit, "_.__")> <cfthrow errorcode="61" detail="Exceeds Transaction Limit" message="Error 61: Exceeds monthly load limit"> </cfif> </cfif> </cfif> <!--- Process Transaction ---> <cftransaction isolation="READ_COMMITTED"> <!--- Insert trans into gateway ---> <cfquery datasource="#variables.dsn#" name="trans_insert" result="trans_insert_res"> INSERT INTO trans ( acct_id, card_id, trans_pan, trans_amount, trans_response_code, trans_begin_balance, trans_end_balance, trans_transaction_type, trans_message_type, trans_description, trans_datetime, trans_api_tracenumber, status_id ) VALUES ( <cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#arguments.acctid#">, <cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#arguments.cardid#">, <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#arguments.cardNumber#">, <cfqueryparam cfsqltype="CF_SQL_FLOAT" value="#arguments.amount#">, <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="00">, <cfqueryparam cfsqltype="CF_SQL_FLOAT" value="#theCurrentActualBalance#">, <cfqueryparam cfsqltype="CF_SQL_FLOAT" value="#theNewActualRunningBalance#">, <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#arguments.type#">, <cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#arguments.paytype#">, <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#arguments.description#">, NOW(), <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.tracenumber#">, <cfqueryparam cfsqltype="CF_SQL_INTEGER" value="6"> ) </cfquery> <cfset theParentTransID = trans_insert_res.GENERATED_KEY> <cfset theTransID = trans_insert_res.GENERATED_KEY> <cflog file="transdao_cfc" text="Process tx for #cardnumber# with tx id #theTransID# and theParentTransID is #theParentTransID#" type="information"> <!--- Update acct balance on gateway ---> <cfquery datasource="#variables.dsn#"> UPDATE acct_balances SET acct_balance = acct_balance + #arguments.amount#, acct_balance_available = acct_balance_available + #arguments.amount# WHERE acct_id = <cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#arguments.acctid#"> </cfquery> </cftransaction> <!--------------------------------------------------------------------------- CHECK FOR NEG to POS ----------------------------------------------------------------------------> <cftry> <cfif theCurrentActualBalance LT 0 AND theNewActualBalance GTE 0> <cfquery datasource="#variables.dsn#"> UPDATE fees_collection SET settled = <cfqueryparam cfsqltype="CF_SQL_INTEGER" value="1">, settled_trans_id = <cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#theTransID#">, settled_dttm = NOW() WHERE acct_id = <cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#arguments.acctid#"> AND settled = 0 </cfquery> </cfif> <cfcatch type="any"><cflog file="transdao_cfc" text="#cfcatch.toString()#"></cfcatch> </cftry> <!--- Set response ---> <cfset stTrans.responsecode = 00 /> <cfset stTrans.transid = theTransID /> <cfset stTrans.success = true /> <cfset stTrans.message = "" /> <cfset stTrans.start_actualbalance = theCurrentActualBalance> <cfset stTrans.start_availablebalance = theCurrentAvailableBalance> <cfset stTrans.end_actualbalance = theNewActualBalance> <cfset stTrans.end_availablebalance = theNewAvailableBalance> <cflog file="transdao_cfc" text=" Process tx (after transaction) for #cardnumber# with tx id #stTrans.transid# and theParentTransID is #theParentTransID#" type="information"> <cfif #theParentTransID# NEQ #theTransID#> <cflog file="transdao_cfc" text="######### Different #####################" type="information"> </cfif> <cfcatch type="any"> <cflog file="transdao_cfc" text="Error happend !!!!! #cfcatch.message# #cfcatch.errorcode#" type="error"> <cfset stTrans.responsecode = cfcatch.errorcode /> <cfset stTrans.transid = "" /> <cfset stTrans.success = false /> <cfset stTrans.message = cfcatch.message /> <cfset stTrans.start_actualbalance = 0> <cfset stTrans.start_availablebalance = 0> <cfset stTrans.end_actualbalance = 0> <cfset stTrans.end_availablebalance = 0> <cfwddx action="CFML2WDDX" input="#cfcatch#" output="errors_wddx"> <!--- <cflog text="#errors_wddx#" file="api_load_errors" type="Error"> ---> </cfcatch> </cftry> <cfreturn stTrans /> </cffunction> </cfcomponent> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| Want to reach the ColdFusion community with something they want? Let them know on the House of Fusion mailing lists Archive: http://www.houseoffusion.com/groups/cf-talk/message.cfm/messageid:328944 Subscription: http://www.houseoffusion.com/groups/cf-talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=11502.10531.4