DELIMITER $$



DROP PROCEDURE IF EXISTS `pl_kadry_tools`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `pl_kadry_tools`(
	IN _MODE VARCHAR(150),
	IN _GUID VARCHAR(38),	
	IN _Param_A VARCHAR(255),
	IN _Param_B VARCHAR(255)
	
)
SPROC: BEGIN 

	DECLARE _DataZatr, _AktData DATE;
	DECLARE _RokZatr, _McZatr, _DzienZatr, _AktRok, _AktMc, _AktDzien INTEGER;
	DECLARE _DoUrlopu_L, _DoUrlopu_M, _DoUrlopu_D, _I  INTEGER;
	DECLARE _DoWysl_L, _DoWysl_M, _DoWysl_D integer;
	DECLARE _UrlopBezpl_L, _UrlopBezpl_M, _UrlopBezpl_D integer;
    DECLARE _DoJubil_L, _DoJubil_M, _DoJubil_D integer;
	DECLARE _WgWz_L, _WgWz_M, _WgWz_D INTEGER;
	DECLARE _Odejmij_D, _Odejmij_M, _Odejmij_L INTEGER;
	DECLARE _Nowy BOOLEAN; 
	DECLARE _PracGUID VARCHAR(38);
	
	DECLARE _done BOOL DEFAULT FALSE;
	
	DECLARE _c_PracGUID CURSOR FOR
	SELECT 
		k.GUID 
	FROM 
		Pracownicy k,  hist_ng h
	WHERE 
		k.GUID = h.GUIDPr  AND k.CzyObecniePracuje = 1;
			
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET _done = TRUE;
	
	IF (_MODE = 'pl.kadry.uwzgl.przebieg.zatr') THEN    -- odpowiednik TDBPlacesPracownicy.UwzglHistZatr ("Uwzględnij przebieg zatrudnienia")
	
		SET @pl.kadry.pz.count = 0;
		OPEN _c_PracGUID;
				loopA: LOOP
					FETCH _c_PracGUID INTO
						_PracGUID;
					IF _done THEN
						LEAVE loopA;
					ELSE
					  SET @pl.kadry.pz.count = @pl.kadry.pz.count + 1;
					  
					  CALL pl_kadry_tools('pl.przelicz.przebieg.zatr', _PracGUID, '', '');  
					  SET _done = FALSE;	-- ustawiamy na wypadek uzyskania _done=TRUE w zapytaniach wewn. 'pl.przelicz.przebieg.zatr'
					END IF;
				END LOOP;
		CLOSE _c_PracGUID;			
		
	-- cursor select GUID FROM Pracownicy k WHERE k.CzyObecniePracuje = 1
	-- while cursor do
	-- 1) 'pl.przebieg.zatr.uwzglednij.absencje'  <- niepotrzebne, bo zostalo to wstawione do procedury zapisujacej absencje
	-- 2) 'pl.przelicz.przebieg.zatr'
	
	END IF;  -- pl.kadry.uwzgl.przebieg.zatr
	
	IF (_MODE = 'pl.przebieg.zatr.uwzglednij.absencje') THEN   

		SET @pl.tmp = '';
	/* odpowiednik TShellEHistZatrNg.PobierzUrlopyZDysc 	
	   ale jest to tutaj niepotrzebne, bo PobierzUrlopyZDysc 	jest wolane w momencie zapisywania absencji oraz w momencie zakładania nowego
	   wpisu do przebiegu zatr.	*/ 
	
	-- pobranie urlopów wychowawczych i bezplatnych z absencji i wstawienie ich do: Bezplatny_Dni, Bezplatny_LMD, Wychowawczy_Dni, Wychowawczy_LMD	
	-- cBezpl = 11; cWych = 20;
	
	/*
	SELECT YEAR(AbsencjaOd) AS OdRok, MONTH(AbsencjaOd) AS OdMc, DAY(AbsencjaOd) AS OdDzien,  YEAR(AbsencjaDo) AS DoRok, MONTH(AbsencjaDo) AS DoMc, DAY(AbsencjaDo) AS DoDzien  
	FROM absencje  
	WHERE GUIDPr = 'Prac307' AND rodzaj = 11  
	AND ((absencjaod = PelnaAbsencjaod AND absencjado= PelnaAbsencjado)  ) 
	ORDER BY absencjaod, absencjado ;  
	
	# wersja dla mostostalu:
	-- ...
	AND ((absencjaod = PelnaAbsencjaod AND absencjado = PelnaAbsencjado)  OR (YEAR(PelnaAbsencjaod) < 2006 )  )AND YEAR(AbsencjaOd) >= 2006  
	ORDER BY absencjaod, absencjado ;	
	*/

	
	END IF;
	
    IF (_MODE = 'pl.przelicz.przebieg.zatr') THEN     -- odpowiednik  ShellEHistZatrNg.ObliczDo_i_Wg
		SET _DoUrlopu_L =  0; SET _DoUrlopu_M = 0; SET _DoUrlopu_D = 0;
		SET _Nowy = (_Param_A = 'nowy');  -- przeliczenie dla nowozatrudnionego pracownika (naliczamy stan na dzien zatrudnienia, a nie dzien biezacy)
		
		UPDATE 
			hist_ng h, Pracownicy P
		SET	
			h.DataZatrudnienia = P.DataZatrudnieniaWzakl, h.SymbKalPr = P.SymbolKalendarza
		WHERE
			P.GUID = h.GUIDPr AND P.GUID = _GUID;
		
		select 
			DataZatrudnienia, EXTRACT(YEAR FROM DataZatrudnienia), EXTRACT(MONTH FROM DataZatrudnienia), EXTRACT(DAY FROM DataZatrudnienia) 
		from hist_ng 
		where guidpr = _GUID
		into _DataZatr, _RokZatr, _McZatr, _DzienZatr;
		
		SELECT 
			IF(DataZwolnienia is NULL, IF(_Nowy, DataZatrudnieniaWZakl, CURDATE()), 
			-- gdy jest uzupelniona DataZwolnienia i jest ona starsza (mniejsza) od daty zatr. w zakl. to znaczy, ze mamy kolejne zatrudnienie, wiec ignorujemy date zwoln.
									   IF(DataZwolnienia >= DataZatrudnieniaWZakl, DataZwolnienia, IF(_Nowy, DataZatrudnieniaWZakl, CURDATE()) 
									     )
			  ) AS AktData -- _ParamA = CURDATE() lub DataZatrudnieniaWzakl
		from Pracownicy 
        where GUID = _GUID
		INTO _AktData;
		
		SELECT 
			EXTRACT(YEAR FROM _AktData), EXTRACT(MONTH FROM _AktData), EXTRACT(DAY FROM _AktData)
		INTO _AktRok, _AktMc, _AktDzien;
				

		/* naliczamy ilosc dni pomiedzy data aktualną a datą zatrudnienia w obecnym zakladzie pracy */
		IF (_DataZatr < _AktData)  THEN  -- warunek przeciwny oznacza sytuacje, gdy wprowadzono pracownika z wyprzedzeniem  (data zatr. póżniejsza niż data bieżąca)		  
		    
		/*	drop temporary table if exists t_LMD
			create temporary table t_LMD
			(
				nazwa varchar(100),
				L  integer,
				M  integer,
				D  integer
			);   */
			
		    IF _AktDzien < _DzienZatr THEN			    
				SET  _AktDzien = _AktDzien + DAY(LAST_DAY(DATE_SUB(_AktData, INTERVAL 1 MONTH)));
				SET  _AktMc    = MONTH(DATE_SUB(_AktData, INTERVAL 1 MONTH));
				SET  _AktRok   = YEAR(DATE_SUB(_AktData, INTERVAL 1 MONTH));
			END IF;
			SET _DoUrlopu_D = _AktDzien - _DzienZatr + 1;
						
			if (_AktMc < _McZatr) THEN			
			  SET _AktMc  = _AktMc + 12; 
			  SET _AktRok = _AktRok -  1;
			END IF;		
			SET _DoUrlopu_M = _AktMc - _McZatr;
						
			SET _DoUrlopu_L = _AktRok - _RokZatr;
					
		END IF;
		
		SET _DoWysl_L = _DoUrlopu_L; SET _DoWysl_M = _DoUrlopu_M;  SET _DoWysl_D = _DoUrlopu_D;
		SET _DoJubil_L = _DoUrlopu_L; SET _DoJubil_M = _DoUrlopu_M;  SET _DoJubil_D = _DoUrlopu_D;
		SET _WgWz_L = _DoUrlopu_L; SET _WgWz_M = _DoUrlopu_M;  SET _WgWz_D = _DoUrlopu_D;
		
		/*   SET @pl.pz._DoUrlopu_L =  _DoUrlopu_L;
		   SET @pl.pz._DoUrlopu_M =  _DoUrlopu_M;
		   SET @pl.pz._DoUrlopu_D =  _DoUrlopu_D;  
		   
		   SET @pl.pz._DataZatr = _DataZatr;
		   SET @pl.pz._AktData = _AktData;   */
		
		--  szkola do urlopu
		SELECT 
		  SzkolaDoUrlopu_D + _DoUrlopu_D, 
		  SzkolaDoUrlopu_M + _DoUrlopu_M, 
		  SzkolaDoUrlopu_L + _DoUrlopu_L
		FROM
			hist_ng WHERE GUIDPr = _GUID
		INTO 
			_DoUrlopu_D, _DoUrlopu_M, _DoUrlopu_L;
		
		SET @pl.pz.pointer = 'po: szkola do urlopu';
		 
		
		SET _I = 0;
		SELECT COUNT(*) AS ile FROM hist_po WHERE GUIDPr = _GUID
		INTO _I;
		
		/* uwzgledniamy poprzednie zaklady pracy */
		IF (_I > 0) THEN
				    
			-- sumujemy  ng i poz:
			SELECT 
			    -- LiczycTenZaklDoUrlopu
				 SUM(IF(LiczycTenZaklDoUrlopu = 1, Przepr_D, 0))  + _DoUrlopu_D,
				 SUM(IF(LiczycTenZaklDoUrlopu = 1, Przepr_M, 0))  + _DoUrlopu_M,
				 SUM(IF(LiczycTenZaklDoUrlopu = 1, Przepr_L, 0))  + _DoUrlopu_L,
				-- LiczycTenZaklDoWyslugi
				 SUM(IF(LiczycTenZaklDoWyslugi = 1, Przepr_D, 0)) + _DoWysl_D,
				 SUM(IF(LiczycTenZaklDoWyslugi = 1, Przepr_M, 0)) + _DoWysl_M,
				 SUM(IF(LiczycTenZaklDoWyslugi = 1, Przepr_L, 0)) + _DoWysl_L,
				 SUM(IF(LiczycTenZaklDoWyslugi = 1, UrlopBezpl_D, 0)) AS UrlopBezpl_D,
				 SUM(IF(LiczycTenZaklDoWyslugi = 1, UrlopBezpl_M, 0)) AS UrlopBezpl_M,
				 SUM(IF(LiczycTenZaklDoWyslugi = 1, UrlopBezpl_L, 0)) AS UrlopBezpl_L,
				-- LiczycTenZaklDoJubil
				 SUM(IF(LiczycTenZaklDoJubil = 1, Przepr_D, 0)) + _DoJubil_D,
				 SUM(IF(LiczycTenZaklDoJubil = 1, Przepr_M, 0)) + _DoJubil_M,
				 SUM(IF(LiczycTenZaklDoJubil = 1, Przepr_L, 0)) + _DoJubil_L,
				 -- 
				 SUM(Przepr_D) + _WgWz_D,
				 SUM(Przepr_M) + _WgWz_M,
				 SUM(Przepr_L) + _WgWz_L
			FROM hist_po 
			WHERE GUIDPr = _GUID
			INTO
			_DoUrlopu_D, _DoUrlopu_M, _DoUrlopu_L,
			_DoWysl_D,   _DoWysl_M,   _DoWysl_L,
			_UrlopBezpl_D, _UrlopBezpl_M, _UrlopBezpl_L,
			_DoJubil_D, _DoJubil_M, _DoJubil_L,
			_WgWz_D, _WgWz_M, _WgWz_L;
		  
		   SET @pl.pz.pointer = 'po: FROM hist_po ';
		  /* SET @pl.pz._DoUrlopu_L =  _DoUrlopu_L;
		   SET @pl.pz._DoUrlopu_M =  _DoUrlopu_M;
		   SET @pl.pz._DoUrlopu_D =  _DoUrlopu_D;  
		   
		   SET @pl.pz._DoWysl_L =  _DoWysl_L;
		   SET @pl.pz._DoWysl_M =  _DoWysl_M;
		   SET @pl.pz._DoWysl_D =  _DoWysl_D;  */
		END IF;  -- gdy liczba poz. > 0
		
		-- przeliczenie okresu do urlopu po zwiekszeniach
		-- 12*30 = 360
		SET @pl_kadry_tools.roznica = 360 * _DoUrlopu_L + 30 * _DoUrlopu_M + _DoUrlopu_D;
		SELECT  
				@pl_kadry_tools.roznica DIV 360 AS lata, 
				(@pl_kadry_tools.roznica - (@pl_kadry_tools.roznica DIV 360) * 360) DIV 30 AS mies, 
				@pl_kadry_tools.roznica - 360 * (@pl_kadry_tools.roznica DIV 360) - 30 * ((@pl_kadry_tools.roznica - (@pl_kadry_tools.roznica DIV 360) * 360) DIV 30) AS dni
			INTO	
				_DoUrlopu_L, _DoUrlopu_M, _DoUrlopu_D; 
				   
		--  if (RegistryInt.GetRegIntValueInteger('Jubileuszowka_odlicz_bezplatny_odliczany_od_jubil', 1, 'Place2003\Parametry_ogolne') = 1) then  
		SET _I = 0;	
		CALL _IReg_Get('Place2003\\Parametry_ogolne', 'Jubileuszowka_odlicz_bezplatny_odliczany_od_jubil', 0, 'INTEGER', _I, '1');  -- '1' = default value
		IF (_I > 0) THEN 
			SELECT 
				_DoJubil_D - (Bezplatny_D + BezplSprzedLat_D), 
				_DoJubil_M - (Bezplatny_M + BezplSprzedLat_M), 
				_DoJubil_L - (Bezplatny_L + BezplSprzedLat_L)
			FROM hist_ng
				WHERE GUIDPr = _GUID
			INTO
			    _DoJubil_D, _DoJubil_M, _DoJubil_L;
		
		END IF;  -- gdy klucz "'Jubileuszowka_odlicz_bezplatny_odliczany_od_jubil'" wlaczony
		
		-- przeliczenie okresu jubileuszowego po zwiekszeniach/zmniejszeniach
		SET @pl_kadry_tools.roznica = 360 * _DoJubil_L + 30 * _DoJubil_M + _DoJubil_D;
		SELECT  
				@pl_kadry_tools.roznica DIV 360 AS lata, 
				(@pl_kadry_tools.roznica - (@pl_kadry_tools.roznica DIV 360) * 360) DIV 30 AS mies, 
				@pl_kadry_tools.roznica - 360 * (@pl_kadry_tools.roznica DIV 360) - 30 * ((@pl_kadry_tools.roznica - (@pl_kadry_tools.roznica DIV 360) * 360) DIV 30) AS dni
			INTO	
				_DoJubil_L, _DoJubil_M, _DoJubil_D; 
		
		/* obliczenie 'wg_Wzoru' - odjecie odp. wart. z tabelek 'poprzednio','obecnie'
		   i odp. Aggregaty z detalu */
				
		SET _Odejmij_D = 0; SET _Odejmij_M = 0;  SET _Odejmij_L = 0;
		
		-- pobieramy  ilosci do odjecia
		SELECT 
			IF(n.OdjacBezplatny = 1, n.BezplSprzedLat_L + SUM(IFNULL(p.UrlopBezpl_L, 0)), 0) + 
			IF(n.OdjacWychow = 1, n.WychowSprzedLat_L + SUM(IFNULL(p.UrlopWych_L, 0)), 0) +
			IF(n.OdjacInne = 1, n.InneN_L + SUM(IFNULL(p.Inne_L, 0)), 0) +
			IF(n.OdjacPoWojsku = 1, n.PoWojsku_L, 0) 									
			AS lata,
			
		    IF(n.OdjacBezplatny = 1, n.BezplSprzedLat_M + SUM(IFNULL(p.UrlopBezpl_M, 0)), 0) +
			IF(n.OdjacWychow = 1, n.WychowSprzedLat_M + SUM(IFNULL(p.UrlopWych_M, 0)), 0) +
			IF(n.OdjacInne = 1, n.InneN_M + SUM(IFNULL(p.Inne_M, 0)), 0) +			
			IF(n.OdjacPoWojsku = 1, n.PoWojsku_M, 0) 									
			AS mc, 
			
			IF(n.OdjacBezplatny = 1, n.BezplSprzedLat_D + SUM(IFNULL(p.UrlopBezpl_D, 0)), 0) + 
			IF(n.OdjacWychow = 1, n.WychowSprzedLat_D + SUM(IFNULL(p.UrlopWych_D, 0)), 0) +
			IF(n.OdjacInne = 1, n.InneN_D + SUM(IFNULL(p.Inne_D, 0)), 0) +
			IF(n.OdjacPoWojsku = 1, n.PoWojsku_D, 0) 									
			AS dni
		FROM hist_ng n
		LEFT JOIN   hist_po p ON n.guidpr = p.guidpr
		WHERE n.guidpr = _GUID	
		INTO
			    _Odejmij_L, _Odejmij_M, _Odejmij_D;
		
		-- 	zmniejszamy ilosci "wg wzoru" o wyliczone sumy zmniejszen:
		/* SET _WgWz_L = _WgWz_L - _Odejmij_L; 
		SET _WgWz_M = _WgWz_M - _Odejmij_M;  
		SET _WgWz_D = _WgWz_D - _Odejmij_D;
		-- obrobka: div 12, div 30 itd.  */
		
		SET @pl_kadry_tools.wg_wzoru =  360 * _WgWz_L + 30 * _WgWz_M + _WgWz_D;
		-- jesli mamy co odejmowac , to zmniejszamy ilość do wyslugi
		IF ( (_Odejmij_L + _Odejmij_M + _Odejmij_D) > 0)  THEN		   		   
		   SET @pl_kadry_tools.okres_do_odj  =  360 * _Odejmij_L + 30 * _Odejmij_M + _Odejmij_D;
		   SET @pl_kadry_tools.roznica       =  @pl_kadry_tools.wg_wzoru - @pl_kadry_tools.okres_do_odj;
		ELSE
		   SET @pl_kadry_tools.roznica       =		@pl_kadry_tools.wg_wzoru;
		END IF;   
		   /* SET _WgWz_L =  @pl_kadry_tools.roznica DIV 12*30;
		      SET _WgWz_M =  (@pl_kadry_tools.roznica - _WgWz * 12*30) DIV 30;
		      SET _WgWz_D =  (@pl_kadry_tools.roznica - (12*30 * _WgWz  + 30 * WgWz);  */
		   
		   SELECT  
				@pl_kadry_tools.roznica DIV 360 AS lata, 
				(@pl_kadry_tools.roznica - (@pl_kadry_tools.roznica DIV 360) * 360) DIV 30 AS mies, 
				@pl_kadry_tools.roznica - 12*30 * (@pl_kadry_tools.roznica DIV 360) - 30 * ((@pl_kadry_tools.roznica - (@pl_kadry_tools.roznica DIV 360) * 360) DIV 30) AS dni
			INTO	
				_WgWz_L, _WgWz_M, _WgWz_D; 									
		/* koniec obliczania "wg wzoru" */
		
		
		/* zmniejszenie okresu zatrudnienia okreslającego staż pracy (do wysługi) */
		SET _Odejmij_D = 0; SET _Odejmij_M = 0;  SET _Odejmij_L = 0;
		
		-- 1.odjecie bezplatnych z poprzednich zakładow 
		SET _I = 0;	
		CALL _IReg_Get('Place2003\\Przebieg_zatrudnienia', 'Wysluga_odlicz_bezplatny_poprz_zaklady', 0, 'INTEGER', _I, '1');  -- '1' = default value
		IF (_I > 0) THEN 
			SET _Odejmij_L = _UrlopBezpl_L;
			SET _Odejmij_M = _UrlopBezpl_M;
			SET _Odejmij_D = _UrlopBezpl_D;
		END IF;
		
		-- 2.odjecie odjecie bezplatnych z aktualnego zakladu 
		SET _I = 0;	
		CALL _IReg_Get('Place2003\\Przebieg_zatrudnienia', 'Wysluga_odlicz_bezplatny_aktualny_zaklad', 0, 'INTEGER', _I, '1');  -- '1' = default value
		IF (_I > 0) THEN 
			SELECT 
				_Odejmij_D + (Bezplatny_D + BezplSprzedLat_D), 
				_Odejmij_M + (Bezplatny_M + BezplSprzedLat_M), 
				_Odejmij_L + (Bezplatny_L + BezplSprzedLat_L)
			FROM hist_ng 
				WHERE GUIDPr = _GUID
			INTO _Odejmij_D, _Odejmij_M, _Odejmij_L;			
		END IF;
		
		-- jesli mamy co odejmowac ( (1) i/lub (2) był spełniony), to zmniejszamy ilość do wyslugi
		IF ( (_Odejmij_L + _Odejmij_M + _Odejmij_D) > 0)  THEN
		   -- SET _DoWysl = _DoWysl - Odejmij
		   SET @pl_kadry_tools.okres_do_wysl =  360 * _DoWysl_L + 30 * _DoWysl_M + _DoWysl_D;
		   SET @pl_kadry_tools.okres_do_odj  =  360 * _Odejmij_L + 30 * _Odejmij_M + _Odejmij_D;
		   SET @pl_kadry_tools.roznica       =  @pl_kadry_tools.okres_do_wysl - @pl_kadry_tools.okres_do_odj;
		ELSE   
		   SET @pl_kadry_tools.roznica       =  12*30 * _DoWysl_L + 30 * _DoWysl_M + _DoWysl_D;
		END IF;   
		   /* SET _DoWysl_L =  @pl_kadry_tools.roznica DIV 365;
		   SET _DoWysl_M =  (@pl_kadry_tools.roznica - _DoWysl_L * 365) DIV 30;
		   SET _DoWysl_D =  (@pl_kadry_tools.roznica - (365 * _DoWysl_L  + 30 * _DoWysl_M);  */
		   
		   SELECT  
				@pl_kadry_tools.roznica DIV 360 AS lata, 
				(@pl_kadry_tools.roznica - (@pl_kadry_tools.roznica DIV 360) * 360) DIV 30 AS mies, 
				@pl_kadry_tools.roznica - 360 * (@pl_kadry_tools.roznica DIV 360) - 30 * ((@pl_kadry_tools.roznica - (@pl_kadry_tools.roznica DIV 360) * 360) DIV 30) AS dni
			INTO	
				_DoWysl_L, _DoWysl_M, _DoWysl_D; 

		/*	UPDATE hist_ng SET
				DoWyslugi_L = _DoWysl_L, DoWyslugi_M = _DoWysl_M, DoWyslugi_D = _DoWysl_D
			WHERE GUIDPr = _GUID;  */
		-- END IF;
		/* koniec przeliczenia okresu zatrudnienia okreslającego staż pracy (do wysługi) */
		
		UPDATE hist_ng 	SET
			DoUrlopu_L = _DoUrlopu_L, DoUrlopu_M = _DoUrlopu_M, DoUrlopu_D = _DoUrlopu_D,
			DoJubil_L = _DoJubil_L, DoJubil_M = _DoJubil_M, DoJubil_D = _DoJubil_D,			
			DoWyslugi_L = _DoWysl_L, DoWyslugi_M = _DoWysl_M, DoWyslugi_D = _DoWysl_D,
			WgWzoru_L =	_WgWz_L, WgWzoru_M = _WgWz_M, WgWzoru_D = _WgWz_D				
		WHERE GUIDPr = _GUID;
		
	
	END IF;	--	IF _MODE = 'pl.przelicz.przebieg.zatr'
		
