USP_SALESORDER_COMPLETE
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@STOREMARKETINGINFORMATION | bit | IN | |
@CONSTITUENTPOSTCODE | nvarchar(12) | IN | |
@CONSTITUENTCOUNTRYID | uniqueidentifier | IN | |
@CURRENTAPPUSERID | uniqueidentifier | IN | |
@UPDATEORDERAPPUSER | bit | IN |
Definition
Copy
create procedure dbo.USP_SALESORDER_COMPLETE
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier,
@STOREMARKETINGINFORMATION bit = 0,
@CONSTITUENTPOSTCODE nvarchar(12) = null,
@CONSTITUENTCOUNTRYID uniqueidentifier = null,
@CURRENTAPPUSERID uniqueidentifier = null,
@UPDATEORDERAPPUSER bit = 0
)
as begin
set nocount on;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
declare @CURRENTDATE datetime
set @CURRENTDATE = getdate()
begin try
-- Save marketing (location) information
-- Moved this to the complete record operation to save a DataFormSave call
if @STOREMARKETINGINFORMATION = 1 and not exists(select 1 from dbo.SALESORDERMARKETINGINFORMATION with (nolock) where ID = @ID) begin
insert into dbo.SALESORDERMARKETINGINFORMATION
(ID, POSTCODE, COUNTRYID, NOTCOLLECTED, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values
(@ID, @CONSTITUENTPOSTCODE, @CONSTITUENTCOUNTRYID, 0, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE)
end
declare @ORDERSTATUS tinyint
declare @CONSTITUENTID uniqueidentifier
declare @SALESMETHODTYPECODE tinyint
declare @TRANSACTIONDATE datetime
declare @DELIVERYMETHODID uniqueidentifier;
select
@ORDERSTATUS = SALESORDER.STATUSCODE,
@CONSTITUENTID = SALESORDER.CONSTITUENTID,
@SALESMETHODTYPECODE = SALESORDER.SALESMETHODTYPECODE,
@TRANSACTIONDATE = SALESORDER.TRANSACTIONDATE,
@DELIVERYMETHODID = SALESORDER.DELIVERYMETHODID
from
dbo.SALESORDER with (nolock)
where
SALESORDER.ID = @ID;
if @UPDATEORDERAPPUSER = 1 begin
update dbo.[SALESORDER]
set
[APPUSERID] = @CURRENTAPPUSERID,
[CHANGEDBYID] = @CHANGEAGENTID,
[DATECHANGED] = @CURRENTDATE
where [ID] = @ID
end
declare @HASSPONSORSHIPS bit = 1;
-- First check if there is a sponsorship in the sales order, if there is one, ignore item sanity checks
-- Item sanity check: This check is mainly to prevent unresolved online sales orders that fail to build out items (memberships, preregistered events) from being completed without the ticket seller correcting the issue
if not exists(select * from dbo.SALESORDERITEM where SALESORDERID = @ID and TYPECODE = 12) begin
set @HASSPONSORSHIPS = 0;
--See if a membership on the order is invalid
declare @MEMBERSHIPERRORCODE tinyint = dbo.UFN_SALESORDER_EXISTSINVALIDMEMBERSHIP_CODE(@ID)
if @MEMBERSHIPERRORCODE = 1
raiserror('BBERR_MEMBERSHIPWITHOUTPRIMARYMEMBER', 13, 1);
else if @MEMBERSHIPERRORCODE = 2
raiserror('BBERR_MEMBERSHIPWITHINACTIVELEVEL', 13, 1);
else if @MEMBERSHIPERRORCODE = 3
raiserror('BBERR_MEMBERSHIPWITHINACTIVETERM', 13, 1);
else if @MEMBERSHIPERRORCODE = 4
raiserror('BBERR_MEMBERSHIP_INACTIVELEVELANDTERM', 13, 1);
--Check that preregistered event items have ticket registrants
if exists(
select 1
from dbo.[SALESORDERITEM]
where
[SALESORDERITEM].[SALESORDERID] = @ID and
[SALESORDERITEM].[TYPECODE] = 0 and
not exists(
select 1
from dbo.[SALESORDERITEMTICKET]
inner join dbo.[PROGRAM]
on [SALESORDERITEMTICKET].[PROGRAMID] = [PROGRAM].[ID]
where
[SALESORDERITEMTICKET].[ID] = [SALESORDERITEM].[ID] and
(
[PROGRAM].[ISPREREGISTERED] = 0 or
exists (
select 1
from dbo.[SALESORDERITEMTICKETREGISTRANT]
where [SALESORDERITEMTICKETREGISTRANT].[SALESORDERITEMTICKETID] = [SALESORDERITEMTICKET].[ID]
)
)
)
)
raiserror('BBERR_PREREGISTEREDEVENTWITHOUTREGISTRANTS', 13, 1);
--Check that event registrations have a registrant
if exists(
select 1
from dbo.[SALESORDERITEM]
where
[SALESORDERITEM].[SALESORDERID] = @ID and
[SALESORDERITEM].[TYPECODE] = 6 and
not exists(
select 1
from dbo.[SALESORDERITEMEVENTREGISTRATION]
where [SALESORDERITEMEVENTREGISTRATION].[ID] = [SALESORDERITEM].[ID]
)
)
raiserror('BBERR_EVENTREGISTRATIONWITHOUTREGISTRANTS', 13, 1);
end
-- Confirm delivery method is set and is not blocked
if @SALESMETHODTYPECODE not in (2, 3) begin -- Online Sales, Group Sales
if @DELIVERYMETHODID is null begin
raiserror('BBERR_DELIVERYMETHODREQUIRED', 13, 1);
end
if dbo.UFN_DELIVERYMETHOD_VALIDFORORDER(@DELIVERYMETHODID, @ID) = 0 begin
raiserror('BBERR_INVALIDDELIVERYMETHOD', 13, 1);
end
-- Confirm required fields for delivery method are set
-- We have to ensure the address actually has an address!
if 0 = dbo.UFN_SALESORDER_VALIDATEDELIVERY(@ID) begin
raiserror('BBERR_RECIPIENTINFOMISSING', 13, 1);
end
end
if @SALESMETHODTYPECODE = 3 and @CONSTITUENTID is null begin
raiserror('BBERR_CONSTITUENTREQUIRED.', 13, 1);
end
if @HASSPONSORSHIPS = 0 begin
exec dbo.USP_SALESORDER_VERIFYZEROBALANCE @ID;
end
exec dbo.USP_SALESORDER_ISCOMPLETE_RAISERROR @ID, @EXCLUDEGROUPSALES = 1, @ORDERSTATUSCODE = @ORDERSTATUS, @SALESMETHODTYPECODE = @SALESMETHODTYPECODE;
declare @REVENUEDATE datetime = dbo.UFN_TIMEZONEENTRY_GETSYSTEMDEFAULTDATEFROMUTC(getutcdate());
if @TRANSACTIONDATE is null begin
set @TRANSACTIONDATE = @REVENUEDATE;
end
if @ORDERSTATUS <> 1 begin
--mark the order as complete
exec dbo.USP_SALESORDER_COMPLETEORDER @ID, @TRANSACTIONDATE, @CONSTITUENTID, @CHANGEAGENTID, @CURRENTDATE, @REVENUEDATE;
end
else begin
update dbo.SALESORDER
set TRANSACTIONDATE = @TRANSACTIONDATE,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID = @ID;
end
end try
begin catch
exec dbo.USP_RAISE_ERROR
return 1
end catch
return 0;
end