 /*!40101 SET NAMES utf8 */;
DELIMITER $$

DROP PROCEDURE IF EXISTS `pl_zus_xml`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `pl_zus_xml`(
	IN _MODE VARCHAR(150),
	IN _GUID VARCHAR(255),	
	IN _Param_A VARCHAR(255),
	IN _Param_B VARCHAR(255),
	IN _Param_C TEXT, 
	IN _Param_D VARCHAR(255),
	IN _Param_E VARCHAR(255),
	IN _Param_F VARCHAR(255),
	IN _Param_G VARCHAR(255)
)
SPROC: BEGIN 
/*
procedura zbierajaca rozne eksporty do zus-u, tworzaca xml-e, idea jak dla tworzenia plikow ppk xml
ale adresy mozna pobrac z pl_zus
*/

 DECLARE _S LONGTEXT;
 DECLARE _XML LONGTEXT;
 DECLARE _XMLnag LONGTEXT;
 DECLARE _XMLnag2 LONGTEXT;
 DECLARE _XMLpoz LONGTEXT;
 DECLARE _XMLpoz1 LONGTEXT;
 DECLARE _XMLpoz_s LONGTEXT;
 DECLARE _XMLpoz_z LONGTEXT;
 DECLARE _XMLpoz_p LONGTEXT;
 DECLARE _KodUS VARCHAR(50);
 DECLARE _NIP VARCHAR(50);
 DECLARE _REGON VARCHAR(50);
 DECLARE _zm01 VARCHAR(255);
 DECLARE _zm02 VARCHAR(255);
 DECLARE cSL INT;
 DECLARE _LP INT;
 DECLARE _nowe_adresy INT;
	DECLARE _PelnaNazwa VARCHAR(255);
	DECLARE _SkroconaNazwa VARCHAR(50);
	DECLARE _rok INT;
	DECLARE _nrdok VARCHAR(3);
	DECLARE _DataWyp VARCHAR(12);
	DECLARE _bledy VARCHAR(255); -- dla zswa, wylapuje braki w pracownikach

    SET cSL := 2;

    SET _GUID = IFNULL(_GUID, '');
    SET SESSION group_concat_max_len = 1024*1024*1024;

    IF @session.globals.Owner IN ('CRIST') THEN
        SET _nowe_adresy = 1;
    ELSE
        SET _nowe_adresy = 0;
    END IF;

    IF _MODE IN ('create.RUD', 'create.SODIR') THEN
    -- tabela z pracownikami, glownie chodzi o adresy (nowe/stare)
        DROP TABLE IF EXISTS t_pracownicy;
        CREATE TEMPORARY TABLE t_pracownicy (
            guid VARCHAR(38),
            LP INT(11),
            PESEL VARCHAR(38),
            TYP_DOKUMENTU VARCHAR(5),
            NUMER_DOKUMENTU VARCHAR(50),
            DATA_URODZENIA VARCHAR(10),
            IMIE VARCHAR(38),
            NAZWISKO VARCHAR(38),
            ULICA_Z VARCHAR(38),
            NR_DOMU_Z VARCHAR(38),
            NR_LOKALU_Z VARCHAR(38),
            KOD_POCZTOWY_Z VARCHAR(38),
            MIEJSCOWOSC_Z VARCHAR(38),
            PANSTWO_Z VARCHAR(38),
            ULICA_K VARCHAR(38) DEFAULT '',
            NR_DOMU_K VARCHAR(38) DEFAULT '',
            NR_LOKALU_K VARCHAR(38) DEFAULT '',
            KOD_POCZTOWY_K VARCHAR(38) DEFAULT '',
            MIEJSCOWOSC_K VARCHAR(38) DEFAULT '',
            PANSTWO_K VARCHAR(38) DEFAULT '',
            TELEFON VARCHAR(38),
            EMAIL VARCHAR(38),
            xml1 TEXT,
            KEY guid (guid)
            ) DEFAULT CHARSET=utf8;
    END IF;

