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

Reply via email to