DELIMITER $$

DROP PROCEDURE IF EXISTS `pl_pres_dodmiesz`$$
	
CREATE DEFINER=`root`@`localhost` PROCEDURE `pl_pres_dodmiesz`(
		IN _MODE VARCHAR(38), 
		IN _PracGUID VARCHAR(38),
		IN _Rok INT,
		IN _Msc INT,
		IN _Ile INT,
		IN _WHERE_SQL TEXT, 
		IN _Param_A VARCHAR(50),
		IN _Param_B VARCHAR(50)
)
SPROC: BEGIN
	DECLARE _SQLText TEXT DEFAULT '';
	DECLARE _SQLTextPZ TEXT DEFAULT '';
	
	IF (_MODE = 'Clear') THEN
		drop temporary table IF EXISTS tmp_zaswiadczenie3;
		drop temporary table IF EXISTS tmp_zaswiadczenie3pz;
		
	END IF;
	
	IF (_MODE = 'PrepareData') THEN
		SET @_SQLTextOld = '
		create temporary table tmp_zaswiadczenie3 
			SELECT  
				P.datawyplaty, 
				#rok_msc#,
				O.Imiona, 
				O.Nazwisko, 
				SUM(IFNULL(P.KosztyUzyskania,0)+IFNULL(PZ.KosztyUzyskania,0)) as KosztyUzyskania, 
				SUM(IFNULL(P.KwotaBrutto + P.SklFEmerytalnyPracow + P.SklFRentowyPracow + P.SklFChorobowyPracow,0) + IFNULL(PZ.KwotaBrutto + PZ.SklFemerytalnyZleceniob + PZ.SklFrentowyZleceniob + PZ.SklFchorobowyZleceniob,0)) as SumaBrutto, 
				SUM(IFNULL(P.SklFEmerytalnyPracow + P.SklFRentowyPracow + P.SklFChorobowyPracow,0) + IFNULL(PZ.SklFemerytalnyZleceniob + PZ.SklFrentowyZleceniob + PZ.SklFchorobowyZleceniob,0)   ) as SumaPotracen, 
				SUM(IFNULL(P.KwotaNetto,0) + IFNULL(PZ.KwotaNetto,0)) as SumaNetto, 
				SUM(P.SklFEmerytalnyPracow + IFNULL(PZ.SklFemerytalnyZleceniob,0)) as SumaEmerytalna, 
				SUM(P.SklFRentowyPracow + IFNULL(PZ.SklFrentowyZleceniob,0)) as SumaRentowa, 
				SUM(P.SklFChorobowyPracow + IFNULL(PZ.SklFchorobowyZleceniob,0)) as SumaChorobowa, 
				SUM(P.PodstawaPPD) as PodstawaPPD, 
				CASE WHEN (Pr.TypOkresuUmowy)=1 THEN "na czas określony"  
					WHEN (Pr.TypOkresuUmowy)=2 THEN "na czas nieokreślony" 
					WHEN (Pr.TypOkresuUmowy)=3 THEN "na okres próbny" 
					WHEN (Pr.TypOkresuUmowy)=4 THEN "na okres zastępstwa" 
				END as OkresUmowy, 
				SUM(P.Zaliczka + IFNULL(PZ.Zaliczka,0)) as Zaliczka, 
				(select S.stanowisko from stanowiska S where S.GUID=Pr.stanowisko) as StanowiskoStr, 
				SUM(SklKasaChorychPracowPobr) as SumaZdrowotna, 
				((SELECT SUM(ps.kwota + ps.ZmniejszZwieksz) as wynik FROM place_skladniki ps  WHERE ps.RodzajSkladnika=4 and ps.GUID_zapisu_placowego=P.GUID)+  (select SUM(Kwota+ZmniejszZwieksz) as osoba from place_skladniki 
      where GUID_definicja_skladnika_placy ="C_15" and GUID_zapisu_placowego=P.GUID) +  (select SUM(Kwota+ZmniejszZwieksz) as Kwota from place_skladniki 
      where GUID_definicja_skladnika_placy ="C_19" and GUID_zapisu_placowego=P.GUID) +  (select SUM(Kwota+ZmniejszZwieksz) as Kwota from place_skladniki where GUID_definicja_skladnika_placy ="C_16" and GUID_zapisu_placowego=P.GUID)     )  as Potracenia, 
				Pr.DataRozpoczeciaCiaglosci as UmowaOd, 
				Pr.UmowaDo as UmowaDo, 
				Pr.CzyObecniePracuje, 
				O.Plec,  
				O.NrPesel, 
				O.GUID as osobaGUID , 
				Pr.TypOkresuUmowy, 
				Pr.DataZatrudnieniawzakl, 
				Pr.OkrProbnyDo, 
				Pr.DataZwolnienia, 
				Pr.ZastepstwoDo, 
				Pr.UmowaDo as UmowaDo2
			FROM place P 
			JOIN osoby O on O.GUID=P.GUID_pracownika 
			#pz_join#
			JOIN Pracownicy Pr on Pr.GUID=P.GUID_pracownika 
			WHERE 
				P.GUID_pracownika= #prac#  and 
				#data# and 
				P.deleted=0 
			#GRP#	
			';

		SET _SQLText = '
		create temporary table tmp_zaswiadczenie3 
			SELECT  
				P.datawyplaty, 
				#rok_msc#,
				O.Imiona, 
				O.Nazwisko, 
				SUM(IFNULL(P.KosztyUzyskania,0)) as KosztyUzyskania, 
				SUM(IFNULL(P.KwotaBrutto + P.SklFEmerytalnyPracow + P.SklFRentowyPracow + P.SklFChorobowyPracow,0) ) as SumaBrutto, 
				SUM(IFNULL(P.SklFEmerytalnyPracow + P.SklFRentowyPracow + P.SklFChorobowyPracow,0)  ) as SumaPotracen, 
				SUM(IFNULL(P.KwotaNetto,0) ) as SumaNetto, 
				SUM(P.SklFEmerytalnyPracow ) as SumaEmerytalna, 
				SUM(P.SklFRentowyPracow ) as SumaRentowa, 
				SUM(P.SklFChorobowyPracow ) as SumaChorobowa, 
				SUM(P.PodstawaPPD) as PodstawaPPD, 
				CASE WHEN (Pr.TypOkresuUmowy)=1 THEN "na czas określony"  
					WHEN (Pr.TypOkresuUmowy)=2 THEN "na czas nieokreślony" 
					WHEN (Pr.TypOkresuUmowy)=3 THEN "na okres próbny" 
					WHEN (Pr.TypOkresuUmowy)=4 THEN "na okres zastępstwa" 
				END as OkresUmowy, 
				SUM(P.Zaliczka ) as Zaliczka, 
				(select S.stanowisko from stanowiska S where S.GUID=Pr.stanowisko) as StanowiskoStr, 
				SUM(SklKasaChorychPracowPobr) as SumaZdrowotna, 
				((SELECT SUM(ps.kwota + ps.ZmniejszZwieksz) as wynik FROM place_skladniki ps  WHERE ps.RodzajSkladnika=4 and ps.GUID_zapisu_placowego=P.GUID)+  (select SUM(Kwota+ZmniejszZwieksz) as osoba from place_skladniki 
      where GUID_definicja_skladnika_placy ="C_15" and GUID_zapisu_placowego=P.GUID) +  (select SUM(Kwota+ZmniejszZwieksz) as Kwota from place_skladniki 
      where GUID_definicja_skladnika_placy ="C_19" and GUID_zapisu_placowego=P.GUID) +  (select SUM(Kwota+ZmniejszZwieksz) as Kwota from place_skladniki where GUID_definicja_skladnika_placy ="C_16" and GUID_zapisu_placowego=P.GUID)     )  as Potracenia, 
				Pr.DataRozpoczeciaCiaglosci as UmowaOd, 
				Pr.UmowaDo as UmowaDo, 
				Pr.CzyObecniePracuje, 
				O.Plec,  
				O.NrPesel, 
				O.GUID as osobaGUID , 
				Pr.TypOkresuUmowy, 
				Pr.DataZatrudnieniawzakl, 
				Pr.OkrProbnyDo, 
				Pr.DataZwolnienia, 
				Pr.ZastepstwoDo, 
				Pr.UmowaDo as UmowaDo2
			FROM place P 
			JOIN osoby O on O.GUID=P.GUID_pracownika 
			JOIN Pracownicy Pr on Pr.GUID=P.GUID_pracownika 
			WHERE 
				P.GUID_pracownika= #prac#  and 
				#data# and 
				P.deleted=0 
			#GRP#	
			';
			
			
			
			IF (_Param_A = 'datawyplaty') THEN
				SET @WhereX = '(YEAR(P.datawyplaty)*12+MONTH(P.datawyplaty) between #rok#*12+#msc#-#ile#+1 AND #rok#*12+#msc#) ';
				SET @Rok_Msc = 'YEAR(P.datawyplaty) as rok, MONTH(P.datawyplaty) as miesiac';
				SET @PZJOIN = 'LEFT JOIN prace_zlecone PZ on PZ.deleted=0 and PZ.GUID_pracownika = O.GUID and YEAR(PZ.DataWyplaty)=YEAR(P.DataWyplaty) and MONTH(PZ.DataWyplaty)=MONTH(P.DataWyplaty)';
				SET @GRP = 'group by YEAR(P.datawyplaty), MONTH(P.datawyplaty) order by YEAR(P.datawyplaty) ASC, MONTH(P.datawyplaty) ASC';
			ELSE
				SET @WhereX = '(P.Rok*12+P.miesiac between #rok#*12+#msc#-#ile#+1 AND #rok#*12+#msc#) ';
				SET @Rok_Msc = 'P.rok as rok, P.miesiac as miesiac';
				SET @PZJOIN = 'LEFT JOIN prace_zlecone PZ on PZ.deleted=0 and PZ.GUID_pracownika = O.GUID and PZ.rok=P.rok and PZ.miesiac=P.miesiac';
				SET @GRP = 'group by P.rok, P.miesiac order by P.rok ASC, P.miesiac ASC';
			END IF;
			
			
			CALL _IReg_Get('', 'ZaswiadczenieMieszkaniowePZ', '0', 'INTEGER', @CzyPZ, 0); 
			
			-- SELECT valuei FROM IReg WHERE idkey='ZaswiadczenieMieszkaniowePZ' into @CzyPZ;
			
			if (@CzyPZ <> 1) THEN
				SET @PZJOIN = 'LEFT JOIN prace_zlecone PZ on PZ.GUID_pracownika = O.GUID and PZ.rok=0 and PZ.miesiac=P.miesiac';
			END IF;
			
			
		SET _SQLText =	REPLACE(_SQLText, '#GRP#', IFNULL(@GRP,''));
		SET _SQLText =	REPLACE(_SQLText, '#data#', IFNULL(@WhereX,''));
		SET _SQLText =	REPLACE(_SQLText, '#rok#', _Rok);
		SET _SQLText =	REPLACE(_SQLText, '#msc#', _Msc);
		SET _SQLText =	REPLACE(_SQLText, '#ile#', _Ile);
		SET _SQLText =	REPLACE(_SQLText, '#prac#', concat('"',_PracGUID,'"'));
		SET _SQLText =	REPLACE(_SQLText, '#rok_msc#', IFNULL(@Rok_Msc,''));
		SET _SQLText =	REPLACE(_SQLText, '#pz_join#', IFNULL(@PZJOIN,''));
		
		SET @_SQLText =	_SQLText;
		SET @_SQLText0 =	_SQLText;
		CALL _ExecuteCmd(_SQLText, @Error);

		alter table tmp_zaswiadczenie3 add unique (rok,miesiac);
		
		if (@CzyPZ <> 111) THEN
		-- teraz pz do pozniejszej sumy
			SET _SQLTextPZ = '
		create temporary table tmp_zaswiadczenie3pz 
			SELECT  
				PZ.datawyplaty, 
				#rok_msc#,
				O.Imiona, 
				O.Nazwisko, 
				SUM(IFNULL(PZ.KosztyUzyskania,0)) as KosztyUzyskania, 
				SUM(IFNULL(PZ.KwotaBrutto + PZ.SklFemerytalnyZleceniob + PZ.SklFrentowyZleceniob + PZ.SklFchorobowyZleceniob,0)) as SumaBrutto, 
				SUM(IFNULL(PZ.SklFemerytalnyZleceniob + PZ.SklFrentowyZleceniob + PZ.SklFchorobowyZleceniob,0)   ) as SumaPotracen, 
				SUM(IFNULL(PZ.KwotaNetto,0)) as SumaNetto, 
				SUM(IFNULL(PZ.SklFemerytalnyZleceniob,0)) as SumaEmerytalna, 
				SUM(IFNULL(PZ.SklFrentowyZleceniob,0)) as SumaRentowa, 
				SUM(IFNULL(PZ.SklFchorobowyZleceniob,0)) as SumaChorobowa, 
				_VarInt(0) as PodstawaPPD, 
				CASE WHEN (Pr.TypOkresuUmowy)=1 THEN "na czas określony"  
					WHEN (Pr.TypOkresuUmowy)=2 THEN "na czas nieokreślony" 
					WHEN (Pr.TypOkresuUmowy)=3 THEN "na okres próbny" 
					WHEN (Pr.TypOkresuUmowy)=4 THEN "na okres zastępstwa" 
				END as OkresUmowy, 
				SUM(IFNULL(PZ.Zaliczka,0)) as Zaliczka, 
				(select S.stanowisko from stanowiska S where S.GUID=Pr.stanowisko) as StanowiskoStr, 
				0 as SumaZdrowotna, 
				0 as Potracenia, 
				Pr.DataRozpoczeciaCiaglosci as UmowaOd, 
				Pr.UmowaDo as UmowaDo, 
				Pr.CzyObecniePracuje, 
				O.Plec,  
				O.NrPesel, 
				O.GUID as osobaGUID , 
				Pr.TypOkresuUmowy, 
				Pr.DataZatrudnieniawzakl, 
				Pr.OkrProbnyDo, 
				Pr.DataZwolnienia, 
				Pr.ZastepstwoDo, 
				Pr.UmowaDo as UmowaDo2
			FROM prace_zlecone PZ 
			JOIN osoby O on O.GUID=PZ.GUID_pracownika 
			JOIN Pracownicy Pr on Pr.GUID=PZ.GUID_pracownika 
			WHERE 
				PZ.GUID_pracownika= #prac#  and 
				#data# and 
				PZ.deleted=0 
			#GRP#	
			';
			
			IF (_Param_A = 'datawyplaty') THEN
				SET @WhereX = '(YEAR(PZ.datawyplaty)*12+MONTH(PZ.datawyplaty) between #rok#*12+#msc#-#ile#+1 AND #rok#*12+#msc#) ';
				SET @Rok_Msc = 'YEAR(PZ.datawyplaty) as rok, MONTH(PZ.datawyplaty) as miesiac';
				
				SET @GRP = 'group by YEAR(PZ.datawyplaty), MONTH(PZ.datawyplaty) order by YEAR(PZ.datawyplaty) ASC, MONTH(PZ.datawyplaty) ASC';
			ELSE
				SET @WhereX = '(PZ.Rok*12+PZ.miesiac between #rok#*12+#msc#-#ile#+1 AND #rok#*12+#msc#) ';
				SET @Rok_Msc = 'PZ.rok as rok, PZ.miesiac as miesiac';
				
				SET @GRP = 'group by PZ.rok, PZ.miesiac order by PZ.rok ASC, PZ.miesiac ASC';
			END IF;
			
		SET _SQLTextPZ =	REPLACE(_SQLTextPZ, '#GRP#', @GRP);
		SET _SQLTextPZ =	REPLACE(_SQLTextPZ, '#data#', @WhereX);
		SET _SQLTextPZ =	REPLACE(_SQLTextPZ, '#rok#', _Rok);
		SET _SQLTextPZ =	REPLACE(_SQLTextPZ, '#msc#', _Msc);
		SET _SQLTextPZ =	REPLACE(_SQLTextPZ, '#ile#', _Ile);
		SET _SQLTextPZ =	REPLACE(_SQLTextPZ, '#prac#', concat('"',_PracGUID,'"'));
		SET _SQLTextPZ =	REPLACE(_SQLTextPZ, '#rok_msc#', @Rok_Msc);
		SET _SQLTextPZ =	REPLACE(_SQLTextPZ, '#pz_join#', @PZJOIN);
		
		SET @_SQLTextPZ =	_SQLTextPZ;
		SET @_SQLTextPZ0 =	_SQLTextPZ;
		CALL _ExecuteCmd(_SQLTextPZ, @Error);

		alter table tmp_zaswiadczenie3pz add unique (rok,miesiac);
			
			
		END IF;
		
	END IF;

	
	
	IF (_MODE = 'SELECT') THEN
		SET _SQLText = '
			SELECT  
            #rok_msc#,
			O.Imiona, O.Nazwisko, 
			P.KosztyUzyskania+IFNULL(PZ.KosztyUzyskania,0) as KosztyUzyskania, 
			P.datawyplaty+IFNULL(PZ.datawyplaty,0) as datawyplaty, 
			P.SumaBrutto+IFNULL(PZ.SumaBrutto,0) as SumaBrutto, 
			P.SumaPotracen+IFNULL(PZ.SumaPotracen,0) as SumaPotracen, 
			P.SumaNetto+IFNULL(PZ.SumaNetto,0) as SumaNetto, 
			P.SumaEmerytalna+IFNULL(PZ.SumaEmerytalna,0) as SumaEmerytalna, 
			P.SumaRentowa+IFNULL(PZ.SumaRentowa,0) as SumaRentowa, 
			P.SumaChorobowa+IFNULL(PZ.SumaChorobowa,0) as SumaChorobowa, 
			P.PodstawaPPD, 
			CASE WHEN (Pr.TypOkresuUmowy)=1 THEN "na czas określony"  WHEN (Pr.TypOkresuUmowy)=2 THEN "na czas nieokreślony" WHEN (Pr.TypOkresuUmowy)=3 THEN "na okres próbny" WHEN (Pr.TypOkresuUmowy)=4 THEN "na okres zastępstwa"  END as OkresUmowy, 
			P.Zaliczka+IFNULL(PZ.Zaliczka,0) as Zaliczka,
			(select S.stanowisko from stanowiska S where S.GUID=Pr.stanowisko) as StanowiskoStr, 
			P.SumaZdrowotna,P.Potracenia, 
			Pr.DataRozpoczeciaCiaglosci as UmowaOd, Pr.UmowaDo as UmowaDo, Pr.CzyObecniePracuje,  O.Plec,  O.NrPesel, O.GUID as osobaGUID , 
			Pr.TypOkresuUmowy, Pr.DataZatrudnieniawzakl, Pr.OkrProbnyDo, Pr.DataZwolnienia, Pr.ZastepstwoDo, Pr.UmowaDo as umowaDo2 
			FROM tmp_zaswiadczenie3 P 
			LEFT JOIN tmp_zaswiadczenie3pz PZ ON PZ.rok=P.rok and PZ.miesiac=P.miesiac and P.osobagUID=PZ.osobaGUID
			LEFT JOIN osoby O on O.GUID=P.osobaGUID 
			LEFT JOIN Pracownicy Pr on Pr.GUID=P.osobaGUID 
			WHERE P.osobaGUID= #prac#
			and #data#  
			order by P.Rok ASC, P.Miesiac ASC
		';
		
			IF (_Param_A = 'datawyplaty') THEN
				SET @WhereX = '(YEAR(P.datawyplaty)*12+MONTH(P.datawyplaty) between #rok#*12+#msc#-#ile#+1 AND #rok#*12+#msc#) ';
				SET @Rok_Msc = 'YEAR(P.datawyplaty) as rok, MONTH(P.datawyplaty) as miesiac';
			ELSE
				SET @WhereX = '(P.Rok*12+P.miesiac between #rok#*12+#msc#-#ile#+1 AND #rok#*12+#msc#) ';
				SET @Rok_Msc = 'P.rok as rok, P.miesiac as miesiac';
			END IF;
			
		SET _SQLText =	REPLACE(_SQLText, '#data#', @WhereX);
		SET _SQLText =	REPLACE(_SQLText, '#rok#', _Rok);
		SET _SQLText =	REPLACE(_SQLText, '#msc#', _Msc);
		SET _SQLText =	REPLACE(_SQLText, '#ile#', _Ile);
		SET _SQLText =	REPLACE(_SQLText, '#prac#', concat('"',_PracGUID,'"'));
		SET _SQLText =	REPLACE(_SQLText, '#rok_msc#', @Rok_Msc);
		
		SET @_SQLText =	_SQLText;
		CALL _ExecuteCmd(_SQLText, @Error);
		
		
	END IF;
	
END$$

DELIMITER ;
