USP_DATAFORMTEMPLATE_ADD_PROMOTESTUDENTS
The save procedure used by the add dataform template "Promote Students Add Data Form".
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | INOUT | The output parameter indicating the ID of the record added. |
@CHANGEAGENTID | uniqueidentifier | IN | Input parameter indicating the ID of the change agent invoking the procedure. |
@SCHOOLID | uniqueidentifier | IN | School |
@PROMOTEFROM_ACADEMICYEARID | uniqueidentifier | IN | Academic year |
@PROMOTETO_ACADEMICYEARID | uniqueidentifier | IN | Academic year |
@UPDATEEXISTING | bit | IN | Update existing student progression information |
@STATUSES | xml | IN | Statuses to include |
@PROMOTIONSCHEDULEID | uniqueidentifier | IN | Promotion schedule |
@FORADVISORINFORMATIONCODE | tinyint | IN | For advisor information |
@GRADELEVELADVISORS | xml | IN | Advisors |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_PROMOTESTUDENTS
(
@ID uniqueidentifier = null output,
@CHANGEAGENTID uniqueidentifier = null,
@SCHOOLID uniqueidentifier = null,
@PROMOTEFROM_ACADEMICYEARID uniqueidentifier,
@PROMOTETO_ACADEMICYEARID uniqueidentifier,
@UPDATEEXISTING bit = null,
@STATUSES xml = null,
@PROMOTIONSCHEDULEID uniqueidentifier = null,
@FORADVISORINFORMATIONCODE tinyint = 0,
@GRADELEVELADVISORS xml = null
)
as
set nocount on;
if @PROMOTEFROM_ACADEMICYEARID = @PROMOTETO_ACADEMICYEARID
raiserror('BBERR_PROMOTESTUDENTS_SAMEACADEMICYEAR', 13, 1)
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
declare @CURRENTDATE datetime
set @CURRENTDATE = getdate()
begin try
declare @PROMOTETO_NEXTSCHOOL_ACADEMICYEARID uniqueidentifier = (select ACADEMICYEAR.ID
from dbo.ACADEMICYEAR
inner join dbo.SCHOOLGRADELEVEL on ACADEMICYEAR.SCHOOLID = SCHOOLGRADELEVEL.SCHOOLID
inner join dbo.PROMOTIONSCHEDULE on SCHOOLGRADELEVEL.ID = PROMOTIONSCHEDULE.NEXTSCHOOLGRADELEVELID
inner join dbo.ACADEMICYEAR AY on ACADEMICYEAR.ACADEMICYEARNAMECODEID = AY.ACADEMICYEARNAMECODEID
where AY.ID = @PROMOTETO_ACADEMICYEARID and PROMOTIONSCHEDULE.ID = @PROMOTIONSCHEDULEID)
declare @STUDENTPROGRESSION table (STUDENTID uniqueidentifier not null, ENROLLMENTID uniqueidentifier not null, CURRENTSTUDENTPROGRESSIONID uniqueidentifier not null, NEXTSTUDENTPROGRESSIONID uniqueidentifier null, CURRENTSCHOOLGRADELEVELID uniqueidentifier not null, NEXTSCHOOLGRADELEVELID uniqueidentifier not null, ADVISORID uniqueidentifier null, STARTDATE datetime null, ENDDATE datetime null)
insert into @STUDENTPROGRESSION (
STUDENTID,
ENROLLMENTID,
CURRENTSTUDENTPROGRESSIONID,
CURRENTSCHOOLGRADELEVELID,
NEXTSCHOOLGRADELEVELID,
ADVISORID
)
select
STUDENT.ID,
EDUCATIONALHISTORY.ID,
STUDENTPROGRESSION.ID,
SCHOOLGRADELEVEL.ID,
case GRADUATES when 0 then PROMOTIONSCHEDULEENTRY.NEXTSCHOOLGRADELEVELID else PROMOTIONSCHEDULE.NEXTSCHOOLGRADELEVELID end,
case @FORADVISORINFORMATIONCODE when 0 then (select TOP 1 FACULTYID from dbo.STUDENTADVISOR where STUDENTPROGRESSIONID = STUDENTPROGRESSION.ID) else ADVISORS.ADVISORID end
from dbo.STUDENT
inner join dbo.CONSTITUENT on STUDENT.ID = CONSTITUENT.ID
inner join dbo.EDUCATIONALHISTORY on CONSTITUENT.ID = EDUCATIONALHISTORY.CONSTITUENTID
inner join (select T.c.value('(EDUCATIONALHISTORYSTATUSID)[1]','uniqueidentifier') as EDUCATIONALHISTORYSTATUSID
from @STATUSES.nodes('/STATUSES/ITEM') T(c)) STATUSES
on EDUCATIONALHISTORY.EDUCATIONALHISTORYSTATUSID = STATUSES.EDUCATIONALHISTORYSTATUSID
inner join dbo.STUDENTPROGRESSION on EDUCATIONALHISTORY.ID = STUDENTPROGRESSION.ENROLLMENTID
inner join dbo.SCHOOLGRADELEVEL on STUDENTPROGRESSION.SCHOOLGRADELEVELID = SCHOOLGRADELEVEL.ID
inner join dbo.PROMOTIONSCHEDULEENTRY on STUDENTPROGRESSION.SCHOOLGRADELEVELID = PROMOTIONSCHEDULEENTRY.SCHOOLGRADELEVELID
inner join dbo.PROMOTIONSCHEDULE on PROMOTIONSCHEDULEENTRY.PROMOTIONSCHEDULEID = PROMOTIONSCHEDULE.ID
left outer join (select T.c.value('(NEXTSCHOOLGRADELEVELID)[1]','uniqueidentifier') as NEXTSCHOOLGRADELEVELID,
T.c.value('(ADVISORID)[1]','uniqueidentifier') as ADVISORID
from @GRADELEVELADVISORS.nodes('/GRADELEVELADVISORS/ITEM') T(c)) ADVISORS
on ((GRADUATES = 0 and PROMOTIONSCHEDULEENTRY.NEXTSCHOOLGRADELEVELID = ADVISORS.NEXTSCHOOLGRADELEVELID) or (GRADUATES = 1 and PROMOTIONSCHEDULE.NEXTSCHOOLGRADELEVELID = ADVISORS.NEXTSCHOOLGRADELEVELID))
where SCHOOLGRADELEVEL.SCHOOLID = @SCHOOLID
and PROMOTIONSCHEDULE.ID = @PROMOTIONSCHEDULEID
and dbo.UFN_ACADEMICYEAR_GET_FORSCHOOL_BYDATE(SCHOOLGRADELEVEL.SCHOOLID, STUDENTPROGRESSION.STARTDATE, STUDENTPROGRESSION.ENDDATE) = @PROMOTEFROM_ACADEMICYEARID
and ((GRADUATES = 0 and PROMOTIONSCHEDULEENTRY.NEXTSCHOOLGRADELEVELID is not null) or (GRADUATES = 1 and PROMOTIONSCHEDULE.NEXTSCHOOLGRADELEVELID is not null))
update SP set STARTDATE = ACADEMICYEAR.STARTDATE, ENDDATE = ACADEMICYEAR.ENDDATE
from @STUDENTPROGRESSION SP
inner join dbo.SCHOOLGRADELEVEL on SP.NEXTSCHOOLGRADELEVELID = SCHOOLGRADELEVEL.ID
inner join dbo.ACADEMICYEAR on SCHOOLGRADELEVEL.SCHOOLID = ACADEMICYEAR.SCHOOLID
and ((ACADEMICYEAR.ID = @PROMOTETO_ACADEMICYEARID AND SCHOOLGRADELEVEL.SCHOOLID = @SCHOOLID) or (ACADEMICYEAR.ID = @PROMOTETO_NEXTSCHOOL_ACADEMICYEARID and SCHOOLGRADELEVEL.SCHOOLID <> @SCHOOLID))
delete from @STUDENTPROGRESSION where STARTDATE is null
if @UPDATEEXISTING = 1
begin
update STUDENTPROGRESSION set SCHOOLGRADELEVELID = SP.NEXTSCHOOLGRADELEVELID, STARTDATE = SP.STARTDATE, ENDDATE = SP.ENDDATE, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @CURRENTDATE
from dbo.STUDENTPROGRESSION
inner join @STUDENTPROGRESSION SP on STUDENTPROGRESSION.ENROLLMENTID = SP.ENROLLMENTID
inner join dbo.SCHOOLGRADELEVEL on STUDENTPROGRESSION.SCHOOLGRADELEVELID = SCHOOLGRADELEVEL.ID
inner join dbo.EDUCATIONALHISTORY on STUDENTPROGRESSION.ENROLLMENTID = EDUCATIONALHISTORY.ID
inner join dbo.SCHOOLGRADELEVEL SGL on SP.NEXTSCHOOLGRADELEVELID = SGL.ID
where dbo.UFN_ACADEMICYEAR_GET_FORSCHOOL_BYDATE(SCHOOLGRADELEVEL.SCHOOLID, STUDENTPROGRESSION.STARTDATE, STUDENTPROGRESSION.ENDDATE) in (@PROMOTETO_ACADEMICYEARID, @PROMOTETO_NEXTSCHOOL_ACADEMICYEARID)
and (not exists(select * from dbo.CLASSMEETINGGROUP
inner join dbo.STUDENTCLASSMEETINGGROUP on CLASSMEETINGGROUP.ID = STUDENTCLASSMEETINGGROUP.CLASSMEETINGGROUPID
inner join dbo.STUDENTCOURSE on STUDENTCLASSMEETINGGROUP.STUDENTCOURSEID = STUDENTCOURSE.ID
where STUDENTCOURSE.STUDENTID = EDUCATIONALHISTORY.CONSTITUENTID and STUDENTPROGRESSION.STARTDATE <= CLASSMEETINGGROUP.STARTDATE and
STUDENTPROGRESSION.ENDDATE >= CLASSMEETINGGROUP.ENDDATE) or (SCHOOLGRADELEVEL.SCHOOLID = SGL.SCHOOLID))
delete STUDENTADVISOR
from dbo.STUDENTADVISOR
inner join dbo.STUDENTPROGRESSION on STUDENTADVISOR.STUDENTPROGRESSIONID = STUDENTPROGRESSION.ID
inner join @STUDENTPROGRESSION SP on STUDENTPROGRESSION.ENROLLMENTID = SP.ENROLLMENTID
inner join dbo.SCHOOLGRADELEVEL on STUDENTPROGRESSION.SCHOOLGRADELEVELID = SCHOOLGRADELEVEL.ID
where dbo.UFN_ACADEMICYEAR_GET_FORSCHOOL_BYDATE(SCHOOLGRADELEVEL.SCHOOLID, STUDENTPROGRESSION.STARTDATE, STUDENTPROGRESSION.ENDDATE) in (@PROMOTETO_ACADEMICYEARID, @PROMOTETO_NEXTSCHOOL_ACADEMICYEARID)
insert into dbo.STUDENTADVISOR (STUDENTPROGRESSIONID, FACULTYID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select STUDENTPROGRESSION.ID, SP.ADVISORID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
from dbo.STUDENTPROGRESSION
inner join @STUDENTPROGRESSION SP on STUDENTPROGRESSION.ENROLLMENTID = SP.ENROLLMENTID
inner join dbo.SCHOOLGRADELEVEL on STUDENTPROGRESSION.SCHOOLGRADELEVELID = SCHOOLGRADELEVEL.ID
where dbo.UFN_ACADEMICYEAR_GET_FORSCHOOL_BYDATE(SCHOOLGRADELEVEL.SCHOOLID, STUDENTPROGRESSION.STARTDATE, STUDENTPROGRESSION.ENDDATE) in (@PROMOTETO_ACADEMICYEARID, @PROMOTETO_NEXTSCHOOL_ACADEMICYEARID)
and SP.ADVISORID is not null
end
update @STUDENTPROGRESSION set NEXTSTUDENTPROGRESSIONID = newid()
from @STUDENTPROGRESSION SP
where not exists(select STUDENTPROGRESSION.ID
from dbo.STUDENTPROGRESSION
where ENROLLMENTID = SP.ENROLLMENTID and
(((SP.STARTDATE >= dbo.STUDENTPROGRESSION.[STARTDATE]) and (SP.STARTDATE <= dbo.STUDENTPROGRESSION.[ENDDATE]))
or
((SP.ENDDATE >= dbo.STUDENTPROGRESSION.[STARTDATE]) and (SP.ENDDATE <= dbo.STUDENTPROGRESSION.[ENDDATE]))
or
(SP.STARTDATE < dbo.STUDENTPROGRESSION.[STARTDATE] and SP.ENDDATE > STUDENTPROGRESSION.[ENDDATE])))
insert into dbo.STUDENTPROGRESSION (ID, ENROLLMENTID, SCHOOLGRADELEVELID, STARTDATE, ENDDATE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select NEXTSTUDENTPROGRESSIONID, ENROLLMENTID, NEXTSCHOOLGRADELEVELID, STARTDATE, ENDDATE, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
from @STUDENTPROGRESSION
where NEXTSTUDENTPROGRESSIONID is not null
insert into dbo.STUDENTADVISOR (STUDENTPROGRESSIONID, FACULTYID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select NEXTSTUDENTPROGRESSIONID, ADVISORID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
from @STUDENTPROGRESSION
where NEXTSTUDENTPROGRESSIONID is not null and ADVISORID is not null
end try
begin catch
exec dbo.USP_RAISE_ERROR
return 1
end catch
return 0