TR_FINANCIALTRANSACTION_UPDATE

Definition

Copy


  CREATE trigger TR_FINANCIALTRANSACTION_UPDATE on dbo.FINANCIALTRANSACTION after update, insert not for replication
        as begin
            set nocount on;
            declare @IsAP bit = 0 

            if exists(select 1 from inserted where TYPECODE > 100)    
                set  @IsAP = 1

  --TR_REVENUE_INSERT_BBNCREVENUEIDMAP

      insert into dbo.BBNCREVENUEIDMAP (REVENUEID)
      select 
        inserted.ID 
      from inserted
        left outer join deleted on inserted.ID = deleted.ID
      where 
        inserted.TYPECODE in (0,1,2,3,4,5,6,7,8) and deleted.ID is null
        and not inserted.ID is null

            if UPDATE(CONSTITUENTID) and (@IsAP = 1)
            begin                      
                -- resets REMITADDRESS on invoices when changing vendor            

                update dbo.INVOICE set
                    REMITADDRESSID = null
                    ,CHANGEDBYID = CASE WHEN UPDATE(CHANGEDBYID) THEN I.CHANGEDBYID ELSE NULL END -- force the invoice trigger to take care

                    ,DATECHANGED = CASE WHEN UPDATE(DATECHANGED) THEN I.DATECHANGED ELSE NULL END -- force the invoice trigger to take care

                from
                    dbo.INVOICE as INV 
                    inner join inserted I on INV.ID = I.ID AND I.TYPECODE=101 -- invoice

                    inner join deleted D on I.ID = D.ID
                where
                    I.CONSTITUENTID<>D.CONSTITUENTID

                -- resets REMITADDRESS on credit memos when changing vendor            

                update dbo.INVOICE set
                    REMITADDRESSID = null
                    ,CHANGEDBYID = CASE WHEN UPDATE(CHANGEDBYID) THEN I.CHANGEDBYID ELSE NULL END -- force the invoice trigger to take care

                    ,DATECHANGED = CASE WHEN UPDATE(DATECHANGED) THEN I.DATECHANGED ELSE NULL END -- force the invoice trigger to take care

                from
                    dbo.INVOICE as INV 
                    inner join inserted I on INV.ID = I.ID AND I.TYPECODE=101 -- invoice

                    inner join deleted D on I.ID = D.ID
                where
                    I.CONSTITUENTID<>D.CONSTITUENTID

            end;

        -- Prevent editing based on post status and payment status

        if (update(CONSTITUENTID) or update(TRANSACTIONAMOUNT)) and (@IsAP = 1)
            and exists 
            (
                select D.ID
                from INSERTED I
                inner join DELETED D ON I.ID = D.ID
                inner join FINANCIALTRANSACTIONLINEITEM D_FTLI on D.ID = D_FTLI.FINANCIALTRANSACTIONID
                WHERE 
                    (D.CONSTITUENTID <> I.CONSTITUENTID or D.TRANSACTIONAMOUNT <> I.TRANSACTIONAMOUNT)
                    and (
                          D_FTLI.POSTSTATUSCODE=2 -- it's posted

                        or dbo.UFN_FINANCIALTRANSACTION_PAID(I.ID) = 1 -- Performance : may consider writing and using a tvf here.

                    )                                                    
              )
            raiserror ('ERR_FINANCIALTRANSACTION_LOCKEDFIELDS', 16, 1);

       -- Prevent changing accounting system       

      if update (PDACCOUNTSYSTEMID) and exists
        select I.ID 
        from inserted as
        inner join deleted as D on I.ID = D.ID 
              inner join dbo.FINANCIALTRANSACTIONLINEITEM as L on L.FINANCIALTRANSACTIONID = D.ID 
              inner join dbo.JOURNALENTRY as J on J.FINANCIALTRANSACTIONLINEITEMID = L.ID 
            where I.PDACCOUNTSYSTEMID<>D.PDACCOUNTSYSTEMID)
          raiserror ('ERR_FINANCIALTRANSACTION_LOCKEDPDACCOUNTSYSTEM', 13, 1);

          --TR_REVENUE_MARKASCONSTITUENT    

          if update(CONSTITUENTID)
              update dbo.CONSTITUENT
                  set ISCONSTITUENT = 1,
                      CHANGEDBYID = inserted.CHANGEDBYID,
                      DATECHANGED = GetDate()
              from inserted inner join CONSTITUENT on inserted.CONSTITUENTID = CONSTITUENT.ID
              where CONSTITUENT.ISCONSTITUENT = 0
              and inserted.TYPECODE in (0,1,2,3,4,5,6,7,8)    

      --Put FK cascade deletes to FinancialTransaction here     

      if update(DELETEDON)
          begin
      if exists (select 1 from dbo.INSTALLMENT inner join inserted on INSTALLMENT.REVENUEID = inserted.ID where DELETEDON is not null)
        delete INSTALLMENT from dbo.INSTALLMENT inner join inserted on INSTALLMENT.REVENUEID = inserted.ID where DELETEDON is not null           

      if exists (select 1 from dbo.INSTALLMENTSPLITWRITEOFF inner join inserted on INSTALLMENTSPLITWRITEOFF.WRITEOFFID = inserted.ID where DELETEDON is not null)
        delete INSTALLMENTSPLITWRITEOFF from dbo.INSTALLMENTSPLITWRITEOFF inner join inserted on INSTALLMENTSPLITWRITEOFF.WRITEOFFID = inserted.ID where DELETEDON is not null

      if exists (select 1 from dbo.SALESORDERPAYMENT inner join inserted on SALESORDERPAYMENT.PAYMENTID = inserted.ID where inserted.DELETEDON is not null)
        delete SALESORDERPAYMENT from dbo.SALESORDERPAYMENT inner join inserted on SALESORDERPAYMENT.PAYMENTID = inserted.ID where inserted.DELETEDON is not null

      if exists (select 1 from dbo.SALESORDER inner join inserted on SALESORDER.REVENUEID = inserted.ID where inserted.DELETEDON is not null)
        update SALESORDER set REVENUEID = null, CHANGEDBYID = inserted.CHANGEDBYID, DATECHANGED = getdate() from dbo.SALESORDER inner join inserted on SALESORDER.REVENUEID = inserted.ID where inserted.DELETEDON is not null

      if exists (select 1 from dbo.PLANNEDGIFTRECONCILE inner join inserted on PLANNEDGIFTRECONCILE.REVENUEID = inserted.ID where inserted.DELETEDON is not null)
        delete PLANNEDGIFTRECONCILE from dbo.PLANNEDGIFTRECONCILE inner join inserted on PLANNEDGIFTRECONCILE.REVENUEID = inserted.ID where inserted.DELETEDON is not null

      if exists (select 1 from dbo.PLANNEDGIFTREVENUE inner join inserted on PLANNEDGIFTREVENUE.REVENUEID = inserted.ID where inserted.DELETEDON is not null)
        update PLANNEDGIFTREVENUE set REVENUEID = null, CHANGEDBYID = inserted.CHANGEDBYID, DATECHANGED = getdate() from dbo.PLANNEDGIFTREVENUE inner join inserted on PLANNEDGIFTREVENUE.REVENUEID = inserted.ID where inserted.DELETEDON is not null

      if exists (select 1 from dbo.RECURRINGGIFTINSTALLMENT inner join inserted on RECURRINGGIFTINSTALLMENT.REVENUEID = inserted.ID where inserted.DELETEDON is not null)
        delete RECURRINGGIFTINSTALLMENT from dbo.RECURRINGGIFTINSTALLMENT inner join inserted on RECURRINGGIFTINSTALLMENT.REVENUEID = inserted.ID where inserted.DELETEDON is not null

      if exists (select 1 from dbo.RECURRINGGIFTINSTALLMENTPAYMENT inner join inserted on RECURRINGGIFTINSTALLMENTPAYMENT.PAYMENTID = inserted.ID where inserted.DELETEDON is not null)
        delete RECURRINGGIFTINSTALLMENTPAYMENT from dbo.RECURRINGGIFTINSTALLMENTPAYMENT inner join inserted on RECURRINGGIFTINSTALLMENTPAYMENT.PAYMENTID = inserted.ID where inserted.DELETEDON is not null

          update FINANCIALTRANSACTIONLINEITEM
          set DELETEDON = inserted.DELETEDON,
          CHANGEDBYID = inserted.CHANGEDBYID,
          DATECHANGED = getdate()
          from dbo.FINANCIALTRANSACTIONLINEITEM inner join inserted on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = inserted.ID
          where inserted.DELETEDON is not null
          and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null

      end
  end