DELIMITER $$

/*
	procedura używana tylko w Security
*/

DROP PROCEDURE IF EXISTS `pl_karty_obiektu_tools`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `pl_karty_obiektu_tools`(
	IN _MODE VARCHAR(150),
	IN _GUID VARCHAR(38),
	IN _Param_A VARCHAR(50),	
	IN _Param_B VARCHAR(50),	
	IN _Param_C VARCHAR(38),	
	IN _Param_D VARCHAR(250)	
)
SPROC: BEGIN
	/*
	_MODE

	*/
	
	DECLARE _SQLText TEXT;
	DECLARE _DS, _DK DATE;
	DECLARE  C_EkwiwUrl VARCHAR(10) DEFAULT 'C_14';
	DECLARE _cGUID VARCHAR(38);
	
	DECLARE _done BOOL DEFAULT FALSE;	
		
		DECLARE _c_guid CURSOR FOR			
		select  
			guid
		from 
			t_ko_guid
		;
				
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET _done = TRUE;	
	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'uakt.tab.ZP'  (#48937)
		Uaktualnienie Tabeli `Zysk-Prowizja` w Kartach Obiektów
		Parametry
			_GUID		ID karty obiektu
			_Param_A	Rok
			_Param_B	Miesiac
		
		CALL pl_karty_obiektu_tools('uakt.tab.ZP', '',    2017, '02', '', '');	
		CALL pl_karty_obiektu_tools('uakt.tab.ZP', @GUID, 2017, '02', '', '');			
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/		
	
	IF _MODE = 'uakt.tab.ZP' THEN
		
		DROP TEMPORARY TABLE IF EXISTS t_ko_guid;
		
		CREATE TEMPORARY TABLE t_ko_guid
		(guid varchar(38) not null default '');
		
		-- ustalamy zakres: dla podanej karty  lub wszystkich kart z danego miesiaca
		IF _GUID != '' THEN
			insert into t_ko_guid set guid = _guid;
		ELSE
			insert into t_ko_guid select guid from pl_karty_obiektu_ng where rok = _varINT(_Param_A) AND miesiac = _varINT(_Param_B) AND deleted = 0;
		END IF;
		
		-- usuwamy stare wartosci
		DELETE FROM obiekty_zysk_prowizja WHERE koGUID IN (SELECT guid FROM t_ko_guid);
		
		-- wstawiamy nowe 
		insert into obiekty_zysk_prowizja(koGUID, prog_zysk, prowizja)
		SELECT t.guid, wz.prog_zysk, wz.prowizja
		FROM obiekty_zysk_prowizja wz,	t_ko_guid t
		WHERE wz.koGUID = ''
		ORDER BY guid, prog_zysk;
		
		-- wpis do logu o fakcie zmiany dla wszystkich aktualizowanych kart obiektow
		OPEN _c_guid;
			loop_ZD: LOOP 
				FETCH 
					_c_guid 
				INTO 
					_cGUID;
				IF _done THEN
					LEAVE loop_ZD;
				ELSE
					CALL log_Insert('INSERT', @out.Idn, '', '5174', '5', _cGUID, '', 'uaktualnienie tabeli `zysk-prowizja`', '');	-- IdKartyObiektow    = 5174; (log_czynnosci.idn = 5) => Zapis zmian
				END IF;	
			END LOOP;
		CLOSE	_c_guid;						
	 		
	END IF;		
	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'suma.czasu.pracy'  (#45669)
		Naliczenie sumy przepracowanych godzin przez wskazanego pracownika we wskazanym miesiacu
		Parametry
			_GUID		ID Pracownika
			_Param_A	Rok
			_Param_B	Miesiac
		
		CALL pl_karty_obiektu_tools('suma.czasu.pracy', @GUID, 2017, '02', '', '');		
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/		
	
	IF _MODE = 'suma.czasu.pracy' THEN
		SELECT SUM(p.Czas_Z) AS suma_godz
		FROM pl_karty_obiektu_ng n, pl_karty_obiektu_po p
		WHERE n.guid = p.GUIDNg
		AND n.rok = _varINT(_Param_A) AND n.miesiac = _varINT(_Param_B) AND p.PracGUID = _GUID
		GROUP BY p.PracGUID;
	END IF;	

/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'pl_karty_obiektu.calc.rentownosc.obiektu'
		Naliczenie rentowno?ci (tylko pole "zysk") podejdynczego obiektu
		Parametry
			_GUID		ID Obiektu 
					
		CALL pl_karty_obiektu_tools('pl_karty_obiektu.calc.rentownosc.obiektu', '{GUID}', '', '', '', '');		
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/		
	
	IF _MODE = 'pl_karty_obiektu.calc.rentownosc.obiektu' THEN
	
		DROP  TEMPORARY TABLE IF EXISTS `tt_pl_obiekt_zysk`;	
		CREATE TEMPORARY TABLE `tt_pl_obiekt_zysk`
		SELECT  
			n.guid, n.StawkaGodz, SUM(o.czas_P), IF(n.StawkaGodz>0, n.StawkaGodz * SUM(o.czas_P + o.czas_Z), n.Ryczalt) AS przychod, 
			SUM(o.SOD) AS SOD,
			SUM(o.wart_rzecz) AS koszt_placy,
			_Rnd( (SUM(o.wart_rzecz) - SUM(o.SOD) + n.Extra_Koszt + n.tsk_kwota_suma + n.handl_prowizja) * n.Narzut/100 , 2) AS narzut  
		FROM pl_karty_obiektu_ng n, pl_karty_obiektu_po o
		   WHERE n.guid = _GUID AND n.guid = o.guidng AND n.deleted = 0
		GROUP BY 
			n.guid; 

		UPDATE 	
			pl_karty_obiektu_ng n, tt_pl_obiekt_zysk z
		SET
			n.rozl_przychod = z.przychod, 
			n.rozl_koszt_placy = z.koszt_placy - z.SOD,
			n.rozl_narzut = z.narzut,
			n.rozl_zysk   = z.przychod - z.koszt_placy - z.narzut + n.Extra_Dochod - n.Extra_Koszt - n.tsk_kwota_suma  -- być moze bez: " - n.Extra_Koszt"
		WHERE
				n.guid = z.guid AND n.guid = _GUID; 
		
		-- #48936	zaktualizowanie wartosci normatywnej liczby godzin (zapisywanej w godzinach) na podst. kalendarza obiektu
		UPDATE  pl_karty_obiektu_ng ko 
		SET NormatLG =  (SELECT SUM(poz.godziny)/60 FROM kalendpracy k, kalendpracy_po poz, erp_area_nodes e 
		WHERE poz.guidng = k.guid AND e.param1 = k.symbol AND k.rok = ko.rok AND poz.miesiac = ko.miesiac AND k.deleted=0 AND e.guid = ko.AreaGUID )
		WHERE ko.guid = _GUID;
		
		
		--  #48937  obliczenie prowizji dla handlowca  (handl_prowizja)
		
		--  zysk procentowy: IFNULL(100*rozl_zysk/(kn.rozl_przychod + kn.Extra_Dochod), 0.00) AS Calc_rozl_zysk_proc
		SELECT IFNULL(100*rozl_zysk / (rozl_przychod + Extra_Dochod), 0.00) AS rozl_zysk_proc
		FROM pl_karty_obiektu_ng
		WHERE GUID = _GUID
		INTO @ko.zysk_proc;
		
		-- okreslamy procent prowizji z tabelki "zysk-prowizja"
		SELECT prowizja/100 FROM obiekty_zysk_prowizja 
		WHERE prog_zysk <= @ko.zysk_proc 
			AND koGUID = _GUID
		ORDER BY prog_zysk DESC LIMIT 1
		INTO @ko.procPH;
		-- SET @ko.procPH = 2.00;
		
		-- wyliczamy prowizje  (prowizja = przychód  * % prowizji, gdzie przychód = rozl_przychod + Extra_Dochod)
		
		UPDATE pl_karty_obiektu_ng SET handl_prowizja = _Rnd2(IFNULL(@ko.procPH, 0) * (rozl_przychod + Extra_Dochod))
		WHERE GUID = _GUID;
		
	END IF;  -- IF _MODE = 'pl_karty_obiektu.calc.rentownosc.obiektu' THEN
	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'pl_karty_obiektu.calc.rentownosc'
		Naliczenie SOD i wart. rzeczywistej w pozycjach obiektów oraz rentownosci (zysku) na poszczególnych obiektach   // TODO: naliczanie zysku handlowcow
		Parametry
			_GUID		ID karty Obiektu (puste, gdy wykonujemy dla całego miesiaca - dla wszystkich kart)
			_Param_A	Rok
			_Param_B	Miesiac
			_Param_C   GUID pracownika (moze być pusty)
		
		CALL pl_karty_obiektu_tools('pl_karty_obiektu.calc.rentownosc', '', 2011, '02', '', '');		
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF _MODE = 'pl_karty_obiektu.calc.rentownosc' THEN
		
		DROP  TABLE IF EXISTS `tt_pl_obiekty_godz`;	
		DROP  TABLE IF EXISTS `tt_koszty_pracod`;   -- TEMPORARY
		DROP  TABLE IF EXISTS `tt_korekta_rozdzialu`;  
		DROP  TABLE IF EXISTS `tt_pl_karty_ze_zlec`; 		
		
		DROP  TABLE IF EXISTS `tt_pl_obiekty_godz`;		-- TEMPORARY
		CREATE  TABLE `tt_pl_obiekty_godz`              -- TEMPORARY
			SELECT 
				 p.PracGUID, n.usluga, n.GUID AS kartaGUID, (p.czas_P + 8*p.Absencja_WOD) AS czas_P, p.czas_Z,
				              -- n.AreaGUID - n.GUID 1:1   DISTINCT
				 Extra_Wynagr AS Extra_Wynagr, Absencja_CLZ AS Absencja_CLZ  
			           -- ta linie dodal AS andy
				   -- patrz dalej na SELECT COUNT(*) AS ile FROM tt_pl_obiekty_godz
				              
			FROM 
				pl_karty_obiektu_ng n, pl_karty_obiektu_po p
			WHERE n.rok = _Param_A AND n.miesiac = _Param_B AND n.guid = p.guidng AND n.deleted = 0
			       AND ( (p.czas_P + p.czas_Z > 0)
			              OR ( p.Absencja_WOD > 0)
						  OR ( p.Absencja_CLZ > 0)     -- dodane 15.05
			              OR ( p.Extra_Wynagr > 0)
			            )       
                        
				AND IF(_GUID = '', TRUE, n.GUID = _GUID)
				AND IF(_Param_C = '', TRUE, p.PracGUID = _Param_C);
		
		SET _DS = DATE(CONCAT(_Param_A, '-', _Param_B, '-', '01')); 
		SET _DK =  LAST_DAY(_DS); 
		
		
		-- DROP TEMPORARY TABLE IF EXISTS `tt_koszty_pracod`;   -- TEMPORARY
		-- CREATE TEMPORARY TABLE `tt_koszty_pracod`   -- TEMPORARY                   IFNULL(ps.Kwota + ps.ZmniejszZwieksz, 0)
		
		DROP  TABLE IF EXISTS `tt_koszty_pracod`;   -- TEMPORARY
		CREATE  TABLE `tt_koszty_pracod`   -- TEMPORARY		
			(SELECT
			    g.GUID_pracownika, IFNULL(k.Etat_L_SOD, k.etat_L) AS etat_l, IFNULL(k.Etat_M_SOD, k.Etat_M) AS etat_m, 
				-- and (((pr.dofinansPFRON = 1) and (pr.typniepelnospr > 0)) or ((pr.PZON_typniepelnospr > 0) and (PZON_dofinansPFRON = 1))) 
			    IF(k.dofinansPFRON = 1, k.typniepelnospr, IF(k.PZON_dofinansPFRON = 1,  k.PZON_typniepelnospr, 0) ) AS TypNiepelnospr,
			    IF(k.dofinansPFRON = 1, k.choroba_psych, IF(k.PZON_dofinansPFRON = 1,  k.PZON_choroba_psych, 0) ) AS specjalne,  	
				SUM(g.ChoroboweFirma + g.ZusFunduszPracy + g.ZusFunduszGwarancyjny + g.RazemSkladkiPracodawcy +
				(SELECT SUM(kwota + IFNULL(ZmniejszZwieksz, 0)) 
				   FROM sec.place_skladniki ps WHERE guid_zapisu_placowego = g.guid AND (guid_definicja_skladnika_placy IN
				  ('C_0', 'C_1', 'C_3', 'C_4', 'C_5', 'C_6', 'C_7', 'C_8', 'C_14') OR (ps.rodzajskladnika IN (1, 2, 3) AND TRUE) )				
				) ) AS koszt_pracod,
				
				SUM(g.ChoroboweFirma + g.ZusFunduszPracy + g.ZusFunduszGwarancyjny + g.RazemSkladkiPracodawcy +
				(SELECT SUM(kwota + IFNULL(ZmniejszZwieksz, 0)) 
				 FROM 
					sec.place_skladniki ps
				JOIN sec.definicja_skladnika_placy dsp ON ps.GUID_definicja_skladnika_placy = dsp.GUID
				WHERE guid_zapisu_placowego = g.guid AND (guid_definicja_skladnika_placy IN
				  ('C_0', 'C_1', 'C_3', 'C_4', 'C_5', 'C_6', 'C_7', 'C_8') OR (ps.rodzajskladnika IN (1, 2, 3) AND dsp.do_dofinans_PFRON = 1) )				
				) ) AS podst_SOD,			
				
				IF(k.DataZatrudnieniaWzakl > _DS OR IF(k.CzyObecniePracuje=1, "2099-01-01", IFNULL(k.DataZwolnienia, CURDATE()) ) < _DK,
				(DATEDIFF(LEAST(IFNULL(k.DataZwolnienia, CURDATE()), _DK), GREATEST(k.DataZatrudnieniaWzakl, _DS) )+1) / DAY(LAST_DAY(_DS)), 1) AS wspolcz_etatu
			FROM sec.place g, sec.Pracownicy k
			WHERE g.deleted = 0 AND g.rok = _Param_A AND g.miesiac = _Param_B AND g.GUID_pracownika IN (SELECT PracGUID FROM tt_pl_obiekty_godz)
				AND g.GUID_pracownika = k.GUID
				AND IF(_Param_C = '', TRUE, k.GUID = _Param_C)
			GROUP BY g.GUID_pracownika)				
		
		UNION
		
		-- DROP  TABLE IF EXISTS `tt_koszty_pracod_ms`;   -- TEMPORARY
		-- CREATE  TABLE `tt_koszty_pracod_ms`   -- TEMPORARY		
			(SELECT
			    g.GUID_pracownika, IFNULL(k.Etat_L_SOD, k.etat_L) AS etat_l, IFNULL(k.Etat_M_SOD, k.Etat_M) AS etat_m, 
				-- and (((pr.dofinansPFRON = 1) and (pr.typniepelnospr > 0)) or ((pr.PZON_typniepelnospr > 0) and (PZON_dofinansPFRON = 1))) 
			    IF(k.dofinansPFRON = 1, k.typniepelnospr, IF(k.PZON_dofinansPFRON = 1,  k.PZON_typniepelnospr, 0) ) AS TypNiepelnospr,
			    IF(k.dofinansPFRON = 1, k.choroba_psych, IF(k.PZON_dofinansPFRON = 1,  k.PZON_choroba_psych, 0) ) AS specjalne,  	
				SUM(g.ChoroboweFirma + g.ZusFunduszPracy + g.ZusFunduszGwarancyjny + g.RazemSkladkiPracodawcy +
				(SELECT SUM(kwota + IFNULL(ZmniejszZwieksz, 0)) 
				   FROM ms.place_skladniki ps WHERE guid_zapisu_placowego = g.guid AND (guid_definicja_skladnika_placy IN
				  ('C_0', 'C_1', 'C_3', 'C_4', 'C_5', 'C_6', 'C_7', 'C_8', 'C_14') OR (ps.rodzajskladnika IN (1, 2, 3) AND TRUE) )				
				) ) AS koszt_pracod,
				
				SUM(g.ChoroboweFirma + g.ZusFunduszPracy + g.ZusFunduszGwarancyjny + g.RazemSkladkiPracodawcy +
				(SELECT SUM(kwota + IFNULL(ZmniejszZwieksz, 0)) 
				 FROM 
					ms.place_skladniki ps
				JOIN ms.definicja_skladnika_placy dsp ON ps.GUID_definicja_skladnika_placy = dsp.GUID
				WHERE guid_zapisu_placowego = g.guid AND (guid_definicja_skladnika_placy IN
				  ('C_0', 'C_1', 'C_3', 'C_4', 'C_5', 'C_6', 'C_7', 'C_8') OR (ps.rodzajskladnika IN (1, 2, 3) AND dsp.do_dofinans_PFRON = 1) )				
				) ) AS podst_SOD,			
				
				IF(k.DataZatrudnieniaWzakl > _DS OR IF(k.CzyObecniePracuje=1, "2099-01-01", IFNULL(k.DataZwolnienia, CURDATE()) ) < _DK,
				(DATEDIFF(LEAST(IFNULL(k.DataZwolnienia, CURDATE()), _DK), GREATEST(k.DataZatrudnieniaWzakl, _DS) )+1) / DAY(LAST_DAY(_DS)), 1) AS wspolcz_etatu
			FROM ms.place g, ms.Pracownicy k    -- zapisy placowe z bazy "ms" (Pracownik.RozliczajWg = 3)	
			WHERE g.deleted = 0 AND g.rok = _Param_A AND g.miesiac = _Param_B AND g.GUID_pracownika IN (SELECT PracGUID FROM tt_pl_obiekty_godz)
				AND g.GUID_pracownika = k.GUID
				AND IF(_Param_C = '', TRUE, k.GUID = _Param_C)
			GROUP BY g.GUID_pracownika)	
		;
				
		-- 1.A. naliczanie wartosci rzeczywistej na podst. zapisow placowych
		BEGIN	
			DECLARE _Ile, _ms_ile, _sec_ile, _usluga INTEGER;
			DECLARE _PracGUID, _kartaGUID VARCHAR(38);
			DECLARE _done BOOL DEFAULT FALSE;
			DECLARE _czas_P, _suma_czas_P, _skl_ekwiw, _sec_ekwiw, _ms_ekwiw, _Extra_Wynagr  /*, _wspolcz_etatu */ DOUBLE;
			
			DECLARE _c_proc CURSOR FOR
				SELECT 
					PracGUID, kartaGUID, czas_P
				FROM `tt_pl_obiekty_godz`;
			DECLARE CONTINUE HANDLER FOR NOT FOUND SET _DONE = TRUE;
		
			OPEN _c_proc;
				loop1: LOOP
					FETCH _c_proc INTO
						_PracGUID, _kartaGUID, _czas_P;
					IF _done THEN
						LEAVE loop1;
					ELSE
										    					
						-- zerowanie wart_rzecz
						UPDATE 
							pl_karty_obiektu_po
						SET		
							wart_rzecz   = 0.00,
							wart_rzecz_p = 0.00
						WHERE PracGUID = _PracGUID AND guidng = _kartaGUID;	
						
					    -- naliczenie kosztów pracodawcy (na podst. zapisów placowych)
						
						
						-- spr. czy osoba pracowała na etacie na jednym obiekcie, czy na kilku
						SET _Ile = 0;  SET _suma_czas_P = 0;
						SELECT COUNT(*) AS ile, SUM(czas_P) AS czas 
						FROM
							tt_pl_obiekty_godz
						WHERE 
							PracGUID = _PracGUID  -- and czas_P > 0	
							AND ( (czas_P + czas_Z >0)
							         OR (Extra_Wynagr > 0)
								 OR (Absencja_CLZ > 0)
							      ) 
							  
							--  _Extra_Wynagr, + _Absencja_CLZ) >0
							-- dodal andy
													
						
						GROUP BY 
							PracGUID
						INTO 
							_Ile, _suma_czas_P;
						
						SET @_Ile = _Ile;
						SET @_suma_czas_P = _suma_czas_P;
						
						IF _Ile > 0 THEN
																			  
							IF _Ile = 1 THEN	
							  							  							   																		
								-- osoba pracowala na 1 obiekcie, ale moga być dwa zapisy w tt_koszty_pracod (jeden z ms i jeden z sec), w sytuacji gdy nastšpila zmiana formy zatrudnienia w cišgu miesišca		 
								SET _SQLText = 'UPDATE 
									pl_karty_obiektu_po k  
								SET
									k.wart_rzecz = (SELECT SUM(t.koszt_pracod) 
										FROM tt_koszty_pracod t WHERE t.GUID_pracownika = k.PracGUID),
									k.wart_rzecz_p = (SELECT SUM(t.koszt_pracod) 
										FROM tt_koszty_pracod t WHERE t.GUID_pracownika = k.PracGUID)	
								WHERE  k.guidng = ''#kartaGUID#'' AND k.PracGUID = ''#PracGUID#''
									AND  (k.czas_P + k.czas_Z + k.Absencja_WOD + k.Extra_Wynagr + k.Absencja_CLZ) > 0    ;	';
								
								SET _SQLText = REPLACE(_SQLText, '#PracGUID#', _PracGUID);
								SET _SQLText = REPLACE(_SQLText, '#kartaGUID#', _kartaGUID);
								
								SET @_SQLText = _SQLText;		
								CALL _ExecuteCmd(_SQLText, @Error);
															
								-- SET @_Ile = _Ile;
							ELSE
							-- osoba pracowała na kilku obiektach w miesišcu - trzeba rozbić koszta  
								SET _suma_czas_P = 0;
								
								SELECT SUM(czas_P) FROM tt_pl_obiekty_godz
								WHERE 
									PracGUID = _PracGUID  -- suma przepracowanych godzin na wszystkich obiektach w miesišcu
								INTO
									_suma_czas_P;
									-- wart_rzecz = koszt_pracod * (czas_P/_suma_czas_p)
								UPDATE 
									pl_karty_obiektu_po k, tt_koszty_pracod t
								SET
									k.wart_rzecz = _Rnd( (t.koszt_pracod ) * (_czas_P / _suma_czas_P), 2),
									k.wart_rzecz_p = _Rnd( (t.koszt_pracod ) * (_czas_P / _suma_czas_P), 2)
								WHERE k.PracGUID = t.GUID_pracownika AND k.guidng = _kartaGUID AND t.GUID_pracownika = _PracGUID;
								
								-- koszt_pracod - _skl_ekwiw
								
								
								SET _SQLText = 'UPDATE 
									pl_karty_obiektu_po k, tt_koszty_pracod t
								SET
									k.wart_rzecz = _Rnd( (t.koszt_pracod - _skl_ekwiw) * (#czas_P# / #suma_czas_P#), 2),
									k.wart_rzecz_p = _Rnd( (t.koszt_pracod - _skl_ekwiw) * (#czas_P# / #suma_czas_P#), 2)
								WHERE k.PracGUID = t.GUID_pracownika AND k.guidng = #kartaGUID# AND t.GUID_pracownika = #PracGUID#;							
								';
								
								SET _SQLText = REPLACE(_SQLText, '#czas_P#', _czas_P);
								SET _SQLText = REPLACE(_SQLText, '#suma_czas_P#', _suma_czas_P);
								
								SET _SQLText = REPLACE(_SQLText, '#PracGUID#', _PracGUID);
								SET _SQLText = REPLACE(_SQLText, '#kartaGUID#', _kartaGUID);
																
							END IF;
							SET @_SQLText_P = _SQLText;		
						END IF;  -- IF _Ile > 0 THEN
						
						SET _done = FALSE;  
					END IF;	-- IF (NOT) _done
				END LOOP;
			CLOSE _c_proc;			
			
			/* ewentualna korekta zapisów, gdzie pracownik wystepuje na kilku kartach obiektów w miesiacu, i sma rozbić na poszczególne
			   obiekty jest nierówna rozbijanej kwocie z zapisu placowego -> roznice dodajemy do karty o największej kwocie */
			
			-- DROP  TEMPORARY TABLE IF EXISTS `tt_korekta_rozdzialu`;   
			-- CREATE TEMPORARY TABLE tt_korekta_rozdzialu AS
			
			DROP   TABLE IF EXISTS `tt_korekta_rozdzialu`;   
			CREATE  TABLE tt_korekta_rozdzialu AS
			SELECT k.GUID_pracownika, SUM(1) AS ile_kart, GROUP_CONCAT('"', o.guid, '"') AS guidy_poz,
			  k.koszt_pracod, SUM(wart_rzecz) AS suma_wart, k.koszt_pracod - SUM(wart_rzecz) AS roznica			 
			FROM 
			  tt_koszty_pracod k, pl_karty_obiektu_po o
			WHERE -- k.GUID_pracownika = 'IM_85040600942';
			  k.GUID_pracownika = o.pracguid AND  o.guidng IN (SELECT guid FROM pl_karty_obiektu_ng WHERE rok = _Param_A AND miesiac = _Param_B)
			    AND IF(_Param_C = '', TRUE, k.GUID_pracownika = _Param_C)
			GROUP BY  k.GUID_pracownika 
			HAVING (koszt_pracod <> suma_wart) AND ile_kart > 1;		
			
			BEGIN
			    -- DECLARE _koniec BOOL DEFAULT FALSE;
				DECLARE _roznica DOUBLE;
				DECLARE _GUID_prac,  _GUID_max_poz VARCHAR(38);
				DECLARE _guidy_poz VARCHAR(760);
				
				DECLARE _kor_proc CURSOR FOR
				SELECT 
					GUID_pracownika, guidy_poz, roznica
				FROM `tt_korekta_rozdzialu`;

				SET _done = FALSE;		
				OPEN _kor_proc;
				loop2: LOOP
					FETCH _kor_proc INTO
						_GUID_prac, _guidy_poz, _roznica;
					IF _done THEN
						LEAVE loop2;
					ELSE
						SELECT GUID 
						FROM 
						    pl_karty_obiektu_po o 
						WHERE 
						    o.wart_rzecz = (SELECT MAX(wart_rzecz) FROM pl_karty_obiektu_po s WHERE s.PracGUID = o.PracGUID AND s.GUID IN (_guidy_poz))
							AND o.PracGUID = _GUID_prac
						INTO _GUID_max_poz	;
						
						UPDATE 
							pl_karty_obiektu_po
						SET
							wart_rzecz = wart_rzecz + _roznica,
							wart_rzecz_p = wart_rzecz_p + _roznica
						WHERE
							GUID = _GUID_max_poz;
						SET _done = FALSE;	
					END IF;
				END LOOP;
				CLOSE _kor_proc;			
			
			END; -- BEGINa korekty rozdzialu 
			
			-- 1.B. naliczanie wartosci rzeczywistej na podst. zleceń
			
			/* to bedzie inaczej: bierzemy sume zlecen z obu baz, spelniajacych warunek:
			  (ZlecERP = 1) or (LENGTH(GUID) = 32) // OR  (ZaZlecenie=201.00 AND NaliczacZus=1 AND hr.area_nodes.select > 0)
			
			*/
			
		/*	DROP   TABLE IF EXISTS `tt_pl_karty_ze_zlec`; 
			CREATE  TABLE tt_pl_karty_ze_zlec AS
			
			SELECT 
				o.guidng AS kartaGUID, o.pracguid, SUM(o.czas_z) AS sum_czas_Z, 
				_vardouble(0) AS zazlecenie, _vardouble(0) AS Razemskladkizleceniodawcy, _vardouble(0) AS sklfp,  _vardouble(0) AS sklfgsp,  _vardouble(0) AS Razem				
			FROM 	
				pl_karty_obiektu_ng n, pl_karty_obiektu_po o 
			WHERE	n.rok = _param_a AND n.miesiac = _param_b AND n.guid = o.guidng
				AND o.stawka_z > 0 AND o.czas_z > 0 AND n.deleted = 0
				AND IF(_param_c = '', TRUE, o.pracguid = _param_c)
				;    */
			
						
			DROP  TABLE IF EXISTS `tt_koszty_zlecd`;   -- TEMPORARY
			CREATE  TABLE `tt_koszty_zlecd`   -- TEMPORARY		
			(
				PracGUID VARCHAR(38) NOT NULL DEFAULT '',
				kwota DOUBLE(16,4) NOT NULL DEFAULT 0.0000,
				PRIMARY KEY (`PracGUID`)
			);
			
			BEGIN				
				DECLARE _stawka_Z, _czas_Z, _suma_czas_Z, /*, _wspolcz_etatu */ 
					_ZaZlecenieS, _ZaZlecenieM, _SkladkiZlecdS, _SkladkiZlecdM, _SklFP_S, _SklFP_M, 
					_SklFGSP_S, _SklFGSP_M, _RazemZ, _RazemSklZ  DOUBLE;
				DECLARE _IleZ	INTEGER;
							
				DECLARE _z_proc CURSOR FOR
				SELECT 
					PracGUID, kartaGUID, usluga, czas_Z, Extra_Wynagr
				FROM `tt_pl_obiekty_godz`;
				
				SET _DONE = FALSE;
		
			OPEN _z_proc;
				loopZ: LOOP
					FETCH _z_proc INTO
						_PracGUID, _kartaGUID, _usluga, _czas_Z, _Extra_Wynagr;
					IF _done THEN
						LEAVE loopZ;
					ELSE
						SET _Ile = 0;
						SELECT COUNT(*) AS ile 
						FROM
							tt_pl_obiekty_godz
						WHERE 
							PracGUID = _PracGUID	
					                AND ( (czas_P + czas_Z >0)
							         OR (Extra_Wynagr > 0)
								 OR (Absencja_CLZ > 0)
							      ) 
							  
							--  _Extra_Wynagr, + _Absencja_CLZ) >0
							-- dodal andy
						GROUP BY 
							PracGUID
						INTO 
							_Ile;
						
						SET @_Ile = _Ile;
						
						/*  						*/
						-- zebranie danych ze zlecen
						SET _ZaZlecenieS = 0; SET _ZaZlecenieM = 0; SET _SkladkiZlecdS = 0;  SET _SkladkiZlecdM = 0;  
						SET _SklFP_S = 0;  SET _SklFP_M = 0; SET _SklFGSP_S = 0;  SET _SklFGSP_M = 0; 
					  
						SELECT 
							IFNULL(SUM(s.ZaZlecenie), 0), IFNULL(SUM(s.RazemSkladkiZleceniodawcy), 0), IFNULL(SUM(s.SklFundPracy), 0), IFNULL(SUM(s.SklFGSP), 0)
						FROM 
							sec.prace_zlecone s
						WHERE 
							s.rok = _Param_A AND s.miesiac = _Param_B AND s.guid_pracownika = _PracGUID AND s.deleted = 0
							AND ( (s.ZlecERP = 1) OR (LENGTH(s.GUID) = 32) )
						INTO	
							_ZaZlecenieS, _SkladkiZlecdS, _SklFP_S, _SklFGSP_S;
							
						SELECT 
							IFNULL(SUM(s.ZaZlecenie), 0), IFNULL(SUM(s.RazemSkladkiZleceniodawcy), 0), IFNULL(SUM(s.SklFundPracy), 0), IFNULL(SUM(s.SklFGSP), 0)
						FROM 
							ms.prace_zlecone s
						WHERE 
							s.rok = _Param_A AND s.miesiac = _Param_B AND s.guid_pracownika = _PracGUID AND s.deleted = 0
							AND ( (s.ZlecERP = 1) OR (LENGTH(s.GUID) = 32) )
						INTO	
							_ZaZlecenieM, _SkladkiZlecdM, _SklFP_M, _SklFGSP_M;		
						
						SET @_kartaGUID = _kartaGUID ;
						SET @_PracGUID = _PracGUID ;
						
						SET _RazemZ = 0.00;
							SET _RazemZ = IFNULL(_ZaZlecenieS, 0) + IFNULL(_ZaZlecenieM, 0) +	IFNULL(_SkladkiZlecdS, 0) + IFNULL(_SkladkiZlecdM, 0) + 
										  IFNULL(_SklFP_S, 0) + IFNULL(_SklFP_M, 0) + IFNULL(_SklFGSP_S, 0) + IFNULL(_SklFGSP_M, 0);
										  
							SET @_ZaZlecenieM = _ZaZlecenieM;
							SET @_razem = 	_RazemZ;
						
						SET _RazemSklZ = 0.00;
						SET _RazemSklZ	= IFNULL(_SkladkiZlecdS, 0) + IFNULL(_SkladkiZlecdM, 0) + 
										  IFNULL(_SklFP_S, 0) + IFNULL(_SklFP_M, 0) + IFNULL(_SklFGSP_S, 0) + IFNULL(_SklFGSP_M, 0);
						SET _RazemSklZ	= _rnd2(_RazemSklZ);				  
						
						INSERT IGNORE INTO tt_koszty_zlecd VALUES (_PracGUID, _RazemZ);
						
						IF _Ile = 1 THEN	
														
							UPDATE 
								pl_karty_obiektu_po k -- , tt_koszty_pracod t	
							SET	
								k.wart_rzecz = IFNULL(k.wart_rzecz, 0) + IFNULL(_ZaZlecenieS, 0) + IFNULL(_ZaZlecenieM, 0) +	IFNULL(_SkladkiZlecdS, 0) + IFNULL(_SkladkiZlecdM, 0) + 
										  IFNULL(_SklFP_S, 0) + IFNULL(_SklFP_M, 0) + IFNULL(_SklFGSP_S, 0) + IFNULL(_SklFGSP_M, 0)
								-- k.wart_rzecz_p = t.koszt_pracod
							WHERE k.PracGUID = _PracGUID AND k.guidng = _kartaGUID; -- AND t.GUID_pracownika = _PracGUID;
							
							SET _SQLText = 'UPDATE 
								pl_karty_obiektu_po k -- , tt_koszty_pracod t	
							set	
								k.wart_rzecz = ifnull(k.wart_rzecz, 0) + ifnull(#ZaZlecenieS#, 0) + ifnull(#ZaZlecenieM#, 0) +	ifnull(#SkladkiZlecdS#, 0) + ifnull(#SkladkiZlecdM#, 0) + 
										  ifnull(#SklFP_S#, 0) + ifnull(#SklFP_M#, 0) + ifnull(#SklFGSP_S#, 0) + ifnull(#SklFGSP_M#, 0)
								-- k.wart_rzecz_p = t.koszt_pracod
							WHERE k.PracGUID = ''#PracGUID#'' AND k.guidng = #kartaGUID#; -- AND t.GUID_pracownika = _PracGUID;														
							';
							
							SET _SQLText = REPLACE(_SQLText, '#ZaZlecenieS#', _ZaZlecenieS);
							SET _SQLText = REPLACE(_SQLText, '#ZaZlecenieM#', _ZaZlecenieM);
							SET _SQLText = REPLACE(_SQLText, '#SkladkiZlecdS#', _SkladkiZlecdS);
							SET _SQLText = REPLACE(_SQLText, '#SkladkiZlecdM#', _SkladkiZlecdM);
							SET _SQLText = REPLACE(_SQLText, '#SklFP_S#', _SklFP_S);
							SET _SQLText = REPLACE(_SQLText, '#SklFP_M#', _SklFP_M);
							SET _SQLText = REPLACE(_SQLText, '#SklFGSP_S#', _SklFGSP_S);
							SET _SQLText = REPLACE(_SQLText, '#SklFGSP_M#', _SklFGSP_M);
							SET _SQLText = REPLACE(_SQLText, '#PracGUID#', _PracGUID);
							SET _SQLText = REPLACE(_SQLText, '#kartaGUID#', _kartaGUID);
							
							SET @_SQLText = _SQLText;
							
						ELSE
							SET @ilosc='multi';  --   osoba pracowała na kilku obiektach w miesiacu - trzeba rozbić koszta  (17.10.2017 tutaj bedzie ewent. zmiana)
							
							SET _suma_czas_Z = 0;
							
							SELECT SUM(czas_Z) FROM tt_pl_obiekty_godz
							WHERE 
								PracGUID = _PracGUID  -- suma przepracowanych godzin na wszystkich obiektach w miesišcu
							INTO
								_suma_czas_Z;
								
							SET @_suma_czas_Z = 	_suma_czas_Z;
							
							UPDATE 
								pl_karty_obiektu_po k -- , tt_koszty_pracod t
							SET
								k.wart_rzecz = IFNULL(k.wart_rzecz, 0) + IFNULL(_Rnd(_RazemSklZ * (k.czas_Z / _suma_czas_Z), 2), 0) + 
								_Rnd((k.czas_Z * k.Stawka_Z), 2) + Extra_Wynagr
								-- k.wart_rzecz_p = _Rnd(t.koszt_pracod * (_czas_P / _suma_czas_P), 2)
							WHERE k.PracGUID = _PracGUID AND k.guidng = _kartaGUID;
							-- k.PracGUID = t.GUID_pracownika AND k.guidng = _kartaGUID AND t.GUID_pracownika = _PracGUID;
							
							
							-- na potrzeby debugowania:
							SET _SQLText = 'UPDATE 
							pl_karty_obiektu_po k 
							SET
								k.wart_rzecz = ifnull(k.wart_rzecz, 0) + ifnull(_Rnd(#_RazemZ# * (k.czas_Z / #_suma_czas_Z#), 2), 0)								
							WHERE k.PracGUID = #PracGUID# AND k.guidng = #kartaGUID#;
							';
							
							SET _SQLText = REPLACE(_SQLText, '#_RazemZ#', _RazemZ);
							SET _SQLText = REPLACE(_SQLText, '#_suma_czas_Z#', _suma_czas_Z);
							SET _SQLText = REPLACE(_SQLText, '#PracGUID#', _PracGUID);
							SET _SQLText = REPLACE(_SQLText, '#kartaGUID#', _kartaGUID);
							
							SET @_SQLText = _SQLText;
							
							/* #49033
							
								1. dotyczy pracowników zarejestrowanych na Karcie Obiektu typu `sprzątanie` (usluga = 1)
								2. dotyczy tych, którzy pracują na więcej niż 1 obiekcie w danym miesiącu i przynajmniej cześć wynagrodzenia mają wypłacane w formie umowy-zlecenia
								3. powinien doliczać do Wartości Rzeczywistej (Kosztów Rzeczywistych) pracy na danym Obiekcie 
								  (tym, na którym pracował w ramach umowy-zlecenia - o czym informuje kolumna `Dodatk. wynagr.` > 0) :
								  proporcjonalnie składkę ZUS naliczoną od umowy- zlecenia:
								3a. kwota doliczonej składki ZUS:
									współczynnik podziału = cała składka ZUS naliczona od zlecenia (z kartoteki umów-zleceń) / kwota Dodatk.wynagr. z wszystkich Kart Obiektow w danym m-cu
								3b. kwota Kosztów Rzeczywistych (kolumna `Wart. rzecz.`) dla przypadku z pkt 2 wynosi:
										Wart. rzecz. = Dodatk. wynagrodz + ( Dodatk. wynagrodz  x współczynnik podziału)   																	
							*/
							
							IF ((_usluga = 1) AND (_Extra_Wynagr > 0) AND (_RazemSklZ > 0)) THEN
							
							
								-- suma z wszystkich kart pracy za dany miesiac
								select sum(Extra_Wynagr) 
								from pl_karty_obiektu_ng n, pl_karty_obiektu_po poz 
								where  n.rok = _Param_A AND n.miesiac = _Param_B AND n.guid = poz.guidng AND n.deleted = 0
									and poz.PracGUID = _PracGUID
								into @sum_Extra_Wynagr;
								
								-- składki ZUS ze zlecenia: _RazemSklZ  (skladki zlecd.)
								SET @ko.wsp = _Rnd(_RazemSklZ / @sum_Extra_Wynagr, 4);
							    SET @ko.wart_rzecz = _Rnd(_Extra_Wynagr + (@ko.wsp * _Extra_Wynagr), 2);
								
								-- Wart. rzecz.
								UPDATE pl_karty_obiektu_po k 
								SET	k.wart_rzecz = @ko.wart_rzecz
								WHERE k.PracGUID = _PracGUID AND k.guidng = _kartaGUID;
							
							END IF;  -- (_usluga = 1)  (=> Karty Obiektu typu `sprzątanie`)  AND (_Extra_Wynagr > 0)  (praca na um.-zlec. na danym obiekcie)
																					
						END IF;
						
						SET _done = FALSE;		
						
					END IF;
				END LOOP;
			CLOSE _z_proc;				
								
			END; -- wyliczenia na podst. zleceń
		
		
			-- 2. naliczenie kolumny "SOD" (na podst. tt_koszty_pracod )   -- where TypNiepelnospr > 0
			BEGIN
			    DECLARE _TypNiepelnospr, _specjalne, _etat_l, _etat_m, _ile_poz INTEGER;
				DECLARE _koszt_refund, _max_limit, _wspolcz_etatu, _wymiar_etatu, _SOD, _roznica, _skl_ekwiw DOUBLE;
				DECLARE  _GUID_prac, _GUID_max_poz VARCHAR(38);
				DECLARE _guidy_poz VARCHAR(380);
				-- DECLARE _SOD_DONE  BOOL DEFAULT FALSE;
				
				DECLARE _sod_proc CURSOR FOR
				SELECT 
					GUID_pracownika, TypNiepelnospr, specjalne, -- etat_l, etat_m, podst_SOD AS koszt_refund, wspolcz_etatu   -- _Rnd(0.75 * podst_SOD, 2) AS koszt_refund,				
					  MAX(etat_l / etat_m) AS wymiar_etatu, SUM(podst_SOD) AS koszt_refund, SUM(wspolcz_etatu) AS wspolcz_etatu  -- _Rnd(0.75 * podst_SOD, 2) AS koszt_refund,
				FROM 
					`tt_koszty_pracod`
				WHERE	
					TypNiepelnospr > 0									
				GROUP BY GUID_pracownika;	
				
				
				DECLARE CONTINUE HANDLER FOR NOT FOUND SET _DONE = TRUE;
				
				
				SELECT COUNT(*) 
				FROM 
					`tt_koszty_pracod`
				WHERE	
					TypNiepelnospr > 0									
				INTO @_tt_koszty_pracod_count;
				
				
				SET _done = FALSE;	
				
				SET @sod_count = 0;
				DROP TEMPORARY TABLE IF EXISTS t_sod;
				CREATE TEMPORARY TABLE t_sod  (guid VARCHAR(38), prac_guid VARCHAR(38), sod DOUBLE(16,4));
				
				OPEN _sod_proc;
				loop_sod: LOOP
					FETCH _sod_proc INTO
						_GUID_prac, _TypNiepelnospr, _specjalne, _wymiar_etatu, /* _etat_l, _etat_m,*/ _koszt_refund, _wspolcz_etatu;  -- zawiera dane tylko z wybranego miesiaca
						
					IF _DONE THEN
						LEAVE loop_sod;
					ELSE
					    SET @sod_count =  @sod_count  + 1;
						SET @sod.pos ='przed sodir_stawki';
						SELECT 
							IFNULL(Kwota, 0)
						FROM 
							sodir_stawki
						WHERE (_Param_A BETWEEN	RokOd AND RokDo) AND
							  (_Param_B BETWEEN	MscOd AND MscDo)	AND
							specjalne = _specjalne AND
							TypNiepelnospr = _TypNiepelnospr
						INTO	
							_max_limit; -- krok 3) z rozpiski
							
						SET @sod.pos = 'po sodir_stawki';	
						
						SET _max_limit = IFNULL(_max_limit, 0);
					
						-- dla osób pracujacych przez okres niepelnego miesiaca:
						IF _wspolcz_etatu < 1.000 THEN
							SET _max_limit = _Rnd(_wspolcz_etatu * _max_limit, 2);
							
						-- 	
						END IF;
						
						-- niepelny etat
						IF _wymiar_etatu <> 1.0000 THEN								-- (_etat_l / _etat_m)
							SET _max_limit = _Rnd( _wymiar_etatu * _max_limit, 2);     -- (_etat_l / _etat_m)
						END IF;
						
						 -- 0.00;	
												
						--  odejmujemy skladki z ewentualnego zapisu, dla którego
                        --    jedynym skladnikiem jest "ekwiwalent za urlop" (  CEkwialUrlop = 'C_14')  
						SET _skl_ekwiw = NULL;
						
						SET @sod.pos = '3a. przed C_14';
						
						-- set @_skl_ekwiw_przed = _skl_ekwiw;
						SET _SQLText = ' SELECT	
							IFNULL(p.ChoroboweFirma + p.ZusFunduszPracy + p.ZusFunduszGwarancyjny + p.RazemSkladkiPracodawcy, 0.00) AS SklEkwiw 
						FROM 
							place_skladniki s, place p 
						WHERE 
							s.GUID_definicja_skladnika_placy = ''C_14''  AND s.GUID_zapisu_placowego = p.guid 
							AND p.rok = #Param_A# AND p.miesiac = #Param_B# AND p.deleted = 0  AND p.guid_pracownika = #PracGUID#
							AND s.kwota = (p.kwotabrutto + p.RazemSkladkiPracownika) AND (s.kwota > 0)
						INTO _skl_ekwiw												
						';
						
						SET _SQLText = REPLACE(_SQLText, '#PracGUID#', _GUID_prac);
						SET _SQLText = REPLACE(_SQLText, '#Param_B#', _Param_B);
						SET _SQLText = REPLACE(_SQLText, '#Param_A#', _Param_A);
							
						SET @_SQLText_C14 = _SQLText;		
												
						-- odliczamy ew. skladki od ekwiwalentu za urlop
							SET _sec_ile = 0;  SET _ms_ile = 0;
							SET _skl_ekwiw = 0; SET _sec_ekwiw = 0; SET _ms_ekwiw = 0;
							
							SELECT	COUNT(*) AS ile
							-- IFNULL(p.ChoroboweFirma + p.ZusFunduszPracy + p.ZusFunduszGwarancyjny + p.RazemSkladkiPracodawcy, 0.00) AS SklEkwiw 
							FROM 
								sec.place_skladniki s, sec.place p 
							WHERE 
								s.GUID_definicja_skladnika_placy = 'C_14'  AND s.GUID_zapisu_placowego = p.guid 
								AND p.rok = _Param_A AND p.miesiac = _Param_B AND p.deleted = 0  AND p.guid_pracownika = _GUID_prac
								AND s.kwota = (p.kwotabrutto + p.RazemSkladkiPracownika) AND (s.kwota > 0) 
							INTO _sec_ile;
							
							SET @sod.pos = '3b. skladki';
							
							IF _sec_ile > 0 THEN
								SELECT	
								 IFNULL(p.ChoroboweFirma + p.ZusFunduszPracy + p.ZusFunduszGwarancyjny + p.RazemSkladkiPracodawcy, 0.00) AS SklEkwiw 
								FROM 
									sec.place_skladniki s, sec.place p 
								WHERE 
									s.GUID_definicja_skladnika_placy = 'C_14'  AND s.GUID_zapisu_placowego = p.guid 
									AND p.rok = _Param_A AND p.miesiac = _Param_B AND p.deleted = 0  AND p.guid_pracownika = _GUID_prac
									AND s.kwota = (p.kwotabrutto + p.RazemSkladkiPracownika) AND (s.kwota > 0) 
								INTO _sec_ekwiw;
							END IF;
							
							SET @sod.pos = '3c. skladki';
							
							SELECT	COUNT(*) AS ile
							-- IFNULL(p.ChoroboweFirma + p.ZusFunduszPracy + p.ZusFunduszGwarancyjny + p.RazemSkladkiPracodawcy, 0.00) AS SklEkwiw 
							FROM 
								ms.place_skladniki s, ms.place p 
							WHERE 
								s.GUID_definicja_skladnika_placy = 'C_14'  AND s.GUID_zapisu_placowego = p.guid 
								AND p.rok = _Param_A AND p.miesiac = _Param_B AND p.deleted = 0  AND p.guid_pracownika = _GUID_prac
								AND s.kwota = (p.kwotabrutto + p.RazemSkladkiPracownika) AND (s.kwota > 0) 
							INTO _ms_ile;
							
							SET @sod.pos = '3d. skladki';
							SET @sod.GUID_prac = _GUID_prac;
							
							IF _ms_ile > 0 THEN
								SELECT	SUM(
								 IFNULL(p.ChoroboweFirma + p.ZusFunduszPracy + p.ZusFunduszGwarancyjny + p.RazemSkladkiPracodawcy, 0.00) ) AS SklEkwiw 
								FROM 
									ms.place_skladniki s, ms.place p 
								WHERE 
									s.GUID_definicja_skladnika_placy = 'C_14'  AND s.GUID_zapisu_placowego = p.guid 
									AND p.rok = _Param_A AND p.miesiac = _Param_B AND p.deleted = 0  AND p.guid_pracownika = _GUID_prac
									AND s.kwota = (p.kwotabrutto + p.RazemSkladkiPracownika) AND (s.kwota > 0) 
								INTO _ms_ekwiw;
							END IF;
							
							SET @sod.pos = '3e. skladki';
							
							SET _skl_ekwiw = IFNULL(_sec_ekwiw, 0) + IFNULL(_ms_ekwiw, 0);	
							
							SET @sod.pos = '3f. po C_14';
						
						
						SET @_kr_przed = _koszt_refund;
						IF _skl_ekwiw > 0 THEN	
							SET _koszt_refund = _koszt_refund - _skl_ekwiw;
						END IF;
						SET @_kr_zm = _koszt_refund;
						
						SET _koszt_refund = _Rnd(0.75 * _koszt_refund, 2);
						
						SET _SOD = 0.0;
						SET _SOD = LEAST(_koszt_refund, _max_limit);
						SET @_kr = _koszt_refund;
						SET @_max_limit = _max_limit;
						SET @_etat =  _wymiar_etatu; -- _etat_l / _etat_m;
						SET @_skl_ekwiw = _skl_ekwiw;
						
						 
						-- jedziemy po kartach obiektow dla tego pracow: jesli jedna, to caly _SOD tam, a jesli nie, to rozbić jak w przypadku kosztów
						
						SET _Ile = 0;
						SELECT COUNT(*) AS ile 
						FROM
							tt_pl_obiekty_godz
						WHERE 
							PracGUID = _GUID_prac	
						GROUP BY 
							PracGUID
						INTO 
							_Ile;
							
						SET @debug_ile = 	 _Ile;
						
						UPDATE pl_karty_obiektu_po  poz, tt_pl_obiekty_godz  ng
						SET SOD = 0
						WHERE	poz.PracGUID = _GUID_prac  AND  poz.GUIDNg = ng.kartaGUID;
						
						IF _Ile = 1 THEN	
						  -- osoba pracowala na jednym obiekcie w miesiacu
							UPDATE 
								pl_karty_obiektu_po poz, tt_pl_obiekty_godz  ng   -- zlaczenie z tt_pl_obiekty_godz gwarantuje zawezenie do danego miesiaca
							SET 
								poz.SOD = _SOD
							WHERE	
								poz.PracGUID = _GUID_prac  AND  poz.GUIDNg = ng.kartaGUID
								AND (poz.czas_P + poz.czas_Z + poz.Extra_Wynagr + poz.Absencja_WOD + poz.Absencja_CLZ) > 0;	

							INSERT INTO t_sod(guid, prac_guid, sod) 
							  VALUES ( (SELECT kartaguid FROM tt_pl_obiekty_godz WHERE PracGUID = _GUID_prac),  
							  _GUID_prac, _SOD);	
							-- set @szambo = '1';		
						ELSE
						-- osoba pracowała na kilku obiektach w miesišcu - trzeba rozbić koszta							
							SET @szambo = 'multi';	
							SET _suma_czas_P = 0;
							
							SET @sod_sod = _SOD;
							
							SELECT SUM(czas_P) FROM tt_pl_obiekty_godz
							WHERE 
								PracGUID = _GUID_prac  -- suma przepracowanych godzin na wszystkich obiektach w miesišcu
							INTO
								_suma_czas_P;
								
							SET @debug_suma_czas =	 _suma_czas_P;
								
							UPDATE 
								pl_karty_obiektu_po k, tt_pl_obiekty_godz t  -- zlaczenie z tt_pl_obiekty_godz gwarantuje zawezenie do danego miesiaca
							SET
								k.SOD = _Rnd(_SOD * ( (k.czas_P + 8*k.Absencja_WOD) / _suma_czas_P), 2)
							WHERE k.PracGUID = t.PracGUID AND t.PracGUID = _GUID_prac AND k.guidng = t.kartaGUID
								AND (k.czas_P + k.czas_Z + k.Extra_Wynagr + k.Absencja_WOD) > 0;	
							-- ;	-- AND k.guidng = _kartaGUID  
							
							SET @debug_GUID_prac = _GUID_prac;								
						
							-- ew. korekta rozbicia - dodajemy roznice do najwiekszej kwoty
							SET _ile_poz = 0;
							SET _roznica = 0.0;
							
							
							DROP TEMPORARY TABLE IF EXISTS t_sod_delta;						
							CREATE TEMPORARY TABLE t_sod_delta AS	
							SELECT 
								 _Rnd(IFNULL(_SOD - SUM(SOD), 0), 4) AS roznica, SUM(1) AS ile_kart -- , GROUP_CONCAT('"', poz.guid, '"') AS guidy_poz
							FROM 
								pl_karty_obiektu_po poz, tt_pl_obiekty_godz ng  -- zlaczenie z tt_pl_obiekty_godz gwarantuje zawezenie do danego miesiaca
							WHERE 	poz.pracguid = ng.pracguid 
							  AND  poz.GUIDNg = ng.kartaGUID AND
								poz.PracGUID = _GUID_prac AND (poz.czas_P > 0) -- AND  poz.GUIDNg = ng.GUID;						
							GROUP BY 
								poz.PracGUID	
							HAVING 
								(ile_kart > 1) AND (roznica <> 0);  -- (suma_poz <> kwota_glowna);  
							-- INTO
							--	_roznica, _ile_poz;  -- , _guidy_poz;
							
							SET _ile = 0;
							SELECT COUNT(*) AS ile 
							FROM t_sod_delta 
							INTO _Ile;
							
							IF _Ile > 0 THEN  -- = 1
							
							  -- select guid from t_max_poz into _GUID_max_poz;
								SET _roznica = 0;  
								SELECT roznica FROM t_sod_delta INTO _roznica;
								
								-- set@sod_roznica = 
									
									
								DROP TEMPORARY TABLE IF EXISTS t_poz_guid;						
								CREATE TEMPORARY TABLE t_poz_guid AS	
								SELECT 	
									IFNULL(_SOD - SUM(SOD), 0) AS roznica, SUM(1) AS ile_kart, 
								   poz.guid
								FROM 
									pl_karty_obiektu_po poz, tt_pl_obiekty_godz ng  -- zlaczenie z tt_pl_obiekty_godz gwarantuje zawezenie do danego miesiaca
								WHERE 	poz.pracguid = ng.pracguid 
								  AND  poz.GUIDNg = ng.kartaGUID AND
									poz.PracGUID = _GUID_prac AND (poz.czas_P  + poz.czas_Z + poz.Extra_Wynagr + poz.Absencja_WOD) > 0 -- AND  poz.GUIDNg = ng.GUID;						
								GROUP BY 
									poz.PracGUID	
								HAVING 
									(ile_kart > 1) AND (roznica <> 0);  -- (suma_poz <> kwota_glowna);  	
									
								
								SET _GUID_max_poz = '';
								
								SET _SQLText = ' SELECT	
								guid from pl_karty_obiektu_po o where  o.SOD = (SELECT MAX(SOD) 
								  FROM pl_karty_obiektu_po s 
									 WHERE s.PracGUID = o.PracGUID AND s.GUID IN (select guid from t_poz_guid))
									AND o.PracGUID = #PracGUID#	LIMIT 1						
								';
								
								SET _SQLText = REPLACE(_SQLText, '#PracGUID#', _GUID_prac);
								SET _SQLText = REPLACE(_SQLText, '#guidy_poz#', _guidy_poz);
								
								SET @_SQLText =  _SQLText;
																					
								DROP TEMPORARY TABLE IF EXISTS t_max_poz;
								CREATE TEMPORARY TABLE t_max_poz AS
								SELECT 
								  guid FROM pl_karty_obiektu_po o WHERE  o.SOD = (SELECT MAX(SOD) FROM pl_karty_obiektu_po s 
															WHERE s.PracGUID = o.PracGUID AND s.GUID IN (SELECT guid FROM t_poz_guid))
									AND o.PracGUID = _GUID_prac LIMIT 1;
								-- INTO 
								--  _GUID_max_poz;
								 
								SET _Ile = 0;
								SELECT COUNT(*) AS ile 
								FROM t_max_poz 
								INTO _Ile;
								
								SET @pl.Ile = _Ile;
								
								IF _Ile > 0 THEN
								  SELECT guid FROM t_max_poz INTO _GUID_max_poz;
								END IF;
								
								SET @pl.GUID_max_poz = _GUID_max_poz;
								 
								  
								UPDATE 
									pl_karty_obiektu_po
								SET
									SOD = SOD + _roznica
								WHERE
									GUID = _GUID_max_poz;  
							
						     END IF;
						END IF;  -- Ile > 1  (osoba pracowała na jednym lub na kilku obiektach w miesišcu )
						SET _done = FALSE;	
					END IF;   -- IF not _done
				END LOOP;
				CLOSE _sod_proc;				
				
			END;  -- naliczenia  SOD
			
			-- mamy naliczone SOD i wart. rzeczywistš w pozycjach, teraz naliczamy rentowno?ć (zysk) na poszczególnych obiektach
			SET _done = FALSE;
			
			OPEN _c_proc;
				loop_zysk: LOOP
					FETCH _c_proc INTO
						_PracGUID, _kartaGUID, _czas_P;
					IF _done THEN
						LEAVE loop_zysk;
					ELSE
					    SET @calc.kartaGUID = _kartaGUID;
						CALL pl_karty_obiektu_tools('pl_karty_obiektu.calc.rentownosc.obiektu', _kartaGUID, _Param_A, _Param_B, '', '');
						SET _done = FALSE;	
					END IF;	
				END LOOP;
			CLOSE _c_proc;	
						
			
		END;  -- glowny BEGIN
	END IF;  -- 	IF _MODE = 'pl_karty_obiektu.calc.rentownosc' THEN
	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'pl_karty_obiektu.select.ng'
		Zwraca karty obiektów danego roku
		Parametry
			_GUID		ID Obiektu (lub '')
			_Param_A	Rok
			_Param_C	ID kierownika
			_Param_D	CCurrOsobaGUID
		CALL pl_karty_obiektu_tools('pl_karty_obiektu.select.ng', _GUID, 2011, '', '', '');		
		CALL pl_karty_obiektu_tools('pl_karty_obiektu.select.ng', '', 2011, '', '', '');		
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF _MODE = 'pl_karty_obiektu.select.ng' THEN
		SELECT
			kn.*,
			_VarInt(kn.Rok*100 + kn.Miesiac) AS RokMiesiac,
			CONCAT(s.DisplayValue) AS MiesiacStr,
			n.Nazwa AS ObiektNazwa,
			-- n.Symbol AS ObiektSymbol,
			n.Adres,
			-- n.StawkaGodz,
			-- n.Ryczalt,
			k.Nazwa AS KontrNazwa,	k.Symbol AS KontrSymbol,
			kn.rozl_przychod + kn.Extra_Dochod AS rozl_przychod_calk,
			kn.rozl_koszt_placy + kn.rozl_narzut + kn.Extra_Koszt + kn.tsk_kwota_suma + kn.handl_prowizja AS CalcRazemKoszty,
			IFNULL(100*rozl_zysk/(kn.rozl_przychod + kn.Extra_Dochod), 0.00) AS Calc_rozl_zysk_proc,
			kn.tsk_kwota_suma,
			kn.handl_prowizja,
			_VarDouble_NotNull(
				(SELECT SUM(s.SOD) FROM `pl_karty_obiektu_po` s WHERE s.GUIDNg = kn.GUID)
			)  AS SumSOD,
			_VarDouble_NotNull(
				(SELECT SUM(wart_rzecz - SOD) FROM `pl_karty_obiektu_po` WHERE GUIDNg = kn.GUID)
			)  AS SumKoszt_placy,
			_VarInt_NotNull(
				(SELECT COUNT(*) FROM `pl_karty_obiektu_po` kp WHERE kp.GUIDNg = kn.GUID)
			) AS IloscOsob,
		-- #39108 dodajemy wyliczenie stawki efektywnej: 
			_VarDouble_NotNull(
				(SELECT SUM(wart_rzecz - SOD)/SUM(czas_P + czas_Z) FROM `pl_karty_obiektu_po` WHERE GUIDNg = kn.GUID)
			)  AS  StawkaEfektywna
		FROM `pl_karty_obiektu_ng` kn
		INNER JOIN `erp_area_nodes` n ON n.GUID = kn.AreaGUID
		JOIN erp_area_nodes_hr hr ON hr.areaGUID = kn.AreaGUID   -- dodane z powodu filtra "kierownicy"
		INNER JOIN `kontrah` k ON k.GUID = kn.KontrGUID
		INNER JOIN `slowniki_pierwotne` s ON s.Slownik_GUID = 'MIESIACE' AND s.Value = kn.Miesiac
		WHERE
			IF(_GUID = '', TRUE, kn.AreaGUID = _GUID) 
			AND kn.deleted = 0 
			AND kn.rok = _Param_A
			AND IF(_Param_D != '', (select count(*) from grupy_osob grp where grp.grupaGUID = n.UgrpGUID and grp.osobaGUID = _Param_D) > 0, TRUE) 
			AND IF(_Param_C = '', TRUE, (hr.osobaGUID = _Param_C  AND hr.typ_osoby LIKE '%Kier%') ) 
		GROUP BY kn.GUID  -- dodane z powodu filtra "kierownicy"	
		ORDER BY RokMiesiac, KontrSymbol, ObiektNazwa
		;
	END IF;	--	IF _MODE = 'pl_karty_obiektu.select.ng'
	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'pl_karty_obiektu.select.po'
		Zwraca pozycje karty obiektu 
		Parametry
			_GUID		ID Karty Obiektu
			_Param_C    (moze być pusty)    GUID kierownika	
		CALL pl_karty_obiektu_tools('pl_karty_obiektu.select.po', _GUID, '', '', '', '');		
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF _MODE = 'pl_karty_obiektu.select.po' THEN
		SELECT
			IFNULL(e.typ_osoby, 'Prac;') AS typ_osoby, kp.*,
			CONCAT(o.Nazwisko, ' ', o.Imiona) AS NazwiskoImiona,
			kp.wart_rzecz - kp.SOD AS koszt_placy,
			_varDOUBLE_NOTNULL(_Rnd2( (kp.wart_rzecz - kp.SOD) / (czas_p + czas_z) )) AS koszt_jedn,
			o.Nazwisko, o.Imie1, o.Imie2
		FROM `pl_karty_obiektu_po` kp
		INNER JOIN `osoby` o ON o.GUID = kp.PracGUID
		INNER JOIN `pl_karty_obiektu_ng` n ON n.GUID = kp.GUIDng AND n.guid = _GUID
		LEFT JOIN `erp_area_nodes_hr` e ON e.osobaGUID = kp.PracGUID AND e.areaGUID = n.areaGUID
		-- JOIN pl_karty_obiektu_ng kn ON kp.GUIDNg = kn.GUID  AND kn.deleted = 0 
		-- JOIN erp_area_nodes_hr hr ON hr.areaGUID = kn.AreaGUID AND hr.osobaGUID = kp.PracGUID
		WHERE
			kp.GUIDNg = _GUID					-- tutaj wzbogacic o kierownikGUID
		ORDER BY 	o.Nazwisko, o.Imiona
		--	AND IF(_Param_C = '', TRUE, (hr.osobaGUID = _Param_C  AND hr.typ_osoby LIKE '%Kier%') ) 
		;	
	END IF;	--	IF _MODE = 'pl_karty_obiektu.select.po'
	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'pl_karty_obiektu.create'
		Tworzy karty obiektu dla rok, m-c, i/lub obiekt
		Parametry
			_GUID		ID Obiektu (lub '')
			_Param_A	Rok
			_Param_B	Miesiac
		CALL pl_karty_obiektu_tools('pl_karty_obiektu.create', _GUID, 2011, 10, '', '');	--	dla obiektu _GUID na pazdziernik 2011	
		CALL pl_karty_obiektu_tools('pl_karty_obiektu.create', '', 2011, 10, '', '');		--	dla wszyskich obiektów na pazdziernik 2011
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF _MODE = 'pl_karty_obiektu.create' THEN
		
		SET _DS = DATE(CONCAT(_Param_A, '-', _Param_B, '-', '01')); 
		
		SET @ko.guid = NewGUID();
		
		INSERT INTO `pl_karty_obiektu_ng`
			(GUID, AreaGUID, KontrGUID, Rok, Miesiac, deleted)
			SELECT
				@ko.guid, n.GUID, n.KontrGUID, _Param_A, _Param_B, 0
			FROM `erp_area_nodes` n
			WHERE
				IF(_GUID = '', TRUE, n.GUID = _GUID)
				AND n.KontrGUID != '' AND n.deleted = 0 
		ON DUPLICATE KEY UPDATE
			deleted = 0
		;
		
		-- #48936	wyliczenie i wstawienie wartosci normatywnej liczby godzin (NormatLG, zapisywane w godzinach) na podst. kalendarza obiektu
		UPDATE  pl_karty_obiektu_ng ko 
		SET NormatLG =  (SELECT SUM(poz.godziny)/60 FROM kalendpracy k, kalendpracy_po poz, erp_area_nodes e 
		WHERE poz.guidng = k.guid AND e.param1 = k.symbol AND k.rok = ko.rok AND poz.miesiac = ko.miesiac AND k.deleted=0 AND e.guid = ko.AreaGUID )
		WHERE ko.guid = @ko.guid;
		
		-- #48937 tabelka `zysk-prowizja` dedykowana danej karcie obiektu:
		INSERT INTO obiekty_zysk_prowizja (prog_zysk, prowizja, koGUID)	
		select prog_zysk, prowizja, @ko.guid
		FROM obiekty_zysk_prowizja WHERE koGUID = '';
 
		
		-- pobranie wartosci z poprz.m-ca  (pl_karty_obiektu_ng)	(tutaj dokladamy przepisywanie kolejnych wartosci)	
		CREATE TEMPORARY TABLE tt_pl_karty_obiektu_ng_poprz AS
			SELECT * FROM pl_karty_obiektu_ng a
		WHERE 
			a.rok = YEAR(DATE_SUB(_DS, INTERVAL 1 MONTH)) AND a.miesiac = MONTH(DATE_SUB(_DS, INTERVAL 1 MONTH))	
			  AND IF(_GUID = '', TRUE, a.AreaGUID = _GUID)  AND deleted = 0;
			  
		UPDATE 
			pl_karty_obiektu_ng k,	  tt_pl_karty_obiektu_ng_poprz o
		SET
		    k.handlGUID = o.handlGUID,
			k.handl_osoba = o.handl_osoba,
		-- remujemy na prosbe AS	k.handl_prowizja = o.handl_prowizja,
			k.tsk_kwota1 = o.tsk_kwota1,
			k.tsk_kwota2 = o.tsk_kwota2,
			k.tsk_kwota3 = o.tsk_kwota3,
			k.tsk_kwota4 = o.tsk_kwota4,
			k.tsk_kwota_suma = o.tsk_kwota_suma,
			k.tsk_opis1 = o.tsk_opis1,
			k.tsk_opis2 = o.tsk_opis2,
			k.tsk_opis3 = o.tsk_opis3,
			k.tsk_opis4 = o.tsk_opis4,
			k.Usluga = o.Usluga,
			k.StawkaGodz = o.StawkaGodz,
			k.Narzut = o.Narzut,
			k.Ryczalt = o.Ryczalt
		WHERE 	k.AreaGUID = o.AreaGUID AND k.KontrGUID = o.KontrGUID AND IF(_GUID = '', TRUE, o.AreaGUID = _GUID)
		    AND k.rok = _Param_A AND k.miesiac = _Param_B ;
			
		
		DROP TEMPORARY TABLE IF EXISTS tt_pl_karty_obiektu_ng_poprz;
		
		INSERT IGNORE INTO `pl_karty_obiektu_po`
			(GUID, GUIDNg, AutoCreate, PracGUID, Stawka_P, Stawka_Z)
			SELECT
				NewGUID(), kn.GUID, 1, hr.OsobaGUID, hr.Stawka, hr.StawkaB
			FROM `pl_karty_obiektu_ng` kn
			INNER JOIN `erp_area_nodes_hr` hr ON hr.areaGUID = kn.AreaGUID
			WHERE
				IF(_GUID = '', TRUE, kn.AreaGUID = _GUID) 
				AND kn.deleted = 0  AND NOT (TRIM(hr.typ_osoby) = 'Kier;')
		;
	END IF;	--	IF _MODE = 'pl_karty_obiektu.create'
	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'pl_karty_obiektu.resync'
		Synchronizuje karty obiektu dla rok, m-c, i obiektu
		Parametry
			_GUID		ID Karty Obiektu 
		CALL pl_karty_obiektu_tools('pl_karty_obiektu.resync', _GUID, '', '', '', '');	
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF _MODE = 'pl_karty_obiektu.resync' THEN
		
		INSERT INTO `pl_karty_obiektu_ng`
			(GUID, AreaGUID, KontrGUID, Rok, Miesiac)
			SELECT
				NewGUID(), n.GUID, n.KontrGUID, _Param_A, _Param_B
			FROM `erp_area_nodes` n
			WHERE
				n.GUID = _GUID
				AND n.KontrGUID != ''
		ON DUPLICATE KEY
			UPDATE
				KontrGUID = n.KontrGUID
		;
		INSERT IGNORE INTO `pl_karty_obiektu_po`
			(GUID, GUIDNg, AutoCreate, PracGUID, Stawka_P, Stawka_Z)
			SELECT
				NewGUID(), kn.GUID, 1, hr.OsobaGUID, hr.Stawka, hr.StawkaB
			FROM `pl_karty_obiektu_ng` kn
			INNER JOIN `erp_area_nodes_hr` hr ON hr.areaGUID = kn.AreaGUID
			WHERE
				kn.GUID = _GUID 
				AND kn.deleted = 0 
		;
	
/*		
		CALL pl_karty_obiektu_tools('pl_karty_obiektu.create', '', _Param_A, _Param_B, '', '');		
		notatka
		ON DUPLICATE KEY
			UPDATE
				podrodzaj = 8 + d.crm_subrodzaj,
		;	
*/			
	END IF;	--	IF _MODE = 'pl_karty_obiektu.resync'

/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'pl_karty_obiektu.refresh.stawki'
		Odswiez stawki dla karty ID = _GUID
		Parametry
			_GUID		ID Karty Obiektu 
		CALL pl_karty_obiektu_tools('pl_karty_obiektu.refresh.stawki', _GUID, '', '', '', '');	
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF _MODE = 'pl_karty_obiektu.refresh.stawki' THEN
		
		UPDATE `pl_karty_obiektu_po` kp, `pl_karty_obiektu_ng` kn, `erp_area_nodes_hr` hr
		SET
			Stawka_P = hr.Stawka, 
			Stawka_Z = hr.StawkaB 
		WHERE
			kn.GUID = _GUID
			AND kn.GUID = kp.GUIDNg
			AND hr.areaGUID = kn.AreaGUID 
			AND hr.OsobaGUID = kp.PracGUID 
			AND kn.deleted = 0 
		;
	
	END IF;	--	IF _MODE = 'pl_karty_obiektu.refresh.stawki'

/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'pl_karty_obiektu.po.Add'
		Tworzy karty obiektu dla rok, m-c, i/lub obiekt
		Parametry
			_GUID		ID Karty Obiektu
			_Param_A	Osoba
		CALL pl_karty_obiektu_tools('pl_karty_obiektu.po.Add', _GUID, 'osoba', '', '', '');	
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF _MODE = 'pl_karty_obiektu.po.Add' THEN
	
		INSERT IGNORE INTO `pl_karty_obiektu_po`
			(GUID, GUIDNg, AutoCreate, PracGUID, Stawka_P, Stawka_Z)
			SELECT
				NewGUID(), kn.GUID, 0, _Param_A, IFNULL(hr.Stawka, 0), IFNULL(hr.StawkaB, 0)
			FROM `pl_karty_obiektu_ng` kn
			LEFT JOIN `erp_area_nodes_hr` hr ON hr.areaGUID = kn.AreaGUID AND hr.OsobaGUID = _Param_A
			WHERE
				kn.GUID = _GUID 
				AND kn.deleted = 0 
		;
	END IF;	--	IF _MODE = 'pl_karty_obiektu.po.Add'
	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'pl_karty_obiektu.edit.init'
		Budowanie tabel tymczasowych do edycji `te_pl_karty_obiektu_ng` i `te_pl_karty_obiektu_po`
		Parametry
			_GUID		ID Karty Obiektu
		CALL pl_karty_obiektu_tools('pl_karty_obiektu.edit.init', _GUID, '', '', '', '');		
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF _MODE = 'pl_karty_obiektu.edit.init' THEN
		DROP TEMPORARY TABLE IF EXISTS `te_pl_karty_obiektu_ng`;
		CREATE TEMPORARY TABLE `te_pl_karty_obiektu_ng`
			SELECT
				kn.*,
				CONCAT(s.DisplayValue, ' ', kn.Rok, ' r.') AS MiesiacRokStr,
				n.Nazwa AS ObiektNazwa,
				n.Symbol AS ObiektSymbol,
				n.Adres,
				k.Nazwa AS KontrNazwa,
				k.Symbol AS KontrSymbol,
				_VarInt_NotNull(
					(SELECT COUNT(*) FROM `pl_karty_obiektu_po` kp WHERE kp.GUIDNg = kn.GUID)
				) AS IloscOsob
			FROM `pl_karty_obiektu_ng` kn
			INNER JOIN `erp_area_nodes` n ON n.GUID = kn.AreaGUID
			INNER JOIN `kontrah` k ON k.GUID = kn.KontrGUID
			INNER JOIN `slowniki_pierwotne` s ON s.Slownik_GUID = 'MIESIACE' AND s.Value = kn.Miesiac
			WHERE
				kn.GUID = _GUID 
				AND kn.deleted = 0 
		;
		ALTER TABLE `te_pl_karty_obiektu_ng` ADD PRIMARY KEY GUID (GUID);
		
		DROP TEMPORARY TABLE IF EXISTS `te_pl_karty_obiektu_po`;
		CREATE TEMPORARY TABLE `te_pl_karty_obiektu_po`
			SELECT
				kp.*, kp.wart_rzecz - kp.SOD AS koszt_placy,
				_varDOUBLE_NOTNULL(_Rnd2(  (kp.wart_rzecz - kp.SOD) / (czas_p + czas_z) )) AS koszt_jedn,   -- koszt 1h = koszt placy / (czas_p + czas_z)
				IFNULL(e.typ_osoby, 'Prac;') AS typ_osoby,
				CONCAT(o.Nazwisko, ' ', o.Imiona) AS NazwiskoImiona,
				o.Nazwisko, o.Imie1, o.Imie2
			FROM `pl_karty_obiektu_po` kp
			INNER JOIN `osoby` o ON o.GUID = kp.PracGUID
			INNER JOIN `pl_karty_obiektu_ng` n ON n.GUID = kp.GUIDng AND n.guid = _GUID
			LEFT JOIN `erp_area_nodes_hr` e ON e.osobaGUID = kp.PracGUID AND e.areaGUID = n.areaGUID
			WHERE
				kp.GUIDNg = _GUID
		;
		ALTER TABLE `te_pl_karty_obiektu_po` ADD PRIMARY KEY GUID (GUID);
	END IF;	--	IF _MODE = 'pl_karty_obiektu.edit.init'
	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'pl_karty_obiektu.edit.after.apply'
		Update tabel docelowych na podstawie tymczasowych `te_pl_karty_obiektu_ng` i `te_pl_karty_obiektu_po`
		Parametry
		CALL pl_karty_obiektu_tools('pl_karty_obiektu.edit.after.apply', '', '', '', '', '');		
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
	IF _MODE = 'pl_karty_obiektu.edit.after.apply' THEN
		
		-- jesli kn.handl_prowizja != tkn.handl_prowizja, to znaczy ze uzytkownik recznie zmienil wartosc => wpis do logu
		SELECT kn.handl_prowizja = tkn.handl_prowizja, kn.handl_prowizja, tkn.handl_prowizja
		FROM `pl_karty_obiektu_ng` kn, `te_pl_karty_obiektu_ng` tkn
		WHERE
			kn.GUID = tkn.GUID 
			AND kn.deleted = 0 
		INTO @eap.equ, @eap.old, @eap.new;
		
		IF @eap.equ = 0 THEN
		    -- WPIS DO LOGU
		    CALL log_Insert('INSERT', @out.Idn, '', '5174', '5', _GUID, '', 'zmiana prowizji', '');	-- IdKartyObiektow    = 5174; (log_czynnosci.idn = 5) => Zapis zmian
		    INSERT INTO `logpo`
			  (idnng, fld_name, `old`, `new`) 
			SELECT @out.Idn, 'handl_prowizja', @eap.old, @eap.new;
		END IF;
		
		UPDATE `pl_karty_obiektu_ng` kn, `te_pl_karty_obiektu_ng` tkn
		SET
			kn.Extra_Koszt = tkn.Extra_Koszt, 
			kn.Extra_Koszt_opis = tkn.Extra_Koszt_opis, 
			kn.Extra_Dochod = tkn.Extra_Dochod,
			kn.Extra_Dochod_opis = tkn.Extra_Dochod_opis,
			kn.rozl_koszt_placy  = tkn.rozl_koszt_placy,
			kn.StawkaGodz = tkn.StawkaGodz,
			kn.Narzut = tkn.Narzut,
			kn.rozl_narzut = tkn.rozl_narzut,
			kn.usluga = tkn.usluga,
			kn.rozl_zysk = tkn.rozl_zysk,
			kn.Ryczalt = tkn.Ryczalt,
			kn.NormatLG = tkn.NormatLG,
			kn.GodzDod = tkn.GodzDod,
			kn.rozl_przychod = tkn.rozl_przychod,
			kn.MaxPlaca = tkn.MaxPlaca,
			kn.handlGUID = tkn.handlGUID,
			kn.handl_osoba = tkn.handl_osoba,
			kn.handl_prowizja = tkn.handl_prowizja,
			kn.tsk_kwota1 = tkn.tsk_kwota1,
			kn.tsk_kwota2 = tkn.tsk_kwota2,
			kn.tsk_kwota3 = tkn.tsk_kwota3,
			kn.tsk_kwota4 = tkn.tsk_kwota4,
			kn.tsk_kwota_suma = tkn.tsk_kwota_suma,
			kn.tsk_opis1 = tkn.tsk_opis1,
			kn.tsk_opis2 = tkn.tsk_opis2,
			kn.tsk_opis3 = tkn.tsk_opis3,
			kn.tsk_opis4 = tkn.tsk_opis4
		WHERE
			kn.GUID = tkn.GUID 
			AND kn.deleted = 0 
		;
		
		UPDATE `pl_karty_obiektu_po` kp, `te_pl_karty_obiektu_po` tkp
		SET
			kp.Stawka_P = tkp.Stawka_P, 
			kp.Stawka_Z = tkp.Stawka_Z, 
			kp.Czas_P = tkp.Czas_P, 
			kp.Czas_Z = tkp.Czas_Z, 
			kp.Czas_P_N = tkp.Czas_P_N, 
			kp.Extra_Wynagr = tkp.Extra_Wynagr, 
			kp.Absencja_WOD = tkp.Absencja_WOD, 
			kp.Absencja_CLZ = tkp.Absencja_CLZ,
			kp.wart_rzecz = tkp.wart_rzecz,
			kp.SOD			= tkp.SOD
		WHERE
			kp.GUID = tkp.GUID
		;
		
		DELETE kp FROM `pl_karty_obiektu_po` kp LEFT JOIN `te_pl_karty_obiektu_po` tkp ON tkp.GUID = kp.GUID 
		WHERE tkp.GUID IS NULL 
		AND kp.GUIDNg = _GUID 
		;
		
	END IF;	--	IF _MODE = 'pl_karty_obiektu.edit.after.apply'
	


	
END$$



DELIMITER ;

/*
====================================================================================================================================================================================
	NOTATNIK
====================================================================================================================================================================================

SHOW CREATE TABLE `pl_karty_obiektu_ng`; 
DROP TABLE `pl_karty_obiektu_ng`;
CREATE TABLE `pl_karty_obiektu_ng` (
  `GUID` VARCHAR(38) NOT NULL COMMENT 'Unikalny ID',
  `AreaGUID` VARCHAR(38) NOT NULL DEFAULT '' COMMENT 'ID miejsca/obiektu',
  `rok` INT(11) NOT NULL DEFAULT '0' COMMENT 'rok',
  `miesiac` INT(11) NOT NULL DEFAULT '1' COMMENT 'miesiac',
  `KontrGUID` VARCHAR(38) NOT NULL DEFAULT '' COMMENT 'ID kontrahenta',
  `Extra_Koszt` DOUBLE(16,4) NOT NULL DEFAULT '0.0000',
  `Extra_Dochod` DOUBLE(16,4) NOT NULL DEFAULT '0.0000',
  PRIMARY KEY (`GUID`),
  UNIQUE KEY `AreaRokMiesiac` (`AreaGUID`, `rok`, `miesiac`),
  KEY `AreaGUID` (`AreaGUID`)
) ENGINE=MYISAM DEFAULT CHARSET=cp1250
;

SELECT
*
FROM `pl_karty_obiektu_ng`
;

DROP TABLE `pl_karty_obiektu_po`;
CREATE TABLE `pl_karty_obiektu_po` (
  `GUID` VARCHAR(38) NOT NULL COMMENT 'Unikalny ID',
  `GUIDNg` VARCHAR(38) NOT NULL DEFAULT '' COMMENT 'ID naglowka karty',
  `AutoCreate` INT(11) NOT NULL DEFAULT '0' COMMENT '1 gdy system założył pozycję osobę) 0 - ręczny wpis',
  `PracGUID` VARCHAR(38) NOT NULL DEFAULT '' COMMENT 'ID pracownika',
  `Stawka_P` DOUBLE(16,4) NOT NULL DEFAULT '0.0000' COMMENT 'stawka pracownik - umowa o prace',
  `Stawka_Z` DOUBLE(16,4) NOT NULL DEFAULT '0.0000' COMMENT 'stawka pracownik - umowa o zlecenie',
  `Czas_P` DOUBLE(16,4) NOT NULL DEFAULT '0.0000' COMMENT 'w min czas pracy - umowa o prace',
  `Czas_Z` DOUBLE(16,4) NOT NULL DEFAULT '0.0000' COMMENT 'w min czas pracy - umowa zlecenie',
  `Czas_P_N` DOUBLE(16,4) NOT NULL DEFAULT '0.0000' COMMENT 'w min czas pracy w nocy - umowa o prace',
  `Extra_Wynagr` DOUBLE(16,4) NOT NULL DEFAULT '0.0000' COMMENT 'dodatkowe wynagrodzenie za prace na obiekcie',
  `Absencja_WOD` DOUBLE(16,4) NOT NULL DEFAULT '0.0000' COMMENT 'w dniach (na razie) - urlop wypoczynkowy',
  `Absencja_CLZ` DOUBLE(16,4) NOT NULL DEFAULT '0.0000' COMMENT 'w min - chorobowe etc',
  PRIMARY KEY (`GUID`),
  UNIQUE KEY `GUIDNgPracGUID` (`GUIDNg`, `PracGUID`),
  KEY `PracGUID` (`PracGUID`)
) ENGINE=MYISAM DEFAULT CHARSET=cp1250
;

SELECT
*
FROM `pl_karty_obiektu_po`
;


RozliczajWg 		Sec		   MS
   0			    Etat      Zlec
   1			   Zlec201    Zlec 
   2                Zlec     Zlec201
   3				Zlec	  Etat
   4				Zlec       X
   5				 X        Zlec

		
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
*/
