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;