USP_GLFISCALYEAR_EDITSAVE

The save procedure used by the edit dataform template "Fiscal Year 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.
@YEARID nvarchar(12) IN Fiscal year
@DESCRIPTION nvarchar(60) IN Description
@FISCALPERIODSINYEAR tinyint IN Number of periods
@FISCALYEARPERIODS xml IN Periods

Definition

Copy


CREATE procedure dbo.USP_GLFISCALYEAR_EDITSAVE
(
    @ID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier = null,
    @YEARID nvarchar(12),
    @DESCRIPTION nvarchar(60),
    @FISCALPERIODSINYEAR tinyint,
    @FISCALYEARPERIODS xml
)
as
    set nocount on;

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


    -- Validate that the End of year has not pressed into next year.

    if dbo.UFN_GLFISCALYEAR_VALIDYEARENDDATE(@FISCALYEARPERIODS) = 1
    begin
        RAISERROR('ENDDATEINVALID', 16, 10);
        return 1;
    end

    -- Validate changed periods do not have activity.

    if dbo.UFN_GLFISCALYEAR_PERIODSHAVEACTIVITY(@FISCALYEARPERIODS) = 1
    begin
        RAISERROR('TRANEXISTSINPERIOD', 16, 10);
        return 1;
    end

    declare @CURRENTDATE datetime;
    set @CURRENTDATE = getdate();

    begin try
        update
            dbo.GLFISCALYEAR 
        set
            YEARID = @YEARID,
            DESCRIPTION = @DESCRIPTION,
            FISCALPERIODSINYEAR = @FISCALPERIODSINYEAR,
            CHANGEDBYID = @CHANGEAGENTID,
            DATECHANGED = @CURRENTDATE
        where
            ID = @ID;

        exec dbo.USP_GLFISCALYEAR_PERIODS_UPDATEFROMXML @ID, @FISCALYEARPERIODS, @CHANGEAGENTID, @CURRENTDATE;

        update
            dbo.GLFISCALPERIOD
        set 
            STARTDATE = ((SELECT TOP 1 ENDDATE FROM GLFISCALPERIOD FP
                    INNER JOIN GLFISCALYEAR FY ON FP.GLFISCALYEARID = FY.ID
                    WHERE FP.SEQUENCE = FY.FISCALPERIODSINYEAR AND 
                          FY.YEARSEQUENCE = (SELECT YEARSEQUENCE FROM GLFISCALYEAR
                                              WHERE ID = @ID)) + 1)
        from GLFISCALPERIOD FP2
            inner join GLFISCALYEAR FY2 on FP2.GLFISCALYEARID = FY2.ID 
        where FP2.SEQUENCE = 1 AND FY2.YEARSEQUENCE = ((SELECT YEARSEQUENCE FROM GLFISCALYEAR
                                                  WHERE ID = @ID) + 1)

    declare @STATUSCODE tinyint
    set @STATUSCODE = (select STATUSCODE from dbo.GLFISCALYEAR where ID = @ID)
    if @STATUSCODE = 1
    begin
      if not exists (select CLOSED from dbo.UFN_GLFISCALYEAR_PERIODS_FROMITEMLISTXML(@FISCALYEARPERIODS) where CLOSED = 0)
        update dbo.GLFISCALYEAR set STATUSCODE = 2 where ID = @ID
    end
    else if @STATUSCODE = 2
    begin
      if exists (select CLOSED from dbo.UFN_GLFISCALYEAR_PERIODS_FROMITEMLISTXML(@FISCALYEARPERIODS) where CLOSED = 0)
        update dbo.GLFISCALYEAR set STATUSCODE = 1 where ID = @ID
    end


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