/*
RUD to informacje o umowach o dzielo, ktore przekazuje sie ZUS-owi
Bez względu na formę przekazania zgłoszenia należy przekazać do ZUS w terminie 7 dni od daty zawarcia umowy.
https://www.portalkadrowy.pl/umowy-o-dzielo/sprawdz-jakich-umow-o-dzielo-nie-trzeba-zglaszac-do-zus-na-formularzu-rud-od-1-stycznia-2021-r.-20647.html

call pl_zus_xml('create.RUD','','','','','','','','');

CREATE TEMPORARY TABLE tb_prace_zlecone (
guid VARCHAR(38),
KEY guid (guid));

INSERT INTO tb_prace_zlecone
SELECT guid FROM prace_zlecone WHERE UmowaODzielo=1 AND rok= 2021;
SET @session.globals.Owner = 'CRIST';
*/
IF (_MODE = 'create.RUD') THEN

	DROP TABLE IF EXISTS t_umowy;
	CREATE TEMPORARY TABLE t_umowy (
		guid VARCHAR(38),
		guid_pracownika VARCHAR(38),
		LP INT(11),
		DATA_ZAWARCIA_UMOWY VARCHAR(38),
		DATA_STARTU_REALIZACJI VARCHAR(38),
		DATA_KONCA_REALIZACJI VARCHAR(38),
		PRZEDMIOT_UMOWY VARCHAR(150),
		xml2 TEXT,
		KEY guid (guid)) DEFAULT CHARSET=utf8;


	DROP TABLE IF EXISTS t_rud;
	CREATE TEMPORARY TABLE t_rud (
		xmlpoz1 LONGTEXT
		) DEFAULT CHARSET=utf8;
		
	DROP TABLE IF EXISTS t_rud2;
	CREATE TEMPORARY TABLE t_rud2 (
		xmlnag LONGTEXT,
		xmlpoz1 LONGTEXT
		) DEFAULT CHARSET=utf8;
		
	DROP TABLE IF EXISTS t_rud3;
	CREATE TEMPORARY TABLE t_rud3 (
		lp int(11),
		xml LONGTEXT
		) DEFAULT CHARSET=utf8;
		
		
	-- wypelniamy dane po kolei - pracownicy
	INSERT INTO t_pracownicy (guid) select guid_pracownika from tb_prace_zlecone t inner join prace_zlecone p on t.guid=p.guid group by p.guid_pracownika;
	
	update t_pracownicy t, osoby o set
			t.PESEL = o.nrpesel,
			t.imie = o.imie1,
			t.nazwisko = o.nazwisko,
			t.TYP_DOKUMENTU = IF(IFNULL(NrSeriaDowoduOsobistego,'') = '' AND IFNULL(NrPaszportu,'')<>'', 2, 1),
			t.NUMER_DOKUMENTU = IF(IFNULL(NrSeriaDowoduOsobistego,'') = '' AND IFNULL(NrPaszportu,'')<>'', NrPaszportu, IFNULL(NrSeriaDowoduOsobistego,'')),
			t.DATA_URODZENIA = o.dataurodzenia
	WHERE o.guid = t.guid;
	
	-- dane kontaktowe
	update t_pracownicy t, osoby o set
		EMAIL = IFNULL((SELECT adres FROM kontakty WHERE typ_medium=3 AND osobaguid = t.guid ORDER BY priorytet LIMIT 1),''),
		TELEFON = IFNULL((SELECT adres FROM kontakty WHERE typ_medium=2 AND osobaguid = t.guid AND adres<>'co jest???' ORDER BY priorytet LIMIT 1),'')
	WHERE o.guid = t.guid;

	-- dane adresowe wg roznych sciezek
	IF _nowe_adresy = 0 THEN
		update t_pracownicy t, osoby o set
			PANSTWO_Z = IF(IFNULL(AZAM_Kraj,'') = '', IFNULL(AMEL_Kraj,''), AZAM_Kraj),
			KOD_POCZTOWY_Z = IF(IFNULL(AZAM_KodPocztowy,'') IN ('','-'), IFNULL(AMEL_KodPocztowy,''), AZAM_KodPocztowy),
			-- ADR_ZAM_POCZ = IF(IFNULL(AZAM_Poczta,'') = '', IFNULL(AMEL_Poczta,''), AZAM_Poczta),
			MIEJSCOWOSC_Z = IF(IFNULL(AZAM_Miejscowosc,'') = '', IFNULL(AMEL_Miejscowosc,''), AZAM_Miejscowosc),
			ULICA_Z = IF(IFNULL(AZAM_Ulica,'') = '', IFNULL(AMEL_Ulica,''), AZAM_Ulica),
			NR_DOMU_Z = IF(IFNULL(AZAM_NrDomu,'') = '', IFNULL(AMEL_NrDomu,''), AZAM_NrDomu),
			NR_LOKALU_Z = IF(IFNULL(AZAM_nrMieszkania,'') = '', IFNULL(AMEL_nrMieszkania,''), AZAM_nrMieszkania),
			PANSTWO_K = IFNULL(AKOR_Kraj,''),
			KOD_POCZTOWY_K = IFNULL(AKOR_KodPocztowy,''),
			-- ADR_KOR_POCZ = IFNULL(AKOR_Poczta,''),
			MIEJSCOWOSC_K = IFNULL(AKOR_Miejscowosc,''),
			ULICA_K = IFNULL(AKOR_Ulica,''),
			NR_DOMU_K = IFNULL(AKOR_NrDomu,'') ,
			NR_LOKALU_K = IFNULL(AKOR_nrMieszkania,'')
		WHERE o.guid = t.guid;

		-- update t_pracownicy t, Kraje k SET ADR_ZAM_KRAJ = k.idn_kraju where t.PANSTWO_Z = k.idn;
		-- update t_pracownicy t, Kraje k SET ADR_KOR_KRAJ = k.idn_kraju where t.PANSTWO_K = k.idn;
	END IF;

	IF _nowe_adresy = 1 THEN
		-- adres zamieszkania jako najwazniejszy
		UPDATE t_pracownicy t, 
			geo_int_adr_link A, geo_int_miejsca A_M, geo_int_adm A_P, geo_int_adresy A_U
		SET
			t.PANSTWO_Z = IFNULL(A_M.IDcountry,''),
			t.KOD_POCZTOWY_Z = IFNULL(A.ZipCode,''),
			-- t.ADR_ZAM_POCZ = IFNULL(A_P.nazwa,''),
			t.MIEJSCOWOSC_Z = IFNULL(A_M.nazwa,''),
			t.ULICA_Z = IFNULL(A_U.nazwa_1,''),
			t.NR_DOMU_Z = IFNULL(A.NrPos,'') ,
			t.NR_LOKALU_Z = IFNULL(A.NrLoc,'')
		WHERE A.objguid = t.guid AND A.status = 0 AND adrtyp LIKE '%ZAM%' AND A.objtable = 'osoby'
			AND A_M.ID = A.geo_int_miejsca_ID
			AND A_M.ID_Adm = A_P.ID
			AND A_U.ID = A.geo_int_adresy_ID;

		-- dla adresow nie gusowskich
		UPDATE t_pracownicy t, 
			geo_int_adr_link A, geo_int_miejsca A_M, geo_int_adm A_P
		SET
			t.PANSTWO_Z = IFNULL(A_M.IDcountry,''),
			t.KOD_POCZTOWY_Z = IFNULL(A.ZipCode,''),
			-- t.ADR_ZAM_POCZ = IFNULL(A_P.nazwa,''),
			t.MIEJSCOWOSC_Z = IF(IFNULL(A.ulica_not_gus,'') = '', A_M.nazwa, A.ulica_not_gus),
			-- t.ADR_ZAM_ULICA = IFNULL(A_U.nazwa_1,''),
			t.ULICA_Z = '',
			t.NR_DOMU_Z = IFNULL(A.NrPos,'') ,
			t.NR_LOKALU_Z = IFNULL(A.NrLoc,'')
		WHERE A.objguid = t.guid AND A.status = 0 AND adrtyp LIKE '%ZAM%' AND A.objtable = 'osoby'
			AND A_M.ID = A.geo_int_miejsca_ID
			AND A_M.ID_Adm = A_P.ID
			AND A.geo_int_adresy_ID = '';

		-- jezeli nie bylo adresu zamieszkania, to zamledowania
		UPDATE t_pracownicy t, 
			geo_int_adr_link A, geo_int_miejsca A_M, geo_int_adm A_P, geo_int_adresy A_U
		SET
			t.PANSTWO_Z = IFNULL(A_M.IDcountry,''),
			t.KOD_POCZTOWY_Z = IFNULL(A.ZipCode,''),
			-- t.ADR_ZAM_POCZ = IFNULL(A_P.nazwa,''),
			t.MIEJSCOWOSC_Z = IFNULL(A_M.nazwa,''),
			t.ULICA_Z = IFNULL(A_U.nazwa_1,''),
			t.NR_DOMU_Z = IFNULL(A.NrPos,'') ,
			t.NR_LOKALU_Z = IFNULL(A.NrLoc,'')
		WHERE A.objguid = t.guid AND A.status = 0 AND adrtyp LIKE '%MEL%' AND A.objtable = 'osoby'
			AND A_M.ID = A.geo_int_miejsca_ID
			AND A_M.ID_Adm = A_P.ID
			AND A_U.ID = A.geo_int_adresy_ID
			AND t.PANSTWO_Z = '';

		-- dla adresow nie gusowskich
		UPDATE t_pracownicy t, 
			geo_int_adr_link A, geo_int_miejsca A_M, geo_int_adm A_P
		SET
			t.PANSTWO_Z = IFNULL(A_M.IDcountry,''),
			t.KOD_POCZTOWY_Z = IFNULL(A.ZipCode,''),
			-- t.ADR_ZAM_POCZ = IFNULL(A_P.nazwa,''),
			t.MIEJSCOWOSC_Z = IF(IFNULL(A.ulica_not_gus,'') = '', A_M.nazwa, A.ulica_not_gus),
			-- t.ADR_ZAM_ULICA = IFNULL(A_U.nazwa_1,''),
			t.ULICA_Z = '',
			t.NR_DOMU_Z = IFNULL(A.NrPos,'') ,
			t.NR_LOKALU_Z = IFNULL(A.NrLoc,'')
		WHERE A.objguid = t.guid AND A.status = 0 AND adrtyp LIKE '%MEL%' AND A.objtable = 'osoby'
			AND A_M.ID = A.geo_int_miejsca_ID
			AND A_M.ID_Adm = A_P.ID
			AND A.geo_int_adresy_ID = ''
			AND t.PANSTWO_Z = '';

		-- adres do korespondencji tylko jezeli jest osobny
		UPDATE t_pracownicy t, 
			geo_int_adr_link A, geo_int_miejsca A_M, geo_int_adm A_P, geo_int_adresy A_U
		SET
			t.PANSTWO_K = IFNULL(A_M.IDcountry,''),
			t.KOD_POCZTOWY_K = IFNULL(A.ZipCode,''),
			-- t.ADR_ZAM_POCZ = IFNULL(A_P.nazwa,''),
			t.MIEJSCOWOSC_K = IFNULL(A_M.nazwa,''),
			t.ULICA_K = IFNULL(A_U.nazwa_1,''),
			t.NR_DOMU_K = IFNULL(A.NrPos,'') ,
			t.NR_LOKALU_K = IFNULL(A.NrLoc,'')
		WHERE A.objguid = t.guid AND A.status = 0 AND adrtyp LIKE '%KOR%' AND A.objtable = 'osoby'
			AND A_M.ID = A.geo_int_miejsca_ID
			AND A_M.ID_Adm = A_P.ID
			AND A_U.ID = A.geo_int_adresy_ID;

	END IF;
	
	SET @lp = 0; -- numeracja pracownikow
	UPDATE t_pracownicy SET lp = @lp := @lp+1;
	
	-- umowy
	INSERT INTO t_umowy (guid, guid_pracownika, DATA_ZAWARCIA_UMOWY, DATA_STARTU_REALIZACJI, DATA_KONCA_REALIZACJI, PRZEDMIOT_UMOWY)
	SELECT 
	p.guid,
	p.guid_pracownika,
	DataZawarcia, DataOd, DataDo, IFNULL(p.PracaStr,'')
	FROM prace_zlecone p 
	INNER JOIN tb_prace_zlecone t ON t.guid = p.guid
	ORDER BY p.guid_pracownika, p.DataZawarcia, p.DataOd;

	
	SET @guid_pracownika = ''; -- guid pracownika
	SET @lp = 0; -- numeracja umow dla pracownika

	BEGIN
		DECLARE _guid VARCHAR(38); DECLARE _guid_pracownika VARCHAR(38); DECLARE _lp INT(11);
		DECLARE done BOOL DEFAULT FALSE;
		DECLARE c_proc CURSOR FOR
			SELECT guid, guid_pracownika, lp FROM t_umowy ORDER BY guid_pracownika, data_zawarcia_umowy;
		DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
		OPEN c_proc;
			loop1: LOOP
				FETCH c_proc INTO _guid, _guid_pracownika, _lp;
				IF done THEN
					LEAVE loop1;
				ELSE
					--	kolejny rekord, to jest miejsce do zabawy
					if _guid_pracownika <> @guid_pracownika then
						set @lp := 1;
						set @guid_pracownika := _guid_pracownika;
					ELSE 
						SET @lp := @lp+1;
					end if;

					update t_umowy set lp = @lp where guid =_guid;
					-- koniec miejsca do zabawy
				END IF;
			END LOOP;
		CLOSE c_proc;
	END;

	
	update t_pracownicy t set t.xml1 = CONCAT(
		'<DaneWykonawcy>\n',
		'<LP>',LP MOD 50,'</LP>\n',
		'<PESEL>',PESEL,'</PESEL>\n',
		'<TYP_DOKUMENTU>',TYP_DOKUMENTU,'</TYP_DOKUMENTU>\n',
		'<NUMER_DOKUMENTU>',NUMER_DOKUMENTU,'</NUMER_DOKUMENTU>\n',
		'<DATA_URODZENIA>',DATA_URODZENIA,'</DATA_URODZENIA>\n',
		'<IMIE>',_to_utf_xml(IMIE),'</IMIE>\n',
		'<NAZWISKO>',_to_utf_xml(NAZWISKO),'</NAZWISKO>\n',
		'<ULICA_Z>',_to_utf_xml(ULICA_Z),'</ULICA_Z>\n',
		'<NR_DOMU_Z>',NR_DOMU_Z,'</NR_DOMU_Z>\n',
		'<NR_LOKALU_Z>',NR_LOKALU_Z,'</NR_LOKALU_Z>\n',
		'<KOD_POCZTOWY_Z>',KOD_POCZTOWY_Z,'</KOD_POCZTOWY_Z>\n',
		'<MIEJSCOWOSC_Z>',_to_utf_xml(MIEJSCOWOSC_Z),'</MIEJSCOWOSC_Z>\n',
		'<PANSTWO_Z>',_to_utf_xml(PANSTWO_Z),'</PANSTWO_Z>\n',
		'<ULICA_K>',_to_utf_xml(ULICA_K),'</ULICA_K>\n',
		'<NR_DOMU_K>',NR_DOMU_K,'</NR_DOMU_K>\n',
		'<NR_LOKALU_K>',NR_LOKALU_K,'</NR_LOKALU_K>\n',
		'<KOD_POCZTOWY_K>',KOD_POCZTOWY_K,'</KOD_POCZTOWY_K>\n',
		'<MIEJSCOWOSC_K>',_to_utf_xml(MIEJSCOWOSC_K),'</MIEJSCOWOSC_K>\n',
		'<PANSTWO_K>',_to_utf_xml(PANSTWO_K),'</PANSTWO_K>\n',
		'<TELEFON>',TELEFON,'</TELEFON>\n',
		'<EMAIL>',EMAIL,'</EMAIL>\n'
		);
		
	update t_umowy t set t.xml2 = CONCAT(
			'<UMOWAODZIELO>\n',
			'<DATA_ZAWARCIA_UMOWY>',DATA_ZAWARCIA_UMOWY,'</DATA_ZAWARCIA_UMOWY>\n',
			'<DATA_STARTU_REALIZACJI>',DATA_STARTU_REALIZACJI,'</DATA_STARTU_REALIZACJI>\n',
			'<DATA_KONCA_REALIZACJI>',DATA_KONCA_REALIZACJI,'</DATA_KONCA_REALIZACJI>\n',
			'<PRZEDMIOT_UMOWY>',_to_utf_xml(PRZEDMIOT_UMOWY),'</PRZEDMIOT_UMOWY>\n',
			'</UMOWAODZIELO>\n'
			);

	SET @xml.IC = 1;
	SET _XMLnag = concat('<?xml version="1.0" encoding="UTF-8"?>\n',
												'<Import xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="RUD_schemat_importu_XML.xsd">');

	
	-- wypelnianie pracownikow
	IF (SELECT MAX(lp) FROM t_umowy) > 10 THEN
	
		INSERT INTO t_rud (xmlpoz1)
		SELECT CONCAT(xml1,'\n',GROUP_CONCAT(xml2 SEPARATOR ''),'</DaneWykonawcy>') FROM t_pracownicy p, t_umowy u 
		WHERE p.guid=u.guid_pracownika AND u.lp > 10 
		GROUP BY p.guid;
		
		INSERT INTO t_rud2 (xmlpoz1)
		SELECT GROUP_CONCAT(xmlpoz1 SEPARATOR '') FROM t_rud;
		
		DELETE FROM t_rud;
	END IF;
	
	INSERT INTO t_rud (xmlpoz1)
	SELECT CONCAT(xml1,'\n',GROUP_CONCAT(xml2 SEPARATOR ''),'</DaneWykonawcy>') FROM t_pracownicy p, t_umowy u 
	WHERE p.guid=u.guid_pracownika AND p.lp <= 50 and u.lp <= 10
	GROUP BY p.guid;
	
	-- SELECT GROUP_CONCAT(CONCAT(xml1,'\n',xml2) SEPARATOR '') FROM t_pracownicy p, t_umowy u WHERE p.guid=u.guid_pracownika;
	-- UPDATE t_ppk SET xmlpoz1 = CONCAT('\n<DANE_UCZESTNIKA>\n',xmlpoz1,'</DANE_UCZESTNIKA>\n');
	
	INSERT INTO t_rud2 (xmlpoz1)
	SELECT GROUP_CONCAT(xmlpoz1 SEPARATOR '') FROM t_rud;
	
	DELETE FROM t_rud;
	
	INSERT INTO t_rud (xmlpoz1)
	SELECT CONCAT(xml1,'\n',GROUP_CONCAT(xml2 SEPARATOR ''),'</DaneWykonawcy>') FROM t_pracownicy p, t_umowy u 
	WHERE p.guid=u.guid_pracownika AND p.lp > 50 AND p.lp <= 100 and u.lp <= 10
	GROUP BY p.guid;
	
	INSERT INTO t_rud2 (xmlpoz1)
	SELECT GROUP_CONCAT(xmlpoz1 SEPARATOR '') FROM t_rud;
	
	DELETE FROM t_rud;
	
	DELETE from t_rud2 WHERE xmlpoz1 IS NULL;
	UPDATE t_rud2 SET xmlnag = _XMLnag;
	
	SET @lp=0;
	INSERT INTO t_rud3
	SELECT @lp := @lp+1 AS lp, CONCAT(xmlnag, xmlpoz1,'\n</Import>') FROM t_rud2;
			
			
	-- wpis do logu
	INSERT INTO `log` (useridn, ip, miejsce, czynnosc, GUIDlink, info, osobaguid) 
	SELECT @session.CurrLogin, @session.CurrMyIPOnly, 5087, 120, guid, 'Wygenerowanie pliku RUD dla ZUS', -- kartoteka zleceń, Export
	(SELECT guid FROM osoby WHERE idnuser = @session.CurrLogin LIMIT 1)
	FROM t_umowy;  

	SELECT lp, `xml` AS _XML FROM t_rud3;

