USP_PROCESSORTRANSACTIONSETTLEMENTIMPORT_PROCESSTRANSACTIONS

Parameters

Parameter Parameter Type Mode Description
@PROCESSORTRANSACTIONSETTLEMENTIMPORTID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CURRENTAPPUSERID uniqueidentifier IN
@INITIALAUTOSETTLEMENT bit IN

Definition

Copy


        CREATE procedure dbo.USP_PROCESSORTRANSACTIONSETTLEMENTIMPORT_PROCESSTRANSACTIONS
        (
            @PROCESSORTRANSACTIONSETTLEMENTIMPORTID uniqueidentifier,
            @CHANGEAGENTID uniqueidentifier,
            @CURRENTAPPUSERID uniqueidentifier,
            @INITIALAUTOSETTLEMENT bit = 0
        )
        as
        begin
            declare
                @HASAUTHCODE bit,
                @TOTALIMPORTTRANSACTIONS int,
                @ISDUPLICATEFILEUPLOAD bit,
                @CURRENTDATE datetime,
                @STATUSCODE tinyint = 0,
                @APPUSERISSYSADMIN bit = 0,
                @IMPORTTYPECODE bit = 0;

            set @CURRENTDATE = getdate();

            if @CHANGEAGENTID is null
                exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;

            declare @FEATUREID uniqueidentifier = '9151decb-5734-4fd9-8884-7d18aba1e2ed';

            select
                @HASAUTHCODE = HASAUTHCODE,
                @TOTALIMPORTTRANSACTIONS = TOTALIMPORTTRANSACTIONS,
                @ISDUPLICATEFILEUPLOAD = ISDUPLICATEFILEUPLOAD,
                @IMPORTTYPECODE = IMPORTTYPECODE
            from dbo.PROCESSORTRANSACTIONSETTLEMENTIMPORT
            where ID = @PROCESSORTRANSACTIONSETTLEMENTIMPORTID;


            declare @SITESFORUSER table (SITEID uniqueidentifier);
            insert into @SITESFORUSER
            select * from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@FEATUREID,2);

            declare @ISSYSTEMUSER bit;

            select @ISSYSTEMUSER = ISSYSTEM,
                         @APPUSERISSYSADMIN = ISSYSADMIN
            from dbo.APPUSER (nolock) where ID = @CURRENTAPPUSERID;

            create table #SETTLEDTRANSACTIONS (
                IMPORTTRANSACTIONID uniqueidentifier,
                DBTRANSACTIONID uniqueidentifier
            );

            --attempt this on the transaction ID first

            if @APPUSERISSYSADMIN = 1 or @ISSYSTEMUSER = 1
                begin
                    insert into #SETTLEDTRANSACTIONS
                    select
                        ITR.ID,
                        PMD.ID
                    from dbo.PROCESSORTRANSACTIONSETTLEMENTIMPORTROW ITR
                        inner join dbo.CREDITCARDPAYMENTMETHODDETAIL PMD on ITR.TRANSACTIONID = PMD.TRANSACTIONID
                        inner join dbo.REVENUEPAYMENTMETHOD RPM on RPM.ID = PMD.ID
                        inner join dbo.FINANCIALTRANSACTION FT on FT.ID = RPM.REVENUEID
                    where PMD.SETTLEMENTTYPECODE = 0
                            and ITR.PROCESSORTRANSACTIONSETTLEMENTIMPORTID = @PROCESSORTRANSACTIONSETTLEMENTIMPORTID
                            and ISREFUND = 0
                end
            else
                begin
                    insert into #SETTLEDTRANSACTIONS
                    select
                        ITR.ID,
                        PMD.ID
                    from dbo.PROCESSORTRANSACTIONSETTLEMENTIMPORTROW ITR
                        inner join dbo.CREDITCARDPAYMENTMETHODDETAIL PMD on ITR.TRANSACTIONID = PMD.TRANSACTIONID
                        inner join dbo.REVENUEPAYMENTMETHOD RPM on RPM.ID = PMD.ID
                        inner join dbo.FINANCIALTRANSACTION FT on FT.ID = RPM.REVENUEID
                    where PMD.SETTLEMENTTYPECODE = 0
                            and ITR.PROCESSORTRANSACTIONSETTLEMENTIMPORTID = @PROCESSORTRANSACTIONSETTLEMENTIMPORTID
                            and ISREFUND = 0
                            and (
                                        ( --there's no revenue

                                        select
                                            count(ID)
                                        from dbo.FINANCIALTRANSACTIONLINEITEM
                                        where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FT.ID
                                        ) = 0
                                        or
                                        (--Check site security  

                                            select 
                                                count(*)   
                                            from dbo.UFN_SITEID_MAPFROM_REVENUEID(FT.ID) as SITE  
                                            where (
                                                @APPUSERISSYSADMIN = 1 or 
                                                exists (
                                                    select 1 
                                                    from @SITESFORUSER
                                                    where SITEID=[SITE].[SITEID] or (SITEID is null and [SITE].[SITEID] is null)
                                                )
                                            ) 
                                    ) > 0);
                end


            -- Refunds do not generate revenue, and therefore don't generate credit card

            -- transaction history. To properly settle them, we'll have to just remove any

            -- refund transactions that match system refunds.

            if @APPUSERISSYSADMIN = 1 or @ISSYSTEMUSER = 1
                begin
                    insert into #SETTLEDTRANSACTIONS
                    select
                        IMPORTEDTRANSACTIONS.ID,
                        CREDITPAYMENT.ID
                    from dbo.CREDITPAYMENT
                    inner join dbo.FINANCIALTRANSACTION
                        on FINANCIALTRANSACTION.ID = CREDITPAYMENT.REVENUEID
                    inner join dbo.REVENUEPAYMENTMETHOD
                        on REVENUEPAYMENTMETHOD.REVENUEID = FINANCIALTRANSACTION.ID
                    inner join dbo.CREDITCARDPAYMENTMETHODDETAIL
                        on REVENUEPAYMENTMETHOD.ID = CREDITCARDPAYMENTMETHODDETAIL.ID
                    inner join dbo.PROCESSORTRANSACTIONSETTLEMENTIMPORTROW IMPORTEDTRANSACTIONS
                        on IMPORTEDTRANSACTIONS.CREDITCARDPARTIALNUMBER = CREDITCARDPAYMENTMETHODDETAIL.CREDITCARDPARTIALNUMBER
                        and IMPORTEDTRANSACTIONS.TRANSACTIONDATE = convert(date, CREDITPAYMENT.[DATEADDED])
                        and -IMPORTEDTRANSACTIONS.AMOUNT = CREDITPAYMENT.AMOUNT
                    where IMPORTEDTRANSACTIONS.PROCESSORTRANSACTIONSETTLEMENTIMPORTID = @PROCESSORTRANSACTIONSETTLEMENTIMPORTID
                    and CREDITPAYMENT.SETTLEMENTTYPECODE = 0
                    and IMPORTEDTRANSACTIONS.ISREFUND = 1
                    and CREDITPAYMENT.REVENUESPLITID is null
                end
        else
            begin
                    insert into #SETTLEDTRANSACTIONS
                    select
                        IMPORTEDTRANSACTIONS.ID,
                        CREDITPAYMENT.ID
                    from dbo.CREDITPAYMENT
                    inner join dbo.FINANCIALTRANSACTION
                        on FINANCIALTRANSACTION.ID = CREDITPAYMENT.REVENUEID
                    inner join dbo.REVENUEPAYMENTMETHOD
                        on REVENUEPAYMENTMETHOD.REVENUEID = FINANCIALTRANSACTION.ID
                    inner join dbo.CREDITCARDPAYMENTMETHODDETAIL
                        on REVENUEPAYMENTMETHOD.ID = CREDITCARDPAYMENTMETHODDETAIL.ID
                    inner join dbo.PROCESSORTRANSACTIONSETTLEMENTIMPORTROW IMPORTEDTRANSACTIONS
                        on IMPORTEDTRANSACTIONS.CREDITCARDPARTIALNUMBER = CREDITCARDPAYMENTMETHODDETAIL.CREDITCARDPARTIALNUMBER
                        and IMPORTEDTRANSACTIONS.TRANSACTIONDATE = convert(date, CREDITPAYMENT.[DATEADDED])
                        and -IMPORTEDTRANSACTIONS.AMOUNT = CREDITPAYMENT.AMOUNT
                    where IMPORTEDTRANSACTIONS.PROCESSORTRANSACTIONSETTLEMENTIMPORTID = @PROCESSORTRANSACTIONSETTLEMENTIMPORTID
                    and CREDITPAYMENT.SETTLEMENTTYPECODE = 0
                    and IMPORTEDTRANSACTIONS.ISREFUND = 1
                    and CREDITPAYMENT.REVENUESPLITID is null
                    and (
                              ( --there's no revenue

                              select
                                  count(ID)
                              from dbo.FINANCIALTRANSACTIONLINEITEM
                              where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
                              ) = 0
                          or
                              (--Check site security  

                                  select 
                                      count(*)   
                                  from dbo.UFN_SITEID_MAPFROM_REVENUEID(FINANCIALTRANSACTION.ID) as SITE  
                                  where (
                                      @APPUSERISSYSADMIN = 1 or 
                                      exists (
                                          select 1 
                                          from @SITESFORUSER
                                          where SITEID=[SITE].[SITEID] or (SITEID is null and [SITE].[SITEID] is null)
                                      )
                                  ) 
                          ) > 0);      
            end

            if @APPUSERISSYSADMIN = 1 or @ISSYSTEMUSER = 1
                begin      
                    insert into #SETTLEDTRANSACTIONS
                    select
                        IMPORTEDTRANSACTIONS.ID,
                        CREDITPAYMENT.ID
                    from dbo.CREDITPAYMENT
                    inner join dbo.REVENUESPLIT
                        on CREDITPAYMENT.REVENUESPLITID = REVENUESPLIT.ID
                    inner join dbo.FINANCIALTRANSACTION
                        on FINANCIALTRANSACTION.ID = REVENUESPLIT.REVENUEID
                    inner join dbo.REVENUEPAYMENTMETHOD
                        on REVENUEPAYMENTMETHOD.REVENUEID = FINANCIALTRANSACTION.ID
                    inner join dbo.CREDITCARDPAYMENTMETHODDETAIL
                        on REVENUEPAYMENTMETHOD.ID = CREDITCARDPAYMENTMETHODDETAIL.ID
                    inner join dbo.PROCESSORTRANSACTIONSETTLEMENTIMPORTROW IMPORTEDTRANSACTIONS
                        on IMPORTEDTRANSACTIONS.CREDITCARDPARTIALNUMBER = CREDITCARDPAYMENTMETHODDETAIL.CREDITCARDPARTIALNUMBER
                        and IMPORTEDTRANSACTIONS.TRANSACTIONDATE = convert(date, CREDITPAYMENT.[DATEADDED])
                        and -IMPORTEDTRANSACTIONS.AMOUNT = CREDITPAYMENT.AMOUNT
                    where IMPORTEDTRANSACTIONS.PROCESSORTRANSACTIONSETTLEMENTIMPORTID = @PROCESSORTRANSACTIONSETTLEMENTIMPORTID
                    and CREDITPAYMENT.SETTLEMENTTYPECODE = 0
                    and IMPORTEDTRANSACTIONS.ISREFUND = 1
                end
            else
                begin
                    insert into #SETTLEDTRANSACTIONS
                    select
                        IMPORTEDTRANSACTIONS.ID,
                        CREDITPAYMENT.ID
                    from dbo.CREDITPAYMENT
                    inner join dbo.REVENUESPLIT
                        on CREDITPAYMENT.REVENUESPLITID = REVENUESPLIT.ID
                    inner join dbo.FINANCIALTRANSACTION
                        on FINANCIALTRANSACTION.ID = REVENUESPLIT.REVENUEID
                    inner join dbo.REVENUEPAYMENTMETHOD
                        on REVENUEPAYMENTMETHOD.REVENUEID = FINANCIALTRANSACTION.ID
                    inner join dbo.CREDITCARDPAYMENTMETHODDETAIL
                        on REVENUEPAYMENTMETHOD.ID = CREDITCARDPAYMENTMETHODDETAIL.ID
                    inner join dbo.PROCESSORTRANSACTIONSETTLEMENTIMPORTROW IMPORTEDTRANSACTIONS
                        on IMPORTEDTRANSACTIONS.CREDITCARDPARTIALNUMBER = CREDITCARDPAYMENTMETHODDETAIL.CREDITCARDPARTIALNUMBER
                        and IMPORTEDTRANSACTIONS.TRANSACTIONDATE = convert(date, CREDITPAYMENT.[DATEADDED])
                        and -IMPORTEDTRANSACTIONS.AMOUNT = CREDITPAYMENT.AMOUNT
                    where IMPORTEDTRANSACTIONS.PROCESSORTRANSACTIONSETTLEMENTIMPORTID = @PROCESSORTRANSACTIONSETTLEMENTIMPORTID
                    and CREDITPAYMENT.SETTLEMENTTYPECODE = 0
                    and IMPORTEDTRANSACTIONS.ISREFUND = 1
                    and (
                              ( --there's no revenue

                              select
                                  count(ID)
                              from dbo.FINANCIALTRANSACTIONLINEITEM
                              where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
                              ) = 0
                          or
                              (--Check site security  

                                  select 
                                      count(*)   
                                  from dbo.UFN_SITEID_MAPFROM_REVENUEID(FINANCIALTRANSACTION.ID) as SITE  
                                  where (
                                      @APPUSERISSYSADMIN = 1 or 
                                      exists (
                                          select 1 
                                          from @SITESFORUSER
                                          where SITEID=[SITE].[SITEID] or (SITEID is null and [SITE].[SITEID] is null)
                                      )
                                  ) 
                          ) > 0);        
                end

            if @HASAUTHCODE = 1
            begin
                -- We can match on auth code and date here, which is very clean and guaranteed unique in live data

             if @APPUSERISSYSADMIN = 1 or @ISSYSTEMUSER = 1
                begin   
                    insert into #SETTLEDTRANSACTIONS
                    select
                        IMPORTEDTRANSACTIONS.ID,
                        CREDITCARDPAYMENTMETHODDETAIL.ID
                    from dbo.CREDITCARDPAYMENTMETHODDETAIL
                    inner join dbo.REVENUEPAYMENTMETHOD
                        on REVENUEPAYMENTMETHOD.ID = CREDITCARDPAYMENTMETHODDETAIL.ID
                    inner join dbo.FINANCIALTRANSACTION
                        on FINANCIALTRANSACTION.ID = REVENUEPAYMENTMETHOD.REVENUEID
                    inner join dbo.PROCESSORTRANSACTIONSETTLEMENTIMPORTROW IMPORTEDTRANSACTIONS
                        on IMPORTEDTRANSACTIONS.AUTHORIZATIONCODE = CREDITCARDPAYMENTMETHODDETAIL.AUTHORIZATIONCODE
                        and IMPORTEDTRANSACTIONS.TRANSACTIONDATE = convert(date, FINANCIALTRANSACTION.[DATE])
                    where CREDITCARDPAYMENTMETHODDETAIL.SETTLEMENTTYPECODE = 0
                    and not exists (select 1 from #SETTLEDTRANSACTIONS ST where ST.IMPORTTRANSACTIONID = IMPORTEDTRANSACTIONS.ID and ST.DBTRANSACTIONID = CREDITCARDPAYMENTMETHODDETAIL.ID)
                    and IMPORTEDTRANSACTIONS.PROCESSORTRANSACTIONSETTLEMENTIMPORTID = @PROCESSORTRANSACTIONSETTLEMENTIMPORTID
                    and IMPORTEDTRANSACTIONS.ISREFUND = 0
                    and (IMPORTEDTRANSACTIONS.TRANSACTIONID is null or CREDITCARDPAYMENTMETHODDETAIL.TRANSACTIONID is null) --if matched, ignore. If different, ignore.s

                end
            else
                begin
                    insert into #SETTLEDTRANSACTIONS
                    select
                        IMPORTEDTRANSACTIONS.ID,
                        CREDITCARDPAYMENTMETHODDETAIL.ID
                    from dbo.CREDITCARDPAYMENTMETHODDETAIL
                    inner join dbo.REVENUEPAYMENTMETHOD
                        on REVENUEPAYMENTMETHOD.ID = CREDITCARDPAYMENTMETHODDETAIL.ID
                    inner join dbo.FINANCIALTRANSACTION
                        on FINANCIALTRANSACTION.ID = REVENUEPAYMENTMETHOD.REVENUEID
                    inner join dbo.PROCESSORTRANSACTIONSETTLEMENTIMPORTROW IMPORTEDTRANSACTIONS
                        on IMPORTEDTRANSACTIONS.AUTHORIZATIONCODE = CREDITCARDPAYMENTMETHODDETAIL.AUTHORIZATIONCODE
                        and IMPORTEDTRANSACTIONS.TRANSACTIONDATE = convert(date, FINANCIALTRANSACTION.[DATE])
                    where CREDITCARDPAYMENTMETHODDETAIL.SETTLEMENTTYPECODE = 0
                    and not exists (select 1 from #SETTLEDTRANSACTIONS ST where ST.IMPORTTRANSACTIONID = IMPORTEDTRANSACTIONS.ID and ST.DBTRANSACTIONID = CREDITCARDPAYMENTMETHODDETAIL.ID)
                    and IMPORTEDTRANSACTIONS.PROCESSORTRANSACTIONSETTLEMENTIMPORTID = @PROCESSORTRANSACTIONSETTLEMENTIMPORTID
                    and IMPORTEDTRANSACTIONS.ISREFUND = 0
                    and (IMPORTEDTRANSACTIONS.TRANSACTIONID is null or CREDITCARDPAYMENTMETHODDETAIL.TRANSACTIONID is null) --if matched, ignore. If different, ignore.

                    and (
                              ( --there's no revenue

                              select
                                  count(ID)
                              from dbo.FINANCIALTRANSACTIONLINEITEM
                              where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
                              ) = 0
                          or
                              (--Check site security  

                                  select 
                                      count(*)   
                                  from dbo.UFN_SITEID_MAPFROM_REVENUEID(FINANCIALTRANSACTION.ID) as SITE  
                                  where (
                                      @APPUSERISSYSADMIN = 1 or 
                                      exists (
                                          select 1 
                                          from @SITESFORUSER
                                          where SITEID=[SITE].[SITEID] or (SITEID is null and [SITE].[SITEID] is null)
                                      )
                                  ) 
                          ) > 0);      
                end
            end
            else
            begin
                -- Here we have to match on CC#, date, and amount, which can be duplicated

                if @APPUSERISSYSADMIN = 1 or @ISSYSTEMUSER = 1
                    begin  
                        insert into #SETTLEDTRANSACTIONS
                        select
                            IMPORTEDTRANSACTIONS.ID,
                            CREDITCARDPAYMENTMETHODDETAIL.ID
                        from dbo.CREDITCARDPAYMENTMETHODDETAIL
                        inner join dbo.REVENUEPAYMENTMETHOD
                            on REVENUEPAYMENTMETHOD.ID = CREDITCARDPAYMENTMETHODDETAIL.ID
                        inner join dbo.FINANCIALTRANSACTION
                            on FINANCIALTRANSACTION.ID = REVENUEPAYMENTMETHOD.REVENUEID
                        inner join dbo.PROCESSORTRANSACTIONSETTLEMENTIMPORTROW IMPORTEDTRANSACTIONS
                            on IMPORTEDTRANSACTIONS.CREDITCARDPARTIALNUMBER = CREDITCARDPAYMENTMETHODDETAIL.CREDITCARDPARTIALNUMBER
                            and IMPORTEDTRANSACTIONS.TRANSACTIONDATE = convert(date, FINANCIALTRANSACTION.[DATE])
                            and IMPORTEDTRANSACTIONS.AMOUNT = FINANCIALTRANSACTION.ORGAMOUNT
                        where CREDITCARDPAYMENTMETHODDETAIL.SETTLEMENTTYPECODE = 0
                        and not exists (select 1 from #SETTLEDTRANSACTIONS ST where ST.IMPORTTRANSACTIONID = IMPORTEDTRANSACTIONS.ID and ST.DBTRANSACTIONID = CREDITCARDPAYMENTMETHODDETAIL.ID)
                        and IMPORTEDTRANSACTIONS.PROCESSORTRANSACTIONSETTLEMENTIMPORTID = @PROCESSORTRANSACTIONSETTLEMENTIMPORTID
                        and IMPORTEDTRANSACTIONS.ISREFUND = 0
                        and (IMPORTEDTRANSACTIONS.TRANSACTIONID is null or CREDITCARDPAYMENTMETHODDETAIL.TRANSACTIONID is null) --if matched, ignore. If different, ignore.

                    end
                else
                    begin
                        insert into #SETTLEDTRANSACTIONS
                        select
                            IMPORTEDTRANSACTIONS.ID,
                            CREDITCARDPAYMENTMETHODDETAIL.ID
                        from dbo.CREDITCARDPAYMENTMETHODDETAIL
                        inner join dbo.REVENUEPAYMENTMETHOD
                            on REVENUEPAYMENTMETHOD.ID = CREDITCARDPAYMENTMETHODDETAIL.ID
                        inner join dbo.FINANCIALTRANSACTION
                            on FINANCIALTRANSACTION.ID = REVENUEPAYMENTMETHOD.REVENUEID
                        inner join dbo.PROCESSORTRANSACTIONSETTLEMENTIMPORTROW IMPORTEDTRANSACTIONS
                            on IMPORTEDTRANSACTIONS.CREDITCARDPARTIALNUMBER = CREDITCARDPAYMENTMETHODDETAIL.CREDITCARDPARTIALNUMBER
                            and IMPORTEDTRANSACTIONS.TRANSACTIONDATE = convert(date, FINANCIALTRANSACTION.[DATE])
                            and IMPORTEDTRANSACTIONS.AMOUNT = FINANCIALTRANSACTION.ORGAMOUNT
                        where CREDITCARDPAYMENTMETHODDETAIL.SETTLEMENTTYPECODE = 0
                        and not exists (select 1 from #SETTLEDTRANSACTIONS ST where ST.IMPORTTRANSACTIONID = IMPORTEDTRANSACTIONS.ID and ST.DBTRANSACTIONID = CREDITCARDPAYMENTMETHODDETAIL.ID)
                        and IMPORTEDTRANSACTIONS.PROCESSORTRANSACTIONSETTLEMENTIMPORTID = @PROCESSORTRANSACTIONSETTLEMENTIMPORTID
                        and IMPORTEDTRANSACTIONS.ISREFUND = 0
                        and (IMPORTEDTRANSACTIONS.TRANSACTIONID is null or CREDITCARDPAYMENTMETHODDETAIL.TRANSACTIONID is null) --if matched, ignore. If different, ignore.

                        and (
                                  ( --there's no revenue

                                  select
                                      count(ID)
                                  from dbo.FINANCIALTRANSACTIONLINEITEM
                                  where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
                                  ) = 0
                              or
                                  (--Check site security  

                                      select 
                                          count(*)   
                                      from dbo.UFN_SITEID_MAPFROM_REVENUEID(FINANCIALTRANSACTION.ID) as SITE  
                                      where (
                                          @APPUSERISSYSADMIN = 1 or 
                                          exists (
                                              select 1 
                                              from @SITESFORUSER
                                              where SITEID=[SITE].[SITEID] or (SITEID is null and [SITE].[SITEID] is null)
                                          )
                                      ) 
                              ) > 0);          
                    end
            end

            -- After the initial pass, we have to ensure that no 1 processor transaction settled multiple db transactions

            -- This should not have a huge impact on performance since duplicate transactions should be very minimal.

            -- They would really only occur if the same amount was paid on the same day with the same partial CC number

            -- in the case of a missing authorization code or a refund.


            declare @DUPLICATEDTRANSACTIONS table(DUPLICATETRANSACTIONID uniqueidentifier, DUPLICATEDBTRANSACTIONID uniqueidentifier);

            declare DUPLICATED_TRANSACTIONS cursor local fast_forward read_only for
            select
                IMPORTTRANSACTIONID, 
                DBTRANSACTIONID
            from #SETTLEDTRANSACTIONS S1
            where (
                select COUNT(S2.IMPORTTRANSACTIONID)
                from #SETTLEDTRANSACTIONS S2
                where S2.IMPORTTRANSACTIONID = S1.IMPORTTRANSACTIONID
                or S2.DBTRANSACTIONID = S1.DBTRANSACTIONID
            ) > 1

            declare @DUPLICATETRANSACTIONID uniqueidentifier, @DBTRANSACTIONID uniqueidentifier;

            open DUPLICATED_TRANSACTIONS

            fetch next from DUPLICATED_TRANSACTIONS into @DUPLICATETRANSACTIONID, @DBTRANSACTIONID

            while @@fetch_status = 0

            begin
                if not exists(
                    select
                        1
                    from @DUPLICATEDTRANSACTIONS
                    where DUPLICATEDBTRANSACTIONID = @DBTRANSACTIONID
                ) and not exists (
                    select 
                        1
                    from @DUPLICATEDTRANSACTIONS
                    where DUPLICATETRANSACTIONID = @DUPLICATETRANSACTIONID
                ) insert into @DUPLICATEDTRANSACTIONS values (@DUPLICATETRANSACTIONID, @DBTRANSACTIONID)

                fetch next from DUPLICATED_TRANSACTIONS into @DUPLICATETRANSACTIONID, @DBTRANSACTIONID
            end

            close DUPLICATED_TRANSACTIONS

            deallocate DUPLICATED_TRANSACTIONS

            if exists(select 1 from @DUPLICATEDTRANSACTIONS)
            -- we have duplicates

            begin
                delete from #SETTLEDTRANSACTIONS
                where exists(
                    select 
                        1
                    from @DUPLICATEDTRANSACTIONS
                    where DUPLICATETRANSACTIONID = IMPORTTRANSACTIONID
                    and DUPLICATEDBTRANSACTIONID = DBTRANSACTIONID
                )
            end

            declare @TOTALSETTLEDTRANSACTIONS int = (select count(*) from #SETTLEDTRANSACTIONS);
            declare @PERCENTMATCHED decimal;

            if @TOTALIMPORTTRANSACTIONS > 0
                set @PERCENTMATCHED = convert(decimal, @TOTALSETTLEDTRANSACTIONS)/convert(decimal, @TOTALIMPORTTRANSACTIONS);
            else
                -- This would only happen if they uploaded a blank file, in which case 0/0 should be considered a 100% match

                set @PERCENTMATCHED = 1

            -- Threshold subject to change

            if @PERCENTMATCHED < .25 and @ISDUPLICATEFILEUPLOAD = 0 and @IMPORTTYPECODE = 0
            begin
                if @HASAUTHCODE = 1
                begin
                    -- Wrong auth code or date column

                    set @STATUSCODE = 2;
                end

                else
                begin
                    -- Do some checking to see if we can narrow down the possible problem fields


                    declare @TOTALMATCHES int;

                    -- Start with amount field since that's the most likely error case (gross vs net)

                    -- Do the same query without the amount field incorporated

                    if @APPUSERISSYSADMIN = 1 or @ISSYSTEMUSER = 1
                        begin  
                            select
                                @TOTALMATCHES = count(*)
                            from dbo.CREDITCARDPAYMENTMETHODDETAIL
                            inner join dbo.REVENUEPAYMENTMETHOD
                                on REVENUEPAYMENTMETHOD.ID = CREDITCARDPAYMENTMETHODDETAIL.ID
                            inner join dbo.FINANCIALTRANSACTION
                                on FINANCIALTRANSACTION.ID = REVENUEPAYMENTMETHOD.REVENUEID
                            inner join dbo.PROCESSORTRANSACTIONSETTLEMENTIMPORTROW IMPORTEDTRANSACTIONS
                                on IMPORTEDTRANSACTIONS.CREDITCARDPARTIALNUMBER = CREDITCARDPAYMENTMETHODDETAIL.CREDITCARDPARTIALNUMBER
                                and IMPORTEDTRANSACTIONS.TRANSACTIONDATE = convert(date, FINANCIALTRANSACTION.[DATE])
                            where CREDITCARDPAYMENTMETHODDETAIL.SETTLEMENTTYPECODE = 0
                            and IMPORTEDTRANSACTIONS.PROCESSORTRANSACTIONSETTLEMENTIMPORTID = @PROCESSORTRANSACTIONSETTLEMENTIMPORTID
                            and ISREFUND = 0
                        end
                    else
                        begin
                            select
                                @TOTALMATCHES = count(*)
                            from dbo.CREDITCARDPAYMENTMETHODDETAIL
                            inner join dbo.REVENUEPAYMENTMETHOD
                                on REVENUEPAYMENTMETHOD.ID = CREDITCARDPAYMENTMETHODDETAIL.ID
                            inner join dbo.FINANCIALTRANSACTION
                                on FINANCIALTRANSACTION.ID = REVENUEPAYMENTMETHOD.REVENUEID
                            inner join dbo.PROCESSORTRANSACTIONSETTLEMENTIMPORTROW IMPORTEDTRANSACTIONS
                                on IMPORTEDTRANSACTIONS.CREDITCARDPARTIALNUMBER = CREDITCARDPAYMENTMETHODDETAIL.CREDITCARDPARTIALNUMBER
                                and IMPORTEDTRANSACTIONS.TRANSACTIONDATE = convert(date, FINANCIALTRANSACTION.[DATE])
                            where CREDITCARDPAYMENTMETHODDETAIL.SETTLEMENTTYPECODE = 0
                            and IMPORTEDTRANSACTIONS.PROCESSORTRANSACTIONSETTLEMENTIMPORTID = @PROCESSORTRANSACTIONSETTLEMENTIMPORTID
                            and ISREFUND = 0
                            and (
                                      ( --there's no revenue

                                      select
                                          count(ID)
                                      from dbo.FINANCIALTRANSACTIONLINEITEM
                                      where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
                                      ) = 0
                                  or
                                      (--Check site security  

                                          select 
                                              count(*)   
                                          from dbo.UFN_SITEID_MAPFROM_REVENUEID(FINANCIALTRANSACTION.ID) as SITE  
                                          where (
                                              @APPUSERISSYSADMIN = 1 or 
                                              exists (
                                                  select 1 
                                                  from @SITESFORUSER
                                                  where SITEID=[SITE].[SITEID] or (SITEID is null and [SITE].[SITEID] is null)
                                              )
                                          ) 
                                  ) > 0);            
                        end

                    if @TOTALMATCHES > @TOTALSETTLEDTRANSACTIONS
                    begin
                        -- Wrong amount column

                        set @STATUSCODE = 3;
                    end

                    else
                    begin
                        -- Wrong card number or date column

                        set @STATUSCODE = 4;
                    end
                end
            end

            if @STATUSCODE = 0
            begin
                update PMD set
                    SETTLEMENTDATE = @CURRENTDATE
                    SETTLEMENTTYPECODE = 2,
                    FEE = IR.FEE,
                    NETAMOUNT = IR.NETAMOUNT
                from 
                #SETTLEDTRANSACTIONS S
                inner join dbo.CREDITCARDPAYMENTMETHODDETAIL PMD on PMD.ID = S.DBTRANSACTIONID
                inner join dbo.PROCESSORTRANSACTIONSETTLEMENTIMPORTROW IR on IR.ID = S.IMPORTTRANSACTIONID

                update dbo.CREDITPAYMENT set
                    SETTLEMENTDATE = @CURRENTDATE
                    SETTLEMENTTYPECODE = 2
                where exists (
                    select
                        1
                    from #SETTLEDTRANSACTIONS
                    where DBTRANSACTIONID = ID
                );

                update IR set
                    STATUSCODE = 1,
                    DATABASETRANSACTIONID = S.DBTRANSACTIONID,
                    DATECHANGED = @CURRENTDATE,
                    CHANGEDBYID = @CHANGEAGENTID
                from
                    #SETTLEDTRANSACTIONS S
                    inner join dbo.PROCESSORTRANSACTIONSETTLEMENTIMPORTROW IR on IR.ID = S.IMPORTTRANSACTIONID


                insert into dbo.UNSETTLEDCREDITCARDTRANSACTION
                (
                    ID,
                    TRANSACTIONDATE,
                    CARDTYPE,
                    CARDHOLDERNAME,
                    CREDITCARDPARTIALNUMBER,
                    AUTHORIZATIONCODE,
                    AMOUNT,
                    PROCESSORTRANSACTIONSETTLEMENTIMPORTID,
                    VENDORID,
                    CURRENCYID,
                    PROCESSORTRANSACTIONSETTLEMENTIMPORTROWID,
                    ADDEDBYID,
                    CHANGEDBYID,
                    DATEADDED,
                    DATECHANGED
                )
                select
                    newid(),
                    TRANSACTIONDATE,
                    CARDTYPE,
                    CARDHOLDERNAME,
                    CREDITCARDPARTIALNUMBER,
                    AUTHORIZATIONCODE,
                    AMOUNT,
                    @PROCESSORTRANSACTIONSETTLEMENTIMPORTID,
                    VENDORID,
                    CURRENCYID,
                    IMPORTEDTRANSACTIONS.ID,
                    @CHANGEAGENTID,
                    @CHANGEAGENTID,
                    @CURRENTDATE,
                    @CURRENTDATE
                from dbo.PROCESSORTRANSACTIONSETTLEMENTIMPORTROW IMPORTEDTRANSACTIONS
                where not exists (
                    select
                        1
                    from #SETTLEDTRANSACTIONS
                    where IMPORTTRANSACTIONID = IMPORTEDTRANSACTIONS.ID
                )
                and IMPORTEDTRANSACTIONS.PROCESSORTRANSACTIONSETTLEMENTIMPORTID = @PROCESSORTRANSACTIONSETTLEMENTIMPORTID
                and IMPORTEDTRANSACTIONS.STATUSCODE = 0; --Do not include fraud fees


                set @STATUSCODE = 1;
            end
            else
            begin
                delete from dbo.PROCESSORTRANSACTIONSETTLEMENTIMPORTROW
                where PROCESSORTRANSACTIONSETTLEMENTIMPORTID = @PROCESSORTRANSACTIONSETTLEMENTIMPORTID
            end

            -- Clear temp tables

            drop table #SETTLEDTRANSACTIONS;

            update dbo.PROCESSORTRANSACTIONSETTLEMENTIMPORT set
                STATUSCODE = @STATUSCODE
            where ID = @PROCESSORTRANSACTIONSETTLEMENTIMPORTID;
        end