TR_RELATIONSHIP_INSERT

Definition

Copy


CREATE trigger TR_RELATIONSHIP_INSERT on dbo.RELATIONSHIP after insert not for replication
as begin

    set nocount on;    

    if dbo.UFN_B2T_CONTEXTISSYNC() = 0
    begin
        /*Remove any references to the current record as a spouse*/
        update
            dbo.RELATIONSHIP
        set
            RELATIONSHIP.ISSPOUSE = 0,
            RELATIONSHIP.DATECHANGED = INSERTED.DATECHANGED,
            RELATIONSHIP.CHANGEDBYID = INSERTED.CHANGEDBYID
        from
            INSERTED
        where RELATIONSHIP.ID in(
                        select
                            RELATIONSHIP.ID
                        from
                            dbo.RELATIONSHIP 
                        inner join
                            INSERTED
                        on
                            RELATIONSHIP.RELATIONSHIPCONSTITUENTID = INSERTED.RELATIONSHIPCONSTITUENTID 
                        where
                            RELATIONSHIP.ID <> INSERTED.ID and
                            INSERTED.ISSPOUSE = 1 and
                            RELATIONSHIP.ISSPOUSE = 1
                    union all
                        select
                            RELATIONSHIP.ID
                        from
                            dbo.RELATIONSHIP 
                        inner join
                            INSERTED
                        on
                            RELATIONSHIP.RELATIONSHIPCONSTITUENTID = INSERTED.RECIPROCALCONSTITUENTID 
                        where
                            RELATIONSHIP.ID <> INSERTED.ID and
                            INSERTED.ISSPOUSE = 1 and
                            RELATIONSHIP.ISSPOUSE = 1
                    union all
                        select
                            RELATIONSHIP.ID
                        from
                            dbo.RELATIONSHIP 
                        inner join
                            INSERTED
                        on
                            RELATIONSHIP.RECIPROCALCONSTITUENTID = INSERTED.RELATIONSHIPCONSTITUENTID 
                        where
                            RELATIONSHIP.ID <> INSERTED.ID and
                            INSERTED.ISSPOUSE = 1 and
                            RELATIONSHIP.ISSPOUSE = 1
                    union all
                        select
                            RELATIONSHIP.ID
                        from
                            dbo.RELATIONSHIP 
                        inner join
                            INSERTED
                        on
                            RELATIONSHIP.RECIPROCALCONSTITUENTID = INSERTED.RECIPROCALCONSTITUENTID 
                        where
                            RELATIONSHIP.ID <> INSERTED.ID and
                            INSERTED.ISSPOUSE = 1 and
                            RELATIONSHIP.ISSPOUSE = 1
                    );

        /* If constituent spouses are supposed to be marked as spouses make sure the new spouse is marked as a constituent */
        if (dbo.UFN_CONSTITUENCYCRITERIASPOUSE_SPOUSEISCONSTITUENT() = 1)
        begin
            update dbo.CONSTITUENT
                set CONSTITUENT.ISCONSTITUENT = 1,
                    CONSTITUENT.DATECHANGED = INSERTED.DATECHANGED,
                    CONSTITUENT.CHANGEDBYID = INSERTED.CHANGEDBYID
                from dbo.CONSTITUENT
                    inner join INSERTED
                        on INSERTED.RECIPROCALCONSTITUENTID = CONSTITUENT.ID
                    inner join dbo.CONSTITUENT as RELATIONSHIPCONSTITUENT
                        on INSERTED.RELATIONSHIPCONSTITUENTID = RELATIONSHIPCONSTITUENT.ID
                where (INSERTED.ISSPOUSE = 1) and
                        (CONSTITUENT.ISCONSTITUENT = 0) and 
                        (RELATIONSHIPCONSTITUENT.ISCONSTITUENT = 1);
        end

        /*Remove any references to the current record as a primary business*/
        update dbo.RELATIONSHIP
        set
            RELATIONSHIP.ISPRIMARYBUSINESS = 0,
            RELATIONSHIP.DATECHANGED = INSERTED.DATECHANGED,
            RELATIONSHIP.CHANGEDBYID = INSERTED.CHANGEDBYID
        from
            dbo.RELATIONSHIP
            inner join INSERTED
                on INSERTED.RELATIONSHIPCONSTITUENTID in (RELATIONSHIP.RELATIONSHIPCONSTITUENTID, RELATIONSHIP.RECIPROCALCONSTITUENTID)
                and INSERTED.ID <> RELATIONSHIP.ID
            inner join dbo.CONSTITUENT
                on CONSTITUENT.ID = INSERTED.RELATIONSHIPCONSTITUENTID
        where
            CONSTITUENT.ISORGANIZATION <> 1
            and RELATIONSHIP.ISPRIMARYBUSINESS = 1
            and INSERTED.ISPRIMARYBUSINESS = 1

        update dbo.RELATIONSHIP
        set
            RELATIONSHIP.ISPRIMARYBUSINESS = 0,
            RELATIONSHIP.DATECHANGED = INSERTED.DATECHANGED,
            RELATIONSHIP.CHANGEDBYID = INSERTED.CHANGEDBYID
        from
            dbo.RELATIONSHIP
            inner join INSERTED
                on INSERTED.RECIPROCALCONSTITUENTID in (RELATIONSHIP.RELATIONSHIPCONSTITUENTID, RELATIONSHIP.RECIPROCALCONSTITUENTID)
                and INSERTED.ID <> RELATIONSHIP.ID
            inner join dbo.CONSTITUENT
                on CONSTITUENT.ID = INSERTED.RECIPROCALCONSTITUENTID
        where
            CONSTITUENT.ISORGANIZATION <> 1
            and RELATIONSHIP.ISPRIMARYBUSINESS = 1
            and INSERTED.ISPRIMARYBUSINESS = 1

        /*Remove any references to the current record as a primary contact*/
        update
            dbo.RELATIONSHIP
        set
            RELATIONSHIP.ISPRIMARYCONTACT = 0,
            RELATIONSHIP.DATECHANGED = INSERTED.DATECHANGED,
            RELATIONSHIP.CHANGEDBYID = INSERTED.CHANGEDBYID
        from
            INSERTED
        inner join
            dbo.CONSTITUENT
        on
            INSERTED.RELATIONSHIPCONSTITUENTID = CONSTITUENT.ID
        where
            CONSTITUENT.ISORGANIZATION = 1 and
            RELATIONSHIP.ID in(
                select
                    RELATIONSHIP.ID
                from
                    dbo.RELATIONSHIP 
                inner join
                    INSERTED
                on
                    RELATIONSHIP.RELATIONSHIPCONSTITUENTID = INSERTED.RELATIONSHIPCONSTITUENTID 
                where
                    RELATIONSHIP.ID <> INSERTED.ID and
                    INSERTED.ISPRIMARYCONTACT = 1 and
                    RELATIONSHIP.ISPRIMARYCONTACT = 1
            union all
                select
                    RELATIONSHIP.ID
                from
                    dbo.RELATIONSHIP 
                inner join
                    INSERTED
                on
                    RELATIONSHIP.RECIPROCALCONSTITUENTID = INSERTED.RELATIONSHIPCONSTITUENTID 
                where
                    RELATIONSHIP.RELATIONSHIPCONSTITUENTID <> INSERTED.RECIPROCALCONSTITUENTID and
                    INSERTED.ISPRIMARYCONTACT = 1 and
                    RELATIONSHIP.ISPRIMARYCONTACT = 1
            )

        update
            dbo.RELATIONSHIP
        set
            RELATIONSHIP.ISPRIMARYCONTACT = 0,
            RELATIONSHIP.DATECHANGED = INSERTED.DATECHANGED,
            RELATIONSHIP.CHANGEDBYID = INSERTED.CHANGEDBYID
        from
            INSERTED
        inner join
            dbo.CONSTITUENT
        on
            INSERTED.RECIPROCALCONSTITUENTID = CONSTITUENT.ID
        where
            CONSTITUENT.ISORGANIZATION = 1 and 
            RELATIONSHIP.ID in
            (
                select
                    RELATIONSHIP.ID
                from
                    dbo.RELATIONSHIP 
                inner join
                    INSERTED
                on
                    RELATIONSHIP.RELATIONSHIPCONSTITUENTID = INSERTED.RECIPROCALCONSTITUENTID 

                where
                    INSERTED.ISPRIMARYCONTACT = 1 and
                    RELATIONSHIP.ISPRIMARYCONTACT = 1 and
                    RELATIONSHIP.RECIPROCALCONSTITUENTID <> INSERTED.RELATIONSHIPCONSTITUENTID
            union all
                select
                    RELATIONSHIP.ID
                from
                    dbo.RELATIONSHIP 
                inner join
                    INSERTED
                on
                    RELATIONSHIP.RECIPROCALCONSTITUENTID = INSERTED.RECIPROCALCONSTITUENTID 
                where
                    RELATIONSHIP.ID <> INSERTED.ID and
                    INSERTED.ISPRIMARYCONTACT = 1 and
                    RELATIONSHIP.ISPRIMARYCONTACT = 1
            )
    end

    /*Create the reciprocal relationship record*/
    insert into dbo.RELATIONSHIP
    (
        RELATIONSHIPCONSTITUENTID,
        RECIPROCALCONSTITUENTID,
        RELATIONSHIPTYPECODEID,
        RECIPROCALTYPECODEID,
        ISSPOUSE,
        ISPRIMARYBUSINESS,
        ISCONTACT,
        ISPRIMARYCONTACT,
        CONTACTTYPECODEID,
        POSITION,
        STARTDATE,
        ENDDATE,
        ISMATCHINGGIFTRELATIONSHIP,
        RELATIONSHIPSETID,
        COMMENTS,
        ADDEDBYID,
        CHANGEDBYID,
        DATEADDED,
        DATECHANGED
    )
    select 
        RECIPROCALCONSTITUENTID,
        RELATIONSHIPCONSTITUENTID,
        RECIPROCALTYPECODEID,
        RELATIONSHIPTYPECODEID,
        ISSPOUSE,
        ISPRIMARYBUSINESS,
        ISCONTACT,
        ISPRIMARYCONTACT,
        CONTACTTYPECODEID,
        POSITION,
        STARTDATE,
        ENDDATE,
        ISMATCHINGGIFTRELATIONSHIP,
        RELATIONSHIPSETID,
        COMMENTS,
        ADDEDBYID,
        CHANGEDBYID,
        DATEADDED,
        DATECHANGED
    from    
        INSERTED

    if dbo.UFN_B2T_CONTEXTISSYNC() = 0
    begin
        /*Update ISCONSTITUENT on the RELATIONSHIPCONSTITUENTID record based on Student Relationship Constituency Criteria*/
        update dbo.CONSTITUENT
        set ISCONSTITUENT = 1,
                CHANGEDBYID = INSERTED.CHANGEDBYID,
                DATECHANGED = GetDate()
        from                                     
                dbo.UFN_CONSTITUENT_STUDENTRELATIONCONSTITUENCIES() as RELATIONCONSTITUENCIES
        inner join 
                INSERTED on 
                        RELATIONCONSTITUENCIES.RECIPROCALCONSTITUENTID = INSERTED.RECIPROCALCONSTITUENTID and
                        RELATIONCONSTITUENCIES.CONSTITUENTID = INSERTED.RELATIONSHIPCONSTITUENTID and
                        RELATIONCONSTITUENCIES.RECIPROCALTYPECODEID = INSERTED.RECIPROCALTYPECODEID and
                        RELATIONCONSTITUENCIES.RELATIONSHIPTYPECODEID = INSERTED.RELATIONSHIPTYPECODEID
        where
                RELATIONCONSTITUENCIES.CONSTITUENTID = CONSTITUENT.ID
                and CONSTITUENT.ISCONSTITUENT = 0

        /*Update ISCONSTITUENT on the RECIPROCALCONSTITUENTID record based on Student Relationship Constituency Criteria*/                            
        update dbo.CONSTITUENT
        set ISCONSTITUENT = 1,
                CHANGEDBYID = INSERTED.CHANGEDBYID,
                DATECHANGED = GetDate()
        from                                     
                dbo.UFN_CONSTITUENT_STUDENTRELATIONCONSTITUENCIES() as RELATIONCONSTITUENCIES
        inner join 
                INSERTED on 
                        RELATIONCONSTITUENCIES.RECIPROCALCONSTITUENTID = INSERTED.RELATIONSHIPCONSTITUENTID and
                        RELATIONCONSTITUENCIES.CONSTITUENTID = INSERTED.RECIPROCALCONSTITUENTID and                                      
                        RELATIONCONSTITUENCIES.RECIPROCALTYPECODEID = INSERTED.RELATIONSHIPTYPECODEID and
                        RELATIONCONSTITUENCIES.RELATIONSHIPTYPECODEID = INSERTED.RECIPROCALTYPECODEID
        where
                RELATIONCONSTITUENCIES.CONSTITUENTID = CONSTITUENT.ID
                and CONSTITUENT.ISCONSTITUENT = 0
    end
end