TR_BANKACCOUNTDEPOSITCREDITPAYMENT_IUD
Definition
Copy
CREATE trigger [dbo].[TR_BANKACCOUNTDEPOSITCREDITPAYMENT_IUD]
on [dbo].[BANKACCOUNTDEPOSITCREDITPAYMENT]
for insert,update,delete
not for replication
as
begin
set nocount on
--see if the new deposit is locked - if so, raise an error
if exists(
select INSERTED.DEPOSITID
from INSERTED
inner join dbo.[BANKACCOUNTDEPOSIT]
on [BANKACCOUNTDEPOSIT].[ID] = INSERTED.DEPOSITID
where
INSERTED.DEPOSITID is not null and
[BANKACCOUNTDEPOSIT].[STATUSCODE] = 0
)
begin
raiserror('Refund payments cannot be added to locked deposits.', 16, 1)
rollback
end
--see if the new bank is closed - if so, raise an error
if exists(
select INSERTED.DEPOSITID
from INSERTED
inner join dbo.[BANKACCOUNTTRANSACTION]
on INSERTED.DEPOSITID = [BANKACCOUNTTRANSACTION].[ID]
inner join dbo.[BANKACCOUNT]
on [BANKACCOUNTTRANSACTION].[BANKACCOUNTID] = [BANKACCOUNT].[ID]
where [BANKACCOUNT].[STATUSCODE] = 0
)
begin
raiserror('Refund payments cannot be added to deposits associated with closed bank accounts.', 16, 1)
rollback
end
--see if the payment method is invalid for the new deposit - if so, raise an error
if exists(
select INSERTED.DEPOSITID
from INSERTED
inner join dbo.[BANKACCOUNTTRANSACTION]
on INSERTED.DEPOSITID = [BANKACCOUNTTRANSACTION].[ID]
where dbo.[UFN_BANKACCOUNTDEPOSIT_VALIDCREDITPAYMENTTYPE](INSERTED.DEPOSITID, INSERTED.ID) = 0
)
begin
raiserror('The selected refund method is not allowed for the deposit specified.', 16, 1)
rollback
end
--*********************************************
--place all error conditions ABOVE this comment
--*********************************************
begin try
--update the new deposit's payment amount
update dbo.BANKACCOUNTDEPOSIT
set
TOTALPAYMENTAMOUNT = DEPOSIT2.TOTALPAYMENTAMOUNT - T1.AMOUNT
,CHANGEDBYID = DEPOSIT2.CHANGEDBYID
,DATECHANGED = DEPOSIT2.DATECHANGED
FROM (SELECT INSERTED.DEPOSITID, SUM(COALESCE(CREDITPAYMENT.AMOUNT,0)) AMOUNT
FROM INSERTED
INNER JOIN dbo.BANKACCOUNTTRANSACTION DEPOSIT1 ON INSERTED.DEPOSITID=DEPOSIT1.ID
INNER JOIN CREDITPAYMENT ON INSERTED.ID=CREDITPAYMENT.ID
GROUP BY INSERTED.DEPOSITID) T1
INNER JOIN dbo.BANKACCOUNTDEPOSIT DEPOSIT2 ON T1.DEPOSITID =DEPOSIT2.ID
merge into dbo.BANKACCOUNTTRANSACTION
using (SELECT INSERTED.DEPOSITID, SUM(COALESCE(CREDITPAYMENT.AMOUNT,0)) AMOUNT
FROM INSERTED
INNER JOIN dbo.BANKACCOUNTTRANSACTION DEPOSIT1 ON INSERTED.DEPOSITID=DEPOSIT1.ID
INNER JOIN CREDITPAYMENT ON INSERTED.ID=CREDITPAYMENT.ID
GROUP BY INSERTED.DEPOSITID
) T1 on T1.DEPOSITID = BANKACCOUNTTRANSACTION.ID
when matched then update set
TRANSACTIONAMOUNT = BANKACCOUNTTRANSACTION.TRANSACTIONAMOUNT - T1.AMOUNT
,AMOUNT = BANKACCOUNTTRANSACTION.AMOUNT - T1.AMOUNT
,ORGANIZATIONAMOUNT = BANKACCOUNTTRANSACTION.ORGANIZATIONAMOUNT - T1.AMOUNT
,CHANGEDBYID = BANKACCOUNTTRANSACTION.CHANGEDBYID
,DATECHANGED = BANKACCOUNTTRANSACTION.DATECHANGED;
--update the old deposit's payment amount
update dbo.BANKACCOUNTDEPOSIT
set
TOTALPAYMENTAMOUNT = DEPOSIT2.TOTALPAYMENTAMOUNT + T1.AMOUNT
,CHANGEDBYID = DEPOSIT2.CHANGEDBYID
,DATECHANGED = DEPOSIT2.DATECHANGED
FROM (SELECT DELETED.DEPOSITID, SUM(COALESCE(CREDITPAYMENT.AMOUNT,0)) AMOUNT
FROM DELETED
INNER JOIN dbo.BANKACCOUNTTRANSACTION DEPOSIT1 ON DELETED.DEPOSITID=DEPOSIT1.ID
INNER JOIN CREDITPAYMENT ON DELETED.ID=CREDITPAYMENT.ID
GROUP BY DELETED.DEPOSITID) T1
INNER JOIN dbo.BANKACCOUNTDEPOSIT DEPOSIT2 ON T1.DEPOSITID =DEPOSIT2.ID
merge into dbo.BANKACCOUNTTRANSACTION
using (SELECT DELETED.DEPOSITID, SUM(COALESCE(CREDITPAYMENT.AMOUNT,0)) AMOUNT
FROM DELETED
INNER JOIN dbo.BANKACCOUNTTRANSACTION DEPOSIT1 ON DELETED.DEPOSITID=DEPOSIT1.ID
INNER JOIN CREDITPAYMENT ON DELETED.ID=CREDITPAYMENT.ID
GROUP BY DELETED.DEPOSITID
) T1 on T1.DEPOSITID = BANKACCOUNTTRANSACTION.ID
when matched then update set
TRANSACTIONAMOUNT = BANKACCOUNTTRANSACTION.TRANSACTIONAMOUNT + T1.AMOUNT
,AMOUNT = BANKACCOUNTTRANSACTION.AMOUNT + T1.AMOUNT
,ORGANIZATIONAMOUNT = BANKACCOUNTTRANSACTION.ORGANIZATIONAMOUNT + T1.AMOUNT
,CHANGEDBYID = BANKACCOUNTTRANSACTION.CHANGEDBYID
,DATECHANGED = BANKACCOUNTTRANSACTION.DATECHANGED;
end try
begin catch
--Catch the arithmetic overflow error and re-raise a prettier one
if ERROR_NUMBER() = 8115
begin
--NOTE: the following error message needs to be revisited
raiserror('The maximum supported deposit amount has been exceeded.', 16, 1)
rollback transaction
end
else
exec dbo.USP_RAISE_ERROR
end catch
end