/*
<?xml version="1.0" encoding="UTF-8"?>
<!--Sample XML file generated by XMLSpy v2016 rel. 2 sp1 (x64) (http://www.altova.com)-->
<Import xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="RUD_schemat_importu_XML.xsd">
	<DaneWykonawcy>
		<LP>1</LP>
		<PESEL/>
		<TYP_DOKUMENTU/>
		<NUMER_DOKUMENTU/>
		<DATA_URODZENIA/>
		<IMIE/>
		<NAZWISKO/>
		<ULICA_Z/>
		<NR_DOMU_Z/>
		<NR_LOKALU_Z/>
		<KOD_POCZTOWY_Z/>
		<MIEJSCOWOSC_Z/>
		<PANSTWO_Z/>
		<ULICA_K/>
		<NR_DOMU_K/>
		<NR_LOKALU_K/>
		<KOD_POCZTOWY_K/>
		<MIEJSCOWOSC_K/>
		<PANSTWO_K/>
		<TELEFON/>
		<EMAIL/>
		<UMOWAODZIELO>
			<DATA_ZAWARCIA_UMOWY/>
			<DATA_STARTU_REALIZACJI/>
			<DATA_KONCA_REALIZACJI/>
			<PRZEDMIOT_UMOWY/>
		</UMOWAODZIELO>
	</DaneWykonawcy>
</Import>
*/
END IF;	--	IF _MODE = ''


/*
call pl_zus_xml('create.SODIR','','2022','6','','','','','');
SET @session.globals.Owner = 'SECURITY';
select lp, `xml` AS _XML, fileName from t_sodir;
select * from t_sodir_poz;
select * from t_place;
select * from t_pracownicy;
select * from t_sodir;
select * from stat_prac_2022;
sodir to informacje do pfron o osobach niepełnosprawnych
*/
IF (_MODE = 'create.SODIR') THEN

