TR_INVOICE_INSERT_UPDATE

Definition

Copy


          CREATE trigger TR_INVOICE_INSERT_UPDATE on dbo.INVOICE after insert,update not for replication
          as begin
          begin try
            if exists(
              select I.ID
              from INSERTED I
              inner join dbo.FINANCIALTRANSACTION F on F.ID = I.ID
              where F.TRANSACTIONAMOUNT < I.BALANCE)
            begin
             raiserror('The balance must be less than or equal to the invoice amount.', 13, 1);
            end

            if exists(
                    select V.ID
                from INSERTED I
                  inner join dbo.FINANCIALTRANSACTION F on F.ID = I.ID
                  left outer join dbo.VENDOR V on V.ID = F.CONSTITUENTID
                where 
                  V.ID is null
              )
                  begin
                    raiserror('The constituent must be a payables vendor.', 13, 1);
                  end

            if exists(
              select I.ID 
              from INSERTED I
                inner join dbo.FINANCIALTRANSACTION F on F.ID = I.ID
                left outer join dbo.ADDRESS A on (A.CONSTITUENTID = F.CONSTITUENTID) and (A.ID = I.REMITADDRESSID)
              where 
                I.REMITADDRESSID is not null
                and A.ID is null
              )
            begin
              raiserror('The remit to address must belong to the selected vendor.', 13, 1);
            end


          -- handle locking of certain fields based on post status and payment status

          if update(DISCOUNTAMOUNT) 
             if exists 
            (
                select D.ID
                from INSERTED I
                inner join DELETED D ON I.ID = D.ID
                inner join dbo.FINANCIALTRANSACTION FT on FT.ID = D.ID
                WHERE 
                  ( /* paid*/
                    exists 
                    (
                    select  I.ID
                      from DELETED I
                      inner join dbo.FINANCIALTRANSACTION FT on FT.ID = I.ID
                      inner join dbo.FINANCIALTRANSACTIONSCHEDULE FTS on FT.ID = FTS.FINANCIALTRANSACTIONID
                      inner join dbo.FINANCIALTRANSACTIONAPPLICATION FTA on FTA.FINANCIALTRANSACTIONSCHEDULEID = FTS.ID
                      where FTA.STATUSCODE <> 2 and FT.ID = I.ID and D.DISCOUNTAMOUNT<>I.DISCOUNTAMOUNT
                    )
                  )                  

               )
            BEGIN
                RAISERROR ('ERR_INVOICE_LOCKEDFIELDS', 16, 1)
            END                              

                end try

                begin catch
                    exec dbo.USP_RAISE_ERROR;
                end catch

          end