USP_DATAFORMTEMPLATE_ADD_DAILYSALESORDERITEM

The save procedure used by the add dataform template "Daily Sales Order Item 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.
@PROGRAMID uniqueidentifier IN Program
@QUANTITY smallint IN Quantity
@PRICETYPECODEID uniqueidentifier IN Price type
@PRICE money IN
@DAILYSALESADMISSIONBUTTONID uniqueidentifier IN

Definition

Copy

                CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_DAILYSALESORDERITEM
                (
                    @ID uniqueidentifier = null output,
                    @SALESORDERID uniqueidentifier,
                    @CHANGEAGENTID uniqueidentifier = null,
                    @PROGRAMID uniqueidentifier = null,
                    @QUANTITY smallint = null,
                    @PRICETYPECODEID uniqueidentifier = null,
                    @PRICE money = null,
                    @DAILYSALESADMISSIONBUTTONID uniqueidentifier = null
                )
                as

                set nocount on;

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

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

                if @DAILYSALESADMISSIONBUTTONID is not null begin
                    select
                        @PROGRAMID = DAILYSALEITEMPROGRAM.PROGRAMID,
                        @PRICETYPECODEID = DAILYSALEITEMPROGRAM.PRICETYPECODEID,
                        @PRICE = FACEPRICE
                    from dbo.DAILYSALEITEMPROGRAM
                    inner join dbo.PROGRAMPRICE 
                        on PROGRAMPRICE.PROGRAMID = DAILYSALEITEMPROGRAM.PROGRAMID
                        and PROGRAMPRICE.PRICETYPECODEID = DAILYSALEITEMPROGRAM.PRICETYPECODEID
                    where DAILYSALEITEMPROGRAM.ID = @DAILYSALESADMISSIONBUTTONID
                end

                declare @EXISTINGID uniqueidentifier = dbo.UFN_SALESORDERITEM_GETEXISTINGIDFORPROGRAM(@SALESORDERID, @PROGRAMID, @PRICETYPECODEID);

                begin try
                    exec dbo.USP_SALESORDER_ISCOMPLETE_RAISERROR @SALESORDERID, @EXCLUDEGROUPSALES = 1;

                    --new one
                    if @EXISTINGID is null begin
                        if @ID is null
                            set @ID = newid();

                        declare @PROGRAMNAME nvarchar(100);
                        declare @PROGRAMCATEGORYCODEDESCRIPTION nvarchar(100);

                        select
                            @PROGRAMNAME = PROGRAM.NAME,
                            @PROGRAMCATEGORYCODEDESCRIPTION = isnull(PROGRAMCATEGORYCODE.DESCRIPTION, N'')
                        from
                            dbo.PROGRAM
                        left outer join
                            dbo.PROGRAMCATEGORYCODE on PROGRAMCATEGORYCODE.ID = PROGRAM.PROGRAMCATEGORYCODEID
                        where
                            PROGRAM.ID = @PROGRAMID;

                        insert into dbo.SALESORDERITEM
                            (ID, SALESORDERID, TYPECODE, DESCRIPTION, QUANTITY, PRICE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                        select
                            @ID
                            @SALESORDERID
                            0
                            (select DESCRIPTION from dbo.PRICETYPECODE where ID = @PRICETYPECODEID) + ' - ' + @PROGRAMNAME
                            @QUANTITY
                            @PRICE,
                            @CHANGEAGENTID
                            @CHANGEAGENTID
                            @CURRENTDATE
                            @CURRENTDATE

                        insert into dbo.SALESORDERITEMTICKET
                        (
                            ID,
                            PROGRAMID,
                            PROGRAMNAME,
                            PROGRAMCATEGORYNAME,
                            PRICETYPECODEID,
                            PRICE,
                            ADDEDBYID,
                            CHANGEDBYID,
                            DATEADDED, 
                            DATECHANGED
                        )
                        select
                            @ID
                            @PROGRAMID
                            @PROGRAMNAME,
                            @PROGRAMCATEGORYCODEDESCRIPTION,
                            @PRICETYPECODEID,
                            @PRICE,
                            @CHANGEAGENTID
                            @CHANGEAGENTID
                            @CURRENTDATE
                            @CURRENTDATE
                    end
                    else begin
                        --existing one
                        update dbo.SALESORDERITEM set
                            SALESORDERITEM.QUANTITY += @QUANTITY,
                            CHANGEDBYID = @CHANGEAGENTID,
                            DATECHANGED = @CURRENTDATE
                        where 
                            SALESORDERITEM.ID = @EXISTINGID;

                        -- A bit of a hack considering this add form
                        -- may only be editing an existing record
                        set @ID = @EXISTINGID;
                    end

                    exec dbo.USP_SALESORDER_CALCULATEFEES @SALESORDERID, @CHANGEAGENTID;
                    exec dbo.USP_SALESORDER_APPLYITEMDISCOUNTS @SALESORDERID, @CHANGEAGENTID;
                    exec dbo.USP_SALESORDER_APPLYORDERDISCOUNTS @SALESORDERID, @CHANGEAGENTID;
                    exec dbo.USP_SALESORDER_CALCULATETAXES @SALESORDERID, @CHANGEAGENTID;
                end try

                begin catch
                    if ERROR_NUMBER() = 8115
                        raiserror('ERR_TICKETINSERT_MONEYOVERFLOW', 13, 1)

                    exec dbo.USP_RAISE_ERROR
                    return 1
                end catch

                return 0