BEGIN
 DECLARE _WerTypuWND INT;
 DECLARE _WerTypuINFDP INT;
 DECLARE _okresSprawozdawczy, _okresSprawozdawczy2 VARCHAR(10);
 DECLARE _PFRON_RodzajInformacji, _PFRON_SOD_Pelnomocnik, _PFRON_SOD_EmailKoresp VARCHAR(100);
 DECLARE _NrPFRON VARCHAR(100);
 DECLARE _liczbaINFDP INT;
 DECLARE _NIP, _REGON, _PFRON_SOD_NrRachunku, _PFRON_SOD_szczegolowaFormaPrawna, _EKD VARCHAR(50);
	DECLARE _PFRON_SOD_PelnaNazwa VARCHAR(255);
	DECLARE _PFRON_SOD_KodAdresu VARCHAR(255);
	DECLARE _DataOd, _DataDo, _datawypelnienia, _Kod_poczt, _Nr_domu, _Nr_lokalu, _PFRON_SOD_czyPelnomocnik, _PFRON_SOD_adresJak VARCHAR(10);
	DECLARE _Miasto, _Ulica, _Poczta VARCHAR(40);
	DECLARE _l_dni_miesiaca INT;
	DECLARE _wOkresieOgolem, _nowozatrudnieni, _wOkresieNiepelnosprawni DOUBLE(16,3);
	DECLARE _rok INT;

	DROP TABLE IF EXISTS t_sodir_poz;
	CREATE TEMPORARY TABLE t_sodir_poz (
    `guid_pracownika` varchar(38) NOT NULL DEFAULT '',
    nazwisko varchar(50) NOT NULL DEFAULT '',
    `guidy` longtext DEFAULT NULL,
    `typniepelnospr` int(11) DEFAULT NULL,
    `choroba_psych` int(11) DEFAULT NULL,
    `wspolcz_etatu` decimal(11,4) DEFAULT NULL,
    `etat_l` int(11) DEFAULT NULL,
    `etat_m` int(11) DEFAULT NULL,
    `DataZatrudnieniaWzakl` date DEFAULT NULL,
    `ZawodKodGUS` varchar(20) NOT NULL,
    `WyksztKodGUS` varchar(20) NOT NULL,
    `PodstDoFinansPFRON` double(16,4) DEFAULT NULL,
    `okresSprawozdawczyWynagrodzenie` varchar(7) DEFAULT NULL,
    `SklEkwiw` double(16,2) DEFAULT 0.00,
    `skladniki` double(16,2) DEFAULT 0.00,
    PodstDoFinansPFRON_wyn double(16,2) DEFAULT NULL,
    etat_str varchar(5) DEFAULT '',
    dni_pracy INT DEFAULT NULL,
    etat_dni_str varchar(5) DEFAULT ''
    ) DEFAULT CHARSET=utf8;

	DROP TABLE IF EXISTS t_prac_dni;
	CREATE TEMPORARY TABLE t_prac_dni (
	guid_prac VARCHAR(38),
	dni_pracy INT,
	KEY guid_prac (guid_prac)
	) DEFAULT CHARSET=utf8;

	DROP TABLE IF EXISTS t_place;
	CREATE TEMPORARY TABLE t_place (
		guid VARCHAR(38),
		guid_pracownika VARCHAR(38),
		KEY guid (guid)
		) DEFAULT CHARSET=utf8;

    -- to bedzie tabela wynikowa, z rekordami do pobrania danych przez program
	DROP TABLE IF EXISTS t_sodir;
	CREATE TEMPORARY TABLE t_sodir (
		lp int(11),
		_XML LONGTEXT,
		fileName VARCHAR(150)
		) DEFAULT CHARSET=utf8;

    SET _okresSprawozdawczy = CONCAT(_Param_A,'-',LPAD(_Param_B, 2, '0'));
    SET _okresSprawozdawczy2 = CONCAT(LPAD(_Param_B, 2, '0'),'-',_Param_A);
    SET _DataOd = CONCAT(_okresSprawozdawczy,'-01');
    SET _DataDo = LAST_DAY(_DataOd);
    SET _l_dni_miesiaca = DATEDIFF(_DataDo,_DataOd) + 1;
    SET _rok = YEAR(_DataOd);

    select `Value` INTO _WerTypuWND FROM _db_globals WHERE `Key` = 'pl.SODIR.wer.WnD';
    SELECT `Value` INTO _WerTypuINFDP FROM _db_globals WHERE `Key` = 'pl.SODIR.wer.Inf_D_P';
    SET _datawypelnienia = CURRENT_DATE();
    SELECT ValueA INTO _PFRON_RodzajInformacji FROM IReg WHERE idkey = 'PFRON_RodzajInformacji';
    SELECT ValueA INTO _NrPFRON FROM IReg WHERE idkey = 'NrPFRON';
    SELECT ValueA INTO _EKD FROM IReg WHERE idkey = 'EKD'; -- to ma byc jako PKD, rozne nazwy ale pasuje

    SELECT COUNT(*) INTO _liczbaINFDP FROM t_pracownicy;

    SELECT ValueA INTO _NIP FROM IReg WHERE idkey = 'NIP' AND IdPath like '%DaneFirmy';
    SET _NIP = REPLACE(_NIP, '-', '');
    SELECT ValueA INTO _PFRON_RodzajInformacji FROM IReg WHERE idkey = 'PFRON_RodzajInformacji';
    SELECT COUNT(*) INTO _liczbaINFDP FROM t_pracownicy;

    CALL _IReg_Get('DaneFirmy', 'REGON', '0', 'STRING', _REGON, '');
    SELECT ValueA INTO _PFRON_SOD_PelnaNazwa FROM IReg WHERE idkey = 'PFRON_SOD_PelnaNazwa';
    SELECT ValueA INTO _PFRON_SOD_KodAdresu FROM IReg WHERE idkey = 'PFRON_SOD_KodAdresu';

    SELECT ValueA INTO _PFRON_SOD_EmailKoresp FROM IReg WHERE idkey = 'PFRON_SOD_EmailKoresp';
    SELECT ValueA INTO _Kod_poczt FROM IReg WHERE idkey = 'Kod_poczt' AND IdPath LIKE '%DaneFirmy';
    SELECT ValueA INTO _Miasto FROM IReg WHERE idkey = 'Miasto' AND IdPath LIKE '%DaneFirmy';
    SELECT ValueA INTO _Nr_domu FROM IReg WHERE idkey = 'Nr_domu' AND IdPath LIKE '%DaneFirmy';
    SELECT ValueA INTO _Nr_lokalu FROM IReg WHERE idkey = 'Nr_lokalu' AND IdPath LIKE '%DaneFirmy';
    SELECT ValueA INTO _Ulica FROM IReg WHERE idkey = 'Ulica' AND IdPath LIKE '%DaneFirmy';
    SELECT ValueA INTO _Poczta FROM IReg WHERE idkey = 'Poczta' AND IdPath LIKE '%DaneFirmy';
    SELECT ValueA INTO _PFRON_SOD_NrRachunku FROM IReg WHERE idkey = 'PFRON_SOD_NrRachunku';
    SELECT ValueA INTO _PFRON_SOD_Pelnomocnik FROM IReg WHERE idkey = 'PFRON_SOD_Pelnomocnik';
    SELECT ValueA INTO _PFRON_SOD_szczegolowaFormaPrawna FROM IReg WHERE idkey = 'PFRON_SOD_szczegolowaFormaPrawna';
    SELECT ValueA INTO _PFRON_SOD_czyPelnomocnik FROM IReg WHERE idkey = 'PFRON_SOD_czyPelnomocnik';
    SELECT ValueA INTO _PFRON_SOD_adresJak FROM IReg WHERE idkey = 'PFRON_SOD_adresJak';

    SET _REGON = rpad(_REGON,14,'0');


    -- zbieramy guidy zapisow placowych
    INSERT INTO t_place
    SELECT pl.guid, pl.guid_pracownika
    FROM place pl
    JOIN Pracownicy pr ON pr.guid = pl.guid_pracownika
    where pl.rok = _Param_A and pl.miesiac = _Param_B and pl.deleted = 0
    and (((pr.dofinansPFRON = 1) and (pr.typniepelnospr > 0)) or ((pr.PZON_typniepelnospr > 0) and (PZON_dofinansPFRON = 1)))
    ;

    -- tutaj pozycje zestawienia, czyli poszczegolni pracownicy i ich wyplaty
    INSERT INTO t_sodir_poz
    SELECT pl.guid_pracownika, pl.nazwisko, group_concat(pl.guid) as guidy,
     -- o.nazwisko, o.imie1, o.imie2, o.NrPesel, o.NrNIP, if(o.plec=1, "M", "K") as plec,
     IF(pr.dofinansPFRON = 1, pr.typniepelnospr, pr.PZON_typniepelnospr) AS typniepelnospr,
     IF(pr.dofinansPFRON = 1, pr.choroba_psych, pr.PZON_choroba_psych) AS choroba_psych,
    -- jesli nie pracowa³ pe³nego m-ca, to etat (jego licznik) trzeba przemno¿yæ proporcjonalnie do iloci przepr dni.
     IF(pr.DataZatrudnieniaWzakl > _DataOd OR IF(pr.CzyObecniePracuje=1, "2099-01-01", IFNULL(IF(pr.DataZwolnienia < _DataDo, NULL, DataZwolnienia), CURDATE()) ) < _DataDo,
         (DATEDIFF(LEAST(IFNULL(IF(pr.DataZwolnienia < _DataDo, NULL, DataZwolnienia), CURDATE()), _DataDo), GREATEST(pr.DataZatrudnieniaWzakl, _DataOd) )+1) / 31, 1) AS wspolcz_etatu,

    IF(@session.globals.Owner = 'SECURITY', pr.Etat_L_SOD, pr.etat_l) AS etat_l,
    IF(@session.globals.Owner = 'SECURITY', pr.Etat_M_SOD, pr.etat_m) AS etat_m,

     pr.DataZatrudnieniaWzakl,
     ifnull(Z.KodGUS, '') as ZawodKodGUS, ifnull(W.symbol_GUS, '') as WyksztKodGUS,    --  lub Z.stanowisko
     -- o.NrSeriaDowoduOsobistego,

     SUM(pl.ChoroboweFirma + pl.ZusFunduszPracy + pl.ZusFunduszGwarancyjny + pl.RazemSkladkiPracodawcy) AS PodstDoFinansPFRON,

    DATE_FORMAT(pl.DataWyplaty, '%m-%Y') AS  okresSprawozdawczyWynagrodzenie,
    0 as SklEkwiw, 0 as skladniki, 0 AS PodstDoFinansPFRON_wyn,
    '' AS etat_str,
    0 AS dni_pracy,
    '' AS etat_dni_str
    --  DATE_FORMAT(pl.DataWyplaty, '%m-%Y') AS  okresSprawozdawczyWynagrodzenie
    FROM place pl
    JOIN t_place t ON pl.guid = t.guid
    JOIN Pracownicy pr ON pr.guid = pl.guid_pracownika
    LEFT JOIN zawody Z ON pr.ZawodWykonGUS = Z.idn
    LEFT JOIN wyksztalcenie W ON pr.Wyksztalcenie = W.idn
    group by pl.guid_pracownika
    ORDER BY pl.nazwisko ;


    -- wypelniamy dane po kolei - pracownicy
	INSERT INTO t_pracownicy (guid) select guid_pracownika from t_sodir_poz group by guid_pracownika;
	SET @lp = 0; -- numeracja pracownikow
	UPDATE t_pracownicy SET lp = @lp := @lp+1;
    -- oraz tutaj uzupelniamy dane pracownikow, w tym ich adresy
	CALL pl_zus_xml('DANE_ADRESY','','','','','','','','');

    -- trzeba odjac ewentualne ekwiwalenty za urlop
    UPDATE t_sodir_poz t SET
    SklEkwiw =
    (SELECT (p.ChoroboweFirma + p.ZusFunduszPracy + p.ZusFunduszGwarancyjny + p.RazemSkladkiPracodawcy) AS SklEkwiw
    FROM place_skladniki s, place p
    WHERE p.guid = s.GUID_zapisu_placowego
        AND s.GUID_definicja_skladnika_placy = 'C_14'
        AND p.rok = _Param_A AND p.miesiac = _Param_B AND p.deleted = 0
        AND p.guid_pracownika = t.guid_pracownika
        AND s.kwota = (p.kwotabrutto + p.RazemSkladkiPracownika) AND (s.kwota > 0))
    ;

    UPDATE t_sodir_poz t SET
    skladniki =
    (SELECT sum(IFNULL(ps.Kwota + ps.ZmniejszZwieksz, 0)) as skladniki
    FROM place_skladniki ps
    INNER JOIN place p ON p.GUID = ps.GUID_zapisu_placowego
    INNER JOIN definicja_skladnika_placy dsp on ps.GUID_definicja_skladnika_placy = dsp.GUID
    where p.GUID in (SELECT guid from t_place)
        AND p.guid_pracownika = t.guid_pracownika
        AND (ps.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) ))
    ;

    UPDATE t_sodir_poz SET
    PodstDoFinansPFRON_wyn = PodstDoFinansPFRON - IFNULL(SklEkwiw,0) + skladniki;

    UPDATE t_sodir_poz SET
    etat_str = REPLACE(_Rnd(etat_l/etat_m, 3), '.', ',');

    -- TODO trzeba przerobić pobieranie właściwiej tabeli - rok!
    -- SET _tabela = CONCAT('stat_prac_', _rok);
	-- rozwiazanie prymitywne, ale na dwa lata wystarczy
    if _rok = 2022 THEN
		select _Rnd(sum(etat_l/etat_m)/_l_dni_miesiaca,3) INTO _wOkresieOgolem from stat_prac_2022
		where data_pracy between _DataOd and _DataDo;

		select _Rnd(sum(etat_l/etat_m)/_l_dni_miesiaca,3) INTO _wOkresieNiepelnosprawni from stat_prac_2022
		where data_pracy between _DataOd and _DataDo AND PZON_typniepelnospr > 0;

		SELECT _Rnd(sum(etat_l/etat_m)/_l_dni_miesiaca,3) INTO _nowozatrudnieni FROM stat_prac_2022
		where data_pracy between _DataOd and _DataDo
		AND guid_prac IN (SELECT guid_pracownika FROM t_sodir_poz where DataZatrudnieniaWzakl between _DataOd AND _DataDo);

		INSERT INTO t_prac_dni
		SELECT guid_prac, COUNT(guid_prac) AS dni_pracy FROM stat_prac_2022
		where data_pracy between _DataOd and _DataDo
		GROUP BY guid_prac;
	END IF;

    if _rok = 2023 THEN
		select _Rnd(sum(etat_l/etat_m)/_l_dni_miesiaca,3) INTO _wOkresieOgolem from stat_prac_2023
		where data_pracy between _DataOd and _DataDo;

		select _Rnd(sum(etat_l/etat_m)/_l_dni_miesiaca,3) INTO _wOkresieNiepelnosprawni from stat_prac_2023
		where data_pracy between _DataOd and _DataDo AND PZON_typniepelnospr > 0;

		SELECT _Rnd(sum(etat_l/etat_m)/_l_dni_miesiaca,3) INTO _nowozatrudnieni FROM stat_prac_2023
		where data_pracy between _DataOd and _DataDo
		AND guid_prac IN (SELECT guid_pracownika FROM t_sodir_poz where DataZatrudnieniaWzakl between _DataOd AND _DataDo);

		INSERT INTO t_prac_dni
		SELECT guid_prac, COUNT(guid_prac) AS dni_pracy FROM stat_prac_2023
		where data_pracy between _DataOd and _DataDo
		GROUP BY guid_prac;
	END IF;

    if _rok = 2024 THEN
		select _Rnd(sum(etat_l/etat_m)/_l_dni_miesiaca,3) INTO _wOkresieOgolem from stat_prac_2024
		where data_pracy between _DataOd and _DataDo;

		select _Rnd(sum(etat_l/etat_m)/_l_dni_miesiaca,3) INTO _wOkresieNiepelnosprawni from stat_prac_2024
		where data_pracy between _DataOd and _DataDo AND PZON_typniepelnospr > 0;

		SELECT _Rnd(sum(etat_l/etat_m)/_l_dni_miesiaca,3) INTO _nowozatrudnieni FROM stat_prac_2024
		where data_pracy between _DataOd and _DataDo
		AND guid_prac IN (SELECT guid_pracownika FROM t_sodir_poz where DataZatrudnieniaWzakl between _DataOd AND _DataDo);

		INSERT INTO t_prac_dni
		SELECT guid_prac, COUNT(guid_prac) AS dni_pracy FROM stat_prac_2024
		where data_pracy between _DataOd and _DataDo
		GROUP BY guid_prac;
	END IF;

 if _rok = 2025 THEN
		select _Rnd(sum(etat_l/etat_m)/_l_dni_miesiaca,3) INTO _wOkresieOgolem from stat_prac_2025
		where data_pracy between _DataOd and _DataDo;

		select _Rnd(sum(etat_l/etat_m)/_l_dni_miesiaca,3) INTO _wOkresieNiepelnosprawni from stat_prac_2025
		where data_pracy between _DataOd and _DataDo AND PZON_typniepelnospr > 0;

		SELECT _Rnd(sum(etat_l/etat_m)/_l_dni_miesiaca,3) INTO _nowozatrudnieni FROM stat_prac_2025
		where data_pracy between _DataOd and _DataDo
		AND guid_prac IN (SELECT guid_pracownika FROM t_sodir_poz where DataZatrudnieniaWzakl between _DataOd AND _DataDo);

		INSERT INTO t_prac_dni
		SELECT guid_prac, COUNT(guid_prac) AS dni_pracy FROM stat_prac_2025
		where data_pracy between _DataOd and _DataDo
		GROUP BY guid_prac;
	END IF;


	UPDATE t_sodir_poz ts, t_prac_dni tp
	SET ts.dni_pracy = tp.dni_pracy
	WHERE tp.guid_prac = ts.guid_pracownika
	;

	UPDATE t_sodir_poz
	SET etat_dni_str = REPLACE(_Rnd((etat_l/etat_m)*(dni_pracy/_l_dni_miesiaca), 3), '.', ',');


    SET _nowozatrudnieni = IFNULL(_nowozatrudnieni,'0,000');
    SET _wOkresieOgolem = IFNULL(_wOkresieOgolem,'0,000');
    SET _wOkresieNiepelnosprawni = IFNULL(_wOkresieNiepelnosprawni,'0,000');

    /*
    SET @_okresSprawozdawczy2 = _okresSprawozdawczy2,
    @_WerTypuWND = _WerTypuWND,
    @_datawypelnienia = _datawypelnienia,
    @_nowozatrudnieni = _nowozatrudnieni,
    @_wOkresieOgolem = _wOkresieOgolem,
    @_wOkresieNiepelnosprawni = _wOkresieNiepelnosprawni
    ;
    */

    SET _XMLnag = CONCAT(
    '<?xml version="1.0" encoding="UTF-8"?>\n',
    '<wniosek idWnioskuGlownego="" stanWyslania="">\n',
    '<pytanie bilet="" kanal="3" login="">\n',
      '<parametry>\n',
        '<dokument czyOdrzucic="N" czyZmienicStan="T" idDokumentuTemp="" idOddzialu="" idPracodawcy="" idStanu="0" idTypu="8" okresSprawozdawczy="',_okresSprawozdawczy2,'" sposobWymiany="E" wersjaTypu="',_WerTypuWND,'">\n',
          '<tresc>\n',
            '<daneInformacji dataWypelnienia="',_datawypelnienia,'" imieNazwiskoOsobyPodpisujacej="" okresSprawozdawczy="',_okresSprawozdawczy2,'" rodzajInformacji="',_PFRON_RodzajInformacji,'" uwagi="" nrPfron="',_NrPFRON,'" czyZgloszeniowy="T" liczbaINFDP="',_liczbaINFDP,'"/>\n',
            '<kartaPracodawcy>\n',
              '<daneEwidencyjne nip="',_NIP,'" pkd="',_EKD,'" regon="',_REGON,'" pelnaNazwaPracodawcy="',_to_utf_xml(_PFRON_SOD_PelnaNazwa),'"/>\n',
              '<dodInfPracodawcy formaPrawnaPrzedsiebiorcy="2" szczegolowaFormaPrawna="',_PFRON_SOD_szczegolowaFormaPrawna,'" formaWlasnosci="5" statusPracodawcyZPC="T" statusPracodawcyZAZ="N" statusPracodawcyIP="N" wielkoscPracodawcy="3"/>\n',
              '<adresPracodawcy>\n',
                '<adres kodAdresuPrzedsiebiorcy="',_PFRON_SOD_KodAdresu,'" kodPocztowy="',_Kod_poczt,'" miejscowosc="',_to_utf_xml(_Miasto),'" nrDomu="',_Nr_domu,'" nrLokalu="',_Nr_lokalu,'" poczta="',_to_utf_xml(_Poczta),'" ulica="',_to_utf_xml(_Ulica),'"/>
                <kontakt email="',_PFRON_SOD_EmailKoresp,'" faks="" telefon=""/>
              </adresPracodawcy>\n',
              '<infDofinansowanie ogolem="0,00"/>
              <rachunekBankowy nrRachunku="',_PFRON_SOD_NrRachunku,'"/>
              <adresKorespondencyjny>
                <adres czyPelnomocnik="',_PFRON_SOD_czyPelnomocnik,'" adresJak="',_PFRON_SOD_adresJak,'" kodPocztowy="',_Kod_poczt,'" miejscowosc="',_to_utf_xml(_Miasto),'" nrDomu="',_Nr_domu,'" nrLokalu="',_Nr_lokalu,'" ulica="',_Ulica,'" poczta="',_to_utf_xml(_Poczta),'"/>
                <kontakt email="',_PFRON_SOD_EmailKoresp,'" faks="" telefon=""/>
              </adresKorespondencyjny>\n',
            '</kartaPracodawcy>\n',
            '<stanZatrudnienia nowozatrudnieni="',REPLACE(_nowozatrudnieni,'.',','),'" wOkresieOgolem="',REPLACE(_wOkresieOgolem,'.',','),'" wOkresieNiepelnosprawni="',REPLACE(_wOkresieNiepelnosprawni,'.',','),'" poprzedzajacyOkresNiepelnosprawni="0,000" poprzedzajacyOkresOgolem="252,662" biezacyOkresOgolem="246,961" biezacyOkresNiepelnosprawni="0,000"/>
            <oswiadczenie czyPapierowo="N" czyElektronicznie="T" zalaczaInfoONieotrzymanejPomocy="T" zalaczaInfoOOtrzymanejPomocy="N"/>
            <osoba nazwaPelnomocnika="',_PFRON_SOD_Pelnomocnik,'"/>
          </tresc>
          <podpisy>
            <podpis podpis=""/>
          </podpisy>
        </dokument>
      </parametry>
    </pytanie>
  </wniosek>'
    );


    update t_pracownicy t, t_sodir_poz p set t.xml1 = CONCAT(
        '<?xml version="1.0" encoding="UTF-8"?>\n',
        '<wniosek idWnioskuGlownego="" stanWyslania="">\n',
        '<pytanie bilet="" kanal="3" login="">\n',
        '<parametry>\n',
        '<dokument czyOdrzucic="N" czyZmienicStan="T" idDokumentuGlownegoTemp="" idDokumentuTemp="" idOddzialu="" idPracodawcy="" idStanu="0" idTypu="5" okresSprawozdawczy="',_okresSprawozdawczy2,'" sposobWymiany="E" wersjaTypu="',_WerTypuINFDP,'">\n',
        '<tresc>\n',
        '<daneInformacji nrKolejny="',t.lp,'" nrPfron="',_NrPFRON,'" okresSprawozdawczy="',_okresSprawozdawczy2,'" okresSprawozdawczyWynagrodzenie="',p.okresSprawozdawczyWynagrodzenie,'" rodzajInformacji="Z"/>\n',
        '<metrykaPracownika>\n'
        '<daneEwidencyjne imie1="',_to_utf_xml(IMIE),'" imie2="" nazwisko="',_to_utf_xml(t.NAZWISKO),'" nip="" nrDowodu="',NUMER_DOKUMENTU,'" pesel="',PESEL,'"/>\n',
        '<adresPracownika>\n',
        '<adres gmina="" kodPocztowy="" miejscowosc="" nrDomu="" nrLokalu="" poczta="" powiat="" ulica="" wojewodztwo="22"/>\n',
        '</adresPracownika>\n',

        '<infNiepelnospr chronLekki="',IF(choroba_psych=1 AND typniepelnospr=1,p.etat_str,'0,000'),'" chronSLekki="',IF(choroba_psych=0 AND typniepelnospr=1,p.etat_dni_str,'0,000'),'" chronUmiarkowany="',IF(choroba_psych=1 AND typniepelnospr=2,p.etat_dni_str,'0,000'),'" chronSUmiarkowany="',IF(choroba_psych=0 AND typniepelnospr=2,p.etat_dni_str,'0,000'),'" chronZnaczny="',IF(choroba_psych=1 AND typniepelnospr=3,p.etat_dni_str,'0,000'),'" chronSZnaczny="',IF(choroba_psych=0 AND typniepelnospr=3,p.etat_dni_str,'0,000'),'" chronLekkiEmeryt="0,000" chronSLekkiEmeryt="0,000" chronUmiarkowanyEmeryt="0,000" chronSUmiarkowanyEmeryt="0,000" chronZnacznyEmeryt="0,000" chronSZnacznyEmeryt="0,000" normLekki="0,000" normUmiarkowany="0,000" normZnaczny="0,000" normSLekki="0,000" normSUmiarkowany="0,000" normSZnaczny="0,000" normLekkiEmeryt="0,000" normUmiarkowanyEmeryt="0,000" normZnacznyEmeryt="0,000" normSLekkiEmeryt="0,000" normSUmiarkowanyEmeryt="0,000" normSZnacznyEmeryt="0,000"/>\n',
        '<zatrudnienie kosztyPlacy="',REPLACE(PodstDoFinansPFRON_wyn,'.',','),'" kwDofWyplata="0,00" kwUstalona="0,00" limitKosztowPlacy="0,00" okresZatrOdDnia="',DataZatrudnieniaWzakl,'" pomniejszenia="0,00" stanowiPomocPubliczna="T" efektZachety="T" pracWykDzG="T" wynMinimalne="0,00"/>
        <pomocPubliczna  kwota="0,00"/>
        </metrykaPracownika>\n',
        '</tresc>\n',
        '<podpisy>\n',
        '<podpis podpis=""/>\n',
        '</podpisy>\n',
        '</dokument>\n',
        '</parametry>\n',
        '</pytanie>\n',
        '</wniosek>\n'
        )
        WHERE t.guid = p.guid_pracownika
		;


    INSERT INTO t_sodir
    SELECT 0, _XMLnag, CONCAT('\wnd',_WerTypuWND,'_',_okresSprawozdawczy2,'.xml');

    INSERT INTO t_sodir
    SELECT lp, xml1, CONCAT('\infdp',_WerTypuINFDP,'_',_okresSprawozdawczy2,'_', PESEL,'.xml') FROM t_pracownicy;

    -- SELECT lp, `xml` AS _XML, fileName FROM t_sodir;


