 DELIMITER $$

DROP PROCEDURE IF EXISTS `pl_place_frekw_tools`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `pl_place_frekw_tools`(
	IN _MODE VARCHAR(150),
	IN _Key VARCHAR(255),	
	IN _Param_A VARCHAR(255),
	IN _Param_B VARCHAR(255),
	IN _Param_C TEXT,	
	IN _Param_D VARCHAR(255)
)
SPROC: BEGIN 
	/*
	_MODE

	------------------------------------------------------------------------------------------------------------------------------------------------------------

	------------------------------------------------------------------------------------------------------------------------------------------------------------
	*/
	DECLARE _SQLText TEXT DEFAULT '';
	DECLARE _PracGUID VARCHAR(38);
	DECLARE _PlaceGUID VARCHAR(38);
	DECLARE _AbsencjaDo DATE;
	
	
	SET _PracGUID = NULLIF(_Param_A, '');
	SET _PlaceGUID = NULLIF(_Key, '');
	SET _AbsencjaDo = NULLIF(_varDATE(_Param_B), '');


	/*
	_MODE pl.ile.dni.ciaglego.zwolnienia.180.dni

	------------------------------------------------------------------------------------------------------------------------------------------------------------
		Pobranie dni ciągłego zwonienia do algorytmu 180 dni. Do tej pory ciągłość to była ciągłość teraz od 2022roku ciągłość oznacza różnicę między Absencjami
		nie większą niż 60dni
	------------------------------------------------------------------------------------------------------------------------------------------------------------
	*/


	IF (_MODE = 'pl.ile.dni.ciaglego.zwolnienia.180.dni') THEN	
	
		DROP TEMPORARY TABLE IF EXISTS absy;
		CREATE TEMPORARY TABLE absy
--		SELECT idn,absencjaod,absencjado,dAbs, 
		-- (SELECT n.absencjaod FROM absencje n WHERE n.guidpr=a.guidpr AND n.Rodzaj IN (1,4,22,15) and n.absencjaod>a.absencjado order by n.absencjaod limit 1) as nastepna,
--		(SELECT n.absencjaod FROM absencje n WHERE n.guidpr=a.guidpr AND n.Rodzaj IN (1,4,22,15) AND n.absencjado<a.absencjaod ORDER BY n.absencjado DESC LIMIT 1) AS poprzednia,
--		_VarInt(0) AS odstep_poprz
--		FROM absencje a WHERE a.GUIDpr = _PracGUID AND a.Rodzaj IN (1,4,22,15) AND IF(MONTH(absencjaDo)<>MONTH(absencjaOd), LAST_DAY(absencjaOd),absencjaDo) <=_AbsencjaDo;
		SELECT idn,absencjaod,IF(MONTH(absencjaDo)<>MONTH(absencjaOd), LAST_DAY(absencjaOd),absencjaDo) AS absencjado,dAbs, 
			(SELECT IF(MONTH(n.absencjaod)<>MONTH(n.absencjaDo), LAST_DAY(n.absencjaOd), n.absencjaDo) AS absencjaDoTemp FROM absencje n WHERE n.guidpr=a.guidpr AND n.Rodzaj IN (1,4,22,15) AND IF(MONTH(absencjaDo)<>MONTH(absencjaOd), LAST_DAY(absencjaOd),absencjaDo)<a.absencjaod ORDER BY absencjaDoTemp DESC LIMIT 1) AS poprzednia,
			_VarInt(0) AS odstep_poprz
		FROM absencje a WHERE a.GUIDpr = _PracGUID AND a.Rodzaj IN (1,4,22,15) AND IF(MONTH(absencjaDo)<>MONTH(absencjaOd), LAST_DAY(absencjaOd),absencjaDo) <=_AbsencjaDo;

-- 20251104		UPDATE absy SET odstep_poprz=TO_DAYS(absencjaod) - TO_DAYS(poprzednia);
		UPDATE absy SET odstep_poprz=GREATEST(0,(TO_DAYS(absencjaod) - TO_DAYS(poprzednia))-1);
		
		SELECT MAX(absencjaod) INTO @pow60 FROM absy WHERE odstep_poprz>=60;

		-- SELECT @pow60;
		-- SELECT * FROM absy;
		-- SELECT SUM(dAbs) FROM absy WHERE absencjaod>IFNULL(@pow60,'2000-01-01');		
		DELETE FROM absy WHERE absencjaod<IFNULL(@pow60,'2000-01-01');
		SELECT SUM(DATEDIFF(IF(MONTH(absencjaDo)<>MONTH(absencjaOd), LAST_DAY(absencjaOd),absencjaDo), absencjaOd)+1) AS IleDni FROM absy ; -- WHERE absencjaod>IFNULL(@pow60,'2000-01-01');

		-- SELECT * FROM absy;
		DROP TEMPORARY TABLE IF EXISTS absy;
--	set @PracGUID = _PracGUID;
--	SET @PlaceGUID = _PlaceGUID;
--	SET @AbsencjaDo = _AbsencjaDo;
	
	
	END IF;
	
END$$


DELIMITER ;	