USP_DISCOUNT_ADD

Adds a discount and child records.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT
@CHANGEAGENTID uniqueidentifier IN
@NAME nvarchar(100) IN
@DESCRIPTION nvarchar(255) IN
@APPLIESTOCODE tinyint IN
@APPLICATIONTYPECODE tinyint IN
@DISCOUNTTYPECODE tinyint IN
@CALCULATIONTYPECODE tinyint IN
@PERCENT decimal(5, 2) IN
@AMOUNT money IN
@NUMBERTOPURCHASE int IN
@NUMBERTODISCOUNTTYPECODE tinyint IN
@NUMBERTODISCOUNT int IN
@LIMITDISCOUNTSPERORDER bit IN
@NUMBEROFDISCOUNTSPERORDER int IN
@BOGOCALCULATIONTYPECODE tinyint IN
@BOGOLIMITDISCOUNTSPERORDER bit IN
@BOGONUMBEROFDISCOUNTSPERORDER int IN
@DISCOUNTTICKETSFORCODE tinyint IN
@ALLOWWALKUPSALES bit IN
@WALKUPID uniqueidentifier IN
@WALKUPACTIVE bit IN
@ALLOWADVANCEDSALES bit IN
@ADVANCEDID uniqueidentifier IN
@ADVANCEDACTIVE bit IN
@ALLOWONLINESALES bit IN
@ONLINEID uniqueidentifier IN
@ONLINEACTIVE bit IN
@ALLOWMONDAY bit IN
@ALLOWTUESDAY bit IN
@ALLOWWEDNESDAY bit IN
@ALLOWTHURSDAY bit IN
@ALLOWFRIDAY bit IN
@ALLOWSATURDAY bit IN
@ALLOWSUNDAY bit IN
@ALLOWDISCOUNTDATEFROM datetime IN
@ALLOWDISCOUNTDATETO datetime IN
@ALLOWDISCOUNTTIMEFROM UDT_HOURMINUTE IN
@ALLOWDISCOUNTTIMETO UDT_HOURMINUTE IN
@ITEMAMOUNT money IN
@ITEMPERCENT decimal(5, 2) IN
@PROMOTIONALCODES xml IN
@DISCOUNTQUALIFYINGPRICETYPES xml IN
@DISCOUNTPRICETYPES xml IN
@DISCOUNTPROGRAMS xml IN
@DISCOUNTMEMBERS xml IN
@DISCOUNTCONSTITUENCYCODES xml IN
@ADDRESSSELECTIONID uniqueidentifier IN
@GROUPSIZES xml IN
@GROUPSALESID uniqueidentifier IN
@GROUPSALESACTIVE bit IN
@ALLOWGROUPSALES bit IN
@APPLIESTOTICKETS bit IN
@APPLIESTOMERCHANDISE bit IN
@APPLIESTOMERCHANDISECODE tinyint IN
@DISCOUNTMERCHANDISEDEPARTMENTS xml IN
@DISCOUNTMERCHANDISEITEMS xml IN
@ITEMMERCHANDISEPERCENT decimal(5, 2) IN
@ITEMMERCHANDISEAMOUNT money IN
@QUALIFYINGDISCOUNTMERCHANDISEDEPARTMENTS xml IN
@QUALIFYINGDISCOUNTMERCHANDISEITEMS xml IN
@QUALIFYINGITEMTYPECODE tinyint IN
@DISCOUNTITEMTYPECODE tinyint IN
@DISCOUNTMERCHANDISEFORCODE tinyint IN
@QUALIFYINGAPPLIESTOMERCHANDISECODE tinyint IN

Definition

Copy