END;

END IF;	--	IF _MODE = 'create.SODIR'

/*
ten mode wypelnia dane pracownika oraz dane adresowe, w zaleznosci od rodzaju adresacji
call pl_zus_xml('DANE_ADRESY','','','','','','','','');
*/
IF _MODE = 'DANE_ADRESY' THEN
    IF @session.globals.Owner IN ('CRIST') THEN
        SET _nowe_adresy = 1;
    ELSE
        SET _nowe_adresy = 0;
    END IF;

    update t_pracownicy t, osoby o set
			t.PESEL = o.nrpesel,
			t.imie = o.imie1,
			t.nazwisko = o.nazwisko,
			t.TYP_DOKUMENTU = IF(IFNULL(NrSeriaDowoduOsobistego,'') = '' AND IFNULL(NrPaszportu,'')<>'', 2, 1),
			t.NUMER_DOKUMENTU = IF(IFNULL(NrSeriaDowoduOsobistego,'') = '' AND IFNULL(NrPaszportu,'')<>'', NrPaszportu, IFNULL(NrSeriaDowoduOsobistego,'')),
			t.DATA_URODZENIA = o.dataurodzenia
	WHERE o.guid = t.guid;

	-- dane kontaktowe
	update t_pracownicy t, osoby o set
		EMAIL = IFNULL((SELECT adres FROM kontakty WHERE typ_medium=3 AND osobaguid = t.guid ORDER BY priorytet LIMIT 1),''),
		TELEFON = IFNULL((SELECT adres FROM kontakty WHERE typ_medium=2 AND osobaguid = t.guid AND adres<>'co jest???' ORDER BY priorytet LIMIT 1),'')
	WHERE o.guid = t.guid;

	-- dane adresowe wg roznych sciezek
	IF _nowe_adresy = 0 THEN
		update t_pracownicy t, osoby o set
			PANSTWO_Z = IF(IFNULL(AZAM_Kraj,'') = '', IFNULL(AMEL_Kraj,''), AZAM_Kraj),
			KOD_POCZTOWY_Z = IF(IFNULL(AZAM_KodPocztowy,'') IN ('','-'), IFNULL(AMEL_KodPocztowy,''), AZAM_KodPocztowy),
			-- ADR_ZAM_POCZ = IF(IFNULL(AZAM_Poczta,'') = '', IFNULL(AMEL_Poczta,''), AZAM_Poczta),
			MIEJSCOWOSC_Z = IF(IFNULL(AZAM_Miejscowosc,'') = '', IFNULL(AMEL_Miejscowosc,''), AZAM_Miejscowosc),
			ULICA_Z = IF(IFNULL(AZAM_Ulica,'') = '', IFNULL(AMEL_Ulica,''), AZAM_Ulica),
			NR_DOMU_Z = IF(IFNULL(AZAM_NrDomu,'') = '', IFNULL(AMEL_NrDomu,''), AZAM_NrDomu),
			NR_LOKALU_Z = IF(IFNULL(AZAM_nrMieszkania,'') = '', IFNULL(AMEL_nrMieszkania,''), AZAM_nrMieszkania),
			PANSTWO_K = IFNULL(AKOR_Kraj,''),
			KOD_POCZTOWY_K = IFNULL(AKOR_KodPocztowy,''),
			-- ADR_KOR_POCZ = IFNULL(AKOR_Poczta,''),
			MIEJSCOWOSC_K = IFNULL(AKOR_Miejscowosc,''),
			ULICA_K = IFNULL(AKOR_Ulica,''),
			NR_DOMU_K = IFNULL(AKOR_NrDomu,'') ,
			NR_LOKALU_K = IFNULL(AKOR_nrMieszkania,'')
		WHERE o.guid = t.guid;

		-- update t_pracownicy t, Kraje k SET ADR_ZAM_KRAJ = k.idn_kraju where t.PANSTWO_Z = k.idn;
		-- update t_pracownicy t, Kraje k SET ADR_KOR_KRAJ = k.idn_kraju where t.PANSTWO_K = k.idn;
	END IF;

	IF _nowe_adresy = 1 THEN
		-- adres zamieszkania jako najwazniejszy
		UPDATE t_pracownicy t,
			geo_int_adr_link A, geo_int_miejsca A_M, geo_int_adm A_P, geo_int_adresy A_U
		SET
			t.PANSTWO_Z = IFNULL(A_M.IDcountry,''),
			t.KOD_POCZTOWY_Z = IFNULL(A.ZipCode,''),
			-- t.ADR_ZAM_POCZ = IFNULL(A_P.nazwa,''),
			t.MIEJSCOWOSC_Z = IFNULL(A_M.nazwa,''),
			t.ULICA_Z = IFNULL(A_U.nazwa_1,''),
			t.NR_DOMU_Z = IFNULL(A.NrPos,'') ,
			t.NR_LOKALU_Z = IFNULL(A.NrLoc,'')
		WHERE A.objguid = t.guid AND A.status = 0 AND adrtyp LIKE '%ZAM%' AND A.objtable = 'osoby'
			AND A_M.ID = A.geo_int_miejsca_ID
			AND A_M.ID_Adm = A_P.ID
			AND A_U.ID = A.geo_int_adresy_ID;

		-- dla adresow nie gusowskich
		UPDATE t_pracownicy t,
			geo_int_adr_link A, geo_int_miejsca A_M, geo_int_adm A_P
		SET
			t.PANSTWO_Z = IFNULL(A_M.IDcountry,''),
			t.KOD_POCZTOWY_Z = IFNULL(A.ZipCode,''),
			-- t.ADR_ZAM_POCZ = IFNULL(A_P.nazwa,''),
			t.MIEJSCOWOSC_Z = IF(IFNULL(A.ulica_not_gus,'') = '', A_M.nazwa, A.ulica_not_gus),
			-- t.ADR_ZAM_ULICA = IFNULL(A_U.nazwa_1,''),
			t.ULICA_Z = '',
			t.NR_DOMU_Z = IFNULL(A.NrPos,'') ,
			t.NR_LOKALU_Z = IFNULL(A.NrLoc,'')
		WHERE A.objguid = t.guid AND A.status = 0 AND adrtyp LIKE '%ZAM%' AND A.objtable = 'osoby'
			AND A_M.ID = A.geo_int_miejsca_ID
			AND A_M.ID_Adm = A_P.ID
			AND A.geo_int_adresy_ID = '';

		-- jezeli nie bylo adresu zamieszkania, to zamledowania
		UPDATE t_pracownicy t,
			geo_int_adr_link A, geo_int_miejsca A_M, geo_int_adm A_P, geo_int_adresy A_U
		SET
			t.PANSTWO_Z = IFNULL(A_M.IDcountry,''),
			t.KOD_POCZTOWY_Z = IFNULL(A.ZipCode,''),
			-- t.ADR_ZAM_POCZ = IFNULL(A_P.nazwa,''),
			t.MIEJSCOWOSC_Z = IFNULL(A_M.nazwa,''),
			t.ULICA_Z = IFNULL(A_U.nazwa_1,''),
			t.NR_DOMU_Z = IFNULL(A.NrPos,'') ,
			t.NR_LOKALU_Z = IFNULL(A.NrLoc,'')
		WHERE A.objguid = t.guid AND A.status = 0 AND adrtyp LIKE '%MEL%' AND A.objtable = 'osoby'
			AND A_M.ID = A.geo_int_miejsca_ID
			AND A_M.ID_Adm = A_P.ID
			AND A_U.ID = A.geo_int_adresy_ID
			AND t.PANSTWO_Z = '';

		-- dla adresow nie gusowskich
		UPDATE t_pracownicy t,
			geo_int_adr_link A, geo_int_miejsca A_M, geo_int_adm A_P
		SET
			t.PANSTWO_Z = IFNULL(A_M.IDcountry,''),
			t.KOD_POCZTOWY_Z = IFNULL(A.ZipCode,''),
			-- t.ADR_ZAM_POCZ = IFNULL(A_P.nazwa,''),
			t.MIEJSCOWOSC_Z = IF(IFNULL(A.ulica_not_gus,'') = '', A_M.nazwa, A.ulica_not_gus),
			-- t.ADR_ZAM_ULICA = IFNULL(A_U.nazwa_1,''),
			t.ULICA_Z = '',
			t.NR_DOMU_Z = IFNULL(A.NrPos,'') ,
			t.NR_LOKALU_Z = IFNULL(A.NrLoc,'')
		WHERE A.objguid = t.guid AND A.status = 0 AND adrtyp LIKE '%MEL%' AND A.objtable = 'osoby'
			AND A_M.ID = A.geo_int_miejsca_ID
			AND A_M.ID_Adm = A_P.ID
			AND A.geo_int_adresy_ID = ''
			AND t.PANSTWO_Z = '';

		-- adres do korespondencji tylko jezeli jest osobny
		UPDATE t_pracownicy t,
			geo_int_adr_link A, geo_int_miejsca A_M, geo_int_adm A_P, geo_int_adresy A_U
		SET
			t.PANSTWO_K = IFNULL(A_M.IDcountry,''),
			t.KOD_POCZTOWY_K = IFNULL(A.ZipCode,''),
			-- t.ADR_ZAM_POCZ = IFNULL(A_P.nazwa,''),
			t.MIEJSCOWOSC_K = IFNULL(A_M.nazwa,''),
			t.ULICA_K = IFNULL(A_U.nazwa_1,''),
			t.NR_DOMU_K = IFNULL(A.NrPos,'') ,
			t.NR_LOKALU_K = IFNULL(A.NrLoc,'')
		WHERE A.objguid = t.guid AND A.status = 0 AND adrtyp LIKE '%KOR%' AND A.objtable = 'osoby'
			AND A_M.ID = A.geo_int_miejsca_ID
			AND A_M.ID_Adm = A_P.ID
			AND A_U.ID = A.geo_int_adresy_ID;

	END IF;


