USP_PLEDGE_UPDATEINSTALLMENT
Updates the installments for a pledge.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@PLEDGEID | uniqueidentifier | IN | |
@INSTALLMENTS | xml | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CURRENTDATE | datetime | IN |
Definition
Copy
CREATE procedure dbo.USP_PLEDGE_UPDATEINSTALLMENT
(
@PLEDGEID uniqueidentifier,
@INSTALLMENTS xml,
@CHANGEAGENTID uniqueidentifier,
@CURRENTDATE datetime
)
as
set nocount on;
declare @INSTALLMENTSPLITS xml;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
if @CURRENTDATE is null
set @CURRENTDATE = GetDate();
--We need to make sure all of the installments have an ID so the child objects will update properly
declare @TempTbl table (
[ID] uniqueidentifier,
[DATE] datetime,
[AMOUNT] money,
[BALANCE] money,
[APPLIED] money,
[SEQUENCE] int,
[SPLITID] uniqueidentifier,
[SPLITDESIGNATIONID] uniqueidentifier,
[SPLITAMOUNT] money,
[REVENUESPLITID] uniqueidentifier);
--case when T2.split.value('(ID)[1]','nvarchar(50)') = '' then null else T2.split.value('(ID)[1]','nvarchar(50)') end AS 'SPLITID',
insert into @TempTbl
SELECT
T1.c.value('(ID)[1]','uniqueidentifier') AS 'ID',
T1.c.value('(DATE)[1]','datetime') AS 'DATE',
T1.c.value('(AMOUNT)[1]','money') AS 'AMOUNT',
T1.c.value('(BALANCE)[1]','money') AS 'BALANCE',
T1.c.value('(APPLIED)[1]','money') AS 'APPLIED',
T1.c.value('(SEQUENCE)[1]','int') AS 'SEQUENCE',
T2.split.value('(ID)[1]','nvarchar(50)') AS 'SPLITID',
T2.split.value('(DESIGNATIONID)[1]','uniqueidentifier') AS 'SPLITDESIGNATIONID',
T2.split.value('(AMOUNT)[1]','money') AS 'SPLITAMOUNT',
T2.split.value('(REVENUESPLITID)[1]', 'uniqueidentifier') as 'REVENUESPLITID'
from @INSTALLMENTS.nodes('/INSTALLMENTS/ITEM') T1(c)
cross apply T1.c.nodes('./INSTALLMENTSPLITS/ITEM') as T2(split);
declare @TempSeqTbl table (
[ID] uniqueidentifier,
[SEQUENCE] int);
insert into @TempSeqTbl
select newid() ID, MISSINGID.SEQUENCE
from (select distinct SEQUENCE from @TempTbl where id is null) MISSINGID
update a
set ID = b.ID
from @TempTbl a
inner join @TempSeqTbl b
on a.SEQUENCE = b.SEQUENCE;
set @INSTALLMENTS = (select distinct
ID, DATE, AMOUNT, BALANCE, APPLIED, SEQUENCE
from @TempTbl
for xml raw('ITEM'),type,elements,root('INSTALLMENTS'),BINARY BASE64);
set @INSTALLMENTSPLITS = (select distinct
SPLITID ID, ID INSTALLMENTID, SPLITDESIGNATIONID DESIGNATIONID, SPLITAMOUNT AMOUNT, REVENUESPLITID
from @TempTbl
for xml raw('ITEM'),type,elements,root('INSTALLMENTSPLITS'),BINARY BASE64);
exec dbo.USP_INSTALLMENT_GETINSTALLMENTS_UPDATEFROMXML @PLEDGEID, @INSTALLMENTS, @CHANGEAGENTID, @CURRENTDATE;
exec dbo.USP_PLEDGE_GETINSTALLMENTSPLITS_UPDATEFROMXML @PLEDGEID, @INSTALLMENTSPLITS, @CHANGEAGENTID, @CURRENTDATE;