USP_DATAFORMTEMPLATE_EDIT_INVOICE

The save procedure used by the edit dataform template "Invoice Edit Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN The input ID parameter indicating the ID of the record being edited.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@NUMBER nvarchar(60) IN Invoice number
@VENDORID uniqueidentifier IN Vendor
@AMOUNT money IN Invoice amount
@DATE datetime IN Invoice date
@PURCHASEORDERID nvarchar(20) IN PO number
@DATEDUE datetime IN Due date
@POSTSTATUSCODE tinyint IN Post status
@POSTDATE datetime IN Post date
@DISCOUNTPERCENT numeric(20, 4) IN Discount percent
@DISCOUNTAMOUNT money IN Discount amount
@DISCOUNTEXPIRATIONDATE datetime IN Discount expiration date
@PAYMENTMETHODCODE tinyint IN Payment method
@BANKACCOUNTID uniqueidentifier IN Bank account
@REMITADDRESSID uniqueidentifier IN Remit to address
@SEPARATEPAYMENT bit IN Create a separate disbursement for this invoice
@FREQUENCYCODE smallint IN Frequency
@SCHEDULESTARTDATE date IN Starting on
@NUMBEROFINSTALLMENTS int IN No. installments
@INVOICESCHEDULES xml IN Invoice schedules
@HASSCHEDULE bit IN Has Schedule
@DESCRIPTION nvarchar(100) IN Invoice description
@LINEITEMS xml IN Line items

Definition

Copy

CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_INVOICE (
    @ID uniqueidentifier
    ,@CHANGEAGENTID uniqueidentifier = null
    ,@NUMBER nvarchar(60)
    ,@VENDORID uniqueidentifier
    ,@AMOUNT money
    ,@DATE datetime
    ,@PURCHASEORDERID nvarchar(20)
    ,@DATEDUE datetime
    ,@POSTSTATUSCODE tinyint
    ,@POSTDATE datetime
    ,@DISCOUNTPERCENT numeric(20,4)
    ,@DISCOUNTAMOUNT money
    ,@DISCOUNTEXPIRATIONDATE datetime
    ,@PAYMENTMETHODCODE tinyint
    ,@BANKACCOUNTID uniqueidentifier
    ,@REMITADDRESSID uniqueidentifier
    ,@SEPARATEPAYMENT bit
  ,@FREQUENCYCODE smallint
  ,@SCHEDULESTARTDATE date 
  ,@NUMBEROFINSTALLMENTS integer
  ,@INVOICESCHEDULES xml
  ,@HASSCHEDULE bit
    ,@DESCRIPTION nvarchar(100)
    ,@LINEITEMS xml
)
as

    set nocount on;

    declare @CURRENTDATE datetime;

    begin try
        if @CHANGEAGENTID is null  
            exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;

        set @CURRENTDATE = getdate();

    if @POSTSTATUSCODE = 3 and @POSTDATE is not null
      set @POSTDATE = null;

    if @AMOUNT <= 0 
      raiserror('ERR_NOT_ALLOW_ZEROAMOUNT', 13, 1);   

        exec dbo.USP_FINANCIALTRANSACTION_EDIT @ID, @CHANGEAGENTID, @VENDORID, @NUMBER, @AMOUNT, @DATE, @POSTDATE, @POSTSTATUSCODE, @DESCRIPTION;
    exec dbo.USP_FINANCIALTRANSACTIONSCHEDULE_UPDATE @ID, @CHANGEAGENTID, @AMOUNT, @DATEDUE;

        if @LINEITEMS is null
            raiserror('ERR_FINANCIALTRANSACTION_LINEITEM_TOTALAMOUNT', 13,1);

    exec dbo.USP_FINANCIALTRANSACTIOLINEITEM_EDIT @ID, @CHANGEAGENTID, @LINEITEMS;

        -- Recalc from DISCOUNTTOTAL to get DISCOUNTAMOUNT or DISCOUNTPERCENT if one or the other is missing
        -- We don't do both because we have to trust what is given due to mathematical value constraints.
        if @DISCOUNTAMOUNT = 0 and @DISCOUNTPERCENT > 0
            set @DISCOUNTAMOUNT = @AMOUNT / @DISCOUNTPERCENT;
        else if @DISCOUNTPERCENT = 0 and @DISCOUNTAMOUNT > 0 and @AMOUNT > 0
            set @DISCOUNTPERCENT = (@DISCOUNTAMOUNT / @AMOUNT) * 100;

    exec dbo.USP_INVOICE_VALIDATE @ID,@DATEDUE,@REMITADDRESSID,@DISCOUNTPERCENT,@DISCOUNTAMOUNT,@DISCOUNTEXPIRATIONDATE,@PAYMENTMETHODCODE,@SEPARATEPAYMENT,@BANKACCOUNTID 

        update dbo.INVOICE set
            DATEDUE = @DATEDUE,
            PURCHASEORDERID = @PURCHASEORDERID,
            REMITADDRESSID = @REMITADDRESSID,
            DISCOUNTAMOUNT = @DISCOUNTAMOUNT,
            DISCOUNTEXPIRATIONDATE = @DISCOUNTEXPIRATIONDATE,
            DISCOUNTPERCENT = @DISCOUNTPERCENT,
            SEPARATEPAYMENT = @SEPARATEPAYMENT,
            BANKACCOUNTID = @BANKACCOUNTID,
            CHANGEDBYID = @CHANGEAGENTID,
            DATECHANGED = @CURRENTDATE
        where ID = @ID;

    if exists (select ID from dbo.FINANCIALTRANSACTION1099DISTRIBUTION where FINANCIALTRANSACTIONID = @ID)
      exec dbo.USP_UPDATE1099DISTRIBUTION @ID, @AMOUNT;

    if @HASSCHEDULE = 1
      exec dbo.USP_DATAFORMTEMPLATE_EDIT_UNPAIDINVOICESCHEDULE @ID,@CHANGEAGENTID,@FREQUENCYCODE,@SCHEDULESTARTDATE,@NUMBEROFINSTALLMENTS,@INVOICESCHEDULES;

    if exists (
      select FTS.FINANCIALTRANSACTIONID
        from dbo.FINANCIALTRANSACTIONSCHEDULE as FTS
      where 
        FTS.FINANCIALTRANSACTIONID = @ID and FTS.DELETED = 0
      group by
        FTS.FINANCIALTRANSACTIONID
      having
        sum(AMOUNT) <> @AMOUNT )
      raiserror('FT_SCHEDULE_AMOUNT_MUST_MATCH_INVOICEAMOUNT', 16, 1);

    end try
    begin catch
        exec dbo.USP_RAISE_ERROR
        return 1
    end catch

return 0;