END IF; -- _MODE = 'DANE_ADRESY'


/*
call pl_zus_xml('create.ZSWA','','','','','','','','');
CREATE TEMPORARY TABLE tb_pracownicy (
guid VARCHAR(38),
KEY guid (guid));
insert into tb_zus values ('AUTOID23969');

insert into tb_zus
select distinct guid_pracownika
	from place pl
	-- where IF(_GUID<>'', guid_pracownika = _GUID, TRUE)
	where pl.naliczFEP = 1
	AND pl.rok = 2022
	order by guid_pracownika;

*/
IF (_MODE = 'create.ZSWA') THEN

-- tabela z pracownikami
	DROP TABLE IF EXISTS t_pracownicy;
	CREATE TEMPORARY TABLE t_pracownicy (
		guid VARCHAR(38),
		LP INT,
		PESEL VARCHAR(38),
		DATA_URODZENIA VARCHAR(10),
		IMIE VARCHAR(38),
		NAZWISKO VARCHAR(38),
		xml1 TEXT,
		KEY guid (guid)
		) DEFAULT CHARSET=utf8;

	IF _GUID <> '' THEN
		DROP TABLE IF EXISTS tb_zus;
		CREATE TEMPORARY TABLE tb_zus (
		guid VARCHAR(38),
		KEY guid (guid));

		insert into tb_zus values (_GUID);
	END IF;

	DROP TABLE IF EXISTS t_bloki;
	CREATE TEMPORARY TABLE t_bloki (
		guid VARCHAR(38),
		blok INT,
		okres INT,
		xml1 TEXT,
		xml2 TEXT,
		KEY guid_blok (guid,blok)
		) DEFAULT CHARSET=utf8;

	-- wypelniamy dane po kolei - pracownicy
	SET @a = 0;
	INSERT INTO t_pracownicy (guid, LP)
	select p.guid, @a := @a+1 as lp from tb_zus t inner join Pracownicy p on t.guid=p.guid group by p.guid;

	update t_pracownicy t, osoby o set
			t.PESEL = o.nrpesel,
			t.imie = o.imie1,
			t.nazwisko = o.nazwisko,
			t.DATA_URODZENIA = o.dataurodzenia
	WHERE o.guid = t.guid;

