kreta/Kreta.DataAccess.Migrations/DBScripts/Database/dbo/Stored procedures/uspGetHelyettesitesekAjanlasa.sql
2024-03-13 00:33:46 +01:00

162 lines
6 KiB
Transact-SQL

DROP PROCEDURE IF EXISTS dbo.uspGetHelyettesitesekAjanlasa
GO
CREATE PROCEDURE [dbo].[uspGetHelyettesitesekAjanlasa]
@intezmenyId int
,@tanevId int
,@pHelyettesitettOrarendiOraId int
,@pHelyettesitesDatuma DATE
,@pSzakszeruId int = 1494
,@pNemSzakszeruId int = 1495
,@pOsszevonas int = 1496
,@pFokozatNa int = 3040
AS
BEGIN
SET NOCOUNT ON;
DECLARE @OraKezdet DATETIME; DECLARE @Oraveg DATETIME;
DECLARE @helyettesitettTanarId INT; DECLARE @Tulora CHAR(1);
SELECT @OraKezdet = C_ORAKEZDETE, @Oraveg = C_ORAVEGE , @helyettesitettTanarId = C_TANARID, @Tulora = C_TULORA FROM T_ORARENDIORA WHERE ID = @pHelyettesitettOrarendiOraId
DECLARE @Datum DATETIME = (SELECT CAST(@pHelyettesitesDatuma AS date))
DECLARE @DatumVeg DATETIME = (SELECT DATEADD(DAY, 1, (SELECT CAST(@pHelyettesitesDatuma AS date))))
DECLARE @KezdoDateTime DATETIME = (SELECT (@OraKezdet + CAST(@pHelyettesitesDatuma AS datetime)))
DECLARE @VegeDateTime DATETIME = (SELECT (@Oraveg + CAST(@pHelyettesitesDatuma AS datetime)))
CREATE TABLE #OrarendTable (
Id int
,ORARENDIID int
,OraKezdete datetime
,OraVege datetime
,Megtartott char(1)
,OsztalyNev nvarchar(255)
,HelyettesitoTanarID int
,HelyettesitesId int
,TanarID int
,TantargyId int
,OsztCsopId int
)
CREATE TABLE #HelyettesitoTanarok (
ID int
,TanarId int
,HelyettesitesTipusId int
,TantargyId int
,OsztalyCsoportId int
,TanarNev nvarchar(550)
,TanarOktatasiAzonosito nvarchar(40)
,TantargyNev nvarchar(510)
,OsztalycsoportNev nvarchar(255)
,HelyettesitettOrarendiOraId int
,HelyettesitesDatuma datetime
,Tulora char(1)
)
INSERT INTO #OrarendTable (
Id
,ORARENDIID
,OraKezdete
,OraVege
,Megtartott
,OsztalyNev
,HelyettesitoTanarID
,HelyettesitesId
,TanarID
,TantargyId
,OsztCsopId
)
EXEC sp_GetOrarend
@pIntezmenyId = @IntezmenyId
,@pTanevId = @TanevId
,@pIdoszakKezdete = @Datum
,@pIdoszakVege = @DatumVeg
,@pTanarId = NULL
,@pIsHelyettesitesNelkul = 0
,@pOsztalyCsoportId = NULL
,@pTanuloId = NULL
,@pTantargyId = NULL
,@pTeremId = NULL
,@pCsakOrarendiOrak = 0
,@pIsNapirend = NULL
,@pOszlopok = N'Id,ORARENDIID,OraKezdete,OraVege,Megtartott,OsztalyNev,HelyettesitoTanarID,HelyettesitesId,TanarID,TantargyId,OsztCsopId'
INSERT INTO #HelyettesitoTanarok
SELECT
NULL
,f.ID
,CASE
MAX(CASE
WHEN ot.OraKezdete < @VegeDateTime AND ot.OraVege > @KezdoDateTime THEN '3'
WHEN ot.ID IS NULL AND ma.C_BESOROLASIFOKOZAT = @pFokozatNa THEN '2'
WHEN ot.ID IS NULL AND ma.C_BESOROLASIFOKOZAT != @pFokozatNa THEN '1'
WHEN ot.ID IS NOT NULL AND ot.ID = ot.ORARENDIID AND ot.HelyettesitesId IS NULL AND ma.C_BESOROLASIFOKOZAT = @pFokozatNa THEN '2'
WHEN ot.ID IS NOT NULL AND ot.ID = ot.ORARENDIID AND ot.HelyettesitesId IS NULL AND ma.C_BESOROLASIFOKOZAT != @pFokozatNa THEN '1'
WHEN ot.ID IS NOT NULL AND ot.ID != ot.ORARENDIID AND ot.Megtartott = 'T' THEN '3'
WHEN ot.ID IS NOT NULL AND ot.ID != ot.ORARENDIID AND ot.Megtartott = 'F' AND ma.C_BESOROLASIFOKOZAT = @pFokozatNa THEN '2'
WHEN ot.ID IS NOT NULL AND ot.ID != ot.ORARENDIID AND ot.Megtartott = 'F' AND ma.C_BESOROLASIFOKOZAT != @pFokozatNa THEN '1'
WHEN ot.ID IS NOT NULL AND ot.ID = ot.ORARENDIID AND ot.HelyettesitesId IS NOT NULL AND a.ID = ot.TanarID AND ma.C_BESOROLASIFOKOZAT = @pFokozatNa THEN '2'
WHEN ot.ID IS NOT NULL AND ot.ID = ot.ORARENDIID AND ot.HelyettesitesId IS NOT NULL AND a.ID = ot.TanarID AND ma.C_BESOROLASIFOKOZAT != @pFokozatNa THEN '1'
WHEN ot.ID IS NOT NULL AND ot.ID = ot.ORARENDIID AND ot.HelyettesitesId IS NOT NULL AND a.ID = ot.HelyettesitoTanarID THEN '3'
END)
WHEN 1 THEN @pSzakszeruId
WHEN 2 THEN @pNemSzakszeruId
WHEN 3 THEN @pOsszevonas
END
,ot.TantargyId
,ot.OsztCsopId
,f.C_NYOMTATASINEV
,ISNULL(f.C_OKTATASIAZONOSITO, '-')
,t.C_NEV
,ot.OsztalyNev
,@pHelyettesitettOrarendiOraId
,@pHelyettesitesDatuma
,@Tulora
FROM T_ALKALMAZOTT a
INNER JOIN T_FELHASZNALO f ON f.ID = a.ID AND f.TOROLT = 'F'
INNER JOIN T_MUNKAUGYIADATOK ma ON ma.C_ALKALMAZOTTID = a.ID
AND ma.C_BETOLTETLENALLASHELY = 'F'
AND ma.C_TARTOSHELYETTESITES = 'F'
AND ((C_ALKALMAZASKEZDETE <= @Datum OR C_ALKALMAZASKEZDETE IS NULL) AND (C_ALKALMAZASMEGSZUNESE >= @Datum OR C_ALKALMAZASMEGSZUNESE IS NULL))
LEFT JOIN #OrarendTable ot ON (ot.TanarID = a.ID or ot.HelyettesitoTanarID = a.ID)
LEFT JOIN T_TANTARGY t ON t.ID = ot.TantargyId AND t.TOROLT = 'F'
WHERE a.TOROLT = 'F' AND a.C_ALTANEVID = @tanevId
AND (TanarID <> @helyettesitettTanarId OR TanarID IS NULL)
AND (ot.TantargyId IS NULL OR (ot.OraKezdete <= @VegeDateTime AND ot.OraVege >= @KezdoDateTime))
GROUP BY f.ID, ot.TantargyId, ot.OsztCsopId,f.C_NYOMTATASINEV,f.C_OKTATASIAZONOSITO,t.C_NEV,ot.OsztalyNev, ot.Id
CREATE TABLE #nincsOraja(AlkalmazottId int,TanarNev nvarchar(128),HelyettesitesTipusa int)
INSERT INTO #HelyettesitoTanarok
SELECT
NULL
,a.ID
,CASE
WHEN ma.C_BESOROLASIFOKOZAT = @pFokozatNa THEN @pNemSzakszeruId
WHEN ma.C_BESOROLASIFOKOZAT != @pFokozatNa THEN @pSzakszeruId
END HelyettesitesTipusId
,NULL
,NULL
,fh.C_NYOMTATASINEV
,ISNULL(fh.C_OKTATASIAZONOSITO, '-')
,NULL
,NULL
,@pHelyettesitettOrarendiOraId
,@pHelyettesitesDatuma
,@Tulora AS Tulora
FROM T_ALKALMAZOTT a
INNER JOIN T_FELHASZNALO fh ON fh.ID = a.ID
INNER JOIN T_MUNKAUGYIADATOK ma ON ma.C_ALKALMAZOTTID = a.ID
AND ma.C_BETOLTETLENALLASHELY = 'F'
AND ma.C_TARTOSHELYETTESITES = 'F'
AND ((C_ALKALMAZASKEZDETE <= @Datum OR C_ALKALMAZASKEZDETE IS NULL) AND (C_ALKALMAZASMEGSZUNESE >= @Datum OR C_ALKALMAZASMEGSZUNESE IS NULL))
WHERE a.ID NOT IN(
SELECT TanarId FROM #HelyettesitoTanarok
UNION
SELECT @helyettesitettTanarId
)
SELECT * FROM #HelyettesitoTanarok
ORDER BY HelyettesitesTipusId, TanarNev, TanarOktatasiAzonosito
END
GO