USP_DATAFORMTEMPLATE_ADD_SALESORDERITEMDONATION

The save procedure used by the add dataform template "Order Donation Add Data Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT The output parameter indicating the ID of the record added.
@SALESORDERID uniqueidentifier IN Input parameter indicating the context ID for the record being added.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@AMOUNT money IN Amount
@DESIGNATIONID uniqueidentifier IN Designation
@DESCRIPTION nvarchar(255) IN Description
@CONSTITUENTID uniqueidentifier IN Patron
@DATA xml IN Data
@ECARDSDATA xml IN ECards Data
@OPTIONS xml IN Options
@CALLBACKURL nvarchar(255) IN Callback URL
@SYSTEMTYPENAME nvarchar(255) IN System Type Name
@ASSEMBLYNAME nvarchar(255) IN Assembly Name
@ATTRIBUTES xml IN Attributes
@CATEGORYNAME nvarchar(255) IN Category Name
@ACKNOWLEDGEMENT nvarchar(max) IN Acknowledgement
@GROUPID uniqueidentifier IN Group Id
@ISZEROAMOUNTTRANSACTION bit IN Is Zero Amount Transaction

Definition

Copy


CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_SALESORDERITEMDONATION
(
    @ID uniqueidentifier = null output,
    @SALESORDERID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier = null,
    @AMOUNT money,
    @DESIGNATIONID uniqueidentifier,                    
    @DESCRIPTION nvarchar(255) = null,
    @CONSTITUENTID uniqueidentifier = null,
    @DATA xml = null,
    @ECARDSDATA xml = null,
    @OPTIONS xml = null,
    @CALLBACKURL nvarchar(255) = null,
    @SYSTEMTYPENAME nvarchar(255) = null,
    @ASSEMBLYNAME nvarchar(255) = null,
    @ATTRIBUTES xml = null,
    @CATEGORYNAME nvarchar(255) = null,
    @ACKNOWLEDGEMENT nvarchar(max) = null,
    @GROUPID uniqueidentifier = null,
    @ISZEROAMOUNTTRANSACTION bit = 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()

    declare @SALESMETHODTYPECODE tinyint;
    declare @STATUSCODE tinyint;
    declare @CURRENTCONSTITUENTID uniqueidentifier;
    declare @CURRENTRECIPIENTID uniqueidentifier;

    select
        @SALESMETHODTYPECODE = SALESMETHODTYPECODE,
        @STATUSCODE = STATUSCODE,
        @CURRENTCONSTITUENTID = CONSTITUENTID,
        @CURRENTRECIPIENTID = RECIPIENTID
    from
        dbo.SALESORDER
    where
        ID = @SALESORDERID;

    begin try
        -- handle inserting the data

        if @STATUSCODE not in (0, 6, 7)
            raiserror('ERR_ORDERNOTPENDING', 13, 1);

        -- If the system has set that households can't be donors, verify that constituent isn't a household

        if dbo.UFN_INSTALLATIONINFO_GETHOUSEHOLDSCANBEDONORS() = 0 and dbo.UFN_CONSTITUENT_ISHOUSEHOLD(@CONSTITUENTID) = 1
            raiserror('HOUSEHOLDSCANNOTBEDONORS', 13, 1);

        -- if the group type can't be a donor, raise an error

        if exists(select GD.ID from dbo.GROUPDATA GD inner join dbo.GROUPTYPE GT on GD.GROUPTYPEID = GT.ID where GD.ID = @CONSTITUENTID and GT.CANBEDONOR = 0)
            raiserror('GROUPCANNOTBEDONOR', 13, 1);

        if @CONSTITUENTID is not null begin
            if @CURRENTCONSTITUENTID is null begin
                update dbo.SALESORDER set
                    CONSTITUENTID = @CONSTITUENTID,
                    DATECHANGED = @CURRENTDATE,
                    CHANGEDBYID = @CHANGEAGENTID
                where ID = @SALESORDERID;
            end

            --Make the CONSTITUENTID the recipient of the order if there is no recipient

            if @CURRENTRECIPIENTID is null begin
                update dbo.[SALESORDER] set
                    [RECIPIENTID] = @CONSTITUENTID,
                    [ADDRESSID] = (select top(1) [ID] from dbo.[ADDRESS] where [CONSTITUENTID] = @CONSTITUENTID and [ISPRIMARY] = 1 and [DONOTMAIL] = 0),
                    [PHONEID] = (select top(1) [ID] from dbo.[PHONE] where [PHONE].[CONSTITUENTID] = @CONSTITUENTID and [PHONE].[ISPRIMARY] = 1 and [DONOTCALL] = 0),
                    [EMAILADDRESSID] = (select top(1) [ID] from dbo.[EMAILADDRESS] where [CONSTITUENTID] = @CONSTITUENTID and [ISPRIMARY] = 1 and [DONOTEMAIL] = 0),
                    [DATECHANGED] = @CURRENTDATE,
                    [CHANGEDBYID] = @CHANGEAGENTID
                where [ID] = @SALESORDERID
            end
        end

        declare @SALESORDERITEMID uniqueidentifier = null
        select @SALESORDERITEMID = [SALESORDERITEMDONATION].[ID]
        from dbo.[SALESORDERITEM]
        inner join dbo.[SALESORDERITEMDONATION]
            on [SALESORDERITEM].[ID] = [SALESORDERITEMDONATION].[ID]
        where 
            [SALESORDERITEMDONATION].[DESIGNATIONID] = @DESIGNATIONID and
            [SALESORDERITEM].[SALESORDERID] = @SALESORDERID

        if @SALESMETHODTYPECODE = 0 and @SALESORDERITEMID is not null
        begin
            set @ID = @SALESORDERITEMID

            update dbo.[SALESORDERITEM] set
                [PRICE] += @AMOUNT,
                [CHANGEDBYID] = @CHANGEAGENTID,
                [DATECHANGED] = @CURRENTDATE
            where [ID] = @SALESORDERITEMID

            update dbo.[SALESORDERITEMDONATION] set
                [AMOUNT] += @AMOUNT,
                [ISZEROAMOUNTTRANSACTION] = @ISZEROAMOUNTTRANSACTION,
                [CHANGEDBYID] = @CHANGEAGENTID,
                [DATECHANGED] = @CURRENTDATE
            where [ID] = @SALESORDERITEMID
        end
        else
        begin
            declare @DESIGNATIONNAME nvarchar(512) = dbo.UFN_DESIGNATION_GETNAME(@DESIGNATIONID)
            if len(@DESCRIPTION) > 0
                set @DESIGNATIONNAME = @DESCRIPTION

            if @DESIGNATIONNAME is not null begin
                insert into dbo.SALESORDERITEM
                (
                    ID, 
                    SALESORDERID, 
                    TYPECODE, 
                    DESCRIPTION, 
                    QUANTITY, 
                    PRICE, 
                    ADDEDBYID, 
                    CHANGEDBYID, 
                    DATEADDED, 
                    DATECHANGED,
                    DATA,
                    OPTIONS,
                    CALLBACKURL,
                    SYSTEMTYPENAME,
                    ASSEMBLYNAME,
                    ATTRIBUTES,
                    CATEGORYNAME,
                    ACKNOWLEDGEMENT
                )
                values
                (
                    @ID
                    @SALESORDERID
                    2
                    @DESIGNATIONNAME
                    1
                    @AMOUNT,
                    @CHANGEAGENTID
                    @CHANGEAGENTID
                    @CURRENTDATE
                    @CURRENTDATE,
                    @DATA,
                    @OPTIONS,
                    @CALLBACKURL,
                    @SYSTEMTYPENAME,
                    @ASSEMBLYNAME,
                    @ATTRIBUTES,
                    @CATEGORYNAME,
                    @ACKNOWLEDGEMENT
                )
            end

            insert into dbo.SALESORDERITEMDONATION
            (
                ID,
                DESIGNATIONID,
                DESIGNATIONNAME,
                AMOUNT,
                ADDEDBYID,
                CHANGEDBYID,
                DATEADDED, 
                DATECHANGED,
                ECARDSDATA,
                ISZEROAMOUNTTRANSACTION
            )
            values
            (
                @ID
                @DESIGNATIONID
                coalesce(@DESIGNATIONNAME,''),
                @AMOUNT,
                @CHANGEAGENTID
                @CHANGEAGENTID
                @CURRENTDATE
                @CURRENTDATE,
                @ECARDSDATA,
                @ISZEROAMOUNTTRANSACTION
            )

            if @GROUPID is not null
            begin
                insert into [dbo].[SALESORDERITEMGROUP]
                (
                    [ID]
                    ,[GROUPID]
                    ,[PARENTID]
                    ,[ADDEDBYID]
                    ,[CHANGEDBYID]
                    ,[DATEADDED]
                    ,[DATECHANGED]
                )
                values
                (
                    @ID,
                    @GROUPID,
                    null,
                    @CHANGEAGENTID
                    @CHANGEAGENTID
                    @CURRENTDATE
                    @CURRENTDATE
                )
            end
        end
    end try

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

    return 0;