/*
	DROP TABLE IF EXISTS t_okresy;
	CREATE TEMPORARY TABLE t_okresy (
		guid VARCHAR(38),
		LP INT,
		kodu VARCHAR(10), -- KodTytuluUbezpieczenia
		kodww VARCHAR(15), -- KodPracyWszczegWarunkach
		oddnia VARCHAR(10),
		dodnia VARCHAR(10),
		etat_l VARCHAR(3),
		etat_m VARCHAR(3),
		xml1 TEXT,
		KEY guid (guid)
		) DEFAULT CHARSET=utf8;

	SET @a = 0;
	SET @guid = '';
	insert into t_okresy (lp, oddnia, dodnia, guid)
	SELECT
		CASE WHEN @guid <> guid THEN @a := 1
		ELSE @a := @a +1 END as lp,
	left(wiersz,10), right(wiersz,10),
	@guid := guid AS guid
	FROM tt_wiersze
	WHERE guid IN (SELECT guid FROM tb_zus)
	order by guid, left(wiersz,10);


	update t_okresy t, pracownicy_ZUS z set
			t.kodu = left(z.KodTytuluUbezpieczenia,4)
			-- t.kodww = IFNULL(z.KodPracyWszczegWarunkach,'yyy')
	WHERE z.guid_pracownika = t.guid;

	update t_okresy t, Pracownicy p set
			t.etat_l = lpad(p.etat_l,3,'0'),
			t.etat_m = lpad(p.etat_m,3,'0')
	WHERE p.guid = t.guid;

	update t_okresy t, Pracownicy p, stanowiska s
	set t.kodww = IFNULL(s.KodZUS,'yyy')
	WHERE p.guid = t.guid AND s.guid = p.stanowisko;
*/

	update t_okresy t set t.xml1 =
		CASE WHEN t.LP IN (1,5,9,13) THEN
		CONCAT(
		'<B>\n<p1>\n',
		'<p1>',LEFT(kodu,4),'</p1>\n',
		'<p2>',MID(kodu,5,1),'</p2>\n',
		'<p3>',RIGHT(kodu,1),'</p3>\n</p1>\n',
		'<p2>',kodww,'</p2>\n',
		'<p3>',oddnia,'</p3>\n',
		'<p4>',dodnia,'</p4>\n',
		'<p5>\n<p1>',etat_l,'</p1>\n',
			'<p2>',etat_m,'</p2>\n</p5>\n'
		)
		WHEN t.LP IN (2,6,10,14) THEN
		CONCAT(
		'<p6>',kodww,'</p6>\n',
		'<p7>',oddnia,'</p7>\n',
		'<p8>',dodnia,'</p8>\n',
		'<p9>\n<p1>',etat_l,'</p1>\n',
			'<p2>',etat_m,'</p2>\n</p9>\n'
		)
		WHEN t.LP IN (3,7,11,15) THEN
		CONCAT(
		'<p10>',kodww,'</p10>\n',
		'<p11>',oddnia,'</p11>\n',
		'<p12>',dodnia,'</p12>\n',
		'<p13>\n<p1>',etat_l,'</p1>\n',
			'<p2>',etat_m,'</p2>\n</p13>\n'
		)
		WHEN t.LP IN (4,8,12,16) THEN
		CONCAT(
		'<p14>',kodww,'</p14>\n',
		'<p15>',oddnia,'</p15>\n',
		'<p16>',dodnia,'</p16>\n',
		'<p17>\n<p1>',etat_l,'</p1>\n',
			'<p2>',etat_m,'</p2>\n</p17>\n'
		) END
		;

	INSERT INTO t_bloki (guid, blok, okres, xml1) -- div 5, bo w bloku moga byc najwyzej 4 okresy
	/*
	SELECT guid, (LP div 5) + 1, LP, group_concat(xml1 SEPARATOR '')
	FROM t_okresy
	GROUP BY guid, (LP div 5) + 1
	;
	*/
	SELECT guid, ((LP-1) div 4) + 1, LP, group_concat(xml1 SEPARATOR '')
	FROM t_okresy
	GROUP BY guid, ((LP-1) div 4) + 1
	;

	SET @a = 0;
	UPDATE t_bloki SET blok = @a := @a + 1;

	SELECT REPLACE(ValueA,'-','') INTO _NIP FROM IReg WHERE idkey = 'NIP' AND IdPath LIKE '%DaneFirmy';
	SELECT ValueA INTO _REGON FROM IReg WHERE idkey = 'REGON' AND IdPath like '%DaneFirmy';
	SELECT ValueA INTO _PelnaNazwa FROM IReg WHERE idkey = 'Pelna_nazwa' AND IdPath like '%DaneFirmy';
	SELECT ValueA INTO _SkroconaNazwa FROM IReg WHERE idkey = 'Nazwa_skrocona' AND IdPath like '%DaneFirmy';

	SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(_Param_G, 'rok=', -1), '&', 1) INTO _rok;
	SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(_Param_G, 'DataWyp=', -1), '&', 1) INTO _DataWyp;
	SELECT LPAD(SUBSTRING_INDEX(SUBSTRING_INDEX(_Param_G, 'nr=', -1), '&', 1),3,'0') INTO _nrdok;


	SET @test0 = _Param_G;
	SET @test = CONCAT(ifnull(_NIP,''), ifnull(_REGON,''), ifnull(_SkroconaNazwa,''), ifnull(_rok,''), ifnull(_nrdok,''));


	SET _XMLnag = concat('<?xml version="1.0" encoding="UTF-8"?>\n',
												'<KEDU wersja_schematu="1" xmlns="http://www.zus.pl/2021/KEDU_5_4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.zus.pl/2021/KEDU_5_4 kedu_5_4.xsd">\n',
	'<naglowek.KEDU>
      <program>
        <producent>Asseco Poland S.A.</producent>
        <symbol>Platnik</symbol>
        <wersja>901001</wersja>
      </program>
    </naglowek.KEDU>');

    SET _XMLnag = concat(_XMLnag, '\n', '<ZUSZSWA id_dokumentu="1">
      <I>
        <p1>
          <p1>',_nrdok,'</p1>
          <p2>',_rok,'</p2>
        </p1>
      </I>
      <II>
        <p1>',_NIP,'</p1>
        <p2>',_REGON,'</p2>
        <p6>',_to_utf_xml(_SkroconaNazwa),'</p6>
      </II>\n');


    update t_pracownicy tp, t_bloki tb set tb.xml2 = CONCAT(
		'\n<III id_bloku="',tb.blok,'">\n',
		'<A>\n',
		'<p1>','true','</p1>\n',
		'<p2>','false','</p2>\n',
		'<p3>',tp.PESEL,'</p3>\n',
		'<p7>',_to_utf_xml(tp.NAZWISKO),'</p7>\n',
		'<p8>',_to_utf_xml(tp.IMIE),'</p8>\n',
		'<p9>',tp.DATA_URODZENIA,'</p9>\n',
		'</A>'
		)
	WHERE tb.guid = tp.guid;


	DROP TABLE IF EXISTS t_zswa;
	CREATE TEMPORARY TABLE t_zswa (
		xmlpoz1 LONGTEXT
		) DEFAULT CHARSET=utf8;

	INSERT INTO t_zswa (xmlpoz1)
		select group_concat(CONCAT(xml2,'\n',xml1,'</B>\n</III>') SEPARATOR '')
		FROM t_bloki;


	SET _bledy = '';
	SET _bledy = (SELECT group_concat(concat('guid: ',guid) separator '\n') from t_bloki where xml1 is null);
	SET _bledy = IF(_bledy <> '', CONCAT('\nBraki w danych dla pracownikow: ', _bledy, '\n'), '');


	DROP TABLE IF EXISTS t_zswa2;
	CREATE TEMPORARY TABLE t_zswa2 (
		xmlnag LONGTEXT,
		xmlpoz1 LONGTEXT
		) DEFAULT CHARSET=utf8;

	INSERT INTO t_zswa2 (xmlnag, xmlpoz1) SELECT _XMLnag, CONCAT(xmlpoz1, _bledy, '</ZUSZSWA>\n</KEDU>\n') FROM t_zswa;

	SELECT CONCAT(xmlnag,xmlpoz1) AS content FROM t_zswa2;


/*
			<xs:element name="p1" type="t_KodTytuluUbezpieczenia_6" minOccurs="0"/>
			<xs:element name="p2" type="t_KodPracywSzczegolnychWarunkach_3" minOccurs="0"/>
			<xs:element name="p3" type="t_Data_DDMMRRRR_8" minOccurs="0"/>
			<xs:element name="p4" type="t_Data_DDMMRRRR_8" minOccurs="0"/>
			<xs:element name="p5" type="t_WymiarCzasuPracy_6" minOccurs="0"/>
			<xs:element name="p6" type="t_KodPracywSzczegolnychWarunkach_3" minOccurs="0"/>
			<xs:element name="p7" type="t_Data_DDMMRRRR_8" minOccurs="0"/>
			<xs:element name="p8" type="t_Data_DDMMRRRR_8" minOccurs="0"/>
			<xs:element name="p9" type="t_WymiarCzasuPracy_6" minOccurs="0"/>
			<xs:element name="p10" type="t_KodPracywSzczegolnychWarunkach_3" minOccurs="0"/>
			<xs:element name="p11" type="t_Data_DDMMRRRR_8" minOccurs="0"/>
			<xs:element name="p12" type="t_Data_DDMMRRRR_8" minOccurs="0"/>
			<xs:element name="p13" type="t_WymiarCzasuPracy_6" minOccurs="0"/>
			<xs:element name="p14" type="t_KodPracywSzczegolnychWarunkach_3" minOccurs="0"/>
			<xs:element name="p15" type="t_Data_DDMMRRRR_8" minOccurs="0"/>
			<xs:element name="p16" type="t_Data_DDMMRRRR_8" minOccurs="0"/>
			<xs:element name="p17" type="t_WymiarCzasuPracy_6" minOccurs="0"/>








	DROP TABLE IF EXISTS t_zswa;
	CREATE TEMPORARY TABLE t_rud (
		xmlpoz1 LONGTEXT
		) DEFAULT CHARSET=utf8;

	DROP TABLE IF EXISTS t_zswa2;
	CREATE TEMPORARY TABLE t_rud2 (
		xmlnag LONGTEXT,
		xmlpoz1 LONGTEXT
		) DEFAULT CHARSET=utf8;

	DROP TABLE IF EXISTS t_zswa3;
	CREATE TEMPORARY TABLE t_rud3 (
		lp int(11),
		xml LONGTEXT
		) DEFAULT CHARSET=utf8;





	select * from t_okresy;

-- metoda z programu, czyli dane z kartoteki pracownika

procedure TDBPlacesPracownicy.WstawDanePracyZSWA(aParentItem : TJvSimpleXMLElem; aIdBloku : Integer; aPracGUID : String);
const
  cZSWA_SQL = ' SELECT '+
    'O.GUID, O.Nazwisko, O.Imie1, O.DataUrodzenia, O.NrNIP, O.NrPesel, '+
    'O.DataUrodzenia, O.Obywatelstwo, O.NazwiskoPanienskie, IF(O.plec, ''M'', ''K'') AS plec, '+
    'IF(!ISNULL(O.NrSeriaDowoduOsobistego), REPLACE(O.NrSeriaDowoduOsobistego, '' '', ''''), '''') AS DowodOsobisty, '+
    'IF(!ISNULL(O.NrPaszportu), REPLACE(O.NrPaszportu, '' '', ''''), '''') AS Paszport, '+
    'Z.ZgloszZSWA, Z.KodTytuluUbezpieczenia, Z.KodPracyWszczegWarunkach, '+
    'Z.PracaWszczegWarOd, Z.PracaWszczegWarDo, Z.SczegWarunCzasNieokr '+
    'FROM osoby O '+
    'LEFT JOIN pracownicy_ZUS Z ON O.GUID = Z.GUID_Pracownika '+
    'WHERE O.GUID = ''%s'' ';
var
  aElemXML, aDOOPWSW, aItemXML{, aSubItemXML} : TJvSimpleXMLElem;
  aDeklZglDS : TDataSet;
  aSQL : String;
begin
  aSQL := Format(cZSWA_SQL, [aPracGUID]);
  aDeklZglDS := ConnectSupport.GetNavQuery(aSQL);
  if Assigned(aDeklZglDS) then
  try
    aDOOPWSW := aParentItem.Items.Add('III');
    aDOOPWSW.Properties.Add('id_bloku', aIdBloku);

    // III.A Dane ident. osoby wykonujacej prace w szczególnych warunkach
    aElemXML := aDOOPWSW.Items.Add('A');

      // zgłoszenie danych ?
      aItemXML := aElemXML.Items.Add('p1');
      if aDeklZglDS.FieldByName('ZgloszZSWA').AsInteger = 1 then
        aItemXML.Value := 'true'
      else
        aItemXML.Value := 'false';

      // zgłoszenie KOREKTY danych ?
      aItemXML := aElemXML.Items.Add('p2');
      if aDeklZglDS.FieldByName('ZgloszZSWA').AsInteger = 2 then
        aItemXML.Value := 'true'
      else
        aItemXML.Value := 'false';

      // pozostale dane - skorzystać z kodu z WstawDaneIdentOsobyUbezp
      aItemXML := aElemXML.Items.Add('p3');
      aItemXML.Value :=   aDeklZglDS.FieldByName('NrPesel').AsString;

      aItemXML := aElemXML.Items.Add('p7');
      aItemXML.Value := aDeklZglDS.FieldByName('Nazwisko').AsString;

      aItemXML := aElemXML.Items.Add('p8');
      aItemXML.Value := aDeklZglDS.FieldByName('Imie1').AsString;

      if aDeklZglDS.FieldByName('DataUrodzenia').AsDateTime > 0 then
      begin
        aItemXML := aElemXML.Items.Add('p9');
        aItemXML.Value :=  FormatDateTime('yyyy-mm-dd', aDeklZglDS.FieldByName('DataUrodzenia').AsDateTime); // xs:date
      end;

    // III.B Dane o pracy w szczególnych warunkach
    aElemXML := aDOOPWSW.Items.Add('B');

      { kod tytulu ubezpieczenia }
       aItemXML := aElemXML.Items.Add('p1');
       WstawKodTytUbezp(aItemXML, aDeklZglDS.FieldByName('KodTytuluUbezpieczenia').AsString);

       { kod pracy w szczególnych warunkach (3-znakowy)}
       aItemXML := aElemXML.Items.Add('p2');
       aItemXML.Value := Copy(aDeklZglDS.FieldByName('KodPracyWszczegWarunkach').AsString, 1, 3);

       {if (aDeklZglDS.FieldByName('SczegWarunCzasNieokr').AsInteger = 0) then
       begin  }
       if aDeklZglDS.FieldByName('PracaWszczegWarOd').AsDateTime > 0 then
       begin
         aItemXML := aElemXML.Items.Add('p3');
         aItemXML.Value :=  FormatDateTime('yyyy-mm-dd', aDeklZglDS.FieldByName('PracaWszczegWarOd').AsDateTime); // xs:date
       end;

       if aDeklZglDS.FieldByName('PracaWszczegWarDo').AsDateTime > 0 then
       begin
         aItemXML := aElemXML.Items.Add('p4');
         aItemXML.Value :=  FormatDateTime('yyyy-mm-dd', aDeklZglDS.FieldByName('PracaWszczegWarDo').AsDateTime); // xs:date
       end;

    // kod tyt. ubezp., kod pracy w szczeg.war., okres pracy od, okres pracy do, wymiar czasu pracy
  finally
    FreeAndNil(aDeklZglDS);
  end;

end;

procedure TDBPlacesPracownicy.WstawDaneIdentZSWA(aParentItem : TJvSimpleXMLElem; aDataWypeln : TDateTime);
var
  aElemXML, aItemXML, aSubItemXML : TJvSimpleXMLElem;
  aNr : Integer;
begin
  (*  <xs:element name="I" type="t_DOZD"/>
      <xs:element name="II" type="t_DIPL" minOccurs="0"/>
      <xs:element name="III" type="t_DOOPWSW" maxOccurs="unbounded"/>
      <xs:element name="VII" type="t_OPL1" minOccurs="0"/>  *)

  { I. dane organizacyjne }
  aElemXML := aParentItem.Items.Add('I');

     { ident. zgłoszenia }
     aItemXML := aElemXML.Items.Add('p1');

       // nr zgłosz. (NNN)
       aSubItemXML := aItemXML.Items.Add('p1');
       aNr := 1;
       FormSupport.EditInteger(aNr, 'Podaj numer raportu');
       aSubItemXML.Value := Format('%.3d', [aNr]);

       // rok        (RRRR)
       aSubItemXML := aItemXML.Items.Add('p2');
       aSubItemXML.Value := Format('%.4d', [YearOf(aDataWypeln)]);
  { ######################################################################### }



end;
*/




END IF;



END$$

DELIMITER ;
