USP_DATAFORMTEMPLATE_EDIT_REVENUE_INSTALLMENTS_3

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@AMOUNT money IN
@RESCHEDULEBALANCE money IN
@FREQUENCYCODE tinyint IN
@NUMBEROFINSTALLMENTS int IN
@STARTDATE datetime IN
@INSTALLMENTS xml IN
@ADJPAYMENT_DATE datetime IN
@ADJPAYMENT_POSTDATE datetime IN
@ADJPAYMENT_REASONCODEID uniqueidentifier IN
@ADJPAYMENT_DETAILS nvarchar(255) IN
@INSTALLMENTAMOUNT money IN

Definition

Copy

CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_REVENUE_INSTALLMENTS_3 (
  @ID uniqueidentifier
  ,@CHANGEAGENTID uniqueidentifier = null
  ,@AMOUNT money
  ,@RESCHEDULEBALANCE money
  ,@FREQUENCYCODE tinyint
  ,@NUMBEROFINSTALLMENTS int
  ,@STARTDATE datetime
  ,@INSTALLMENTS xml
  ,@ADJPAYMENT_DATE datetime
  ,@ADJPAYMENT_POSTDATE datetime
  ,@ADJPAYMENT_REASONCODEID uniqueidentifier
  ,@ADJPAYMENT_DETAILS nvarchar(255)
  ,@INSTALLMENTAMOUNT money  
  )
as
begin
  set nocount on;

  declare @CURRENTDATE datetime;
  declare @SUM money;
  declare @INSTALLMENTCOUNT int;
  declare @INSTALLMENTSPLITS xml;    
  begin try
    if @CHANGEAGENTID is null
      exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;

    set @CURRENTDATE = GetDate();

    select @SUM = sum(AMOUNT)
      ,@INSTALLMENTCOUNT = count(AMOUNT)
    from dbo.UFN_INSTALLMENT_GETINSTALLMENTS_2_FROMITEMLISTXML(@INSTALLMENTS);

    if @INSTALLMENTCOUNT = 0
      raiserror (
          'INSTALLMENTCOUNT'
          ,13
          ,1
          );

    if @NUMBEROFINSTALLMENTS > 150
      raiserror (
          'BBERR_NUMINSTALLMENTS'
          ,13
          ,1
          );

    if @SUM <> @AMOUNT
      raiserror (
          'INSTALLMENTSUM'
          ,13
          ,1
          );

    if dbo.UFN_INSTALLMENT_DATESOVERLAP(@INSTALLMENTS) = 1
      raiserror (
          'Installment dates are out of sequence.'
          ,13
          ,1
          );


    declare @BASECURRENCYID uniqueidentifier;
    declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;
    declare @TRANSACTIONCURRENCYID uniqueidentifier;
    declare @BASEEXCHANGERATEID uniqueidentifier;
    declare @ISMEMBERSHIPPLEDGE bit;
    declare @REVENUEDATE datetime;

    select @BASECURRENCYID = CURRENCYSET.BASECURRENCYID
      ,@ORGANIZATIONEXCHANGERATEID = FINANCIALTRANSACTION.ORGEXCHANGERATEID
      ,@TRANSACTIONCURRENCYID = FINANCIALTRANSACTION.TRANSACTIONCURRENCYID
      ,@BASEEXCHANGERATEID = FINANCIALTRANSACTION.BASEEXCHANGERATEID
      ,@ISMEMBERSHIPPLEDGE = case when FINANCIALTRANSACTION.TYPECODE = 15 then 1 else 0 end
      ,@REVENUEDATE = cast(FINANCIALTRANSACTION.date as datetime)
    from dbo.FINANCIALTRANSACTION
    inner join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID
    inner join dbo.PDACCOUNTSYSTEM on FINANCIALTRANSACTION.PDACCOUNTSYSTEMID = PDACCOUNTSYSTEM.ID
    inner join dbo.CURRENCYSET on PDACCOUNTSYSTEM.CURRENCYSETID = CURRENCYSET.ID
    where FINANCIALTRANSACTION.ID = @ID
      and FINANCIALTRANSACTION.DELETEDON is null

    if @FREQUENCYCODE = 4 
      exec dbo.USP_REVENUEINSTALLMENT_VALIDATEINSTALLMENTS @INSTALLMENTS, @REVENUEDATE, @AMOUNT, @ISMEMBERSHIPPLEDGE;

    update dbo.REVENUESCHEDULE
    set FREQUENCYCODE = @FREQUENCYCODE
      ,NUMBEROFINSTALLMENTS = @INSTALLMENTCOUNT
      ,STARTDATE = @STARTDATE
      ,CHANGEDBYID = @CHANGEAGENTID
      ,DATECHANGED = @CURRENTDATE
    where ID = @ID;



    exec dbo.USP_PLEDGE_UPDATEINSTALLMENT3 @ID
      ,@INSTALLMENTS
      ,@CHANGEAGENTID
      ,@CURRENTDATE
      ,@ADJPAYMENT_DATE
      ,@ADJPAYMENT_POSTDATE
      ,@ADJPAYMENT_REASONCODEID
      ,@ADJPAYMENT_DETAILS
      ,@BASECURRENCYID
      ,@ORGANIZATIONEXCHANGERATEID
      ,@TRANSACTIONCURRENCYID
      ,@BASEEXCHANGERATEID

    exec dbo.USP_PLEDGE_VALIDATE @ID;

    merge into dbo.PLEDGEINSTALLMENTOPTION as Target
    using (select ID  from dbo.PLEDGEINSTALLMENTOPTION where ID  = @ID)  as Source
    on (Target.ID = Source.ID)
    when matched then
      update set Target.INSTALLMENTAMOUNT = @INSTALLMENTAMOUNT,
      CHANGEDBYID = @CHANGEAGENTID,
      DATECHANGED = @CURRENTDATE
    when not matched by Target then
        insert 
            (ID
            ,INSTALLMENTAMOUNT
            ,SPLITSCHEDULEOPTIONCODE
            ,ADDEDBYID
            ,CHANGEDBYID
            ,DATEADDED
            ,DATECHANGED)
        values (@ID
            ,case @FREQUENCYCODE when 4 then null else @INSTALLMENTAMOUNT end
            ,0 --@INSTALLMENTSPLITSCHEDULEOPTIONCODE
            ,@CHANGEAGENTID
            ,@CHANGEAGENTID
            ,@CURRENTDATE
            ,@CURRENTDATE);      


  end try

  begin catch
    exec dbo.USP_RAISE_ERROR;

    return 1;
  end catch

  return 0;
end