USP_BANKACCOUNTDEPOSIT_UNLINKEDPAYMENTS_UPDATEFROMXML
This procedure updates the BANKACCOUNTDEPOSITPAYMENT table based on the xml passed from the tree view.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@DEPOSITID | uniqueidentifier | IN | |
@XML | xml | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CHANGEDATE | datetime | IN |
Definition
Copy
CREATE procedure [dbo].[USP_BANKACCOUNTDEPOSIT_UNLINKEDPAYMENTS_UPDATEFROMXML]
(
@DEPOSITID uniqueidentifier,
@XML xml,
@CHANGEAGENTID uniqueidentifier = null,
@CHANGEDATE datetime = null
)
as
set nocount on;
if @CHANGEAGENTID is null
exec USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
if @CHANGEDATE is null
set @CHANGEDATE = getdate()
declare @POSTDATE datetime;
declare @POSTSTATUSCODE tinyint;
declare @REFERENCE nvarchar(100);
declare @TRANSACTIONCURRENCYID uniqueidentifier;
declare @UnlinkedPayments table (AMOUNT money, ID uniqueidentifier primary key, PAYMENTMETHOD nvarchar(14), TRANSACTIONDATE datetime, TRANSACTIONTYPE nvarchar(19))
insert into @UnlinkedPayments (AMOUNT, ID, PAYMENTMETHOD, TRANSACTIONDATE, TRANSACTIONTYPE)
select AMOUNT, ID, PAYMENTMETHOD, TRANSACTIONDATE, TRANSACTIONTYPE
from dbo.UFN_BANKACCOUNTDEPOSIT_UNLINKEDPAYMENTS_FROMITEMLISTXML(@XML)
select @POSTDATE = POSTDATE, @POSTSTATUSCODE = POSTSTATUSCODE, @REFERENCE = REFERENCE, @TRANSACTIONCURRENCYID = TRANSACTIONCURRENCYID
from dbo.BANKACCOUNTTRANSACTION with (nolock)
inner join dbo.BANKACCOUNT with (nolock) on BANKACCOUNT.ID = BANKACCOUNTTRANSACTION.BANKACCOUNTID
where BANKACCOUNTTRANSACTION.ID = @DEPOSITID
update dbo.ADJUSTMENT
set POSTDATE = @POSTDATE, DATECHANGED = @CHANGEDATE, CHANGEDBYID = @CHANGEAGENTID
from dbo.ADJUSTMENT
inner join @UnlinkedPayments as temp on ADJUSTMENT.REVENUEID = temp.ID
where POSTSTATUSCODE <> 0;
if len(@REFERENCE) = 0
begin
declare @AffectedTransactions table (ID uniqueidentifier primary key)
insert into @AffectedTransactions (ID)
select JOURNALENTRY.ID
from @UnLinkedPayments as temp inner join dbo.FINANCIALTRANSACTION on temp.ID = FINANCIALTRANSACTION.ID
inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTION.ID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
inner join dbo.JOURNALENTRY on FINANCIALTRANSACTIONLINEITEM.ID = JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID
inner join dbo.JOURNALENTRY_EXT on JOURNALENTRY.ID = JOURNALENTRY_EXT.ID
where FINANCIALTRANSACTION.TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID
and ((JOURNALENTRY_EXT.TABLENAMECODE in (1,8) and JOURNALENTRY_EXT.OUTDATED = 0)
or (FINANCIALTRANSACTIONLINEITEM.TYPECODE = 1 and FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE = 2))
update dbo.JOURNALENTRY
set POSTDATE = @POSTDATE,
DATECHANGED = @POSTDATE,
CHANGEDBYID = @CHANGEAGENTID
where JOURNALENTRY.ID in (select t2.ID from @AffectedTransactions t2)
end
else
begin
declare @AffectedTransactions2 table (ID uniqueidentifier primary key, PostDate datetime, Reference nvarchar(255))
insert into @AffectedTransactions2 (ID, PostDate, Reference)
select JOURNALENTRY.ID, @POSTDATE,
case when JOURNALENTRY_EXT.TABLENAMECODE = 1 and JOURNALENTRY.TRANSACTIONTYPECODE = 0 and FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE = 1 then @REFERENCE
else JOURNALENTRY.COMMENT
end
from @UnlinkedPayments as temp inner join dbo.FINANCIALTRANSACTION on temp.ID = FINANCIALTRANSACTION.ID
inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTION.ID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
inner join dbo.JOURNALENTRY on FINANCIALTRANSACTIONLINEITEM.ID = JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID
left join dbo.JOURNALENTRY_EXT on JOURNALENTRY.ID = JOURNALENTRY_EXT.ID
where FINANCIALTRANSACTION.TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID
and ((JOURNALENTRY_EXT.TABLENAMECODE in (1,8) and JOURNALENTRY_EXT.OUTDATED = 0)
or (FINANCIALTRANSACTIONLINEITEM.TYPECODE = 1 and FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE = 2)
or (JOURNALENTRY_EXT.TABLENAMECODE = 1 and JOURNALENTRY.TRANSACTIONTYPECODE = 0 and FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE = 1))
update dbo.JOURNALENTRY
set POSTDATE = temp.PostDate,
COMMENT = case when DEPOSITGLDISTRIBUTIONLINK.ID is null then JOURNALENTRY.COMMENT else temp.Reference end,
DATECHANGED = @CHANGEDATE,
CHANGEDBYID = @CHANGEAGENTID
from dbo.JOURNALENTRY inner join @AffectedTransactions2 as temp on JOURNALENTRY.ID = temp.ID
left join dbo.DEPOSITGLDISTRIBUTIONLINK on JOURNALENTRY.ID = DEPOSITGLDISTRIBUTIONLINK.ID
end
-- insert new items
merge dbo.BANKACCOUNTDEPOSITPAYMENT as Target
using (select ID, @DEPOSITID, @CHANGEAGENTID, @CHANGEDATE from @UnlinkedPayments) as Source (ID, DEPOSITID, CHANGEAGENTID, CHANGEDATE)
on (Target.ID = Source.ID)
when matched
then update set DEPOSITID = Source.DEPOSITID,
CHANGEDBYID = Source.CHANGEAGENTID,
DATECHANGED = Source.CHANGEDATE
when not matched by Target
then insert (ID, DEPOSITID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values (Source.ID, Source.DEPOSITID, Source.CHANGEAGENTID, Source.CHANGEAGENTID, Source.CHANGEDATE, Source.ChangeDate);
;
--This thing can still cause deadlocks
exec dbo.USP_BANKACCOUNTDEPOSIT_OVERWRITEMULTIPLEPAYMENTSDEBITACCOUNTS @DEPOSITID, @XML, @CHANGEAGENTID, @CHANGEDATE;
if len(@REFERENCE) > 0
begin
update dbo.JOURNALENTRY
set COMMENT = @REFERENCE,
DATECHANGED = @CHANGEDATE,
CHANGEDBYID = @CHANGEAGENTID
from dbo.JOURNALENTRY inner join dbo.FINANCIALTRANSACTIONLINEITEM on JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM.ID
inner join @UnlinkedPayments as temp on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = temp.ID
inner join dbo.DEPOSITGLDISTRIBUTIONLINK on temp.ID = DEPOSITGLDISTRIBUTIONLINK.ID
inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
inner join dbo.JOURNALENTRY_EXT on JOURNALENTRY.ID = JOURNALENTRY_EXT.ID
where JOURNALENTRY.TRANSACTIONTYPECODE = 0
and FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE = 1
and FINANCIALTRANSACTION.TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID
and (JOURNALENTRY_EXT.TABLENAMECODE = 1 or JOURNALENTRY_EXT.TABLENAMECODE = 2)
if @@Error <> 0
return 2;
return 0;
end