USP_FENXT_ADDFENXTFISCALPERIODS
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CHANGEAGENTID | uniqueidentifier | IN | |
@ROWSAFFECTED | int | INOUT |
Definition
Copy
CREATE procedure USP_FENXT_ADDFENXTFISCALPERIODS
(
@CHANGEAGENTID uniqueidentifier = null,
@ROWSAFFECTED int OUTPUT
)
as
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
declare @CURRENTDATE datetime;
set @CURRENTDATE = getdate();
begin try
begin transaction FISCALPERIODSADDFROMFENXTSTAGING
create table #FINANCIALEDGENXTFISCALPERIOD
(GLFISCALYEARID uniqueidentifier,
FINANCIALEDGENXTFISCALYEARID smallint,
GLFISCALPERIODID uniqueidentifier,
FINANCIALEDGENXTFISCALPERIODID smallint,
STARTDATE date,
ENDDATE date,
CLOSED bit,
SEQUENCE smallint)
insert into #FINANCIALEDGENXTFISCALPERIOD
(GLFISCALYEARID,
FINANCIALEDGENXTFISCALYEARID,
GLFISCALPERIODID,
FINANCIALEDGENXTFISCALPERIODID,
STARTDATE,
ENDDATE,
CLOSED,
SEQUENCE)
select
isnull(FENXTFISCALYEAR.GLFISCALYEARID ,FENXTFISCALYEARSTAGING.GLFISCALYEARID),
FENXTFISCALYEARSTAGING.FENXTFISCALYEARID,
isnull(FENXTFISCALPERIOD.GLFISCALPERIODID, newid()) as GLFISCALPERIODID,
T.c.value('(FENXTID)[1]','int') AS 'FPID',
T.c.value('(STARTDATE)[1]','date') as 'STARTDATE',
T.c.value('(ENDDATE)[1]','date') as 'ENDDATE',
T.c.value('(CLOSED)[1]','bit') as 'CLOSED',
T.c.value('(SEQUENCE)[1]','smallint') as 'SEQUENCE'
from FENXTFISCALYEARSTAGING
cross apply FiscalPeriods.nodes('/FISCALYEARPERIODS/ITEM') T(c)
left join dbo.FENXTFISCALYEAR on FENXTFISCALYEARSTAGING.FENXTFISCALYEARID = FENXTFISCALYEAR.FENXTFISCALYEARID
left join dbo.FENXTFISCALPERIOD on T.c.value('(FENXTID)[1]','int') = FENXTFISCALPERIOD.FENXTFISCALPERIODID;
--Verify that fiscal periods and dates are consistent.
--The startdate of the first fiscal period for the fiscal year must be the same as the start date of the fiscal year.
--The end date of the last fiscal period for the fiscal year must be the same as the end date of the fiscal year
declare @INCONSISTENTYEARSANDPERIODS bit;
set @INCONSISTENTYEARSANDPERIODS=0;
if exists
(
select 1
from dbo.FENXTFISCALYEARSTAGING
inner join
(
select FINANCIALEDGENXTFISCALYEARID, min(STARTDATE) as MINSTARTDATE, max(ENDDATE) as MAXENDDATE
from #FINANCIALEDGENXTFISCALPERIOD
group by FINANCIALEDGENXTFISCALYEARID
) as PERIODDATES on FENXTFISCALYEARSTAGING.FENXTFISCALYEARID = PERIODDATES.FINANCIALEDGENXTFISCALYEARID
where FENXTFISCALYEARSTAGING.STARTDATE<>PERIODDATES.MINSTARTDATE
or FENXTFISCALYEARSTAGING.ENDDATE<>PERIODDATES.MAXENDDATE
)
set @INCONSISTENTYEARSANDPERIODS=1;
if @INCONSISTENTYEARSANDPERIODS=1
RAISERROR ('New Financial Edge NXT fiscal years can not be synced from Financial Edge NXT. Financial Edge NXT has fiscal years with invalid fiscal periods.', 16, 2) WITH SETERROR
--Check for possible duplicate fiscal periods
declare @DUPLICATEFISCALPERIODS bit;
set @DUPLICATEFISCALPERIODS =0;
if (select count(STARTDATE) from #FINANCIALEDGENXTFISCALPERIOD) <> (select count(distinct STARTDATE) from #FINANCIALEDGENXTFISCALPERIOD)
set @DUPLICATEFISCALPERIODS=1;
if @DUPLICATEFISCALPERIODS=1
RAISERROR ('New fiscal years cannot be added from Financial Edge NXT as there have duplicated start dates.', 16, 2) WITH SETERROR
insert into dbo.GLFISCALPERIOD
(ID,
GLFISCALYEARID,
STARTDATE,
ENDDATE,
CLOSED,
SEQUENCE,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED)
select
#FINANCIALEDGENXTFISCALPERIOD.GLFISCALPERIODID,
#FINANCIALEDGENXTFISCALPERIOD.GLFISCALYEARID,
#FINANCIALEDGENXTFISCALPERIOD.STARTDATE,
#FINANCIALEDGENXTFISCALPERIOD.ENDDATE,
#FINANCIALEDGENXTFISCALPERIOD.CLOSED,
#FINANCIALEDGENXTFISCALPERIOD.SEQUENCE,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from #FINANCIALEDGENXTFISCALPERIOD
where not exists (select 1 from dbo.GLFISCALPERIOD where GLFISCALPERIOD.ID = #FINANCIALEDGENXTFISCALPERIOD.GLFISCALPERIODID)
order by #FINANCIALEDGENXTFISCALPERIOD.STARTDATE;
set @ROWSAFFECTED += @@ROWCOUNT;
insert into FENXTFISCALPERIOD
(
ID,
GLFISCALPERIODID,
FENXTFISCALPERIODID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED)
select
newid(),
GLFISCALPERIODID,
FINANCIALEDGENXTFISCALPERIODID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from #FINANCIALEDGENXTFISCALPERIOD
where not exists (select 1 from dbo.FENXTFISCALPERIOD where FENXTFISCALPERIOD.GLFISCALPERIODID = #FINANCIALEDGENXTFISCALPERIOD.GLFISCALPERIODID);
commit transaction FISCALPERIODSADDFROMFENXTSTAGING
end try
begin catch
-- if there is an error in the fiscal periods none of them should be added to CRM.
raiserror ('FENXTFISCALPERIODSYNCERROR', 16, 2) with seterror
rollback transaction FISCALPERIODSADDFROMFENXTSTAGING
end catch