CREATE procedure dbo.USP_DISCOUNT_ADD
(
    @ID uniqueidentifier = null output,
    @CHANGEAGENTID uniqueidentifier = null,
    @NAME nvarchar(100),
    @DESCRIPTION nvarchar(255) = '',
    @APPLIESTOCODE tinyint = 0,
    @APPLICATIONTYPECODE tinyint = 0,
    @DISCOUNTTYPECODE tinyint = 0,
    @CALCULATIONTYPECODE tinyint = 0,
    @PERCENT decimal(5,2) = 0.0,
    @AMOUNT money = 0,
    @NUMBERTOPURCHASE int = 1,
    @NUMBERTODISCOUNTTYPECODE tinyint = 0,
    @NUMBERTODISCOUNT int = 1,
    @LIMITDISCOUNTSPERORDER bit = 0,
    @NUMBEROFDISCOUNTSPERORDER int = 1,
    @BOGOCALCULATIONTYPECODE tinyint = 0,
    @BOGOLIMITDISCOUNTSPERORDER bit = 0,
    @BOGONUMBEROFDISCOUNTSPERORDER int = 1,
    @DISCOUNTTICKETSFORCODE tinyint = 0,
    @ALLOWWALKUPSALES bit = 1,
    @WALKUPID uniqueidentifier = null,
    @WALKUPACTIVE bit = 1,
    @ALLOWADVANCEDSALES bit = 1,
    @ADVANCEDID uniqueidentifier = null,
    @ADVANCEDACTIVE bit = 1,
    @ALLOWONLINESALES bit = 1,
    @ONLINEID uniqueidentifier = null,
    @ONLINEACTIVE bit = 1,
    @ALLOWMONDAY bit=1,
    @ALLOWTUESDAY bit=1,
    @ALLOWWEDNESDAY bit=1,
    @ALLOWTHURSDAY bit=1,
    @ALLOWFRIDAY bit=1,
    @ALLOWSATURDAY bit=1,
    @ALLOWSUNDAY bit=1,
    @ALLOWDISCOUNTDATEFROM datetime = null,
    @ALLOWDISCOUNTDATETO datetime = null,
    @ALLOWDISCOUNTTIMEFROM dbo.UDT_HOURMINUTE = null,
    @ALLOWDISCOUNTTIMETO dbo.UDT_HOURMINUTE = null,
    @ITEMAMOUNT money = 0,
    @ITEMPERCENT decimal (5,2) = 0.0,
    @PROMOTIONALCODES xml = null,
    @DISCOUNTQUALIFYINGPRICETYPES xml = null,
    @DISCOUNTPRICETYPES xml = null,
    @DISCOUNTPROGRAMS xml = null,
    @DISCOUNTMEMBERS xml = null,
    @DISCOUNTCONSTITUENCYCODES xml = null,
    @ADDRESSSELECTIONID uniqueidentifier = null,
    @GROUPSIZES xml = null,
    @GROUPSALESID uniqueidentifier = null,
    @GROUPSALESACTIVE bit = null,
    @ALLOWGROUPSALES bit = 0,
    @APPLIESTOTICKETS bit = 1,
    @APPLIESTOMERCHANDISE bit = 0,
    @APPLIESTOMERCHANDISECODE tinyint = 0,
    @DISCOUNTMERCHANDISEDEPARTMENTS xml = null,
    @DISCOUNTMERCHANDISEITEMS xml = null,
    @ITEMMERCHANDISEPERCENT decimal (5, 2) = 0.0,
    @ITEMMERCHANDISEAMOUNT money = 0,
    @QUALIFYINGDISCOUNTMERCHANDISEDEPARTMENTS xml = null,
    @QUALIFYINGDISCOUNTMERCHANDISEITEMS xml = null,
    @QUALIFYINGITEMTYPECODE tinyint = 0,
    @DISCOUNTITEMTYPECODE tinyint = 0,
    @DISCOUNTMERCHANDISEFORCODE tinyint = 0,
    @QUALIFYINGAPPLIESTOMERCHANDISECODE tinyint= 0
)
as
    set nocount on;

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

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

    declare @CURRENTDATE datetime;
    set @CURRENTDATE = getdate();

    if @DISCOUNTTYPECODE = 0  --if standard discount

        begin
            set @NUMBERTODISCOUNTTYPECODE = 1
            set @NUMBERTODISCOUNT = 1
            set @NUMBERTOPURCHASE = 1
            set @DISCOUNTTICKETSFORCODE = 0
            set @BOGOCALCULATIONTYPECODE = 0
            set @BOGOLIMITDISCOUNTSPERORDER = 0
            set @BOGONUMBEROFDISCOUNTSPERORDER = 0

            if @APPLIESTOCODE = 0 -- if Order

                begin
                    set @ITEMPERCENT = 0
                    set @ITEMAMOUNT = 0

                    if @CALCULATIONTYPECODE = 0
                        set @PERCENT = 0
                    else
                        set @AMOUNT = 0

                    set @ITEMMERCHANDISEPERCENT = 0
                    set @ITEMMERCHANDISEAMOUNT = 0

                    set @LIMITDISCOUNTSPERORDER = 0
                    set @NUMBEROFDISCOUNTSPERORDER = 1

                    --Blank out the programs

                    set @DISCOUNTPROGRAMS = null
                    set @DISCOUNTMERCHANDISEDEPARTMENTS = null
                    set @DISCOUNTMERCHANDISEITEMS = null
                end
            else  -- Item

                begin
                    set @PERCENT = 0
                    set @AMOUNT = 0

                    if @CALCULATIONTYPECODE = 0
                    begin
                        set @ITEMMERCHANDISEPERCENT = 0
                        if @APPLIESTOMERCHANDISE = 1 and @ITEMMERCHANDISEAMOUNT = 0
                            raiserror('BBERR_INVALIDMERCHANDISEAMOUNT', 13, 1)
                    end
                    else
                    begin
                        set @ITEMMERCHANDISEAMOUNT = 0
                        if @APPLIESTOMERCHANDISE = 1 and @ITEMMERCHANDISEPERCENT = 0
                            raiserror('BBERR_INVALIDMERCHANDISEPERCENT', 13, 1)
                    end

                    if @LIMITDISCOUNTSPERORDER = 0
                    begin
                        set @NUMBEROFDISCOUNTSPERORDER = 1
                    end
                end
        end
    else if @DISCOUNTTYPECODE = 1  -- if with required purchase discount

        begin
            set @PERCENT = 0
            set @AMOUNT = 0
            set @ITEMPERCENT = 0
            set @ITEMAMOUNT = 0

            set @CALCULATIONTYPECODE = @BOGOCALCULATIONTYPECODE
            set @LIMITDISCOUNTSPERORDER = @BOGOLIMITDISCOUNTSPERORDER

            if @DISCOUNTITEMTYPECODE = 0
            begin
                set @ITEMMERCHANDISEPERCENT = 0
                set @ITEMMERCHANDISEAMOUNT = 0
            end
            else
            begin
                if @BOGOCALCULATIONTYPECODE = 0
                begin
                    set @ITEMMERCHANDISEPERCENT = 0
                    if @ITEMMERCHANDISEAMOUNT <= 0 and @APPLIESTOMERCHANDISE = 1
                        raiserror('BBERR_INVALIDMERCHANDISEAMOUNT', 13, 1);
                end
                else
                begin
                    set @ITEMMERCHANDISEAMOUNT = 0
                    if @ITEMMERCHANDISEPERCENT <= 0 and @APPLIESTOMERCHANDISE = 1
                        raiserror('BBERR_INVALIDMERCHANDISEPERCENT', 13, 1);
                end
            end

            if @NUMBERTODISCOUNTTYPECODE = 1 -- Unlimited

                begin
                    set @NUMBERTODISCOUNT = 1
                    set @LIMITDISCOUNTSPERORDER = 0
                    set @NUMBEROFDISCOUNTSPERORDER = 1
                end

            if @LIMITDISCOUNTSPERORDER = 0
                set @NUMBEROFDISCOUNTSPERORDER = 1
            else
                set @NUMBEROFDISCOUNTSPERORDER = @BOGONUMBEROFDISCOUNTSPERORDER

        end
    else  -- if group size discount

        begin
            set @NUMBERTODISCOUNTTYPECODE = 1
            set @NUMBERTODISCOUNT = 1
            set @NUMBERTOPURCHASE = 1
            set @DISCOUNTTICKETSFORCODE = 0
            set @BOGOCALCULATIONTYPECODE = 0
            set @BOGOLIMITDISCOUNTSPERORDER = 0
            set @BOGONUMBEROFDISCOUNTSPERORDER = 0

            set @PERCENT = 0
            set @AMOUNT = 0
            set @ITEMPERCENT = 0
            set @ITEMAMOUNT = 0

            set @LIMITDISCOUNTSPERORDER = 0
            set @NUMBEROFDISCOUNTSPERORDER = 1

        end

    begin try
        insert into dbo.DISCOUNT
        (
            ID,
            ORIGINALDISCOUNTID,
            NAME,
            [DESCRIPTION],
            APPLIESTOCODE,
            APPLICATIONTYPECODE,
            DISCOUNTTYPECODE,
            CALCULATIONTYPECODE,
            [PERCENT],
            AMOUNT,
            NUMBERTOPURCHASE,
            NUMBERTODISCOUNTTYPECODE,
            NUMBERTODISCOUNT,
            LIMITDISCOUNTSPERORDER,
            NUMBEROFDISCOUNTSPERORDER,
            DISCOUNTTICKETSFORCODE,
            APPLIESTOMERCHANDISE,
            APPLIESTOTICKETS,
            MERCHANDISEAMOUNT,
            MERCHANDISEPERCENT,
            QUALIFYINGITEMTYPECODE,
            DISCOUNTITEMTYPECODE,
            DISCOUNTMERCHANDISEFORCODE,
            ADDEDBYID,
            CHANGEDBYID,
            DATEADDED,
            DATECHANGED
        )
        values
        (
            @ID,
            @ID,
            @NAME,
            @DESCRIPTION,
            @APPLIESTOCODE,
            @APPLICATIONTYPECODE,
            @DISCOUNTTYPECODE,
            @CALCULATIONTYPECODE,
            @PERCENT,
            @AMOUNT,
            @NUMBERTOPURCHASE,
            @NUMBERTODISCOUNTTYPECODE,
            @NUMBERTODISCOUNT,
            @LIMITDISCOUNTSPERORDER,
            @NUMBEROFDISCOUNTSPERORDER,
            @DISCOUNTTICKETSFORCODE,
            @APPLIESTOMERCHANDISE,
            @APPLIESTOTICKETS,
            @ITEMMERCHANDISEAMOUNT,
            @ITEMMERCHANDISEPERCENT,
            @QUALIFYINGITEMTYPECODE,
            @DISCOUNTITEMTYPECODE,
            @DISCOUNTMERCHANDISEFORCODE,
            @CHANGEAGENTID,
            @CHANGEAGENTID,
            @CURRENTDATE,
            @CURRENTDATE
        );


    declare @DISCOUNTAVAILABILITYID uniqueidentifier;
    set @DISCOUNTAVAILABILITYID = newid();

    insert into dbo.DISCOUNTAVAILABILITY
    (
        ID,
        DISCOUNTID,
        ALLOWMONDAY,
        ALLOWTUESDAY,
        ALLOWWEDNESDAY,
        ALLOWTHURSDAY,
        ALLOWFRIDAY,
        ALLOWSATURDAY,
        ALLOWSUNDAY,
        ALLOWDISCOUNTDATEFROM,
        ALLOWDISCOUNTDATETO,
        ALLOWDISCOUNTTIMEFROM,
        ALLOWDISCOUNTTIMETO,
        SEQUENCE,
        ADDEDBYID,
        CHANGEDBYID,
        DATEADDED,
        DATECHANGED
    )
    values
    (
        @DISCOUNTAVAILABILITYID,
        @ID,
        @ALLOWMONDAY,
        @ALLOWTUESDAY,
        @ALLOWWEDNESDAY,
        @ALLOWTHURSDAY,
        @ALLOWFRIDAY,
        @ALLOWSATURDAY,
        @ALLOWSUNDAY,
        @ALLOWDISCOUNTDATEFROM,
        @ALLOWDISCOUNTDATETO,
        @ALLOWDISCOUNTTIMEFROM,
        @ALLOWDISCOUNTTIMETO,
        1,
        @CHANGEAGENTID,
        @CHANGEAGENTID,
        @CURRENTDATE,
        @CURRENTDATE
    );


    If @WALKUPACTIVE=1
        begin
            If @ALLOWWALKUPSALES=1
                begin
                    if @WALKUPID is null
                    begin
                        select @WALKUPID = ID from dbo.SALESMETHOD where TYPECODE = 0;
                    end

                    insert into dbo.DISCOUNTAVAILABILITYSALESMETHOD
                    (
                        ID,
                        DISCOUNTAVAILABILITYID,
                        SALESMETHODID,
                        ADDEDBYID,
                        CHANGEDBYID,
                        DATEADDED,
                        DATECHANGED
                    )
                    values
                    (
                        newid(),
                        @DISCOUNTAVAILABILITYID,
                        @WALKUPID,
                        @CHANGEAGENTID,
                        @CHANGEAGENTID,
                        @CURRENTDATE,
                        @CURRENTDATE
                    );
                end
        end

    If @ADVANCEDACTIVE=1
        begin
            If @ALLOWADVANCEDSALES=1
                begin
                    if @ADVANCEDID is null
                    begin
                        select @ADVANCEDID = ID from dbo.SALESMETHOD where TYPECODE = 1;
                    end

                    insert into dbo.DISCOUNTAVAILABILITYSALESMETHOD
                    (
                        ID,
                        DISCOUNTAVAILABILITYID,
                        SALESMETHODID,
                        ADDEDBYID,
                        CHANGEDBYID,
                        DATEADDED,
                        DATECHANGED
                    )
                    values
                    (
                        newid(),
                        @DISCOUNTAVAILABILITYID,
                        @ADVANCEDID,
                        @CHANGEAGENTID,
                        @CHANGEAGENTID,
                        @CURRENTDATE,
                        @CURRENTDATE
                    );
                end
        end

    If @ONLINEACTIVE=1
        begin
            If @ALLOWONLINESALES=1
                begin
                    if @ONLINEID is null
                    begin
                        select @ONLINEID = ID from dbo.SALESMETHOD where TYPECODE = 2;
                    end

                    insert into dbo.DISCOUNTAVAILABILITYSALESMETHOD
                    (
                        ID,
                        DISCOUNTAVAILABILITYID,
                        SALESMETHODID,
                        ADDEDBYID,
                        CHANGEDBYID,
                        DATEADDED,
                        DATECHANGED
                    )
                    values
                    (
                        newid(),
                        @DISCOUNTAVAILABILITYID,
                        @ONLINEID,
                        @CHANGEAGENTID,
                        @CHANGEAGENTID,
                        @CURRENTDATE,
                        @CURRENTDATE
                    );
                end
        end

