USP_DATAFORMTEMPLATE_EDIT_SALESORDERITEMEVENTREGISTRATION
The save procedure used by the edit dataform template "Sales Order Item Event Registration Edit Data Form".
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | The input ID parameter indicating the ID of the record being edited. |
@CHANGEAGENTID | uniqueidentifier | IN | Input parameter indicating the ID of the change agent invoking the procedure. |
@REGISTRANTID | uniqueidentifier | IN | Event registration |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_SALESORDERITEMEVENTREGISTRATION
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@REGISTRANTID uniqueidentifier
)
as
set nocount on;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
declare @CURRENTDATE datetime
set @CURRENTDATE = getdate()
declare @CONSTITUENTID uniqueidentifier
declare @EVENTID uniqueidentifier
select
@EVENTID = [EVENTID],
@CONSTITUENTID = [CONSTITUENTID]
from dbo.[REGISTRANT]
where [ID] = @REGISTRANTID
--The user could have selected multiple events in which to register
--(if event selected was within a main event)
--Determine those other events
declare @REGISTRANTEVENTS table ([EVENTID] uniqueidentifier)
insert @REGISTRANTEVENTS ([EVENTID])
values(@EVENTID)
insert @REGISTRANTEVENTS
select [EVENT].[ID]
from (select [ID], [MAINEVENTID] from dbo.[EVENT] where [ID] = @EVENTID) as [REGISTRANTEVENT]
inner join dbo.[EVENT]
on [REGISTRANTEVENT].[MAINEVENTID] = [EVENT].[MAINEVENTID] or
[REGISTRANTEVENT].[MAINEVENTID] = [EVENT].[ID] or
[REGISTRANTEVENT].[ID] = [EVENT].[MAINEVENTID]
--Determine which other registrations could have been created/altered
declare @REGISTRATIONS table (
[ID] uniqueidentifier,
[REGISTRANTID] uniqueidentifier,
[EVENTID] uniqueidentifier,
[EVENTNAME] nvarchar(100),
[AMOUNT] money -- Balance
)
insert @REGISTRATIONS
select
coalesce(( --Get sales order item id for registrations that already exist in order
select [SALESORDERITEMEVENTREGISTRATION].[ID]
from dbo.[SALESORDERITEMEVENTREGISTRATION]
inner join dbo.[SALESORDERITEM]
on [SALESORDERITEMEVENTREGISTRATION].[ID] = [SALESORDERITEM].[ID]
where
[SALESORDERITEM].[SALESORDERID] = @ID and
[SALESORDERITEMEVENTREGISTRATION].[REGISTRANTID] = [REGISTRANT].[ID]
),newid()),
[REGISTRANT].[ID],
[EVENT].[ID],
[EVENT].[NAME],
dbo.UFN_EVENTREGISTRANT_GETBALANCE([REGISTRANT].[ID]) as [AMOUNT]
from dbo.[REGISTRANT]
inner join dbo.[EVENT]
on [REGISTRANT].[EVENTID] = [EVENT].[ID]
left join dbo.[REGISTRANTREGISTRATION]
on [REGISTRANT].[ID] = [REGISTRANTREGISTRATION].[REGISTRANTID]
where
(
[REGISTRANT].[EVENTID] in (select [EVENTID] from @REGISTRANTEVENTS) and
[REGISTRANT].[CONSTITUENTID] = @CONSTITUENTID
)
group by
[REGISTRANT].[ID],
[EVENT].[ID],
[EVENT].[NAME]
--Add/Update Sales order items
begin try
exec dbo.USP_SALESORDER_ISCOMPLETE_RAISERROR @ID, @EXCLUDEGROUPSALES = 1;
--Update registrations that may have changed through registration form
update dbo.[SALESORDERITEM]
set
[PRICE] = (
select [AMOUNT]
from @REGISTRATIONS as [REGISTRATIONS]
inner join dbo.[SALESORDERITEMEVENTREGISTRATION]
on [REGISTRATIONS].[REGISTRANTID] = [SALESORDERITEMEVENTREGISTRATION].[REGISTRANTID]
where [SALESORDERITEMEVENTREGISTRATION].[ID] = [SALESORDERITEM].[ID]
),
[CHANGEDBYID] = @CHANGEAGENTID,
[DATECHANGED] = @CURRENTDATE
where exists (
select [REGISTRATIONS].[REGISTRANTID]
from @REGISTRATIONS as [REGISTRATIONS]
inner join dbo.[SALESORDERITEMEVENTREGISTRATION]
on [REGISTRATIONS].[REGISTRANTID] = [SALESORDERITEMEVENTREGISTRATION].[REGISTRANTID]
inner join dbo.[SALESORDERITEM] as [SOI]
on [SALESORDERITEMEVENTREGISTRATION].[ID] = [SOI].[ID]
where
[SALESORDERITEM].[SALESORDERID] = @ID and
[SOI].[ID] = [SALESORDERITEM].[ID] and
[REGISTRATIONS].[AMOUNT] >= 0
)
update dbo.[SALESORDERITEMEVENTREGISTRANTREGISTRATION]
set
[QUANTITY] = (
select coalesce(sum([REGISTRANTREGISTRATION].[QUANTITY]),0)
from dbo.[SALESORDERITEMEVENTREGISTRATION]
inner join dbo.[REGISTRANTREGISTRATION]
on [SALESORDERITEMEVENTREGISTRATION].[REGISTRANTID] = [REGISTRANTREGISTRATION].[REGISTRANTID]
where
[REGISTRANTREGISTRATION].[EVENTPRICEID] = [SALESORDERITEMEVENTREGISTRANTREGISTRATION].[EVENTPRICEID] and
[SALESORDERITEMEVENTREGISTRATION].[ID] = [SALESORDERITEMEVENTREGISTRANTREGISTRATION].[SALESORDERITEMEVENTREGISTRATIONID]
),
[AMOUNT] = (
select coalesce(sum([REGISTRANTREGISTRATION].[AMOUNT]),0)
from dbo.[SALESORDERITEMEVENTREGISTRATION]
inner join dbo.[REGISTRANTREGISTRATION]
on [SALESORDERITEMEVENTREGISTRATION].[REGISTRANTID] = [REGISTRANTREGISTRATION].[REGISTRANTID]
where
[REGISTRANTREGISTRATION].[EVENTPRICEID] = [SALESORDERITEMEVENTREGISTRANTREGISTRATION].[EVENTPRICEID] and
[SALESORDERITEMEVENTREGISTRATION].[ID] = [SALESORDERITEMEVENTREGISTRANTREGISTRATION].[SALESORDERITEMEVENTREGISTRATIONID]
),
[CHANGEDBYID] = @CHANGEAGENTID,
[DATECHANGED] = @CURRENTDATE
where exists (
select [SALESORDERITEMEVENTREGISTRATION].[REGISTRANTID]
from @REGISTRATIONS as [REGISTRATIONS]
inner join dbo.[REGISTRANTREGISTRATION]
on [REGISTRATIONS].[REGISTRANTID] = [REGISTRANTREGISTRATION].[REGISTRANTID]
inner join dbo.[SALESORDERITEMEVENTREGISTRATION]
on [REGISTRATIONS].[REGISTRANTID] = [SALESORDERITEMEVENTREGISTRATION].[REGISTRANTID]
inner join dbo.[SALESORDERITEM]
on [SALESORDERITEM].[ID] = [SALESORDERITEMEVENTREGISTRATION].[ID]
where
[SALESORDERITEM].[SALESORDERID] = @ID and
[SALESORDERITEMEVENTREGISTRATION].[REGISTRANTID] = [REGISTRATIONS].[REGISTRANTID] and
[SALESORDERITEMEVENTREGISTRANTREGISTRATION].[EVENTPRICEID] = [REGISTRANTREGISTRATION].[EVENTPRICEID] and
[REGISTRATIONS].[AMOUNT] >= 0
)
insert into dbo.[SALESORDERITEM]
(
[ID],
[SALESORDERID],
[TYPECODE],
[DESCRIPTION],
[QUANTITY],
[PRICE],
[ADDEDBYID],
[CHANGEDBYID],
[DATEADDED],
[DATECHANGED]
)
select
[ID],
@ID,
6,
[EVENTNAME],
1,
[AMOUNT],
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from @REGISTRATIONS as [REGISTRATIONS]
where
--Registration is not already in order
[REGISTRANTID] not in (
select [SALESORDERITEMEVENTREGISTRATION].[REGISTRANTID]
from dbo.[SALESORDERITEMEVENTREGISTRATION]
inner join dbo.[SALESORDERITEM]
on [SALESORDERITEM].[ID] = [SALESORDERITEMEVENTREGISTRATION].[ID]
where [SALESORDERITEM].[SALESORDERID] = @ID
) and
--Is not negative
[REGISTRATIONS].[AMOUNT] >= 0
insert into dbo.[SALESORDERITEMEVENTREGISTRATION]
(
[ID],
[REGISTRANTID],
[EVENTNAME],
[ADDEDBYID],
[CHANGEDBYID],
[DATEADDED],
[DATECHANGED]
)
select
[ID],
[REGISTRANTID],
coalesce((select [EVENT].[NAME] from dbo.[EVENT] where [EVENT].[ID] = [REGISTRATIONS].[EVENTID]),''),
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from @REGISTRATIONS as [REGISTRATIONS]
where
--Registration not already in order
[REGISTRANTID] not in (
select [SALESORDERITEMEVENTREGISTRATION].[REGISTRANTID]
from dbo.[SALESORDERITEMEVENTREGISTRATION]
inner join dbo.[SALESORDERITEM]
on [SALESORDERITEM].[ID] = [SALESORDERITEMEVENTREGISTRATION].[ID]
where [SALESORDERITEM].[SALESORDERID] = @ID
) and
--Is not negative
[REGISTRATIONS].[AMOUNT] >= 0
insert into dbo.[SALESORDERITEMEVENTREGISTRANTREGISTRATION]
(
[ID],
[SALESORDERITEMEVENTREGISTRATIONID],
[EVENTPRICEID],
[QUANTITY],
[AMOUNT],
[ADDEDBYID],
[CHANGEDBYID],
[DATEADDED],
[DATECHANGED]
)
select
newid(),
[REGISTRATIONS].[ID],
[REGISTRANTREGISTRATION].[EVENTPRICEID],
coalesce(sum([REGISTRANTREGISTRATION].[QUANTITY]),0),
coalesce(sum([REGISTRANTREGISTRATION].[AMOUNT]),0),
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from @REGISTRATIONS as [REGISTRATIONS]
inner join dbo.[REGISTRANTREGISTRATION]
on [REGISTRATIONS].[REGISTRANTID] = [REGISTRANTREGISTRATION].[REGISTRANTID]
where not exists ( --Allows for new pricing information on new and altered registrations
select [SALESORDERITEMEVENTREGISTRATION].[REGISTRANTID]
from dbo.[SALESORDERITEMEVENTREGISTRATION]
inner join dbo.[SALESORDERITEM]
on [SALESORDERITEM].[ID] = [SALESORDERITEMEVENTREGISTRATION].[ID]
inner join dbo.[SALESORDERITEMEVENTREGISTRANTREGISTRATION]
on [SALESORDERITEMEVENTREGISTRATION].[ID] = [SALESORDERITEMEVENTREGISTRANTREGISTRATION].[SALESORDERITEMEVENTREGISTRATIONID]
where
[SALESORDERITEM].[SALESORDERID] = @ID and
[SALESORDERITEMEVENTREGISTRATION].[REGISTRANTID] = [REGISTRATIONS].[REGISTRANTID] and
[SALESORDERITEMEVENTREGISTRANTREGISTRATION].[EVENTPRICEID] = [REGISTRANTREGISTRATION].[EVENTPRICEID]
) and
--Is not negative
[REGISTRATIONS].[AMOUNT] >= 0
group by
[REGISTRANTREGISTRATION].[EVENTPRICEID],
[REGISTRATIONS].[ID]
--Delete sales order items that have been edited to negative balance
declare @ORDERITEM uniqueidentifier = null
declare deletezeroitems_cursor cursor local fast_forward for
select [ID]
from dbo.[SALESORDERITEM]
where exists (
select [REGISTRATIONS].[REGISTRANTID]
from @REGISTRATIONS as [REGISTRATIONS]
inner join dbo.[SALESORDERITEMEVENTREGISTRATION]
on [REGISTRATIONS].[REGISTRANTID] = [SALESORDERITEMEVENTREGISTRATION].[REGISTRANTID]
inner join dbo.[SALESORDERITEM] as [SOI]
on [SALESORDERITEMEVENTREGISTRATION].[ID] = [SOI].[ID]
where
[REGISTRATIONS].[AMOUNT] < 0 and
[SALESORDERITEM].[SALESORDERID] = @ID and
[SOI].[ID] = [SALESORDERITEM].[ID]
)
OPEN deletezeroitems_cursor
FETCH NEXT FROM deletezeroitems_cursor
INTO @ORDERITEM
while @@FETCH_STATUS = 0
begin
exec dbo.USP_SALESORDERITEM_DELETE @ORDERITEM, @CHANGEAGENTID
FETCH NEXT FROM deletezeroitems_cursor
INTO @ORDERITEM
end
close deletezeroitems_cursor
deallocate deletezeroitems_cursor
--Delete pricing data that has been deleted
declare deleteprice_cursor cursor local fast_forward for
select [SALESORDERITEMEVENTREGISTRANTREGISTRATION].[ID]
from dbo.[SALESORDERITEMEVENTREGISTRANTREGISTRATION]
inner join dbo.[SALESORDERITEMEVENTREGISTRATION]
on [SALESORDERITEMEVENTREGISTRANTREGISTRATION].[SALESORDERITEMEVENTREGISTRATIONID] = [SALESORDERITEMEVENTREGISTRATION].[ID]
inner join dbo.[SALESORDERITEM]
on [SALESORDERITEMEVENTREGISTRATION].[ID] = [SALESORDERITEM].[ID]
where
[SALESORDERITEMEVENTREGISTRANTREGISTRATION].[EVENTPRICEID] not in (
select [EVENTPRICEID]
from dbo.[REGISTRANTREGISTRATION]
where [REGISTRANTREGISTRATION].[REGISTRANTID] = [SALESORDERITEMEVENTREGISTRATION].[REGISTRANTID]
) and
[SALESORDERITEM].[SALESORDERID] = @ID
OPEN deleteprice_cursor
FETCH NEXT FROM deleteprice_cursor
INTO @ORDERITEM
while @@FETCH_STATUS = 0
begin
exec dbo.USP_SALESORDERITEMEVENTREGISTRANTREGISTRATION_DELETEBYID_WITHCHANGEAGENTID @ORDERITEM, @CHANGEAGENTID
FETCH NEXT FROM deleteprice_cursor
INTO @ORDERITEM
end
close deleteprice_cursor
deallocate deleteprice_cursor
end try
begin catch
exec dbo.USP_RAISE_ERROR
return 1
end catch
return 0