END$$

DROP PROCEDURE IF EXISTS `pl_placa_z_historii_pracy`$$


CREATE DEFINER=`root`@`localhost` PROCEDURE `pl_placa_z_historii_pracy`(
     IN _MODE varchar(38),
     IN _GUID_Pracownika VARCHAR(50),
     IN _DataWyplaty VARCHAR(50),
     IN _Param_A VARCHAR(50)
)
BEGIN

	DECLARE _data_od, _data_do DATE;
/*
procedura nalicza place na miesiac dla z podanego pracownika na podstawie Historii pracy

MODE  
	'PlacaZasadnicza' 

_GUID_Pracownika
	guid pracownika

_DataWyplaty
	data z na ktora bedziemy naliczac
	
Param_A
	przelicz od daty

*/

IF _MODE = 'PlacaZasadnicza' THEN

	DROP TEMPORARY TABLE IF EXISTS tmp_historia_pracy ;
	SET @GUIDPrac = _GUID_Pracownika;
	SET @DataWyplatyFirstDay = concat(year(_DataWyplaty), '-', month(_DataWyplaty), '-', 01);
	SET @DataWyplatyLastDay = LAST_DAY(_DataWyplaty);
	SET @PREV=TO_DAYS(@DataWyplatyFirstDay)-1;
	SET @oddnia=DATE_SUB(@DataWyplatyFirstDay, INTERVAL 1 DAY);
	SET @IleDniMsc = DAY(@DataWyplatyLastDay);
	SET @poprzplacazas = 0;
	SELECT placazasadnicza FROM historia_pracy WHERE guidpr=@GUIDPrac AND oddnia<= @DataWyplatyFirstDay ORDER BY oddnia DESC LIMIT 1 INTO @poprzplacazas;
	-- select @poprzplacazas;

	set _data_od = DATE(@DataWyplatyFirstDay); 
	set _data_do = DATE(@DataWyplatyLastDay);
	
	CREATE TEMPORARY TABLE tmp_historia_pracy 
	SELECT @oddnia:=DATE_SUB(oddnia, INTERVAL 1 DAY) AS OdDnia , @PREV AS PREV, ((TO_DAYS(@oddnia)-@PREV)/@IleDniMsc) AS delta, @PREV:=TO_DAYS(@oddnia), @poprzplacazas AS poprzplacazas, @poprzplacazas:=placazasadnicza
	FROM historia_pracy  h
	WHERE GUIDPr = @GUIDPrac 
	AND OdDnia BETWEEN  _data_od AND _data_do
	-- AND OdDnia BETWEEN DATE(@DataWyplatyFirstDay) AND DATE(@DataWyplatyLastDay)
	-- AND (zmiany LIKE '%PlacaZasadnicza%' OR zmiany LIKE '%StawkaGodzinowa%')
	ORDER BY oddnia
	;

	INSERT INTO tmp_historia_pracy 
	SELECT LAST_DAY(@DataWyplatyFirstDay) AS oddnia, @PREV AS PREV, ((TO_DAYS(LAST_DAY(@DataWyplatyFirstDay))-TO_DAYS(@oddnia))/@IleDniMsc) AS delta, 0, @poprzplacazas  AS poprzplacazas, 0
	;

	-- SELECT * FROM tmp_historia_pracy ORDER BY oddnia;

	SELECT _varDOUBLE_NOTNULL(SUM(delta*poprzplacazas)) as wyliczona_placa FROM tmp_historia_pracy ORDER BY oddnia limit 1;
  
END IF; 	-- _MODE = 'PlacaZasadnicza'


END$$

DELIMITER ;