If @GROUPSALESACTIVE=1
        begin
            If @ALLOWGROUPSALES=1
                begin
                    if @GROUPSALESID is null
                    begin
                        select @GROUPSALESID = ID from dbo.SALESMETHOD where TYPECODE = 2;
                    end

                    insert into dbo.DISCOUNTAVAILABILITYSALESMETHOD
                    (
                        ID,
                        DISCOUNTAVAILABILITYID,
                        SALESMETHODID,
                        ADDEDBYID,
                        CHANGEDBYID,
                        DATEADDED,
                        DATECHANGED
                    )
                    values
                    (
                        newid(),
                        @DISCOUNTAVAILABILITYID,
                        @GROUPSALESID,
                        @CHANGEAGENTID,
                        @CHANGEAGENTID,
                        @CURRENTDATE,
                        @CURRENTDATE
                    );
                end
        end

    if @APPLICATIONTYPECODE=2 -- With Code

        exec dbo.USP_DISCOUNT_GETPROMOTIONALCODES_ADDFROMXML @ID, @PROMOTIONALCODES, @CHANGEAGENTID;

    if @DISCOUNTTYPECODE=1 -- With required purchase

        begin
            if @DISCOUNTQUALIFYINGPRICETYPES is not null and @QUALIFYINGITEMTYPECODE = 0
                exec dbo.USP_DISCOUNT_GETQUALIFYINGPRICETYPES_ADDFROMXML @ID, @DISCOUNTQUALIFYINGPRICETYPES, @CHANGEAGENTID;
            if @DISCOUNTPRICETYPES is not null and @DISCOUNTITEMTYPECODE = 0
                exec dbo.USP_DISCOUNT_GETPRICETYPES_ADDFROMXML @ID, @DISCOUNTPRICETYPES, @CHANGEAGENTID;
        end

    if @DISCOUNTTYPECODE=0 and @APPLIESTOCODE=1 -- Standard Discounts applying to items.

    begin
        exec dbo.USP_DISCOUNT_GETPRICETYPES_ADDFROMXML @ID, @DISCOUNTPRICETYPES, @CHANGEAGENTID;
    end

    if @DISCOUNTTYPECODE = 2 -- Group Size Discounts

        exec dbo.USP_DISCOUNT_GETGROUPSIZES_UPDATEFROMXML @ID, @GROUPSIZES, @CHANGEAGENTID, @CURRENTDATE;

    if (@DISCOUNTPROGRAMS is not null) and (@APPLIESTOTICKETS = 1 or @QUALIFYINGITEMTYPECODE = 0)
    begin
        exec dbo.USP_DISCOUNT_ADDDISCOUNTPROGRAMSFROMXML @ID, @DISCOUNTPROGRAMS, @DISCOUNTTYPECODE, @CHANGEAGENTID, @CURRENTDATE, @DISCOUNTITEMTYPECODE, @QUALIFYINGITEMTYPECODE;
    end

    if @DISCOUNTMEMBERS is not null
        exec dbo.USP_DISCOUNT_GETMEMBERSHIPPROGRAMS_ADDFROMXML @ID, @DISCOUNTMEMBERS, @CHANGEAGENTID;

    if @APPLIESTOMERCHANDISE = 1
    begin
        declare @DISCOUNTGROUPID uniqueidentifier;

        if (@DISCOUNTITEMTYPECODE = 1) or (@DISCOUNTTYPECODE = 0)
        begin

            if @APPLIESTOMERCHANDISECODE = 1     -- merchandise departments

                exec dbo.USP_DISCOUNT_MERCHANDISEDEPARTMENTS_ADDFROMXML @ID, @DISCOUNTMERCHANDISEDEPARTMENTS, @DISCOUNTTYPECODE, @CHANGEAGENTID, @CURRENTDATE;
            else if @APPLIESTOMERCHANDISECODE = 2     -- merchandise items

                exec dbo.USP_DISCOUNT_MERCHANDISEITEMS_ADDFROMXML @ID, @DISCOUNTMERCHANDISEITEMS, @DISCOUNTTYPECODE, @CHANGEAGENTID, @CURRENTDATE;
            else if @APPLIESTOMERCHANDISECODE in (0, 5, 6)
            begin
                set @DISCOUNTGROUPID = newid();
                -- insert new items

                insert into dbo.[DISCOUNTGROUP]
                (
                    DISCOUNTID,
                    ID,
                    ADDEDBYID,
                    CHANGEDBYID,
                    DATEADDED,
                    DATECHANGED
                )
                values
                (
                    @ID,
                    @DISCOUNTGROUPID,
                    @CHANGEAGENTID,
                    @CHANGEAGENTID,
                    @CURRENTDATE,
                    @CURRENTDATE
                )

                insert into dbo.[DISCOUNTGROUPDETAIL]
                (
                    DISCOUNTGROUPID,
                    ID,
                    DISCOUNTEDITEM,
                    DISCOUNTGROUPDETAILAPPLICATIONCODE,
                    ADDEDBYID,
                    CHANGEDBYID,
                    DATEADDED,
                    DATECHANGED
                )
                values
                (
                    @DISCOUNTGROUPID,
                    newid(),
                    1,
                    @APPLIESTOMERCHANDISECODE, -- all discountable merchandise

                    @CHANGEAGENTID,
                    @CHANGEAGENTID,
                    @CURRENTDATE,
                    @CURRENTDATE
                )
            end
        end
    end
    if ((@DISCOUNTTYPECODE = 1) and (@QUALIFYINGITEMTYPECODE = 1))
    begin
        if @QUALIFYINGAPPLIESTOMERCHANDISECODE = 1     -- merchandise departments

            exec dbo.USP_DISCOUNT_QUALIFYINGMERCHANDISEDEPARTMENTS_ADDFROMXML @ID, @QUALIFYINGDISCOUNTMERCHANDISEDEPARTMENTS, @DISCOUNTTYPECODE, @CHANGEAGENTID, @CURRENTDATE;
        else if @QUALIFYINGAPPLIESTOMERCHANDISECODE = 2     -- merchandise items

            exec dbo.USP_DISCOUNT_QUALIFYINGMERCHANDISEITEMS_ADDFROMXML @ID, @QUALIFYINGDISCOUNTMERCHANDISEITEMS, @CHANGEAGENTID, @CURRENTDATE;
        else if @QUALIFYINGAPPLIESTOMERCHANDISECODE = 4
        begin

            set @DISCOUNTGROUPID = newid();
            -- insert new items

            insert into dbo.[DISCOUNTGROUP]
            (
                DISCOUNTID,
                ID,
                ADDEDBYID,
                CHANGEDBYID,
                DATEADDED,
                DATECHANGED
            )
            values
            (
                @ID,
                @DISCOUNTGROUPID,
                @CHANGEAGENTID,
                @CHANGEAGENTID,
                @CURRENTDATE,
                @CURRENTDATE
            )

            insert into dbo.[DISCOUNTGROUPDETAIL]
            (
                DISCOUNTGROUPID,
                ID,
                DISCOUNTEDITEM,
                DISCOUNTGROUPDETAILAPPLICATIONCODE,
                ADDEDBYID,
                CHANGEDBYID,
                DATEADDED,
                DATECHANGED
            )
            values
            (
                @DISCOUNTGROUPID,
                newid(),
                0,
                4, -- all discountable merchandise

                @CHANGEAGENTID,
                @CHANGEAGENTID,
                @CURRENTDATE,
                @CURRENTDATE
            )
        end
    end



    -- LeeCh, 07/19/2009

    -- Add the following code to address the discount constituency change

    declare @CONSTITUENCYCODESXML xml;
    set @CONSTITUENCYCODESXML = (
        select 
            USERDEFINEDCONSTITUENCYDEFINITION.ID as CONSTITUENCYCODEID,
            SYSTEMCONSTITUENCYDEFINITION.ID as CONSTITUENCYSYSTEMNAMEID,
            DISCOUNTCONSTITUENCYCODETABLE.ID,
            DISCOUNTCONSTITUENCYCODETABLE.SEQUENCE
        from
            (select
                T.c.value('(CONSTITUENCYCODEID)[1]','uniqueidentifier') as 'CONSTITUENCYCODEID',
                T.c.value('(ID)[1]','uniqueidentifier') as 'ID',
                T.c.value('(SEQUENCE)[1]','int') as 'SEQUENCE'
            from @DISCOUNTCONSTITUENCYCODES.nodes('/DISCOUNTCONSTITUENCYCODES/ITEM') T(c)
            ) as DISCOUNTCONSTITUENCYCODETABLE

        left join dbo.CONSTITUENCYDEFINITION as USERDEFINEDCONSTITUENCYDEFINITION on USERDEFINEDCONSTITUENCYDEFINITION.ID = DISCOUNTCONSTITUENCYCODETABLE.CONSTITUENCYCODEID and USERDEFINEDCONSTITUENCYDEFINITION.ISSYSTEM = 0
        left join dbo.CONSTITUENCYDEFINITION as SYSTEMCONSTITUENCYDEFINITION on SYSTEMCONSTITUENCYDEFINITION.ID = DISCOUNTCONSTITUENCYCODETABLE.CONSTITUENCYCODEID and SYSTEMCONSTITUENCYDEFINITION.ISSYSTEM = 1

        for xml raw('ITEM'),type,elements,root('DISCOUNTCONSTITUENCYCODES'),BINARY BASE64
    );

    if @CONSTITUENCYCODESXML is not null
        exec dbo.USP_DISCOUNT_GETCONSTITUENCYCODES_ADDFROMXML @ID, @CONSTITUENCYCODESXML, @CHANGEAGENTID;

    -- LeeCh, 07/21/2009

    -- Add the address constraint to discount

    if @ADDRESSSELECTIONID is not null
        begin
            insert into dbo.DISCOUNTADDRESS (
                ID,
                IDSETREGISTERID,
                ADDEDBYID,
                CHANGEDBYID,
                DATEADDED,
                DATECHANGED
            ) values (
                @ID,
                @ADDRESSSELECTIONID,
                @CHANGEAGENTID,
                @CHANGEAGENTID,
                @CURRENTDATE,
                @CURRENTDATE
            )
        end
    end try

    begin catch
        exec dbo.USP_RAISE_ERROR;
        return 1;
    end catch

    return 0;