USP_DATAFORMTEMPLATE_EDIT_REVENUEBATCHCONSTITUENT_4

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@LASTNAME nvarchar(100) IN
@ORGANIZATIONNAME nvarchar(100) IN
@FIRSTNAME nvarchar(50) IN
@MIDDLENAME nvarchar(50) IN
@MAIDENNAME nvarchar(100) IN
@NICKNAME nvarchar(50) IN
@TITLECODEID uniqueidentifier IN
@SUFFIXCODEID uniqueidentifier IN
@GENDERCODE tinyint IN
@BIRTHDATE UDT_FUZZYDATE IN
@ADDRESS_ADDRESSTYPECODEID uniqueidentifier IN
@ADDRESS_DONOTMAIL bit IN
@ADDRESS_DONOTMAILREASONCODEID uniqueidentifier IN
@ADDRESS_COUNTRYID uniqueidentifier IN
@ADDRESS_STATEID uniqueidentifier IN
@ADDRESS_ADDRESSBLOCK nvarchar(150) IN
@ADDRESS_CITY nvarchar(50) IN
@ADDRESS_POSTCODE nvarchar(12) IN
@ADDRESS_UPDATEMATCHINGHOUSEHOLDADDRESSES bit IN
@ADDRESS_OMITFROMVALIDATION bit IN
@ADDRESS_CART nvarchar(10) IN
@ADDRESS_DPC nvarchar(8) IN
@ADDRESS_LOT nvarchar(5) IN
@ADDRESS_COUNTYCODEID uniqueidentifier IN
@ADDRESS_CONGRESSIONALDISTRICTCODEID uniqueidentifier IN
@ADDRESS_LASTVALIDATIONATTEMPTDATE datetime IN
@ADDRESS_VALIDATIONMESSAGE nvarchar(200) IN
@ADDRESS_CERTIFICATIONDATA int IN
@PHONE_PHONETYPECODEID uniqueidentifier IN
@PHONE_NUMBER nvarchar(100) IN
@EMAILADDRESS_EMAILADDRESSTYPECODEID uniqueidentifier IN
@EMAILADDRESS_EMAILADDRESS UDT_EMAILADDRESS IN
@MARITALSTATUSCODEID uniqueidentifier IN
@ORGANIZATION_ADDRESSTYPECODEID uniqueidentifier IN
@ORGANIZATION_DONOTMAIL bit IN
@ORGANIZATION_DONOTMAILREASONCODEID uniqueidentifier IN
@ORGANIZATION_COUNTRYID uniqueidentifier IN
@ORGANIZATION_STATEID uniqueidentifier IN
@ORGANIZATION_ADDRESSBLOCK nvarchar(150) IN
@ORGANIZATION_CITY nvarchar(50) IN
@ORGANIZATION_POSTCODE nvarchar(12) IN
@ORGANIZATION_OMITFROMVALIDATION bit IN
@ORGANIZATION_CART nvarchar(10) IN
@ORGANIZATION_DPC nvarchar(8) IN
@ORGANIZATION_LOT nvarchar(5) IN
@ORGANIZATION_COUNTYCODEID uniqueidentifier IN
@ORGANIZATION_CONGRESSIONALDISTRICTCODEID uniqueidentifier IN
@ORGANIZATION_LASTVALIDATIONATTEMPTDATE datetime IN
@ORGANIZATION_VALIDATIONMESSAGE nvarchar(200) IN
@ORGANIZATION_CERTIFICATIONDATA int IN
@ORGANIZATION_PHONETYPECODEID uniqueidentifier IN
@ORGANIZATION_NUMBER nvarchar(100) IN
@ORGANIZATION_EMAILADDRESSTYPECODEID uniqueidentifier IN
@ORGANIZATION_EMAILADDRESS UDT_EMAILADDRESS IN
@WEBADDRESS UDT_WEBADDRESS IN
@INDUSTRYCODEID uniqueidentifier IN
@NUMEMPLOYEES int IN
@NUMSUBSIDIARIES int IN
@PARENTCORPID uniqueidentifier IN
@BATCHSPOUSEID uniqueidentifier IN
@BATCHSPOUSERELATIONID uniqueidentifier IN
@SPOUSEID uniqueidentifier IN
@EXISTINGSPOUSE bit IN
@SPOUSE_LASTNAME nvarchar(100) IN
@SPOUSE_FIRSTNAME nvarchar(50) IN
@SPOUSE_MIDDLENAME nvarchar(50) IN
@SPOUSE_MAIDENNAME nvarchar(100) IN
@SPOUSE_NICKNAME nvarchar(50) IN
@SPOUSE_TITLECODEID uniqueidentifier IN
@SPOUSE_SUFFIXCODEID uniqueidentifier IN
@SPOUSE_GENDERCODE tinyint IN
@SPOUSE_BIRTHDATE UDT_FUZZYDATE IN
@SPOUSE_RECIPROCALTYPECODEID uniqueidentifier IN
@SPOUSE_RELATIONSHIPTYPECODEID uniqueidentifier IN
@COPYPRIMARYINFORMATION bit IN
@SPOUSE_STARTDATE datetime IN
@ISSPOUSERELATIONSHIP bit IN
@BATCHBUSINESSID uniqueidentifier IN
@BATCHBUSINESSRELATIONID uniqueidentifier IN
@BUSINESSID uniqueidentifier IN
@EXISTINGBUSINESS bit IN
@BUSINESS_NAME nvarchar(100) IN
@BUSINESS_ADDRESSTYPECODEID uniqueidentifier IN
@BUSINESS_COUNTRYID uniqueidentifier IN
@BUSINESS_STATEID uniqueidentifier IN
@BUSINESS_ADDRESSBLOCK nvarchar(150) IN
@BUSINESS_CITY nvarchar(50) IN
@BUSINESS_POSTCODE nvarchar(12) IN
@BUSINESS_DONOTMAIL bit IN
@BUSINESS_DONOTMAILREASONCODEID uniqueidentifier IN
@BUSINESS_OMITFROMVALIDATION bit IN
@BUSINESS_CART nvarchar(10) IN
@BUSINESS_DPC nvarchar(8) IN
@BUSINESS_LOT nvarchar(5) IN
@BUSINESS_COUNTYCODEID uniqueidentifier IN
@BUSINESS_CONGRESSIONALDISTRICTCODEID uniqueidentifier IN
@BUSINESS_LASTVALIDATIONATTEMPTDATE datetime IN
@BUSINESS_VALIDATIONMESSAGE nvarchar(200) IN
@BUSINESS_CERTIFICATIONDATA int IN
@BUSINESS_PHONETYPECODEID uniqueidentifier IN
@BUSINESS_NUMBER nvarchar(100) IN
@BUSINESS_RECIPROCALTYPECODEID uniqueidentifier IN
@BUSINESS_RELATIONSHIPTYPECODEID uniqueidentifier IN
@BUSINESS_STARTDATE datetime IN
@ISCONTACT bit IN
@ISPRIMARYCONTACT bit IN
@CONTACTTYPECODEID uniqueidentifier IN
@POSITION nvarchar(100) IN
@ISMATCHINGGIFTRELATIONSHIP bit IN
@CURRENTAPPUSERID uniqueidentifier IN
@GROUP_NAME nvarchar(100) IN
@GROUP_DESCRIPTION nvarchar(300) IN
@GROUP_GIVESANONYMOUSLY bit IN
@GROUP_ADDRESSTYPECODEID uniqueidentifier IN
@GROUP_COUNTRYID uniqueidentifier IN
@GROUP_ADDRESSBLOCK nvarchar(150) IN
@GROUP_CITY nvarchar(50) IN
@GROUP_STATEID uniqueidentifier IN
@GROUP_OMITFROMVALIDATION bit IN
@GROUP_CART nvarchar(10) IN
@GROUP_DPC nvarchar(8) IN
@GROUP_LOT nvarchar(5) IN
@GROUP_COUNTYCODEID uniqueidentifier IN
@GROUP_CONGRESSIONALDISTRICTCODEID uniqueidentifier IN
@GROUP_LASTVALIDATIONATTEMPTDATE datetime IN
@GROUP_VALIDATIONMESSAGE nvarchar(200) IN
@GROUP_CERTIFICATIONDATA int IN
@GROUP_POSTCODE nvarchar(12) IN
@GROUP_PHONETYPECODEID uniqueidentifier IN
@GROUP_NUMBER nvarchar(100) IN
@GROUP_EMAILADDRESSTYPECODEID uniqueidentifier IN
@GROUP_EMAILADDRESS UDT_EMAILADDRESS IN
@GROUP_WEBADDRESS UDT_WEBADDRESS IN
@GROUP_DONOTMAIL bit IN
@GROUP_DONOTMAILREASONCODEID uniqueidentifier IN
@GROUP_UPDATEMATCHINGHOUSEHOLDADDRESSES bit IN
@GROUP_GROUPTYPEID uniqueidentifier IN
@GROUP_PRIMARYCONTACTID uniqueidentifier IN
@GROUP_MEMBERS xml IN
@GROUP_NEWMEMBERSEARCHID uniqueidentifier IN
@GROUP_STARTDATE datetime IN
@HOUSEHOLD_PRIMARYCONTACTID uniqueidentifier IN
@HOUSEHOLD_PRIMARYCONTACT_KEYNAME nvarchar(100) IN
@HOUSEHOLD_PRIMARYCONTACT_FIRSTNAME nvarchar(50) IN
@HOUSEHOLD_PRIMARYCONTACT_MIDDLENAME nvarchar(50) IN
@HOUSEHOLD_PRIMARYCONTACT_TITLECODEID uniqueidentifier IN
@HOUSEHOLD_PRIMARYCONTACT_SUFFIXCODEID uniqueidentifier IN
@HOUSEHOLD_PRIMARYCONTACT_COPYHOUSEHOLDCONTACT bit IN
@HOUSEHOLD_SECONDMEMBERID uniqueidentifier IN
@HOUSEHOLD_SECONDMEMBER_KEYNAME nvarchar(100) IN
@HOUSEHOLD_SECONDMEMBER_FIRSTNAME nvarchar(50) IN
@HOUSEHOLD_SECONDMEMBER_MIDDLENAME nvarchar(50) IN
@HOUSEHOLD_SECONDMEMBER_TITLECODEID uniqueidentifier IN
@HOUSEHOLD_SECONDMEMBER_SUFFIXCODEID uniqueidentifier IN
@HOUSEHOLD_SECONDMEMBER_COPYHOUSEHOLDCONTACT bit IN
@HOUSEHOLD_SECONDMEMBER_RELATIONSHIP_RECIPROCALTYPECODEID uniqueidentifier IN
@HOUSEHOLD_SECONDMEMBER_RELATIONSHIP_RELATIONSHIPTYPECODEID uniqueidentifier IN
@HOUSEHOLD_SECONDMEMBER_RELATIONSHIP_STARTDATE datetime IN
@HOUSEHOLD_SECONDMEMBER_RELATIONSHIP_ISSPOUSE bit IN
@HOUSEHOLDCOPYPRIMARYCONTACTINFO bit IN
@JOBCATEGORYCODEID uniqueidentifier IN
@CAREERLEVELCODEID uniqueidentifier IN
@GROUP_DONOTCALL bit IN
@GROUP_DONOTEMAIL bit IN
@GENDERCODEID uniqueidentifier IN
@SPOUSE_GENDERCODEID uniqueidentifier IN

Definition

Copy


CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_REVENUEBATCHCONSTITUENT_4
(
    @ID                                            uniqueidentifier,
    @CHANGEAGENTID                                uniqueidentifier,
    @LASTNAME                                    nvarchar(100),
    @ORGANIZATIONNAME                            nvarchar(100),
    @FIRSTNAME                                    nvarchar(50),
    @MIDDLENAME                                    nvarchar(50),
    @MAIDENNAME                                    nvarchar(100),
    @NICKNAME                                    nvarchar(50),
    @TITLECODEID                                uniqueidentifier,
    @SUFFIXCODEID                                uniqueidentifier,
    @GENDERCODE                                    tinyint,
    @BIRTHDATE                                    dbo.UDT_FUZZYDATE,
    @ADDRESS_ADDRESSTYPECODEID                    uniqueidentifier,
    @ADDRESS_DONOTMAIL                            bit,
    @ADDRESS_DONOTMAILREASONCODEID                uniqueidentifier,
    @ADDRESS_COUNTRYID                            uniqueidentifier,
    @ADDRESS_STATEID                            uniqueidentifier,
    @ADDRESS_ADDRESSBLOCK                        nvarchar(150),
    @ADDRESS_CITY                                nvarchar(50),
    @ADDRESS_POSTCODE                            nvarchar(12),
    @ADDRESS_UPDATEMATCHINGHOUSEHOLDADDRESSES    bit,

    -- Address Validation

    @ADDRESS_OMITFROMVALIDATION                bit,
    @ADDRESS_CART                            nvarchar(10),
    @ADDRESS_DPC                            nvarchar(8),
    @ADDRESS_LOT                            nvarchar(5),
    @ADDRESS_COUNTYCODEID                    uniqueidentifier,
    @ADDRESS_CONGRESSIONALDISTRICTCODEID    uniqueidentifier,
    @ADDRESS_LASTVALIDATIONATTEMPTDATE        datetime,
    @ADDRESS_VALIDATIONMESSAGE                nvarchar(200),
    @ADDRESS_CERTIFICATIONDATA                integer,
    @PHONE_PHONETYPECODEID                    uniqueidentifier,
    @PHONE_NUMBER                            nvarchar(100),
    @EMAILADDRESS_EMAILADDRESSTYPECODEID    uniqueidentifier,
    @EMAILADDRESS_EMAILADDRESS                dbo.UDT_EMAILADDRESS,
    @MARITALSTATUSCODEID                    uniqueidentifier,
    @ORGANIZATION_ADDRESSTYPECODEID            uniqueidentifier,
    @ORGANIZATION_DONOTMAIL                    bit,
    @ORGANIZATION_DONOTMAILREASONCODEID        uniqueidentifier,
    @ORGANIZATION_COUNTRYID                    uniqueidentifier,
    @ORGANIZATION_STATEID                    uniqueidentifier,
    @ORGANIZATION_ADDRESSBLOCK                nvarchar(150),
    @ORGANIZATION_CITY                        nvarchar(50),
    @ORGANIZATION_POSTCODE                    nvarchar(12),

    -- Address Validation

    @ORGANIZATION_OMITFROMVALIDATION            bit,
    @ORGANIZATION_CART                            nvarchar(10),
    @ORGANIZATION_DPC                            nvarchar(8),
    @ORGANIZATION_LOT                            nvarchar(5),
    @ORGANIZATION_COUNTYCODEID                    uniqueidentifier,
    @ORGANIZATION_CONGRESSIONALDISTRICTCODEID    uniqueidentifier,
    @ORGANIZATION_LASTVALIDATIONATTEMPTDATE        datetime,
    @ORGANIZATION_VALIDATIONMESSAGE                nvarchar(200),
    @ORGANIZATION_CERTIFICATIONDATA                integer,
    @ORGANIZATION_PHONETYPECODEID                uniqueidentifier,
    @ORGANIZATION_NUMBER                        nvarchar(100),
    @ORGANIZATION_EMAILADDRESSTYPECODEID        uniqueidentifier,
    @ORGANIZATION_EMAILADDRESS                    dbo.UDT_EMAILADDRESS,
    @WEBADDRESS                                    dbo.UDT_WEBADDRESS,
    @INDUSTRYCODEID                                uniqueidentifier,
    @NUMEMPLOYEES                                int,
    @NUMSUBSIDIARIES                            int,
    @PARENTCORPID                                uniqueidentifier,

    --Individual's relationship Variables

    @BATCHSPOUSEID                        uniqueidentifier,
    @BATCHSPOUSERELATIONID                uniqueidentifier,
    @SPOUSEID                            uniqueidentifier,
    @EXISTINGSPOUSE                        bit,
    @SPOUSE_LASTNAME                    nvarchar(100),
    @SPOUSE_FIRSTNAME                    nvarchar(50),
    @SPOUSE_MIDDLENAME                    nvarchar(50),
    @SPOUSE_MAIDENNAME                    nvarchar(100),
    @SPOUSE_NICKNAME                    nvarchar(50),
    @SPOUSE_TITLECODEID                    uniqueidentifier,
    @SPOUSE_SUFFIXCODEID                uniqueidentifier,
    @SPOUSE_GENDERCODE                    tinyint,
    @SPOUSE_BIRTHDATE                    dbo.UDT_FUZZYDATE,
    @SPOUSE_RECIPROCALTYPECODEID        uniqueidentifier,
    @SPOUSE_RELATIONSHIPTYPECODEID        uniqueidentifier,
    @COPYPRIMARYINFORMATION                bit,
    @SPOUSE_STARTDATE                    datetime,
    @ISSPOUSERELATIONSHIP                bit,

    --Organization variables

    @BATCHBUSINESSID                uniqueidentifier,
    @BATCHBUSINESSRELATIONID        uniqueidentifier,
    @BUSINESSID                        uniqueidentifier,
    @EXISTINGBUSINESS                bit,
    @BUSINESS_NAME                    nvarchar(100),
    @BUSINESS_ADDRESSTYPECODEID        uniqueidentifier,
    @BUSINESS_COUNTRYID                uniqueidentifier,
    @BUSINESS_STATEID                uniqueidentifier,
    @BUSINESS_ADDRESSBLOCK            nvarchar(150),
    @BUSINESS_CITY                    nvarchar(50),
    @BUSINESS_POSTCODE                nvarchar(12),
    @BUSINESS_DONOTMAIL                bit,
    @BUSINESS_DONOTMAILREASONCODEID uniqueidentifier,

    -- Address Validation

    @BUSINESS_OMITFROMVALIDATION                bit,
    @BUSINESS_CART                            nvarchar(10),
    @BUSINESS_DPC                            nvarchar(8),
    @BUSINESS_LOT                            nvarchar(5),
    @BUSINESS_COUNTYCODEID                    uniqueidentifier,
    @BUSINESS_CONGRESSIONALDISTRICTCODEID    uniqueidentifier,
    @BUSINESS_LASTVALIDATIONATTEMPTDATE        datetime,
    @BUSINESS_VALIDATIONMESSAGE                nvarchar(200),
    @BUSINESS_CERTIFICATIONDATA                integer,
    @BUSINESS_PHONETYPECODEID            uniqueidentifier,
    @BUSINESS_NUMBER                    nvarchar(100),
    @BUSINESS_RECIPROCALTYPECODEID        uniqueidentifier,
    @BUSINESS_RELATIONSHIPTYPECODEID    uniqueidentifier,
    @BUSINESS_STARTDATE                    datetime,                        
    @ISCONTACT                                bit,
    @ISPRIMARYCONTACT                        bit,
    @CONTACTTYPECODEID                        uniqueidentifier,
    @POSITION                                nvarchar(100),
    @ISMATCHINGGIFTRELATIONSHIP                bit,

    @CURRENTAPPUSERID uniqueidentifier,

    -- Group/Household variables

    @GROUP_NAME nvarchar(100),
    @GROUP_DESCRIPTION nvarchar(300),
    @GROUP_GIVESANONYMOUSLY bit,
    @GROUP_ADDRESSTYPECODEID uniqueidentifier,
    @GROUP_COUNTRYID uniqueidentifier,
    @GROUP_ADDRESSBLOCK nvarchar(150),
    @GROUP_CITY nvarchar(50),
    @GROUP_STATEID uniqueidentifier,
    @GROUP_OMITFROMVALIDATION                bit,
    @GROUP_CART                            nvarchar(10),
    @GROUP_DPC                            nvarchar(8),
    @GROUP_LOT                            nvarchar(5),
    @GROUP_COUNTYCODEID                    uniqueidentifier,
    @GROUP_CONGRESSIONALDISTRICTCODEID    uniqueidentifier,
    @GROUP_LASTVALIDATIONATTEMPTDATE        datetime,
    @GROUP_VALIDATIONMESSAGE                nvarchar(200),
    @GROUP_CERTIFICATIONDATA                integer,
    @GROUP_POSTCODE nvarchar(12),
    @GROUP_PHONETYPECODEID uniqueidentifier,
    @GROUP_NUMBER nvarchar(100),
    @GROUP_EMAILADDRESSTYPECODEID uniqueidentifier,
    @GROUP_EMAILADDRESS dbo.UDT_EMAILADDRESS,
    @GROUP_WEBADDRESS    dbo.UDT_WEBADDRESS,
    @GROUP_DONOTMAIL bit,
    @GROUP_DONOTMAILREASONCODEID uniqueidentifier,
    @GROUP_UPDATEMATCHINGHOUSEHOLDADDRESSES bit,

    -- Group variables

    @GROUP_GROUPTYPEID uniqueidentifier,
    @GROUP_PRIMARYCONTACTID uniqueidentifier,
    @GROUP_MEMBERS xml,
    @GROUP_NEWMEMBERSEARCHID uniqueidentifier, -- Not used in save operation, only exists to setup new member lookup control.

    @GROUP_STARTDATE datetime,

    -- Household Primary Member variables

    @HOUSEHOLD_PRIMARYCONTACTID uniqueidentifier,
    @HOUSEHOLD_PRIMARYCONTACT_KEYNAME nvarchar(100),
    @HOUSEHOLD_PRIMARYCONTACT_FIRSTNAME nvarchar(50),
    @HOUSEHOLD_PRIMARYCONTACT_MIDDLENAME nvarchar(50),
    @HOUSEHOLD_PRIMARYCONTACT_TITLECODEID uniqueidentifier,
    @HOUSEHOLD_PRIMARYCONTACT_SUFFIXCODEID uniqueidentifier,
    @HOUSEHOLD_PRIMARYCONTACT_COPYHOUSEHOLDCONTACT bit,

    -- Household Second Member variables

    @HOUSEHOLD_SECONDMEMBERID uniqueidentifier,
    @HOUSEHOLD_SECONDMEMBER_KEYNAME nvarchar(100),
    @HOUSEHOLD_SECONDMEMBER_FIRSTNAME nvarchar(50),
    @HOUSEHOLD_SECONDMEMBER_MIDDLENAME nvarchar(50),
    @HOUSEHOLD_SECONDMEMBER_TITLECODEID uniqueidentifier,
    @HOUSEHOLD_SECONDMEMBER_SUFFIXCODEID uniqueidentifier,
    @HOUSEHOLD_SECONDMEMBER_COPYHOUSEHOLDCONTACT bit,

    -- Household Second Member Relationship variables

    @HOUSEHOLD_SECONDMEMBER_RELATIONSHIP_RECIPROCALTYPECODEID uniqueidentifier,
    @HOUSEHOLD_SECONDMEMBER_RELATIONSHIP_RELATIONSHIPTYPECODEID uniqueidentifier,
    @HOUSEHOLD_SECONDMEMBER_RELATIONSHIP_STARTDATE datetime,
    @HOUSEHOLD_SECONDMEMBER_RELATIONSHIP_ISSPOUSE bit,

    -- Individual's household fields

    @HOUSEHOLDCOPYPRIMARYCONTACTINFO bit,

    @JOBCATEGORYCODEID uniqueidentifier,
    @CAREERLEVELCODEID uniqueidentifier,
    @GROUP_DONOTCALL bit,
    @GROUP_DONOTEMAIL bit,
    @GENDERCODEID uniqueidentifier,
    @SPOUSE_GENDERCODEID uniqueidentifier
)
as
begin
    set nocount on;

    declare @CURRENTDATE datetime;
    declare @KEYNAME nvarchar(100);
    declare @KEYNAMEPREFIX nvarchar(50);

    if @ID is null
        set @ID = newid();

    if @ADDRESS_DONOTMAIL = 0
        set @ADDRESS_DONOTMAILREASONCODEID = null

    if @ORGANIZATION_DONOTMAIL = 0
        set @ORGANIZATION_DONOTMAILREASONCODEID = null

    if @BUSINESS_DONOTMAIL = 0
        set @BUSINESS_DONOTMAILREASONCODEID = null

    if @GROUP_DONOTMAIL = 0
        set @GROUP_DONOTMAILREASONCODEID = null

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

    set @CURRENTDATE = getdate();

    begin try
        declare @contextCache varbinary(128);

        --cache current context information

        set @contextCache = CONTEXT_INFO();
        --set CONTEXT_INFO to @CHANGEAGENTID

        set CONTEXT_INFO @CHANGEAGENTID;

        declare @ISEXISTINGCONSTITUENT bit;
        declare @ISORGANIZATION bit;
        declare @ISGROUP bit;
        declare @ISHOUSEHOLD bit;

        set @ISEXISTINGCONSTITUENT = 0;
        set @ISORGANIZATION = 0;
        set @ISGROUP = 0;
        set @ISHOUSEHOLD = 0;

        select @ISEXISTINGCONSTITUENT = 1,
            @ISORGANIZATION = C.ISORGANIZATION,
            @ISGROUP = C.ISGROUP,
            @ISHOUSEHOLD = case 
                when GD.GROUPTYPECODE = 0
                    then 1
                else 0
                end
        from dbo.CONSTITUENT C
        left join dbo.GROUPDATA GD
            on C.ID = GD.ID
        where C.ID = @ID;

        if @ISEXISTINGCONSTITUENT = 1
        begin
            -- Check constituent security.  The check is done manually since it only applies to existing constituents.

            if (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 0)
                and (dbo.UFN_SECURITY_APPUSER_GRANTED_FORM_FORCONSTIT(@CURRENTAPPUSERID, '9AB0F5C5-0FF0-4D5E-968B-8FFB340FBEEA', @ID) = 0)
                raiserror (
                        'BBERR_DB_RECORDSECURITY_PERMISSION_DENIED',
                        13,
                        1
                        );

            declare @EMPTYGUID uniqueidentifier = '00000000-0000-0000-0000-000000000000';
            declare @NULLDATE date = '9999-01-01';
            -- Check for duplicate contact information

            -- For some reason the values are passed in as separate parameters depending on the constituent type

            -- normalize them first

            declare @DUPE_ADDRESSBLOCK nvarchar(150);
            declare @DUPE_ADDRESSTYPECODEID uniqueidentifier;
            declare @DUPE_STATEID uniqueidentifier;
            declare @DUPE_COUNTRYID uniqueidentifier;
            declare @DUPE_POSTCODE nvarchar(12);
            declare @DUPE_PHONENUMBER nvarchar(100);
            declare @DUPE_PHONETYPECODEID uniqueidentifier;
            declare @DUPE_EMAILADDRESS dbo.UDT_EMAILADDRESS;
            declare @DUPE_EMAILADDRESSTYPECODEID uniqueidentifier;
            declare @DUPE_CONSTITUENTTYPE_FORERROR nvarchar(100);
            if @ISORGANIZATION <> 0
            begin
                set @DUPE_ADDRESSBLOCK = @ORGANIZATION_ADDRESSBLOCK;
                set @DUPE_ADDRESSTYPECODEID = @ORGANIZATION_ADDRESSTYPECODEID;
                set @DUPE_STATEID = @ORGANIZATION_STATEID;
                set @DUPE_COUNTRYID = @ORGANIZATION_COUNTRYID;
                set @DUPE_POSTCODE = @ORGANIZATION_POSTCODE;
                set @DUPE_PHONENUMBER = @ORGANIZATION_NUMBER;
                set @DUPE_PHONETYPECODEID = @ORGANIZATION_PHONETYPECODEID;
                set @DUPE_EMAILADDRESS = @ORGANIZATION_EMAILADDRESS;
                set @DUPE_EMAILADDRESSTYPECODEID = @ORGANIZATION_EMAILADDRESSTYPECODEID;
                set @DUPE_CONSTITUENTTYPE_FORERROR = '_NONGROUP';
            end
            else if @ISGROUP <> 0
            begin
                set @DUPE_ADDRESSBLOCK = @GROUP_ADDRESSBLOCK;
                set @DUPE_ADDRESSTYPECODEID = @GROUP_ADDRESSTYPECODEID;
                set @DUPE_STATEID = @GROUP_STATEID;
                set @DUPE_COUNTRYID = @GROUP_COUNTRYID;
                set @DUPE_POSTCODE = @GROUP_POSTCODE;
                set @DUPE_PHONENUMBER = @GROUP_NUMBER;
                set @DUPE_PHONETYPECODEID = @GROUP_PHONETYPECODEID;
                set @DUPE_EMAILADDRESS = @GROUP_EMAILADDRESS;
                set @DUPE_EMAILADDRESSTYPECODEID = @GROUP_EMAILADDRESSTYPECODEID;
                set @DUPE_CONSTITUENTTYPE_FORERROR = '_GROUP';
            end
            else
            begin
                set @DUPE_ADDRESSBLOCK = @ADDRESS_ADDRESSBLOCK;
                set @DUPE_ADDRESSTYPECODEID = @ADDRESS_ADDRESSTYPECODEID;
                set @DUPE_STATEID = @ADDRESS_STATEID;
                set @DUPE_COUNTRYID = @ADDRESS_COUNTRYID;
                set @DUPE_POSTCODE = @ADDRESS_POSTCODE;
                set @DUPE_PHONENUMBER = @PHONE_NUMBER;
                set @DUPE_PHONETYPECODEID = @PHONE_PHONETYPECODEID;
                set @DUPE_EMAILADDRESS = @EMAILADDRESS_EMAILADDRESS;
                set @DUPE_EMAILADDRESSTYPECODEID = @EMAILADDRESS_EMAILADDRESSTYPECODEID;
                set @DUPE_CONSTITUENTTYPE_FORERROR = '_NONGROUP';
            end

            if exists(
                select top 1 1
                from
                    dbo.ADDRESS
                where
                    ADDRESS.HISTORICALENDDATE is null
                    and coalesce(ADDRESS.ADDRESSBLOCK, '') = coalesce(@DUPE_ADDRESSBLOCK, '')
                    and coalesce(ADDRESS.ADDRESSTYPECODEID, @EMPTYGUID) = coalesce(@DUPE_ADDRESSTYPECODEID, @EMPTYGUID)
                    and coalesce(ADDRESS.STATEID, @EMPTYGUID) = coalesce(@DUPE_STATEID, @EMPTYGUID)
                    and coalesce(ADDRESS.COUNTRYID, @EMPTYGUID) = coalesce(@DUPE_COUNTRYID, @EMPTYGUID)
                    and coalesce(ADDRESS.POSTCODE, '') = coalesce(@DUPE_POSTCODE, '')
                    and ADDRESS.CONSTITUENTID = @ID
                    and ADDRESS.ISPRIMARY = 0
                )
            begin
                declare @ADDRESSERROR nvarchar(100) = 'BBERR_ADDRESS_DUPLICATENOTALLOWED' + @DUPE_CONSTITUENTTYPE_FORERROR
                raiserror(@ADDRESSERROR, 13, 1);
            end

            -- the country of the phone we are editing/adding is either

            --  editing: the country of the current primary phone

            --  adding: null

            declare @NUMBERNOFORMAT nvarchar(100) = coalesce(dbo.UFN_PHONE_REMOVEFORMATTING(@DUPE_PHONENUMBER), '');
            declare @PRIMARYPHONECOUNTRYID uniqueidentifier = null;
            select
                @PRIMARYPHONECOUNTRYID = PHONE.COUNTRYID
            from
                dbo.PHONE
            where
                PHONE.CONSTITUENTID = @ID
                and PHONE.ISPRIMARY = 1

            if exists(
                select top 1 1
                from
                    dbo.PHONE
                where
                    PHONE.ENDDATE is null
                    and coalesce(PHONE.NUMBERNOFORMAT, '') = @NUMBERNOFORMAT
                    and coalesce(PHONE.PHONETYPECODEID, @EMPTYGUID) = coalesce(@DUPE_PHONETYPECODEID, @EMPTYGUID)
                    and coalesce(PHONE.COUNTRYID, @EMPTYGUID) = coalesce(@PRIMARYPHONECOUNTRYID, @EMPTYGUID)
                    and PHONE.CONSTITUENTID = @ID
                    and PHONE.ISPRIMARY = 0
                )
            begin
                declare @PHONEERROR nvarchar(100) = 'BBERR_PHONENUMBER_DUPLICATENOTALLOWED' + @DUPE_CONSTITUENTTYPE_FORERROR;
                raiserror(@PHONEERROR, 13, 1);
            end

            if exists(
                select top 1 1
                from
                    dbo.EMAILADDRESS
                where
                    EMAILADDRESS.ENDDATE is null
                    and coalesce(EMAILADDRESS.EMAILADDRESS, '') = coalesce(@DUPE_EMAILADDRESS, '')
                    and coalesce(EMAILADDRESS.EMAILADDRESSTYPECODEID, @EMPTYGUID) = coalesce(@DUPE_EMAILADDRESSTYPECODEID, @EMPTYGUID)
                    and EMAILADDRESS.CONSTITUENTID = @ID
                    and EMAILADDRESS.ISPRIMARY = 0
                )
            begin
                declare @EMAILERROR nvarchar(100) = 'BBERR_EMAILADDRESS_DUPLICATENOTALLOWED' + @DUPE_CONSTITUENTTYPE_FORERROR
                raiserror(@EMAILERROR, 13, 1);
            end


            if @ISORGANIZATION != 0
            begin
                exec dbo.USP_PARSE_ORGANIZATION_NAME @ORGANIZATIONNAME,
                    @KEYNAME output,
                    @KEYNAMEPREFIX output;

                update dbo.CONSTITUENT
                set KEYNAME = @KEYNAME,
                    KEYNAMEPREFIX = @KEYNAMEPREFIX,
                    WEBADDRESS = @WEBADDRESS,
                    CHANGEDBYID = @CHANGEAGENTID,
                    DATECHANGED = @CURRENTDATE
                where CONSTITUENT.ID = @ID;

                if @NUMEMPLOYEES is null
                    set @NUMEMPLOYEES = 0;

                if @NUMSUBSIDIARIES is null
                    set @NUMSUBSIDIARIES = 0;

                declare @OLDPARENTORG uniqueidentifier

                set @OLDPARENTORG = (
                        select PARENTCORPID
                        from dbo.ORGANIZATIONDATA
                        where ORGANIZATIONDATA.ID = @ID
                        )

                update dbo.ORGANIZATIONDATA
                set INDUSTRYCODEID = @INDUSTRYCODEID,
                    NUMEMPLOYEES = @NUMEMPLOYEES,
                    NUMSUBSIDIARIES = @NUMSUBSIDIARIES,
                    PARENTCORPID = @PARENTCORPID,
                    CHANGEDBYID = @CHANGEAGENTID,
                    DATECHANGED = @CURRENTDATE
                where ORGANIZATIONDATA.ID = @ID;

                exec dbo.USP_RELATIONSHIPS_CREATEPARENTORGRELATIONSHIP @ID,
                    @PARENTCORPID,
                    @CURRENTDATE,
                    @CHANGEAGENTID,
                    @CURRENTDATE,
                    1,
                    @OLDPARENTORG

                if @@ROWCOUNT = 0
                    if @INDUSTRYCODEID is not null
                        or @PARENTCORPID is not null
                        or @PARENTCORPID is not null
                        or @NUMEMPLOYEES != 0
                        or @NUMSUBSIDIARIES != 0
                        insert into dbo.ORGANIZATIONDATA (
                            ID,
                            INDUSTRYCODEID,
                            NUMEMPLOYEES,
                            NUMSUBSIDIARIES,
                            PARENTCORPID,
                            ADDEDBYID,
                            CHANGEDBYID,
                            DATECHANGED,
                            DATEADDED
                            )
                        values (
                            @ID,
                            @INDUSTRYCODEID,
                            @NUMEMPLOYEES,
                            @NUMSUBSIDIARIES,
                            @PARENTCORPID,
                            @CHANGEAGENTID,
                            @CHANGEAGENTID,
                            @CURRENTDATE,
                            @CURRENTDATE
                            )

                --Bug 163945 ASA: Workaround for checking @ORGANIZATION_STATEID before sending it to the ADDRESS table.

                --Probably need to change the @ORGANIZATION_STATEID to uniqueidentifier to skip this check. In regression

                --now, so changing to uniqueidentifier might be invasive.

                declare @ORGANIZATIONSTATEID uniqueidentifier = null;

                if @ORGANIZATION_STATEID is not null
                    if len(@ORGANIZATION_STATEID) <> 0
                        and len(@ORGANIZATION_STATEID) = 36
                        set @ORGANIZATIONSTATEID = convert(uniqueidentifier, @ORGANIZATION_STATEID)

                update dbo.ADDRESS
                set ADDRESSTYPECODEID = @ORGANIZATION_ADDRESSTYPECODEID,
                    DONOTMAIL = @ORGANIZATION_DONOTMAIL,
                    DONOTMAILREASONCODEID = @ORGANIZATION_DONOTMAILREASONCODEID,
                    COUNTRYID = @ORGANIZATION_COUNTRYID,
                    STATEID = @ORGANIZATIONSTATEID,
                    ADDRESSBLOCK = @ORGANIZATION_ADDRESSBLOCK,
                    CITY = @ORGANIZATION_CITY,
                    POSTCODE = @ORGANIZATION_POSTCODE,
                    CART = @ORGANIZATION_CART,
                    DPC = @ORGANIZATION_DPC,
                    LOT = @ORGANIZATION_LOT,
                    CHANGEDBYID = @CHANGEAGENTID,
                    DATECHANGED = @CURRENTDATE
                where ADDRESS.CONSTITUENTID = @ID
                    and ISPRIMARY = 1

                declare @ORGANIZATION_ADDRESSID uniqueidentifier;

                if @@ROWCOUNT = 0
                    and (
                        (@ADDRESS_STATEID is not null)
                        or (coalesce(@ORGANIZATION_ADDRESSBLOCK, '') <> '')
                        or (coalesce(@ORGANIZATION_CITY, '') <> '')
                        or (coalesce(@ORGANIZATION_POSTCODE, '') <> '')
                        or (@ORGANIZATION_ADDRESSTYPECODEID is not null)
                        or (@ORGANIZATION_COUNTRYID is not null)
                        or (@ORGANIZATION_DONOTMAIL = 1)
                        or (@ORGANIZATION_DONOTMAILREASONCODEID is not null)
                        )
                begin
                    set @ORGANIZATION_ADDRESSID = newID();

                    insert into dbo.ADDRESS (
                        ID,
                        CONSTITUENTID,
                        ISPRIMARY,
                        ADDRESSTYPECODEID,
                        DONOTMAIL,
                        COUNTRYID,
                        STATEID,
                        ADDRESSBLOCK,
                        CITY,
                        POSTCODE,
                        CART,
                        DPC,
                        LOT,
                        ADDEDBYID,
                        CHANGEDBYID,
                        DATEADDED,
                        DATECHANGED
                        )
                    values (
                        @ORGANIZATION_ADDRESSID,
                        @ID,
                        1,
                        @ORGANIZATION_ADDRESSTYPECODEID,
                        @ORGANIZATION_DONOTMAIL,
                        @ORGANIZATION_COUNTRYID,
                        @ORGANIZATION_STATEID,
                        @ORGANIZATION_ADDRESSBLOCK,
                        @ORGANIZATION_CITY,
                        @ORGANIZATION_POSTCODE,
                        @ORGANIZATION_CART,
                        @ORGANIZATION_DPC,
                        @ORGANIZATION_LOT,
                        @CHANGEAGENTID,
                        @CHANGEAGENTID,
                        @CURRENTDATE,
                        @CURRENTDATE
                        )
                end
                else
                begin
                    select @ORGANIZATION_ADDRESSID = ID
                    from dbo.ADDRESS
                    where ADDRESS.CONSTITUENTID = @ID
                        and ISPRIMARY = 1
                end

                if @ORGANIZATION_ADDRESSID is not null
                begin
                    update ADDRESSVALIDATIONUPDATE
                    set ADDRESSVALIDATIONUPDATE.COUNTYCODEID = @ORGANIZATION_COUNTYCODEID,
                        ADDRESSVALIDATIONUPDATE.CONGRESSIONALDISTRICTCODEID = @ORGANIZATION_CONGRESSIONALDISTRICTCODEID,
                        ADDRESSVALIDATIONUPDATE.LASTVALIDATIONATTEMPTDATE = @ORGANIZATION_LASTVALIDATIONATTEMPTDATE,
                        ADDRESSVALIDATIONUPDATE.VALIDATIONMESSAGE = @ORGANIZATION_VALIDATIONMESSAGE,
                        ADDRESSVALIDATIONUPDATE.CERTIFICATIONDATA = @ORGANIZATION_CERTIFICATIONDATA,
                        ADDRESSVALIDATIONUPDATE.OMITFROMVALIDATION = @ORGANIZATION_OMITFROMVALIDATION,
                        ADDRESSVALIDATIONUPDATE.CHANGEDBYID = @CHANGEAGENTID,
                        ADDRESSVALIDATIONUPDATE.DATECHANGED = @CURRENTDATE
                    from dbo.ADDRESSVALIDATIONUPDATE
                    inner join dbo.ADDRESS
                        on ADDRESS.ID = ADDRESSVALIDATIONUPDATE.ID
                    where ADDRESS.CONSTITUENTID = @ID
                        and ADDRESS.ISPRIMARY = 1

                    if @@ROWCOUNT = 0
                    begin
                        insert into dbo.ADDRESSVALIDATIONUPDATE (
                            ID,
                            OMITFROMVALIDATION,
                            COUNTYCODEID,
                            CONGRESSIONALDISTRICTCODEID,
                            LASTVALIDATIONATTEMPTDATE,
                            VALIDATIONMESSAGE,
                            CERTIFICATIONDATA,
                            ADDEDBYID,
                            CHANGEDBYID,
                            DATEADDED,
                            DATECHANGED
                            )
                        values (
                            @ORGANIZATION_ADDRESSID,
                            @ORGANIZATION_OMITFROMVALIDATION,
                            @ORGANIZATION_COUNTYCODEID,
                            @ORGANIZATION_CONGRESSIONALDISTRICTCODEID,
                            @ORGANIZATION_LASTVALIDATIONATTEMPTDATE,
                            @ORGANIZATION_VALIDATIONMESSAGE,
                            @ORGANIZATION_CERTIFICATIONDATA,
                            @CHANGEAGENTID,
                            @CHANGEAGENTID,
                            @CURRENTDATE,
                            @CURRENTDATE
                            )
                    end
                end

                if @ORGANIZATION_PHONETYPECODEID is not null
                    or (
                        @ORGANIZATION_NUMBER is not null
                        and @ORGANIZATION_NUMBER != ''
                        )
                begin
                    update dbo.PHONE
                    set PHONETYPECODEID = @ORGANIZATION_PHONETYPECODEID,
                        NUMBER = @ORGANIZATION_NUMBER,
                        CHANGEDBYID = @CHANGEAGENTID,
                        DATECHANGED = @CURRENTDATE
                    where PHONE.CONSTITUENTID = @ID
                        and PHONE.ISPRIMARY = 1;

                    if @@ROWCOUNT = 0
                        if @ORGANIZATION_PHONETYPECODEID is not null
                            or @ORGANIZATION_NUMBER != 0
                            insert into dbo.PHONE (
                                CONSTITUENTID,
                                ISPRIMARY,
                                PHONETYPECODEID,
                                NUMBER,
                                ADDEDBYID,
                                CHANGEDBYID,
                                DATEADDED,
                                DATECHANGED
                                )
                            values (
                                @ID,
                                1,
                                @ORGANIZATION_PHONETYPECODEID,
                                @ORGANIZATION_NUMBER,
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CURRENTDATE,
                                @CURRENTDATE
                                )
                end
                else if exists (
                        select ID
                        from dbo.PHONE
                        where CONSTITUENTID = @ID
                            and ISPRIMARY = 1
                        )
                begin
                    --cache current context information

                    set @contextCache = CONTEXT_INFO();
                    --set CONTEXT_INFO to @CHANGEAGENTID

                    set CONTEXT_INFO @CHANGEAGENTID;

                    delete
                    from dbo.PHONE
                    where CONSTITUENTID = @ID
                        and ISPRIMARY = 1;

                    --reset CONTEXT_INFO to previous value

                    if not @contextCache is null
                        set CONTEXT_INFO @contextCache;
                end;

                if @ORGANIZATION_EMAILADDRESSTYPECODEID is not null
                    or (
                        @ORGANIZATION_EMAILADDRESS is not null
                        and @ORGANIZATION_EMAILADDRESS != ''
                        )
                begin
                    update dbo.EMAILADDRESS
                    set [EMAILADDRESSTYPECODEID] = @ORGANIZATION_EMAILADDRESSTYPECODEID,
                        [EMAILADDRESS] = @ORGANIZATION_EMAILADDRESS,
                        CHANGEDBYID = @CHANGEAGENTID,
                        DATECHANGED = @CURRENTDATE
                    where EMAILADDRESS.CONSTITUENTID = @ID
                        and EMAILADDRESS.ISPRIMARY = 1;

                    if @@ROWCOUNT = 0
                        insert into dbo.EMAILADDRESS (
                            CONSTITUENTID,
                            ISPRIMARY,
                            EMAILADDRESSTYPECODEID,
                            EMAILADDRESS,
                            ADDEDBYID,
                            CHANGEDBYID,
                            DATEADDED,
                            DATECHANGED
                            )
                        values (
                            @ID,
                            1,
                            @ORGANIZATION_EMAILADDRESSTYPECODEID,
                            @ORGANIZATION_EMAILADDRESS,
                            @CHANGEAGENTID,
                            @CHANGEAGENTID,
                            @CURRENTDATE,
                            @CURRENTDATE
                            )
                end
                else if exists (
                        select ID
                        from dbo.EMAILADDRESS
                        where CONSTITUENTID = @ID
                            and ISPRIMARY = 1
                        )
                begin
                    --cache current context information

                    set @contextCache = CONTEXT_INFO();
                    --set CONTEXT_INFO to @CHANGEAGENTID

                    set CONTEXT_INFO @CHANGEAGENTID;

                    delete
                    from dbo.EMAILADDRESS
                    where CONSTITUENTID = @ID
                        and ISPRIMARY = 1;

                    --reset CONTEXT_INFO to previous value

                    if not @contextCache is null
                        set CONTEXT_INFO @contextCache;
                end;
            end;
            else
            begin
                if @ISGROUP != 0
                begin
                    update dbo.CONSTITUENT
                    set KEYNAME = @GROUP_NAME,
                        GIVESANONYMOUSLY = @GROUP_GIVESANONYMOUSLY,
                        WEBADDRESS = @GROUP_WEBADDRESS,
                        CHANGEDBYID = @CHANGEAGENTID,
                        DATECHANGED = @CURRENTDATE
                    where CONSTITUENT.ID = @ID;

                    update dbo.GROUPDATA
                    set DESCRIPTION = @GROUP_DESCRIPTION,
                        GROUPTYPEID = @GROUP_GROUPTYPEID,
                        STARTDATE = @GROUP_STARTDATE,
                        CHANGEDBYID = @CHANGEAGENTID,
                        DATECHANGED = @CURRENTDATE
                    where GROUPDATA.ID = @ID;

                    declare @GROUPPRIMARYADDRESSID uniqueidentifier

                    select @GROUPPRIMARYADDRESSID = ID
                    from dbo.ADDRESS
                    where ADDRESS.CONSTITUENTID = @ID
                        and ISPRIMARY = 1

                    -- Update matching household addresses

                    if @GROUP_UPDATEMATCHINGHOUSEHOLDADDRESSES = 1
                        and @GROUPPRIMARYADDRESSID is not null
                    begin
                        exec dbo.USP_ADDRESS_UPDATEMATCHINGADDRESSES @ADDRESSID = @GROUPPRIMARYADDRESSID,
                            @CHANGEAGENTID = @CHANGEAGENTID,
                            @ADDRESSTYPECODEID = @GROUP_ADDRESSTYPECODEID,
                            @DONOTMAIL = @GROUP_DONOTMAIL,
                            @COUNTRYID = @GROUP_COUNTRYID,
                            @STATEID = @GROUP_STATEID,
                            @ADDRESSBLOCK = @GROUP_ADDRESSBLOCK,
                            @CITY = @GROUP_CITY,
                            @POSTCODE = @GROUP_POSTCODE,
                            @CART = @GROUP_CART,
                            @DPC = @GROUP_DPC,
                            @LOT = @GROUP_LOT,
                            @OMITFROMVALIDATION = @GROUP_OMITFROMVALIDATION,
                            @COUNTYCODEID = @GROUP_COUNTYCODEID,
                            @CONGRESSIONALDISTRICTCODEID = @GROUP_CONGRESSIONALDISTRICTCODEID,
                            @LASTVALIDATIONATTEMPTDATE = @GROUP_LASTVALIDATIONATTEMPTDATE,
                            @VALIDATIONMESSAGE = @GROUP_VALIDATIONMESSAGE,
                            @CERTIFICATIONDATA = @GROUP_CERTIFICATIONDATA,
                            @DONOTMAILREASONCODEID = @GROUP_DONOTMAILREASONCODEID,
                            @UPDATEFROMREVENUEBATCH = 1
                    end

                    update dbo.ADDRESS
                    set ADDRESSTYPECODEID = @GROUP_ADDRESSTYPECODEID,
                        COUNTRYID = @GROUP_COUNTRYID,
                        STATEID = @GROUP_STATEID,
                        ADDRESSBLOCK = @GROUP_ADDRESSBLOCK,
                        CITY = @GROUP_CITY,
                        POSTCODE = @GROUP_POSTCODE,
                        CART = @GROUP_CART,
                        DPC = @GROUP_DPC,
                        LOT = @GROUP_LOT,
                        CHANGEDBYID = @CHANGEAGENTID,
                        DATECHANGED = @CURRENTDATE,
                        DONOTMAIL = @GROUP_DONOTMAIL,
                        DONOTMAILREASONCODEID = @GROUP_DONOTMAILREASONCODEID
                    where ID = @GROUPPRIMARYADDRESSID

                    declare @GROUP_ADDRESSID uniqueidentifier;

                    if @@ROWCOUNT = 0
                        and (
                            (@GROUP_STATEID is not null)
                            or (coalesce(@GROUP_ADDRESSBLOCK, '') <> '')
                            or (coalesce(@GROUP_CITY, '') <> '')
                            or (coalesce(@GROUP_POSTCODE, '') <> '')
                            or (@GROUP_ADDRESSTYPECODEID is not null)
                            or (@GROUP_COUNTRYID is not null)
                            or (@GROUP_DONOTMAIL = 1)
                            or (@GROUP_DONOTMAILREASONCODEID is not null)
                            )
                    begin
                        set @GROUP_ADDRESSID = newID();

                        insert into dbo.ADDRESS (
                            ID,
                            CONSTITUENTID,
                            ISPRIMARY,
                            ADDRESSTYPECODEID,
                            COUNTRYID,
                            STATEID,
                            ADDRESSBLOCK,
                            CITY,
                            POSTCODE,
                            CART,
                            DPC,
                            LOT,
                            ADDEDBYID,
                            CHANGEDBYID,
                            DATEADDED,
                            DATECHANGED
                            )
                        values (
                            @GROUP_ADDRESSID,
                            @ID,
                            1,
                            @GROUP_ADDRESSTYPECODEID,
                            @GROUP_COUNTRYID,
                            @GROUP_STATEID,
                            @GROUP_ADDRESSBLOCK,
                            @GROUP_CITY,
                            @GROUP_POSTCODE,
                            @GROUP_CART,
                            @GROUP_DPC,
                            @GROUP_LOT,
                            @CHANGEAGENTID,
                            @CHANGEAGENTID,
                            @CURRENTDATE,
                            @CURRENTDATE
                            )
                    end
                    else
                    begin
                        select @GROUP_ADDRESSID = ID
                        from dbo.ADDRESS
                        where ADDRESS.CONSTITUENTID = @ID
                            and ISPRIMARY = 1
                    end

                    if @GROUP_ADDRESSID is not null
                    begin
                        update ADDRESSVALIDATIONUPDATE
                        set ADDRESSVALIDATIONUPDATE.COUNTYCODEID = @GROUP_COUNTYCODEID,
                            ADDRESSVALIDATIONUPDATE.CONGRESSIONALDISTRICTCODEID = @GROUP_CONGRESSIONALDISTRICTCODEID,
                            ADDRESSVALIDATIONUPDATE.LASTVALIDATIONATTEMPTDATE = @GROUP_LASTVALIDATIONATTEMPTDATE,
                            ADDRESSVALIDATIONUPDATE.VALIDATIONMESSAGE = @GROUP_VALIDATIONMESSAGE,
                            ADDRESSVALIDATIONUPDATE.CERTIFICATIONDATA = @GROUP_CERTIFICATIONDATA,
                            ADDRESSVALIDATIONUPDATE.OMITFROMVALIDATION = @GROUP_OMITFROMVALIDATION,
                            ADDRESSVALIDATIONUPDATE.CHANGEDBYID = @CHANGEAGENTID,
                            ADDRESSVALIDATIONUPDATE.DATECHANGED = @CURRENTDATE
                        from dbo.ADDRESSVALIDATIONUPDATE
                        where ADDRESSVALIDATIONUPDATE.ID = @GROUP_ADDRESSID

                        if @@ROWCOUNT = 0
                        begin
                            insert into dbo.ADDRESSVALIDATIONUPDATE (
                                ID,
                                OMITFROMVALIDATION,
                                COUNTYCODEID,
                                CONGRESSIONALDISTRICTCODEID,
                                LASTVALIDATIONATTEMPTDATE,
                                VALIDATIONMESSAGE,
                                CERTIFICATIONDATA,
                                ADDEDBYID,
                                CHANGEDBYID,
                                DATEADDED,
                                DATECHANGED
                                )
                            values (
                                @GROUP_ADDRESSID,
                                @ADDRESS_OMITFROMVALIDATION,
                                @ADDRESS_COUNTYCODEID,
                                @ADDRESS_CONGRESSIONALDISTRICTCODEID,
                                @ADDRESS_LASTVALIDATIONATTEMPTDATE,
                                @ADDRESS_VALIDATIONMESSAGE,
                                @ADDRESS_CERTIFICATIONDATA,
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CURRENTDATE,
                                @CURRENTDATE
                                )
                        end
                    end

                    if @GROUP_PHONETYPECODEID is not null
                        or coalesce(@GROUP_NUMBER, '') <> ''
                    begin
                        update dbo.PHONE
                        set PHONETYPECODEID = @GROUP_PHONETYPECODEID,
                            NUMBER = @GROUP_NUMBER,
                            DONOTCALL = @GROUP_DONOTCALL,
                            CHANGEDBYID = @CHANGEAGENTID,
                            DATECHANGED = @CURRENTDATE
                        where PHONE.CONSTITUENTID = @ID
                            and PHONE.ISPRIMARY = 1;

                        if @@ROWCOUNT = 0
                            insert into dbo.PHONE (
                                CONSTITUENTID,
                                ISPRIMARY,
                                PHONETYPECODEID,
                                NUMBER,
                                DONOTCALL,
                                ADDEDBYID,
                                CHANGEDBYID,
                                DATEADDED,
                                DATECHANGED
                                )
                            values (
                                @ID,
                                1,
                                @GROUP_PHONETYPECODEID,
                                @GROUP_NUMBER,
                                @GROUP_DONOTCALL,
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CURRENTDATE,
                                @CURRENTDATE
                                )
                    end
                    else
                        delete
                        from dbo.PHONE
                        where PHONE.CONSTITUENTID = @ID
                            and PHONE.ISPRIMARY = 1;

                    if @GROUP_EMAILADDRESSTYPECODEID is not null
                        or coalesce(@GROUP_EMAILADDRESS, '') <> ''
                    begin
                        update dbo.EMAILADDRESS
                        set [EMAILADDRESSTYPECODEID] = @GROUP_EMAILADDRESSTYPECODEID,
                            [EMAILADDRESS] = @GROUP_EMAILADDRESS,
                            DONOTEMAIL = @GROUP_DONOTEMAIL,
                            CHANGEDBYID = @CHANGEAGENTID,
                            DATECHANGED = @CURRENTDATE
                        where EMAILADDRESS.CONSTITUENTID = @ID
                            and EMAILADDRESS.ISPRIMARY = 1;

                        if @@ROWCOUNT = 0
                            insert into dbo.EMAILADDRESS (
                                CONSTITUENTID,
                                ISPRIMARY,
                                EMAILADDRESSTYPECODEID,
                                EMAILADDRESS,
                                DONOTEMAIL,
                                ADDEDBYID,
                                CHANGEDBYID,
                                DATEADDED,
                                DATECHANGED
                                )
                            values (
                                @ID,
                                1,
                                @GROUP_EMAILADDRESSTYPECODEID,
                                @GROUP_EMAILADDRESS,
                                @GROUP_DONOTEMAIL,
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CURRENTDATE,
                                @CURRENTDATE
                                )
                    end
                    else
                        delete
                        from dbo.EMAILADDRESS
                        where EMAILADDRESS.CONSTITUENTID = @ID
                            and EMAILADDRESS.ISPRIMARY = 1;
                end;
                else --Handle existing individual

                begin
                    update dbo.CONSTITUENT
                    set KEYNAME = @LASTNAME,
                        FIRSTNAME = @FIRSTNAME,
                        MIDDLENAME = @MIDDLENAME,
                        MAIDENNAME = @MAIDENNAME,
                        NICKNAME = @NICKNAME,
                        TITLECODEID = @TITLECODEID,
                        SUFFIXCODEID = @SUFFIXCODEID,
                        GENDERCODE = @GENDERCODE,
                        BIRTHDATE = @BIRTHDATE,
                        MARITALSTATUSCODEID = @MARITALSTATUSCODEID,
                        CHANGEDBYID = @CHANGEAGENTID,
                        DATECHANGED = @CURRENTDATE,
                        GENDERCODEID = @GENDERCODEID
                    where CONSTITUENT.ID = @ID

                    declare @PRIMARYADDRESSID uniqueidentifier

                    select @PRIMARYADDRESSID = ID
                    from dbo.ADDRESS
                    where ADDRESS.CONSTITUENTID = @ID
                        and ISPRIMARY = 1

                    -- Update matching household addresses

                    if @ADDRESS_UPDATEMATCHINGHOUSEHOLDADDRESSES = 1
                        and @PRIMARYADDRESSID is not null
                    begin
                        exec dbo.USP_ADDRESS_UPDATEMATCHINGADDRESSES @ADDRESSID = @PRIMARYADDRESSID,
                            @CHANGEAGENTID = @CHANGEAGENTID,
                            @ADDRESSTYPECODEID = @ADDRESS_ADDRESSTYPECODEID,
                            @DONOTMAIL = @ADDRESS_DONOTMAIL,
                            @COUNTRYID = @ADDRESS_COUNTRYID,
                            @STATEID = @ADDRESS_STATEID,
                            @ADDRESSBLOCK = @ADDRESS_ADDRESSBLOCK,
                            @CITY = @ADDRESS_CITY,
                            @POSTCODE = @ADDRESS_POSTCODE,
                            @CART = @ADDRESS_CART,
                            @DPC = @ADDRESS_DPC,
                            @LOT = @ADDRESS_LOT,
                            @OMITFROMVALIDATION = @ADDRESS_OMITFROMVALIDATION,
                            @COUNTYCODEID = @ADDRESS_COUNTYCODEID,
                            @CONGRESSIONALDISTRICTCODEID = @ADDRESS_CONGRESSIONALDISTRICTCODEID,
                            @LASTVALIDATIONATTEMPTDATE = @ADDRESS_LASTVALIDATIONATTEMPTDATE,
                            @VALIDATIONMESSAGE = @ADDRESS_VALIDATIONMESSAGE,
                            @CERTIFICATIONDATA = @ADDRESS_CERTIFICATIONDATA,
                            @DONOTMAILREASONCODEID = @ADDRESS_DONOTMAILREASONCODEID,
                            @UPDATEFROMREVENUEBATCH = 1
                    end

                    update dbo.ADDRESS
                    set ADDRESSTYPECODEID = @ADDRESS_ADDRESSTYPECODEID,
                        DONOTMAIL = @ADDRESS_DONOTMAIL,
                        DONOTMAILREASONCODEID = @ADDRESS_DONOTMAILREASONCODEID,
                        COUNTRYID = @ADDRESS_COUNTRYID,
                        STATEID = @ADDRESS_STATEID,
                        ADDRESSBLOCK = @ADDRESS_ADDRESSBLOCK,
                        CITY = @ADDRESS_CITY,
                        POSTCODE = @ADDRESS_POSTCODE,
                        CART = @ADDRESS_CART,
                        DPC = @ADDRESS_DPC,
                        LOT = @ADDRESS_LOT,
                        CHANGEDBYID = @CHANGEAGENTID,
                        DATECHANGED = @CURRENTDATE
                    where ID = @PRIMARYADDRESSID

                    declare @CONSTITUENT_ADDRESSID uniqueidentifier;

                    /* AAW 1/28/10: Changed because 'Country' is no longer a required field.  Also changed for Organizations/Groups */
                    if @@ROWCOUNT = 0
                        and (
                            (@ADDRESS_STATEID is not null)
                            or (coalesce(@ADDRESS_ADDRESSBLOCK, '') <> '')
                            or (coalesce(@ADDRESS_CITY, '') <> '')
                            or (coalesce(@ADDRESS_POSTCODE, '') <> '')
                            or (@ADDRESS_ADDRESSTYPECODEID is not null)
                            or (@ADDRESS_COUNTRYID is not null)
                            or (@ADDRESS_DONOTMAIL = 1)
                            or (@ADDRESS_DONOTMAILREASONCODEID is not null)
                            )
                    begin
                        set @CONSTITUENT_ADDRESSID = newID();

                        insert into dbo.ADDRESS (
                            ID,
                            CONSTITUENTID,
                            ISPRIMARY,
                            ADDRESSTYPECODEID,
                            DONOTMAIL,
                            COUNTRYID,
                            STATEID,
                            ADDRESSBLOCK,
                            CITY,
                            POSTCODE,
                            CART,
                            DPC,
                            LOT,
                            ADDEDBYID,
                            CHANGEDBYID,
                            DATEADDED,
                            DATECHANGED,
                            DONOTMAILREASONCODEID
                            )
                        values (
                            @CONSTITUENT_ADDRESSID,
                            @ID,
                            1,
                            @ADDRESS_ADDRESSTYPECODEID,
                            @ADDRESS_DONOTMAIL,
                            @ADDRESS_COUNTRYID,
                            @ADDRESS_STATEID,
                            @ADDRESS_ADDRESSBLOCK,
                            @ADDRESS_CITY,
                            @ADDRESS_POSTCODE,
                            @ADDRESS_CART,
                            @ADDRESS_DPC,
                            @ADDRESS_LOT,
                            @CHANGEAGENTID,
                            @CHANGEAGENTID,
                            @CURRENTDATE,
                            @CURRENTDATE,
                            @ADDRESS_DONOTMAILREASONCODEID
                            )
                    end
                    else
                    begin
                        select @CONSTITUENT_ADDRESSID = ID
                        from dbo.ADDRESS
                        where ADDRESS.CONSTITUENTID = @ID
                            and ISPRIMARY = 1
                    end

                    if @CONSTITUENT_ADDRESSID is not null
                    begin
                        update ADDRESSVALIDATIONUPDATE
                        set ADDRESSVALIDATIONUPDATE.COUNTYCODEID = @ADDRESS_COUNTYCODEID,
                            ADDRESSVALIDATIONUPDATE.CONGRESSIONALDISTRICTCODEID = @ADDRESS_CONGRESSIONALDISTRICTCODEID,
                            ADDRESSVALIDATIONUPDATE.LASTVALIDATIONATTEMPTDATE = @ADDRESS_LASTVALIDATIONATTEMPTDATE,
                            ADDRESSVALIDATIONUPDATE.VALIDATIONMESSAGE = @ADDRESS_VALIDATIONMESSAGE,
                            ADDRESSVALIDATIONUPDATE.CERTIFICATIONDATA = @ADDRESS_CERTIFICATIONDATA,
                            ADDRESSVALIDATIONUPDATE.OMITFROMVALIDATION = @ADDRESS_OMITFROMVALIDATION,
                            ADDRESSVALIDATIONUPDATE.CHANGEDBYID = @CHANGEAGENTID,
                            ADDRESSVALIDATIONUPDATE.DATECHANGED = @CURRENTDATE
                        from dbo.ADDRESSVALIDATIONUPDATE
                        inner join dbo.ADDRESS
                            on ADDRESS.ID = ADDRESSVALIDATIONUPDATE.ID
                        where ADDRESS.CONSTITUENTID = @ID
                            and ADDRESS.ISPRIMARY = 1

                        if @@ROWCOUNT = 0
                        begin
                            insert into dbo.ADDRESSVALIDATIONUPDATE (
                                ID,
                                OMITFROMVALIDATION,
                                COUNTYCODEID,
                                CONGRESSIONALDISTRICTCODEID,
                                LASTVALIDATIONATTEMPTDATE,
                                VALIDATIONMESSAGE,
                                CERTIFICATIONDATA,
                                ADDEDBYID,
                                CHANGEDBYID,
                                DATEADDED,
                                DATECHANGED
                                )
                            values (
                                @CONSTITUENT_ADDRESSID,
                                @ADDRESS_OMITFROMVALIDATION,
                                @ADDRESS_COUNTYCODEID,
                                @ADDRESS_CONGRESSIONALDISTRICTCODEID,
                                @ADDRESS_LASTVALIDATIONATTEMPTDATE,
                                @ADDRESS_VALIDATIONMESSAGE,
                                @ADDRESS_CERTIFICATIONDATA,
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CURRENTDATE,
                                @CURRENTDATE
                                )
                        end
                    end

                    if @PHONE_PHONETYPECODEID is not null
                        or (
                            @PHONE_NUMBER is not null
                            and @PHONE_NUMBER <> ''
                            )
                    begin
                        update dbo.PHONE
                        set PHONETYPECODEID = @PHONE_PHONETYPECODEID,
                            NUMBER = @PHONE_NUMBER,
                            CHANGEDBYID = @CHANGEAGENTID,
                            DATECHANGED = @CURRENTDATE
                        where PHONE.CONSTITUENTID = @ID
                            and PHONE.ISPRIMARY = 1;

                        if @@ROWCOUNT = 0
                            insert into dbo.PHONE (
                                CONSTITUENTID,
                                ISPRIMARY,
                                PHONETYPECODEID,
                                NUMBER,
                                ADDEDBYID,
                                CHANGEDBYID,
                                DATEADDED,
                                DATECHANGED
                                )
                            values (
                                @ID,
                                1,
                                @PHONE_PHONETYPECODEID,
                                @PHONE_NUMBER,
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CURRENTDATE,
                                @CURRENTDATE
                                )
                    end
                    else if exists (
                            select ID
                            from dbo.PHONE
                            where CONSTITUENTID = @ID
                                and ISPRIMARY = 1
                            )
                    begin
                        --cache current context information

                        set @contextCache = CONTEXT_INFO();
                        --set CONTEXT_INFO to @CHANGEAGENTID

                        set CONTEXT_INFO @CHANGEAGENTID;

                        delete
                        from dbo.PHONE
                        where CONSTITUENTID = @ID
                            and ISPRIMARY = 1;

                        --reset CONTEXT_INFO to previous value

                        if not @contextCache is null
                            set CONTEXT_INFO @contextCache;
                    end;

                    if @EMAILADDRESS_EMAILADDRESSTYPECODEID is not null
                        or (
                            @EMAILADDRESS_EMAILADDRESS is not null
                            and @EMAILADDRESS_EMAILADDRESS != ''
                            )
                    begin
                        update dbo.EMAILADDRESS
                        set [EMAILADDRESSTYPECODEID] = @EMAILADDRESS_EMAILADDRESSTYPECODEID,
                            [EMAILADDRESS] = @EMAILADDRESS_EMAILADDRESS,
                            CHANGEDBYID = @CHANGEAGENTID,
                            DATECHANGED = @CURRENTDATE
                        where EMAILADDRESS.CONSTITUENTID = @ID
                            and EMAILADDRESS.ISPRIMARY = 1;

                        if @@ROWCOUNT = 0
                            insert into dbo.EMAILADDRESS (
                                CONSTITUENTID,
                                ISPRIMARY,
                                EMAILADDRESSTYPECODEID,
                                EMAILADDRESS,
                                ADDEDBYID,
                                CHANGEDBYID,
                                DATEADDED,
                                DATECHANGED
                                )
                            values (
                                @ID,
                                1,
                                @EMAILADDRESS_EMAILADDRESSTYPECODEID,
                                @EMAILADDRESS_EMAILADDRESS,
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CURRENTDATE,
                                @CURRENTDATE
                                )
                    end
                    else if exists (
                            select ID
                            from dbo.EMAILADDRESS
                            where CONSTITUENTID = @ID
                                and ISPRIMARY = 1
                            )
                    begin
                        --cache current context information

                        set @contextCache = CONTEXT_INFO();
                        --set CONTEXT_INFO to @CHANGEAGENTID

                        set CONTEXT_INFO @CHANGEAGENTID;

                        delete
                        from dbo.EMAILADDRESS
                        where CONSTITUENTID = @ID
                            and ISPRIMARY = 1;

                        --reset CONTEXT_INFO to previous value

                        if not @contextCache is null
                            set CONTEXT_INFO @contextCache;
                    end;
                end;
            end;
        end;
        else
        begin
            select @ISORGANIZATION = ISORGANIZATION,
                @ISGROUP = ISGROUP,
                @ISHOUSEHOLD = case 
                    when GROUPTYPECODE = 0
                        then 1
                    else 0
                    end
            from dbo.BATCHREVENUECONSTITUENT
            where ID = @ID

            if @ISORGANIZATION != 0
            begin
                exec dbo.USP_PARSE_ORGANIZATION_NAME @ORGANIZATIONNAME,
                    @KEYNAME output,
                    @KEYNAMEPREFIX output;

                update dbo.BATCHREVENUECONSTITUENT
                set [KEYNAME] = @KEYNAME,
                    [KEYNAMEPREFIX] = @KEYNAMEPREFIX,
                    [ADDRESSTYPECODEID] = @ORGANIZATION_ADDRESSTYPECODEID,
                    [DONOTMAIL] = @ORGANIZATION_DONOTMAIL,
                    [DONOTMAILREASONCODEID] = @ORGANIZATION_DONOTMAILREASONCODEID,
                    [COUNTRYID] = @ORGANIZATION_COUNTRYID,
                    [STATEID] = @ORGANIZATION_STATEID,
                    [ADDRESSBLOCK] = @ORGANIZATION_ADDRESSBLOCK,
                    [CITY] = @ORGANIZATION_CITY,
                    [POSTCODE] = @ORGANIZATION_POSTCODE,
                    [OMITFROMVALIDATION] = @ORGANIZATION_OMITFROMVALIDATION,
                    [CART] = @ORGANIZATION_CART,
                    [DPC] = @ORGANIZATION_DPC,
                    [LOT] = @ORGANIZATION_LOT,
                    [COUNTYCODEID] = @ORGANIZATION_COUNTYCODEID,
                    [CONGRESSIONALDISTRICTCODEID] = @ORGANIZATION_CONGRESSIONALDISTRICTCODEID,
                    [LASTVALIDATIONATTEMPTDATE] = @ORGANIZATION_LASTVALIDATIONATTEMPTDATE,
                    [VALIDATIONMESSAGE] = @ORGANIZATION_VALIDATIONMESSAGE,
                    [CERTIFICATIONDATA] = @ORGANIZATION_CERTIFICATIONDATA,
                    [PHONETYPECODEID] = @ORGANIZATION_PHONETYPECODEID,
                    [NUMBER] = @ORGANIZATION_NUMBER,
                    [EMAILADDRESSTYPECODEID] = @ORGANIZATION_EMAILADDRESSTYPECODEID,
                    [EMAILADDRESS] = @ORGANIZATION_EMAILADDRESS,
                    [INDUSTRYCODEID] = @INDUSTRYCODEID,
                    [NUMEMPLOYEES] = @NUMEMPLOYEES,
                    [NUMSUBSIDIARIES] = @NUMSUBSIDIARIES,
                    [PARENTCORPID] = @PARENTCORPID,
                    [CHANGEDBYID] = @CHANGEAGENTID,
                    [DATECHANGED] = @CURRENTDATE,
                    [WEBADDRESS] = @WEBADDRESS
                where ID = @ID;
            end;
            else if @ISGROUP != 0
            begin
                if @ISHOUSEHOLD = 1
                begin
                    -- Validate that the primary and secondary members aren't the same

                    if @HOUSEHOLD_PRIMARYCONTACTID = @HOUSEHOLD_SECONDMEMBERID
                        raiserror (
                                'ERRPRIMARYANDSECONDMEMBERSAME',
                                13,
                                1
                                )
                end

                update dbo.BATCHREVENUECONSTITUENT
                set KEYNAME = @GROUP_NAME,
                    GROUPDESCRIPTION = @GROUP_DESCRIPTION,
                    GROUPTYPEID = @GROUP_GROUPTYPEID,
                    GIVESANONYMOUSLY = @GROUP_GIVESANONYMOUSLY,
                    ADDRESSTYPECODEID = @GROUP_ADDRESSTYPECODEID,
                    COUNTRYID = @GROUP_COUNTRYID,
                    ADDRESSBLOCK = @GROUP_ADDRESSBLOCK,
                    CITY = @GROUP_CITY,
                    STATEID = @GROUP_STATEID,
                    POSTCODE = @GROUP_POSTCODE,
                    [OMITFROMVALIDATION] = @GROUP_OMITFROMVALIDATION,
                    [CART] = @GROUP_CART,
                    [DPC] = @GROUP_DPC,
                    [LOT] = @GROUP_LOT,
                    [COUNTYCODEID] = @GROUP_COUNTYCODEID,
                    [CONGRESSIONALDISTRICTCODEID] = @GROUP_CONGRESSIONALDISTRICTCODEID,
                    [LASTVALIDATIONATTEMPTDATE] = @GROUP_LASTVALIDATIONATTEMPTDATE,
                    [VALIDATIONMESSAGE] = @GROUP_VALIDATIONMESSAGE,
                    [CERTIFICATIONDATA] = @GROUP_CERTIFICATIONDATA,
                    PHONETYPECODEID = @GROUP_PHONETYPECODEID,
                    NUMBER = @GROUP_NUMBER,
                    EMAILADDRESSTYPECODEID = @GROUP_EMAILADDRESSTYPECODEID,
                    EMAILADDRESS = @GROUP_EMAILADDRESS,
                    GROUPSTARTDATE = @GROUP_STARTDATE,
                    WEBADDRESS = @GROUP_WEBADDRESS,
                    CHANGEDBYID = @CHANGEAGENTID,
                    DATECHANGED = @CURRENTDATE,
                    DONOTMAIL = @GROUP_DONOTMAIL,
                    DONOTMAILREASONCODEID = @GROUP_DONOTMAILREASONCODEID,
                    DONOTCALL = @GROUP_DONOTCALL,
                    DONOTEMAIL = @GROUP_DONOTEMAIL
                where ID = @ID;

                -- Handle group members

                if @ISHOUSEHOLD = 0
                begin
                    declare @MEMBERSTABLE table (
                        ISPRIMARY bit,
                        BATCHREVENUECONSTITUENTID uniqueidentifier,
                        MEMBERID uniqueidentifier
                        )

                    -- Deserialize the XML by hand since the root element

                    -- is different than the function's.

                    insert into @MEMBERSTABLE (
                        ISPRIMARY,
                        BATCHREVENUECONSTITUENTID,
                        MEMBERID
                        )
                    select T.c.value('(ISPRIMARY)[1]', 'bit'),
                        newid(),
                        T.c.value('(MEMBERID)[1]', 'uniqueidentifier')
                    from @GROUP_MEMBERS.nodes('/GROUP_MEMBERS/ITEM') T(c)

                    -- Create BATCHREVENUECONSTITUENT entries for the constituents that already exist 

                    -- in the CONSTITUENT table and don't have records in BATCHREVENUECONSTITUENT that are

                    -- already members of the group.

                    insert into dbo.BATCHREVENUECONSTITUENT (
                        ID,
                        EXISTINGCONSTITUENTID,
                        ISORGANIZATION,
                        ISGROUP,
                        GROUPTYPECODE,
                        ADDEDBYID,
                        CHANGEDBYID,
                        DATEADDED,
                        DATECHANGED
                        )
                    select M.BATCHREVENUECONSTITUENTID,
                        M.MEMBERID,
                        C.ISORGANIZATION,
                        C.ISGROUP,
                        coalesce(GD.GROUPTYPECODE, 0),
                        @CHANGEAGENTID,
                        @CHANGEAGENTID,
                        @CURRENTDATE,
                        @CURRENTDATE
                    from @MEMBERSTABLE M
                    inner join dbo.CONSTITUENT C
                        on M.MEMBERID = C.ID
                    left join dbo.GROUPDATA GD
                        on C.ID = GD.ID
                    -- The exist section of the join is to make sure the BATCHREVENUECONSTITUENT record

                    -- joined to already belonged to the group.

                    left join dbo.BATCHREVENUECONSTITUENT BRC
                        on C.ID = BRC.EXISTINGCONSTITUENTID
                            and exists (
                                select 1
                                from dbo.BATCHREVENUECONSTITUENTGROUPMEMBER
                                where MEMBERID = BRC.ID
                                    and GROUPID = @ID
                                )
                    where BRC.ID is null

                    -- For members that already exist in BATCHREVENUECONSTITUENT, 

                    -- update @MEMBERSTABLE's BATCHREVENUECONSTITUENTID.  @MEMBERSTABLE MEMBERID could contain either

                    -- a CONSTITUENT record ID or a BATCHREVENUECONSTITUENT record ID.  Because of that, the below query

                    -- left joins to CONSTITUENT and BATCHREVENUECONSTITUENT.  CONSTITUENT.ID and BATCHREVENUECONSTITUENT.ID

                    -- should only be null if @MEMBERSTABLE.MEMBERID contains a BATCHREVENUECONSTITUENT.ID.

                    update @MEMBERSTABLE
                    set BATCHREVENUECONSTITUENTID = case 
                            when BRC.ID is not null
                                then BRC.ID
                            else MEMBERID
                            end
                    from @MEMBERSTABLE M
                    left join dbo.CONSTITUENT C
                        on M.MEMBERID = C.ID
                    -- Check for existences in BATCHREVENUECONSTITUENTGROUPMEMBER since the BATCHREVENUECONSTITUENT record should

                    -- only be used if they were already a member.  If they weren't already a member, this constituent was created

                    -- for a different reason and could be changed when a different batch row is edited.

                    left join dbo.BATCHREVENUECONSTITUENT BRC
                        on BRC.EXISTINGCONSTITUENTID = M.MEMBERID
                            and exists (
                                select 1
                                from dbo.BATCHREVENUECONSTITUENTGROUPMEMBER
                                where MEMBERID = BRC.ID
                                    and GROUPID = @ID
                                )
                    where C.ID is null
                        or BRC.ID is not null

                    -- Clear the ISPRIMARY flag for this group's members

                    update dbo.BATCHREVENUECONSTITUENTGROUPMEMBER
                    set ISPRIMARY = 0
                    where GROUPID = @ID;

                    -- Handle updating BATCHREVENUECONSTITUENTGROUPMEMBER

                    -- Remove old members

                    declare @CONSTITUENTSTOREMOVE table (BATCHREVENUECONSTITUENTID uniqueidentifier)

                    insert into @CONSTITUENTSTOREMOVE (BATCHREVENUECONSTITUENTID)
                    select MEMBERID
                    from dbo.BATCHREVENUECONSTITUENTGROUPMEMBER
                    where MEMBERID not in (
                            select BATCHREVENUECONSTITUENTID
                            from @MEMBERSTABLE
                            )
                        and GROUPID = @ID

                    delete
                    from dbo.BATCHREVENUECONSTITUENTGROUPMEMBER
                    where MEMBERID in (
                            select BATCHREVENUECONSTITUENTID
                            from @CONSTITUENTSTOREMOVE
                            )
                        and GROUPID = @ID

                    delete
                    from dbo.BATCHREVENUECONSTITUENT
                    where ID in (
                            select BATCHREVENUECONSTITUENTID
                            from @CONSTITUENTSTOREMOVE
                            )

                    -- Update the ISPRIMARY flag for existing members

                    update dbo.BATCHREVENUECONSTITUENTGROUPMEMBER
                    set ISPRIMARY = M.ISPRIMARY
                    from BATCHREVENUECONSTITUENTGROUPMEMBER GM
                    inner join @MEMBERSTABLE M
                        on GM.MEMBERID = M.BATCHREVENUECONSTITUENTID
                            and GM.GROUPID = @ID
                    where GM.ISPRIMARY <> M.ISPRIMARY

                    -- Add new members

                    insert into dbo.BATCHREVENUECONSTITUENTGROUPMEMBER (
                        ID,
                        GROUPID,
                        MEMBERID,
                        ISPRIMARY,
                        ADDEDBYID,
                        CHANGEDBYID,
                        DATEADDED,
                        DATECHANGED
                        )
                    select newid(),
                        @ID,
                        BATCHREVENUECONSTITUENTID,
                        ISPRIMARY,
                        @CHANGEAGENTID,
                        @CHANGEAGENTID,
                        @CURRENTDATE,
                        @CURRENTDATE
                    from @MEMBERSTABLE as M
                    where not exists (
                            select MEMBERID
                            from dbo.BATCHREVENUECONSTITUENTGROUPMEMBER GM
                            where GM.MEMBERID = M.BATCHREVENUECONSTITUENTID
                                and GM.GROUPID = @ID
                            )
                end
                else
                begin
                    -- Handle household members

                    -- Update primary member if needed

                    declare @PRIMARYMEMBERBATCHREVENUECONSTITUENTID uniqueidentifier

                    exec dbo.USP_BATCHREVENUE_UPDATEHOUSEHOLDMEMBER @PRIMARYMEMBERBATCHREVENUECONSTITUENTID output,
                        @ID,
                        1,
                        @HOUSEHOLD_PRIMARYCONTACTID,
                        @HOUSEHOLD_PRIMARYCONTACT_KEYNAME,
                        @HOUSEHOLD_PRIMARYCONTACT_FIRSTNAME,
                        @HOUSEHOLD_PRIMARYCONTACT_MIDDLENAME,
                        @HOUSEHOLD_PRIMARYCONTACT_TITLECODEID,
                        @HOUSEHOLD_PRIMARYCONTACT_SUFFIXCODEID,
                        @HOUSEHOLD_PRIMARYCONTACT_COPYHOUSEHOLDCONTACT,
                        @CHANGEAGENTID

                    -- Update secondary member if needed

                    declare @SECONDMEMBERBATCHREVENUECONSTITUENTID uniqueidentifier

                    exec dbo.USP_BATCHREVENUE_UPDATEHOUSEHOLDMEMBER @SECONDMEMBERBATCHREVENUECONSTITUENTID output,
                        @ID,
                        0,
                        @HOUSEHOLD_SECONDMEMBERID,
                        @HOUSEHOLD_SECONDMEMBER_KEYNAME,
                        @HOUSEHOLD_SECONDMEMBER_FIRSTNAME,
                        @HOUSEHOLD_SECONDMEMBER_MIDDLENAME,
                        @HOUSEHOLD_SECONDMEMBER_TITLECODEID,
                        @HOUSEHOLD_SECONDMEMBER_SUFFIXCODEID,
                        @HOUSEHOLD_SECONDMEMBER_COPYHOUSEHOLDCONTACT,
                        @CHANGEAGENTID

                    -- Update the members' relationship

                    -- Verify any old relationship doesn't exist

                    delete
                    from dbo.BATCHREVENUECONSTITUENTRELATION
                    where CONSTITUENTID in (
                            select MEMBERID
                            from BATCHREVENUECONSTITUENTGROUPMEMBER
                            where GROUPID = @ID
                            )

                    if @HOUSEHOLD_SECONDMEMBER_RELATIONSHIP_RECIPROCALTYPECODEID is not null
                        or @HOUSEHOLD_SECONDMEMBER_RELATIONSHIP_RELATIONSHIPTYPECODEID is not null
                    begin
                        -- Verify that if the members already exist, they aren't already related

                        if @HOUSEHOLD_PRIMARYCONTACTID is null
                            or @HOUSEHOLD_SECONDMEMBERID is null
                            or not exists (
                                select 1
                                from dbo.RELATIONSHIP
                                where RELATIONSHIPCONSTITUENTID = @HOUSEHOLD_PRIMARYCONTACTID
                                    and RECIPROCALCONSTITUENTID = @HOUSEHOLD_SECONDMEMBERID
                                )
                        begin
                            declare @HOUSEHOLD_SECONDMEMBER_PRIMARYRECOGNITIONTYPECODEID uniqueidentifier
                            declare @HOUSEHOLD_SECONDMEMBER_RECIPROCALRECOGNITIONTYPECODEID uniqueidentifier
                            declare @HOUSEHOLD_SECONDMEMBER_PRIMARYRELATIONSHIPEXISTS bit
                            declare @HOUSEHOLD_SECONDMEMBER_RECIPROCALRELATIONSHIPEXISTS bit
                            declare @HOUSEHOLD_SECONDMEMBER_PRIMARYMATCHFACTOR decimal(5, 2)
                            declare @HOUSEHOLD_SECONDMEMBER_RECIPROCALMATCHFACTOR decimal(5, 2)

                            select @HOUSEHOLD_SECONDMEMBER_PRIMARYRELATIONSHIPEXISTS = 1,
                                @HOUSEHOLD_SECONDMEMBER_PRIMARYRECOGNITIONTYPECODEID = RRD.REVENUERECOGNITIONTYPECODEID,
                                @HOUSEHOLD_SECONDMEMBER_PRIMARYMATCHFACTOR = RRD.MATCHFACTOR
                            from dbo.RECOGNITIONRELATIONSHIPDEFAULT as RRD
                            where RRD.CONSTITUENTTYPECODE = 0
                                and RRD.RELATIONSHIPTYPECODEID = @HOUSEHOLD_SECONDMEMBER_RELATIONSHIP_RELATIONSHIPTYPECODEID

                            select @HOUSEHOLD_SECONDMEMBER_RECIPROCALRELATIONSHIPEXISTS = 1,
                                @HOUSEHOLD_SECONDMEMBER_RECIPROCALRECOGNITIONTYPECODEID = RRD.REVENUERECOGNITIONTYPECODEID,
                                @HOUSEHOLD_SECONDMEMBER_RECIPROCALMATCHFACTOR = RRD.MATCHFACTOR
                            from dbo.RECOGNITIONRELATIONSHIPDEFAULT as RRD
                            where RRD.CONSTITUENTTYPECODE = 0
                                and RRD.RELATIONSHIPTYPECODEID = @HOUSEHOLD_SECONDMEMBER_RELATIONSHIP_RECIPROCALTYPECODEID

                            insert into dbo.BATCHREVENUECONSTITUENTRELATION (
                                CONSTITUENTID,
                                RELATIONID,
                                RELATIONSHIPTYPECODEID,
                                RECIPROCALTYPECODEID,
                                STARTDATE,
                                PRIMARYRELATIONSHIPEXISTS,
                                PRIMARYMATCHFACTOR,
                                PRIMARYRECOGNITIONTYPECODEID,
                                RECIPROCALRELATIONSHIPEXISTS,
                                RECIPROCALMATCHFACTOR,
                                RECIPROCALRECOGNITIONTYPECODEID,
                                ISSPOUSE,
                                ADDEDBYID,
                                CHANGEDBYID,
                                DATEADDED,
                                DATECHANGED
                                )
                            values (
                                @PRIMARYMEMBERBATCHREVENUECONSTITUENTID,
                                @SECONDMEMBERBATCHREVENUECONSTITUENTID,
                                @HOUSEHOLD_SECONDMEMBER_RELATIONSHIP_RELATIONSHIPTYPECODEID,
                                @HOUSEHOLD_SECONDMEMBER_RELATIONSHIP_RECIPROCALTYPECODEID,
                                @HOUSEHOLD_SECONDMEMBER_RELATIONSHIP_STARTDATE,
                                ISNULL(@HOUSEHOLD_SECONDMEMBER_PRIMARYRELATIONSHIPEXISTS, 0),
                                ISNULL(@HOUSEHOLD_SECONDMEMBER_PRIMARYMATCHFACTOR, 0),
                                @HOUSEHOLD_SECONDMEMBER_PRIMARYRECOGNITIONTYPECODEID,
                                ISNULL(@HOUSEHOLD_SECONDMEMBER_RECIPROCALRELATIONSHIPEXISTS, 0),
                                ISNULL(@HOUSEHOLD_SECONDMEMBER_RECIPROCALMATCHFACTOR, 0),
                                @HOUSEHOLD_SECONDMEMBER_RECIPROCALRECOGNITIONTYPECODEID,
                                @HOUSEHOLD_SECONDMEMBER_RELATIONSHIP_ISSPOUSE,
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CURRENTDATE,
                                @CURRENTDATE
                                )
                        end
                    end
                end
            end
            else
            begin
                set @KEYNAME = @LASTNAME;
                set @KEYNAMEPREFIX = '';

                update dbo.BATCHREVENUECONSTITUENT
                set [KEYNAME] = @KEYNAME,
                    [KEYNAMEPREFIX] = @KEYNAMEPREFIX,
                    [FIRSTNAME] = @FIRSTNAME,
                    [MIDDLENAME] = @MIDDLENAME,
                    [MAIDENNAME] = @MAIDENNAME,
                    [NICKNAME] = @NICKNAME,
                    [TITLECODEID] = @TITLECODEID,
                    [SUFFIXCODEID] = @SUFFIXCODEID,
                    [GENDERCODE] = @GENDERCODE,
                    [BIRTHDATE] = @BIRTHDATE,
                    [MARITALSTATUSCODEID] = @MARITALSTATUSCODEID,
                    [ADDRESSTYPECODEID] = @ADDRESS_ADDRESSTYPECODEID,
                    [DONOTMAIL] = @ADDRESS_DONOTMAIL,
                    [DONOTMAILREASONCODEID] = @ADDRESS_DONOTMAILREASONCODEID,
                    [COUNTRYID] = @ADDRESS_COUNTRYID,
                    [STATEID] = @ADDRESS_STATEID,
                    [ADDRESSBLOCK] = @ADDRESS_ADDRESSBLOCK,
                    [CITY] = @ADDRESS_CITY,
                    [POSTCODE] = @ADDRESS_POSTCODE,
                    [OMITFROMVALIDATION] = @ADDRESS_OMITFROMVALIDATION,
                    [CART] = @ADDRESS_CART,
                    [DPC] = @ADDRESS_DPC,
                    [LOT] = @ADDRESS_LOT,
                    [COUNTYCODEID] = @ADDRESS_COUNTYCODEID,
                    [CONGRESSIONALDISTRICTCODEID] = @ADDRESS_CONGRESSIONALDISTRICTCODEID,
                    [LASTVALIDATIONATTEMPTDATE] = @ADDRESS_LASTVALIDATIONATTEMPTDATE,
                    [VALIDATIONMESSAGE] = @ADDRESS_VALIDATIONMESSAGE,
                    [CERTIFICATIONDATA] = @ADDRESS_CERTIFICATIONDATA,
                    [PHONETYPECODEID] = @PHONE_PHONETYPECODEID,
                    [NUMBER] = @PHONE_NUMBER,
                    [EMAILADDRESSTYPECODEID] = @EMAILADDRESS_EMAILADDRESSTYPECODEID,
                    [EMAILADDRESS] = @EMAILADDRESS_EMAILADDRESS,
                    [CHANGEDBYID] = @CHANGEAGENTID,
                    [DATECHANGED] = @CURRENTDATE,
                    [GENDERCODEID] = @GENDERCODEID
                where ID = @ID;

                -------------- Update Spouse's Information --------------

                declare @ISSPOUSE bit

                if (@SPOUSEID is not null)
                    or (coalesce(@SPOUSE_LASTNAME, '') <> '')
                    set @ISSPOUSE = 1
                else
                    set @ISSPOUSE = 0

                declare @BATCHHOUSEHOLDID uniqueidentifier

                select @BATCHHOUSEHOLDID = BRC.ID
                from dbo.BATCHREVENUECONSTITUENTGROUPMEMBER BRCGM
                inner join dbo.BATCHREVENUECONSTITUENT BRC
                    on BRCGM.GROUPID = BRC.ID
                where BRC.GROUPTYPECODE = 0
                    and BRCGM.MEMBERID = @ID

                --If their is a spouse create the relationship

                if @ISSPOUSE = 1
                begin
                    if @SPOUSE_GENDERCODE is null
                        set @SPOUSE_GENDERCODE = 0;

                    declare @PRIMARYRECOGNITIONTYPECODEID uniqueidentifier
                    declare @RECIPROCALRECOGNITIONTYPECODEID uniqueidentifier
                    declare @PRIMARYRELATIONSHIPEXISTS bit
                    declare @RECIPROCALRELATIONSHIPEXISTS bit
                    declare @PRIMARYMATCHFACTOR decimal(5, 2)
                    declare @RECIPROCALMATCHFACTOR decimal(5, 2)

                    select @PRIMARYRELATIONSHIPEXISTS = 1,
                        @PRIMARYRECOGNITIONTYPECODEID = RRD.REVENUERECOGNITIONTYPECODEID,
                        @PRIMARYMATCHFACTOR = RRD.MATCHFACTOR
                    from dbo.RECOGNITIONRELATIONSHIPDEFAULT as RRD
                    where RRD.CONSTITUENTTYPECODE = 0
                        and RRD.RELATIONSHIPTYPECODEID = @SPOUSE_RELATIONSHIPTYPECODEID

                    select @RECIPROCALRELATIONSHIPEXISTS = 1,
                        @RECIPROCALRECOGNITIONTYPECODEID = RRD.REVENUERECOGNITIONTYPECODEID,
                        @RECIPROCALMATCHFACTOR = RRD.MATCHFACTOR
                    from dbo.RECOGNITIONRELATIONSHIPDEFAULT as RRD
                    where RRD.CONSTITUENTTYPECODE = 0
                        and RRD.RELATIONSHIPTYPECODEID = @SPOUSE_RECIPROCALTYPECODEID

                    if @BATCHSPOUSEID is null
                    begin
                        set @BATCHSPOUSEID = newID();

                        insert into dbo.BATCHREVENUECONSTITUENT (
                            [ID],
                            [ISORGANIZATION],
                            [ISGROUP],
                            [EXISTINGCONSTITUENTID],
                            [KEYNAME],
                            [FIRSTNAME],
                            [MIDDLENAME],
                            [MAIDENNAME],
                            [NICKNAME],
                            [TITLECODEID],
                            [SUFFIXCODEID],
                            [GENDERCODE],
                            [BIRTHDATE],
                            [MARITALSTATUSCODEID],
                            [CURRENTAPPUSERID],
                            [ADDEDBYID],
                            [CHANGEDBYID],
                            [DATEADDED],
                            [DATECHANGED],
                            [GENDERCODEID]
                            )
                        values (
                            @BATCHSPOUSEID,
                            0,
                            0,
                            @SPOUSEID,
                            @SPOUSE_LASTNAME,
                            @SPOUSE_FIRSTNAME,
                            @SPOUSE_MIDDLENAME,
                            @SPOUSE_MAIDENNAME,
                            @SPOUSE_NICKNAME,
                            @SPOUSE_TITLECODEID,
                            @SPOUSE_SUFFIXCODEID,
                            @SPOUSE_GENDERCODE,
                            @SPOUSE_BIRTHDATE,
                            @MARITALSTATUSCODEID,
                            @CURRENTAPPUSERID,
                            @CHANGEAGENTID,
                            @CHANGEAGENTID,
                            @CURRENTDATE,
                            @CURRENTDATE,
                            @SPOUSE_GENDERCODEID
                            );

                        insert into dbo.BATCHREVENUECONSTITUENTRELATION (
                            [CONSTITUENTID],
                            [RELATIONID],
                            [COPYPRIMARYINFORMATION],
                            [RELATIONSHIPTYPECODEID],
                            [RECIPROCALTYPECODEID],
                            [STARTDATE],
                            [PRIMARYRELATIONSHIPEXISTS],
                            [PRIMARYMATCHFACTOR],
                            [PRIMARYRECOGNITIONTYPECODEID],
                            [RECIPROCALRELATIONSHIPEXISTS],
                            [RECIPROCALMATCHFACTOR],
                            [RECIPROCALRECOGNITIONTYPECODEID],
                            [ISSPOUSE],
                            [ADDEDBYID],
                            [CHANGEDBYID],
                            [DATEADDED],
                            [DATECHANGED]
                            )
                        values (
                            @ID,
                            @BATCHSPOUSEID,
                            @COPYPRIMARYINFORMATION,
                            @SPOUSE_RELATIONSHIPTYPECODEID,
                            @SPOUSE_RECIPROCALTYPECODEID,
                            @SPOUSE_STARTDATE,
                            ISNULL(@PRIMARYRELATIONSHIPEXISTS, 0),
                            ISNULL(@PRIMARYMATCHFACTOR, 0),
                            @PRIMARYRECOGNITIONTYPECODEID,
                            ISNULL(@RECIPROCALRELATIONSHIPEXISTS, 0),
                            ISNULL(@RECIPROCALMATCHFACTOR, 0),
                            @RECIPROCALRECOGNITIONTYPECODEID,
                            @ISSPOUSERELATIONSHIP,
                            @CHANGEAGENTID,
                            @CHANGEAGENTID,
                            @CURRENTDATE,
                            @CURRENTDATE
                            );

                        -- Create the household

                        exec dbo.USP_BATCHREVENUE_ADDINDIVIDUALHOUSEHOLD @ID,
                            @BATCHSPOUSEID,
                            @HOUSEHOLDCOPYPRIMARYCONTACTINFO,
                            @CURRENTAPPUSERID,
                            @CHANGEAGENTID;
                    end
                    else
                    begin
                        update dbo.BATCHREVENUECONSTITUENT
                        set [EXISTINGCONSTITUENTID] = @SPOUSEID,
                            [KEYNAME] = @SPOUSE_LASTNAME,
                            [FIRSTNAME] = @SPOUSE_FIRSTNAME,
                            [MIDDLENAME] = @SPOUSE_MIDDLENAME,
                            [MAIDENNAME] = @SPOUSE_MAIDENNAME,
                            [NICKNAME] = @SPOUSE_NICKNAME,
                            [TITLECODEID] = @SPOUSE_TITLECODEID,
                            [SUFFIXCODEID] = @SPOUSE_SUFFIXCODEID,
                            [GENDERCODE] = @SPOUSE_GENDERCODE,
                            [BIRTHDATE] = @SPOUSE_BIRTHDATE,
                            [MARITALSTATUSCODEID] = @MARITALSTATUSCODEID,
                            [CHANGEDBYID] = @CHANGEAGENTID,
                            [DATECHANGED] = @CURRENTDATE,
                            [GENDERCODEID] = @SPOUSE_GENDERCODEID
                        where ID = @BATCHSPOUSEID;

                        update dbo.BATCHREVENUECONSTITUENTRELATION
                        set [COPYPRIMARYINFORMATION] = @COPYPRIMARYINFORMATION,
                            [RELATIONSHIPTYPECODEID] = @SPOUSE_RELATIONSHIPTYPECODEID,
                            [RECIPROCALTYPECODEID] = @SPOUSE_RECIPROCALTYPECODEID,
                            [STARTDATE] = @SPOUSE_STARTDATE,
                            [PRIMARYRELATIONSHIPEXISTS] = ISNULL(@PRIMARYRELATIONSHIPEXISTS, 0),
                            [PRIMARYMATCHFACTOR] = ISNULL(@PRIMARYMATCHFACTOR, 0),
                            [PRIMARYRECOGNITIONTYPECODEID] = @PRIMARYRECOGNITIONTYPECODEID,
                            [RECIPROCALRELATIONSHIPEXISTS] = ISNULL(@RECIPROCALRELATIONSHIPEXISTS, 0),
                            [RECIPROCALMATCHFACTOR] = ISNULL(@RECIPROCALMATCHFACTOR, 0),
                            [RECIPROCALRECOGNITIONTYPECODEID] = @RECIPROCALRECOGNITIONTYPECODEID,
                            [ISSPOUSE] = @ISSPOUSERELATIONSHIP,
                            [CHANGEDBYID] = @CHANGEAGENTID,
                            [DATECHANGED] = @CURRENTDATE
                        where ID = @BATCHSPOUSERELATIONID;

                        -- Update the household related to this relationship if needed

                        -- If there isn't a current household, create a new one

                        if @BATCHHOUSEHOLDID is null
                            exec dbo.USP_BATCHREVENUE_ADDINDIVIDUALHOUSEHOLD @ID,
                                @BATCHSPOUSEID,
                                @HOUSEHOLDCOPYPRIMARYCONTACTINFO,
                                @CURRENTAPPUSERID,
                                @CHANGEAGENTID;
                        else
                        begin
                            -- Otherwise, update the existing household

                            declare @HOUSEHOLDID uniqueidentifier,
                                @HOUSEHOLDNAME nvarchar(100),
                                @USEHOUSEHOLDID bit

                            exec dbo.USP_BATCHREVENUE_GETHOUSEHOLDNAMEORID @ID,
                                @BATCHSPOUSEID,
                                @HOUSEHOLDID output,
                                @HOUSEHOLDNAME output,
                                @USEHOUSEHOLDID output

                            declare @EXISTINGHOUSEHOLDID uniqueidentifier,
                                @EXISTINGHOUSEHOLDNAME nvarchar(100)

                            select @EXISTINGHOUSEHOLDID = EXISTINGCONSTITUENTID,
                                @EXISTINGHOUSEHOLDNAME = KEYNAME
                            from dbo.BATCHREVENUECONSTITUENT
                            where ID = @BATCHHOUSEHOLDID

                            if @USEHOUSEHOLDID = 1
                                and (
                                    @EXISTINGHOUSEHOLDID is null
                                    or @EXISTINGHOUSEHOLDID <> @HOUSEHOLDID
                                    )
                            begin
                                update dbo.BATCHREVENUECONSTITUENT
                                set EXISTINGCONSTITUENTID = @HOUSEHOLDID,
                                    KEYNAME = '',
                                    CHANGEDBYID = @CHANGEAGENTID,
                                    DATECHANGED = @CURRENTDATE
                                where ID = @BATCHHOUSEHOLDID
                            end

                            if @USEHOUSEHOLDID = 0
                                and coalesce(@HOUSEHOLDNAME, '') <> coalesce(@EXISTINGHOUSEHOLDNAME, '')
                            begin
                                update dbo.BATCHREVENUECONSTITUENT
                                set EXISTINGCONSTITUENTID = null,
                                    KEYNAME = @HOUSEHOLDNAME,
                                    CHANGEDBYID = @CHANGEAGENTID,
                                    DATECHANGED = @CURRENTDATE
                                where ID = @BATCHHOUSEHOLDID
                            end

                            -- Clear or update the primary contact info

                            declare @CURRENTHOUSEHOLDCOPYPRIMARYCONTACTINFO bit

                            select @CURRENTHOUSEHOLDCOPYPRIMARYCONTACTINFO = COPYMEMBERCONTACTINFOTOGROUP
                            from dbo.BATCHREVENUECONSTITUENTGROUPMEMBER
                            where GROUPID = @BATCHHOUSEHOLDID
                                and MEMBERID = @ID

                            if @CURRENTHOUSEHOLDCOPYPRIMARYCONTACTINFO <> @HOUSEHOLDCOPYPRIMARYCONTACTINFO
                                update dbo.BATCHREVENUECONSTITUENTGROUPMEMBER
                                set COPYMEMBERCONTACTINFOTOGROUP = @HOUSEHOLDCOPYPRIMARYCONTACTINFO,
                                    CHANGEDBYID = @CHANGEAGENTID,
                                    DATECHANGED = @CURRENTDATE
                                where GROUPID = @BATCHHOUSEHOLDID
                                    and MEMBERID = @ID
                        end
                    end
                end
                else
                begin
                    if @BATCHSPOUSERELATIONID is not null
                        exec dbo.USP_BATCHREVENUECONSTITUENTRELATION_DELETEBYID_WITHCHANGEAGENTID @BATCHSPOUSERELATIONID,
                            @CHANGEAGENTID;

                    if @BATCHSPOUSEID is not null
                    begin
                        -- Remove the added spouse and corresponding household

                        delete
                        from dbo.BATCHREVENUECONSTITUENTGROUPMEMBER
                        where GROUPID = @BATCHHOUSEHOLDID

                        exec dbo.USP_BATCHREVENUECONSTITUENT_DELETEBYID_WITHCHANGEAGENTID @BATCHHOUSEHOLDID,
                            @CHANGEAGENTID;

                        exec dbo.USP_BATCHREVENUECONSTITUENT_DELETEBYID_WITHCHANGEAGENTID @BATCHSPOUSEID,
                            @CHANGEAGENTID;
                    end
                end

                -------------- update Organization Information --------------

                declare @HASORGANIZATION bit

                if (@BUSINESSID is not null)
                    or (coalesce(@BUSINESS_NAME, '') <> '')
                    set @HASORGANIZATION = 1
                else
                    set @HASORGANIZATION = 0

                --If their is an organization create the relationship

                if @HASORGANIZATION = 1
                begin
                    ---------Organization Constituent Information---------

                    declare @ORGKEYNAME nvarchar(100);
                    declare @ORGKEYNAMEPREFIX nvarchar(50);

                    exec dbo.USP_PARSE_ORGANIZATION_NAME @BUSINESS_NAME,
                        @ORGKEYNAME output,
                        @ORGKEYNAMEPREFIX output;

                    declare @BUSINESS_PRIMARYRECOGNITIONTYPECODEID uniqueidentifier
                    declare @BUSINESS_RECIPROCALRECOGNITIONTYPECODEID uniqueidentifier
                    declare @BUSINESS_PRIMARYRELATIONSHIPEXISTS bit
                    declare @BUSINESS_RECIPROCALRELATIONSHIPEXISTS bit
                    declare @BUSINESS_PRIMARYMATCHFACTOR decimal(5, 2)
                    declare @BUSINESS_RECIPROCALMATCHFACTOR decimal(5, 2)

                    select @BUSINESS_PRIMARYRELATIONSHIPEXISTS = 1,
                        @BUSINESS_PRIMARYRECOGNITIONTYPECODEID = RRD.REVENUERECOGNITIONTYPECODEID,
                        @BUSINESS_PRIMARYMATCHFACTOR = RRD.MATCHFACTOR
                    from dbo.RECOGNITIONRELATIONSHIPDEFAULT as RRD
                    where RRD.CONSTITUENTTYPECODE = 0
                        and RRD.RELATIONSHIPTYPECODEID = @BUSINESS_RELATIONSHIPTYPECODEID

                    select @BUSINESS_RECIPROCALRELATIONSHIPEXISTS = 1,
                        @BUSINESS_RECIPROCALRECOGNITIONTYPECODEID = RRD.REVENUERECOGNITIONTYPECODEID,
                        @BUSINESS_RECIPROCALMATCHFACTOR = RRD.MATCHFACTOR
                    from dbo.RECOGNITIONRELATIONSHIPDEFAULT as RRD
                    where RRD.CONSTITUENTTYPECODE = 1
                        and RRD.RELATIONSHIPTYPECODEID = @BUSINESS_RECIPROCALTYPECODEID

                    if @BATCHBUSINESSID is null
                    begin
                        set @BATCHBUSINESSID = newID();

                        insert into dbo.BATCHREVENUECONSTITUENT (
                            [ID],
                            [ISORGANIZATION],
                            [EXISTINGCONSTITUENTID],
                            [KEYNAME],
                            [KEYNAMEPREFIX],
                            [ADDRESSTYPECODEID],
                            [DONOTMAIL],
                            [DONOTMAILREASONCODEID],
                            [COUNTRYID],
                            [STATEID],
                            [ADDRESSBLOCK],
                            [CITY],
                            [POSTCODE],
                            [OMITFROMVALIDATION],
                            [CART],
                            [DPC],
                            [LOT],
                            [COUNTYCODEID],
                            [CONGRESSIONALDISTRICTCODEID],
                            [LASTVALIDATIONATTEMPTDATE],
                            [VALIDATIONMESSAGE],
                            [CERTIFICATIONDATA],
                            [PHONETYPECODEID],
                            [NUMBER],
                            [CURRENTAPPUSERID],
                            [ADDEDBYID],
                            [CHANGEDBYID],
                            [DATEADDED],
                            [DATECHANGED]
                            )
                        values (
                            @BATCHBUSINESSID,
                            1,
                            @BUSINESSID,
                            @ORGKEYNAME,
                            @ORGKEYNAMEPREFIX,
                            @BUSINESS_ADDRESSTYPECODEID,
                            @BUSINESS_DONOTMAIL,
                            @BUSINESS_DONOTMAILREASONCODEID,
                            @BUSINESS_COUNTRYID,
                            @BUSINESS_STATEID,
                            @BUSINESS_ADDRESSBLOCK,
                            @BUSINESS_CITY,
                            @BUSINESS_POSTCODE,
                            @BUSINESS_OMITFROMVALIDATION,
                            @BUSINESS_CART,
                            @BUSINESS_DPC,
                            @BUSINESS_LOT,
                            @BUSINESS_COUNTYCODEID,
                            @BUSINESS_CONGRESSIONALDISTRICTCODEID,
                            @BUSINESS_LASTVALIDATIONATTEMPTDATE,
                            @BUSINESS_VALIDATIONMESSAGE,
                            @BUSINESS_CERTIFICATIONDATA,
                            @BUSINESS_PHONETYPECODEID,
                            @BUSINESS_NUMBER,
                            @CURRENTAPPUSERID,
                            @CHANGEAGENTID,
                            @CHANGEAGENTID,
                            @CURRENTDATE,
                            @CURRENTDATE
                            );

                        insert into dbo.BATCHREVENUECONSTITUENTRELATION (
                            [CONSTITUENTID],
                            [RELATIONID],
                            [ISPRIMARYBUSINESS],
                            [RELATIONSHIPTYPECODEID],
                            [RECIPROCALTYPECODEID],
                            [ISCONTACT],
                            [ISPRIMARYCONTACT],
                            [CONTACTTYPECODEID],
                            [STARTDATE],
                            [PRIMARYRELATIONSHIPEXISTS],
                            [PRIMARYMATCHFACTOR],
                            [PRIMARYRECOGNITIONTYPECODEID],
                            [RECIPROCALRELATIONSHIPEXISTS],
                            [RECIPROCALMATCHFACTOR],
                            [RECIPROCALRECOGNITIONTYPECODEID],
                            [POSITION],
                            [ISMATCHINGGIFTRELATIONSHIP],
                            [JOBCATEGORYCODEID],
                            [CAREERLEVELCODEID],
                            [ADDEDBYID],
                            [CHANGEDBYID],
                            [DATEADDED],
                            [DATECHANGED]
                            )
                        values (
                            @ID,
                            @BATCHBUSINESSID,
                            1,
                            @BUSINESS_RELATIONSHIPTYPECODEID,
                            @BUSINESS_RECIPROCALTYPECODEID,
                            @ISCONTACT,
                            @ISPRIMARYCONTACT,
                            @CONTACTTYPECODEID,
                            @BUSINESS_STARTDATE,
                            ISNULL(@BUSINESS_PRIMARYRELATIONSHIPEXISTS, 0),
                            ISNULL(@BUSINESS_PRIMARYMATCHFACTOR, 0),
                            @BUSINESS_PRIMARYRECOGNITIONTYPECODEID,
                            ISNULL(@BUSINESS_RECIPROCALRELATIONSHIPEXISTS, 0),
                            ISNULL(@BUSINESS_RECIPROCALMATCHFACTOR, 0),
                            @BUSINESS_RECIPROCALRECOGNITIONTYPECODEID,
                            @POSITION,
                            @ISMATCHINGGIFTRELATIONSHIP,
                            @JOBCATEGORYCODEID,
                            @CAREERLEVELCODEID,
                            @CHANGEAGENTID,
                            @CHANGEAGENTID,
                            @CURRENTDATE,
                            @CURRENTDATE
                            );
                    end
                    else
                    begin
                        update dbo.BATCHREVENUECONSTITUENT
                        set [EXISTINGCONSTITUENTID] = @BUSINESSID,
                            [KEYNAME] = @ORGKEYNAME,
                            [KEYNAMEPREFIX] = @ORGKEYNAMEPREFIX,
                            [ADDRESSTYPECODEID] = @BUSINESS_ADDRESSTYPECODEID,
                            [DONOTMAIL] = @BUSINESS_DONOTMAIL,
                            [DONOTMAILREASONCODEID] = @BUSINESS_DONOTMAILREASONCODEID,
                            [COUNTRYID] = @BUSINESS_COUNTRYID,
                            [STATEID] = @BUSINESS_STATEID,
                            [ADDRESSBLOCK] = @BUSINESS_ADDRESSBLOCK,
                            [CITY] = @BUSINESS_CITY,
                            [POSTCODE] = @BUSINESS_POSTCODE,
                            [OMITFROMVALIDATION] = @BUSINESS_OMITFROMVALIDATION,
                            [CART] = @BUSINESS_CART,
                            [DPC] = @BUSINESS_DPC,
                            [LOT] = @BUSINESS_LOT,
                            [COUNTYCODEID] = @BUSINESS_COUNTYCODEID,
                            [CONGRESSIONALDISTRICTCODEID] = @BUSINESS_CONGRESSIONALDISTRICTCODEID,
                            [LASTVALIDATIONATTEMPTDATE] = @BUSINESS_LASTVALIDATIONATTEMPTDATE,
                            [VALIDATIONMESSAGE] = @BUSINESS_VALIDATIONMESSAGE,
                            [CERTIFICATIONDATA] = @BUSINESS_CERTIFICATIONDATA,
                            [PHONETYPECODEID] = @BUSINESS_PHONETYPECODEID,
                            [NUMBER] = @BUSINESS_NUMBER,
                            [ISORGANIZATION] = 1,
                            [CHANGEDBYID] = @CHANGEAGENTID,
                            [DATECHANGED] = @CURRENTDATE
                        where ID = @BATCHBUSINESSID;

                        update dbo.BATCHREVENUECONSTITUENTRELATION
                        set [RELATIONSHIPTYPECODEID] = @BUSINESS_RELATIONSHIPTYPECODEID,
                            [RECIPROCALTYPECODEID] = @BUSINESS_RECIPROCALTYPECODEID,
                            [ISCONTACT] = @ISCONTACT,
                            [ISPRIMARYCONTACT] = @ISPRIMARYCONTACT,
                            [CONTACTTYPECODEID] = @CONTACTTYPECODEID,
                            [STARTDATE] = @BUSINESS_STARTDATE,
                            [PRIMARYRELATIONSHIPEXISTS] = ISNULL(@BUSINESS_PRIMARYRELATIONSHIPEXISTS, 0),
                            [PRIMARYMATCHFACTOR] = ISNULL(@BUSINESS_PRIMARYMATCHFACTOR, 0),
                            [PRIMARYRECOGNITIONTYPECODEID] = @BUSINESS_PRIMARYRECOGNITIONTYPECODEID,
                            [RECIPROCALRELATIONSHIPEXISTS] = ISNULL(@BUSINESS_RECIPROCALRELATIONSHIPEXISTS, 0),
                            [RECIPROCALMATCHFACTOR] = ISNULL(@BUSINESS_RECIPROCALMATCHFACTOR, 0),
                            [RECIPROCALRECOGNITIONTYPECODEID] = @BUSINESS_RECIPROCALRECOGNITIONTYPECODEID,
                            [POSITION] = @POSITION,
                            [ISMATCHINGGIFTRELATIONSHIP] = @ISMATCHINGGIFTRELATIONSHIP,
                            [JOBCATEGORYCODEID] = @JOBCATEGORYCODEID,
                            [CAREERLEVELCODEID] = @CAREERLEVELCODEID,
                            [CHANGEDBYID] = @CHANGEAGENTID,
                            [DATECHANGED] = @CURRENTDATE
                        where ID = @BATCHBUSINESSRELATIONID;
                    end;
                end;
                else
                begin
                    if @BATCHBUSINESSRELATIONID is not null
                        exec dbo.USP_BATCHREVENUECONSTITUENTRELATION_DELETEBYID_WITHCHANGEAGENTID @BATCHBUSINESSRELATIONID,
                            @CHANGEAGENTID;

                    if @BATCHBUSINESSID is not null
                        exec dbo.USP_BATCHREVENUECONSTITUENT_DELETEBYID_WITHCHANGEAGENTID @BATCHBUSINESSID,
                            @CHANGEAGENTID;
                end;
            end;
        end;

        --reset CONTEXT_INFO to previous value

        if not @contextCache is null
            set CONTEXT_INFO @contextCache;
    end try

    begin catch
        exec dbo.USP_RAISE_ERROR;

        return 1;
    end catch

    return 0;
end;