DELIMITER $$

DROP PROCEDURE IF EXISTS `e_dekl_vatUE_tools`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `e_dekl_vatUE_tools`(
	IN _MODE 	    VARCHAR(100), 
	IN _Year        VARCHAR(50),
	IN _Month       VARCHAR(50),	 -- dla VAT7K jest to nr kwartalu
	IN _RecGUID     VARCHAR(38),     -- GUID operacji    	 
	INOUT _RepContent LONGTEXT,
	IN _Param_A 	VARCHAR(250),	  -- w trybie "insert": cel złożenia (deklaracja / korekta deklaracji); w trybie "xml.create": IDN rekordu w e_doc_ng
	IN _Param_B 	VARCHAR(250),	 -- okresla, czy jest to VAT7 czy VAT7K  (ht_dekl_vat7.RodzajDekl)  (miesieczny czy kwartalny)
	IN _Param_C 	VARCHAR(250)
)
/*
procedura generująca dokumenty XML 
	CALL e_dekl_vatUE_tools('', 2013, 12, '', '');
		
	dla deklaracji VAT-7, VAT-K, VAT-UE : Podmiot1 = TPodmiotDowolnyBezAdresu2  rola = "Podatnik" 
	dla deklaracji CIT-8, CIT-ST        : Podmiot1 = TOsobaNiefizyczna  		rola = "Podatnik" 
	
	TPodmiotDowolnyBezAdresu2 =	OsobaNiefizyczna lub OsobaFizyczna	
	TOsobaNiefizyczna 		  = OsobaNiefizyczna  +  AdresSiedziby(TAdres)
	
*/

S_e_dekl_vatUE_tools: BEGIN

	DECLARE _IDN, _RodzPodat, _Jest, _RodzajDekl, _CelZlozenia, _Grupa INTEGER;
	DECLARE cMies, cKwart, cWDT, cWNT, cUSL_UE, cUSL_UE2, cUSL_UE3 INTEGER;
	DECLARE _data_wypelnienia DATE;
	DECLARE _KodUS, _KodForm, _pre VARCHAR(10);	
	DECLARE _id_VAT_kontrah VARCHAR(12);
	DECLARE _Kraj, _REGON, _NIP, _P_NIP, _tel_kontakt  VARCHAR(20);	
	
	DECLARE _kwota_transakcji DOUBLE; 
	
	DECLARE cSL 	 INTEGER	DEFAULT 4;	-- SPACE(5*cSL)
	DECLARE cKorekta INTEGER	DEFAULT 2;
	
	DECLARE _kwartalnie BOOLEAN DEFAULT FALSE;
	
	DECLARE cDefTypySchema  VARCHAR(200) DEFAULT 'xmlns:etd="http://crd.gov.pl/xml/schematy/dziedzinowe/mf/2011/06/21/eD/DefinicjeTypy/">';
		
	DECLARE _trojstronna INTEGER;
	DECLARE _kod_kraju VARCHAR(2); 
			
	DECLARE _done BOOL DEFAULT FALSE;	
	
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET _done = TRUE;	
	
	IF(@session.globals.Owner IN ('IRKO','AMICUS','AXIS')) THEN
		SET cUSL_UE  = 2037;  
	ELSE
		IF(@session.globals.Owner IN ('SEVENET')) THEN
		SET cUSL_UE  = 2022;  
	ELSE
		SET cUSL_UE = 2034; 
	END IF;
	END IF;
	
	IF(@session.globals.Owner IN ('SPARMEBLE')) THEN
		SET cUSL_UE = -1; 
	END IF;
	
	IF (@session.globals.Owner IN ('AXIS')) THEN 
		SET cUSL_UE2  = 2035;  
		SET cUSL_UE3  = 2032;  
	ELSE 
		SET cUSL_UE2  = cUSL_UE;  
		SET cUSL_UE3  = cUSL_UE;  
	END IF;


	
	IF(@session.globals.Owner IN ('TRANSBUD')) THEN
		SET cWNT = 2029;  
	ELSE
		SET cWNT = 2024;  
	END IF;
	
	
	SET cWDT = 2023; 
	
	SET cMies  = 1;
	SET cKwart = 2;
	

/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'vatUE.data.insert'
		Utworzenie nowego wpisu do tabel VAT UE
		Parametry
		_MODE			Tryb pracy
		IN _Year      VARCHAR(50),
		IN _Month     VARCHAR(50),		 
		INOUT _RecGUID     GUID tworzonego rekordu		
		INOUT _RepContent     tutaj: nieużywane
		IN _Param_A 	VARCHAR(250),	  -- kod formularza:  VAT-UE / VAT-UEK
    	IN _Param_B 	VARCHAR(250),	  -- okresla, czy jest to zeznanie miesieczne czy kwartalne
		IN _Param_C 	VARCHAR(250)	  -- w przypadku korekty: GUID korygowanego rekordu
		
		CALL e_dekl_vat_tools('vatUE.data.insert', '2013', '6', 'VAT_UE_2013_6', @_eDeklContent, '1', '1');
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/		

	IF _MODE = 'vatUE.data.insert' THEN
	
		IF (_Param_A = 'VAT-UEK') THEN  
				-- w przypadku korekty okreslamy rodzaj dekl. (mies/kwart) na podst oryginalnej deklaracji
				SELECT RodzajDekl, tel_kontakt FROM ht_dekl_vat_ue WHERE GUID = _Param_C	
				INTO _RodzajDekl, _tel_kontakt;
		ELSE
        SET _RodzajDekl =  _varINT(_Param_B);		
				SET _tel_kontakt = '';
		END IF;		
						
		DROP TEMPORARY TABLE IF EXISTS  t_vatue;
		DROP TEMPORARY TABLE IF EXISTS  t_te_same;
		
		CREATE TEMPORARY TABLE t_vatue
		SELECT TRIM(kontrNIP) AS kontrNIP, ROUND(SUM(o.netto)) AS kwota, rv_id, 'OPNG' AS source, kontrGUID -- ROUND(SUM(o.netto),2)
		FROM opng o
		WHERE o.deleted=0 AND o.rv_id IN (cWDT, cWNT, cUSL_UE, cUSL_UE2, cUSL_UE3)  
		AND (YEAR(o.data_vat) = _Year)
		AND 
			  IF(_RodzajDekl = cMies, (MONTH(o.data_vat) = _Month), (QUARTER(o.data_vat) = _Month)  )
		-- AND (QUARTER(o.data_vat)=QUARTER("#datado#"))
		-- AND (MONTH(o.data_vat)=MONTH("#datado#"))
		GROUP BY TRIM(kontrNIP), rv_id;
		
		-- ALTER TEMPORARY TABLE t_vatue ADD UNIQUE klucz(kontrNIP, kwota, rv_id);
		
		SELECT COUNT(*) FROM t_vatue
		INTO _Jest;
		
		IF _Jest > 0 THEN  -- gdy sa rzeczywiste dane za wskazany miesiac
			IF (_Param_A = 'VAT-UEK') THEN  -- dla korekty deklaracji:
								
				-- pobieramy pozycje z oryginalnej (korygowanej) deklaracji i dolaczamy do tabeli tymcz.
				INSERT IGNORE INTO t_vatue (kontrNIP, kwota, rv_id, source, kontrGUID) 
				SELECT CONCAT(kod_kraju, id_VAT_kontrah) AS kontrNIP, kwota,
					(CASE grupa WHEN 1 THEN cWDT WHEN 2 THEN cWNT WHEN 3 THEN cUSL_UE END) AS rv_id, 'DEKL', kontrGUID
					
				FROM ht_dekl_vat_ue_poz WHERE deklGUID = _Param_C;
				
				-- teraz tworzymy temp. table z niezmienionymi pozycjami deklaracji
				CREATE TEMPORARY TABLE t_te_same AS
				SELECT rv_id, kontrNIP, kwota,  COUNT(*) AS ile
				FROM t_vatue 
				GROUP BY rv_id, kontrNIP, kwota;

				-- usuwamy niezmienione pozycje (nie podlegajace korygowaniu)
				DELETE p.* 
				FROM t_vatue p, t_te_same s
				WHERE s.ile>1 AND p.kwota=s.kwota AND p.rv_id = s.rv_id AND p.kontrNIP = s.kontrNIP; 
				
				-- spr. czy zostaly nam jakies pozycje (jesli nie, to znaczy, że nie ma żadnych różnic w danych i korekta jest bezzasadna)
				SELECT COUNT(*) FROM t_vatue	INTO _Jest;
				IF _Jest = 0 THEN
					SET _RepContent  = 'brak danych do korekty za wskazany okres';
					SELECT 	_RepContent AS Msg;
					LEAVE S_e_dekl_vatUE_tools;  --	 EXIT
				END IF;
											
			END IF;
			
		    -- wstawiamy rekord tylko wtedy, gdy sa rzeczywiste dane za wskazany miesiac
			INSERT IGNORE INTO ht_dekl_vat_ue (GUID, rok, miesiac, data_wypelnienia, CelZlozenia, RodzajDekl, KodFormularza, tel_kontakt)  
			SELECT 
				 _RecGUID  AS GUID, _Year, _Month, DATE(NOW()), _varINT(1) AS CelZlozenia, _RodzajDekl, _Param_A, _tel_kontakt; 
				 -- cel zlozenia: 1 - zgloszenie, 2 - korekta (dla VAT UE / UEK zawsze = 1) ;  RodzajDekl : 1 - miesięczna, 2 - kwartalna	
		
			-- wypelniamy sekcje C, D, E	 
			INSERT IGNORE INTO ht_dekl_vat_ue_poz (GUID, deklGUID, grupa, kod_kraju, id_VAT_kontrah, kwota, trojstronna, koryg, kontrGUID)  
			SELECT 	
				NEWGUID(), _RecGUID  AS deklGUID, (CASE rv_id WHEN cWDT THEN 1 WHEN cWNT THEN 2 WHEN cUSL_UE THEN 3 END) AS grupa, 
				LEFT(kontrNIP, 2) AS kod_kraju, RIGHT(kontrNIP, LENGTH(kontrNIP)-2) AS kontrNIP, kwota, 1, IF (_Param_A = 'VAT-UEK', IF(source = 'OPNG', 1, 0), 0) AS koryg, kontrGUID	
				/* trojstronna: `1 - pozycja nie dotyczy transakcji trójstronnych`
				   koryg: gdy korekta, to ten znacznik dostają pozycje wyliczone z aktualnych wartosci opng				*/
			FROM 
				t_vatue
			ORDER BY kontrNIP, rv_id;
			
			SET _RepContent  = 'OK';
		ELSE
			SET _RepContent  = 'brak danych za wskazany okres';
		END IF;

		SELECT 	_RepContent AS Msg;
	END IF; 	-- _MODE = 'vatUE.data.insert'
	
	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'xml.insert.header'  
	
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/				
	IF _MODE = 'xml.insert.header' THEN
	
		SELECT 			
			RodzajDekl,	d.doc_id, _varSTR(d.form_ver), 	d.doc_type,	d.doc_ver, rok, miesiac			
		FROM 
			ht_dekl_vat_ue p, e_doc_def d -- , osoby o
		WHERE 
			p.GUID = _RecGUID AND  p.e_Doc_Def_ID = d.owner_doc_Id 
		INTO 
		    @eVAT._RodzajDekl, @eVAT._e_doc_id, @eVAT._form_ver, @eVAT._e_doc_type, @eVAT._doc_ver, _Year, _Month;  
	
			-- set @tmp.ptr = 'przed';
		-- <Naglowek> 
			SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), '<tns:Naglowek>\n');
				SET @xml.IC = @xml.IC + 1;
			
				SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), '<tns:KodFormularza kodSystemowy="', @eVAT._e_doc_id, '" wersjaSchemy="', @eVAT._doc_ver, '">', @eVAT._e_doc_type, '</tns:KodFormularza>\n');
				SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), '<tns:WariantFormularza>', @eVAT._form_ver, '</tns:WariantFormularza>\n'); 	   
				
			/*	SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), '<tns:KodFormularza kodSystemowy="VAT-UE (3)" wersjaSchemy="1-0E">VAT-UE</tns:KodFormularza>\n');
				SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), '<tns:WariantFormularza>3</tns:WariantFormularza>\n');  */
				
				SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), '<tns:Rok>', _Year, '</tns:Rok>\n');				
				IF @eVAT._RodzajDekl = cMies THEN
						SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), '<tns:Miesiac>', _Month, '</tns:Miesiac>\n');
				END IF;					
				IF @eVAT._RodzajDekl = cKwart THEN
						SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), '<tns:Kwartal>', _Month, '</tns:Kwartal>\n');
				END IF;
				
				-- dla VAT_UE i VAT_UEK CelZlozenia zawsze = 1 
				SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), '<tns:CelZlozenia>', 1, '</tns:CelZlozenia>\n');  --    <CelZlozenia>1</CelZlozenia>
								
				SET _KodUS = '';
				SELECT _varSTR_NOTNULL(kod_urzedu) FROM US 
					WHERE  guid = (SELECT valueA FROM IReg WHERE idpath LIKE '%danefirmy%' AND idkey='Urzad_skarbowy')
				INTO _KodUS;
					
				SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), '<tns:KodUrzedu>', _KodUS, '</tns:KodUrzedu>\n');
				SET @xml.IC = @xml.IC - 1;						
			SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), '</tns:Naglowek>\n');
			--  </Naglowek> 
			SET @eVAT_header = @eVAT.Content;
	
	END IF;  -- IF _MODE = 'vat7.xml.insert.header' THEN

/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'xml.insert.podmiot1'  
	
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/				

	IF _MODE = 'xml.insert.podmiot1' THEN
	BEGIN	
		DECLARE _REGON, _NIP VARCHAR(20);	
		DECLARE _Platnik_nazwisko, _Platnik_imie, _PelnaNazwa VARCHAR(200); 
		DECLARE _Platnik_data_urodzenia	DATE;	
	
		SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), '<tns:Podmiot1 rola="Podatnik">\n'); -- TPodmiotDowolnyBezAdresu2
			    SET @xml.IC = @xml.IC + 1;	 
				CALL _IReg_Get('DaneFirmy', 'NIP', '0', 'STRING', _NIP, '(brak danych)'); 
				SET _NIP = REPLACE(_NIP, '-', '');
				CALL _IReg_Get('DaneFirmy', 'REGON', '0', 'STRING', _REGON, '(brak danych)'); 	
				CALL _IReg_Get('DaneFirmy', 'pelna_nazwa', '0', 'STRING', _PelnaNazwa, ''); 									
				
				SET _RodzPodat = 0;											
				CALL _IReg_Get('DaneFirmy', 'Rodzaj_platnika', '0', 'INTEGER', _RodzPodat, '0');   	
				
				IF _RodzPodat = 1 THEN -- osoba fiz.  TIdentyfikatorOsobyFizycznej2
				SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), '<etd:OsobaFizyczna>\n'); 
					SET @xml.IC = @xml.IC + 1;	 
					-- TIdentyfikatorOsobyFizycznej : NIP, imie, nazwisko, data ur., Nr PESEL; 4 ost. dane da桲ozdziel. ';' w pelnej nazwie
					-- IREG: Platnik_nazwisko, Platnik_imie, Platnik_data_urodzenia, Platnik_PESEL
					
					SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), '<etd:NIP>', _NIP, '</etd:NIP>\n');
					
					CALL _IReg_Get('DaneFirmy', 'Platnik_imie', '0', 'STRING', _Platnik_imie, ''); 
					SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), '<etd:ImiePierwsze>', _Platnik_imie, '</etd:ImiePierwsze>\n');
					
					CALL _IReg_Get('DaneFirmy', 'Platnik_nazwisko', '0', 'STRING', _Platnik_nazwisko, ''); 
					SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), '<etd:Nazwisko>', _Platnik_nazwisko, '</etd:Nazwisko>\n');
					
					CALL _IReg_Get('DaneFirmy', 'Platnik_data_urodzenia', '0', 'DATE', _Platnik_data_urodzenia, ''); 
					SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), '<etd:DataUrodzenia>', _Platnik_data_urodzenia, '</etd:DataUrodzenia>\n');
					SET @xml.IC = @xml.IC - 1;	 					
				SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), '</etd:OsobaFizyczna>\n'); 
				END IF;
			
				IF _RodzPodat = 0 THEN -- osoba nie-fiz.
					SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), '<etd:OsobaNiefizyczna>\n'); 
					SET @xml.IC = @xml.IC + 1;	 
					SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), '<etd:NIP>', _NIP, '</etd:NIP>\n');
					
					-- etd:PelnaNazwa
					SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), '<etd:PelnaNazwa>', REPLACE(_PelnaNazwa, '&', '&#x26;'), '</etd:PelnaNazwa>\n');
					
					
					SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), '<etd:REGON>', _REGON, '</etd:REGON>\n');
					SET @xml.IC = @xml.IC - 1;	 
					SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), '</etd:OsobaNiefizyczna>\n'); 						
				END IF;
				SET @xml.IC = @xml.IC - 1;	
		SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), '</tns:Podmiot1>\n');
	
	END;
	END IF;

/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'xml.ins.poz'  
	Pozycje deklaracji składanej po raz pierwszy
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/				
	
	IF _MODE = 'xml.ins.poz' THEN
	BEGIN							
		DECLARE _c_dane_sekcji CURSOR FOR			
		SELECT  
			kod_kraju, id_VAT_kontrah, kwota, trojstronna
		FROM 
			ht_dekl_vat_ue_poz
		WHERE deklGUID = _RecGUID AND grupa = @_Grupa
		;
						
	/*	-- grupa 1			
		SET _Grupa = 1;   */
		
		SELECT COUNT(*) 
		FROM ht_dekl_vat_ue_poz WHERE grupa = @_Grupa
		INTO _Jest;
		
		/*  <tns:Grupa1>
		  <tns:P_Da>BE</tns:P_Da>
		  <tns:P_Db>125874</tns:P_Db>
		  <tns:P_Dc>12</tns:P_Dc>
		  <tns:P_Dd>2</tns:P_Dd>
		  </tns:Grupa1>  */
		
		IF _Jest > 0 THEN
		
			CASE @_Grupa
				WHEN 1 THEN SET _pre = 'tns:P_D';
				WHEN 2 THEN SET _pre = 'tns:P_N';
				WHEN 3 THEN SET _pre = 'tns:P_U';
			END CASE;	
					
			OPEN _c_dane_sekcji;
			loop_CDE: LOOP 
				FETCH 
					_c_dane_sekcji 
				INTO 	
					_kod_kraju, _id_VAT_kontrah, _kwota_transakcji,  _trojstronna;
				IF _done THEN
						LEAVE loop_CDE;  
					ELSE
					  SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), CONCAT('<tns:Grupa', @_Grupa, '>\n'));
						SET @xml.IC = @xml.IC + 1;	 
						SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), '<', _pre, 'a>', _kod_kraju, '</', _pre, 'a>\n');																		
							SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), '<', _pre, 'b>', _id_VAT_kontrah, '</', _pre, 'b>\n');
							SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), '<', _pre, 'c>', _kwota_transakcji, '</', _pre, 'c>\n');
							IF @_Grupa < 3 THEN  -- dla grupy 3 (sekcja E na wydruku) ponizsze pole nie wystepuje
							  SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), '<', _pre, 'd>', _trojstronna, '</', _pre, 'd>\n');	-- 1: nie dotyczy; 2: dotyczy 																							
							END IF;  
						SET @xml.IC = @xml.IC - 1;	 
					  SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), CONCAT('</tns:Grupa', @_Grupa, '>\n'));  -- </tns:Grupa1>
				END IF;		
			END LOOP;
			CLOSE _c_dane_sekcji;
			
		END IF;  -- IF _Jest > 0 THEN
						
	END;
	END IF;  -- IF _MODE = 'xml.ins.poz' THEN
	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'vatUE.xml.create'
		Wygenerowanie dokumentu XML z fakturٍ
		Parametry
		_MODE			Tryb pracy		
		IN _Year      VARCHAR(50),
		IN _Month     VARCHAR(50),		 
		INOUT _RecGUID     GUID tworzonego rekordu
		INOUT _RepContent     Wygenerowana zawartoݦ pliku XML
		IN _Param_A   idn rekordu z t_e_doc_ng
		IN _Param_B
		
		CALL e_dekl_vatUE_tools('vatUE.xml.create', '2013', '6', '{0A3F4841-12FB-422F-9509-547BBDE770C7}', @eVAT.Content. '', '');
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/		
	IF _MODE = 'vatUE.xml.create' THEN
						
		/*
		VAT UE:
		Deklaracja
		Naglowek
		Podmiot1
		PozSzczegolowe
		Pouczenie
		*/
		
		SET _RodzajDekl = cMies;
		
		SELECT 
			d.ID, DATE(data_wypelnienia), RodzajDekl, KodFormularza
		FROM 
			ht_dekl_vat_ue p, e_doc_def d -- , osoby o
		WHERE 
			p.GUID = _RecGUID AND  p.e_Doc_Def_ID = d.owner_doc_Id 		
		INTO @eVAT._e_Doc_Def_ID, _data_wypelnienia, _RodzajDekl, _KodForm;	
		
		SET @eVAT.Content = '';
		SET @xml.IC = 1;
		
		SET @eVAT.Content = '<?xml version="1.0" encoding="UTF-8" ?>\n';
		
		SET @eVAT.Content = CONCAT(@eVAT.Content, '<tns:Deklaracja xmlns:tns="', @eVAT._e_Doc_Def_ID, '" ');
		-- SET @eVAT.Content = CONCAT(@eVAT.Content, '<tns:Deklaracja xmlns:etd="http://crd.gov.pl/xml/schematy/dziedzinowe/mf/2011/06/21/eD/DefinicjeTypy/" ');
		IF _Year >= 2017 THEN
			SET cDefTypySchema = 'xmlns:etd="http://crd.gov.pl/xml/schematy/dziedzinowe/mf/2016/01/25/eD/DefinicjeTypy/">';
		END IF;
		SET @eVAT.Content = CONCAT(@eVAT.Content, cDefTypySchema, '\n');		
		
		-- <Naglowek> 
		CALL e_dekl_vatUE_tools('xml.insert.header', '', '', _RecGUID, @tmp.VAT, '', '', '');
		--  </Naglowek> 
		SET @eVAT_header = @eVAT.Content;
			
		-- sekcja danych podatnika  (na formularzu: sekcja B)
		CALL e_dekl_vatUE_tools('xml.insert.podmiot1', '', '', '', @P1.xml, '', '', '');
					    			
		SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), '<tns:PozycjeSzczegolowe>\n');
		    SET @xml.IC = @xml.IC + 1;
			
			-- DLA 1. deklaracji:'xml.ins.poz';  dla korekt: 'xml.ins.poz.kor'
			SET @eVAT._mode = 'xml.ins.poz';
			IF _KodForm = 'VAT-UEK' THEN
				SET @eVAT._mode = CONCAT(@eVAT._mode, '.kor');
			END IF;
							
			SET @_Grupa = 1;  
			WHILE (@_Grupa <= 3) DO
				CALL e_dekl_vatUE_tools(@eVAT._mode, '', '', _RecGUID, @tmp.VAT, '', '', '');	
				SET @_Grupa = @_Grupa + 1;  
			END WHILE;
			
									
			SET @xml.IC = @xml.IC - 1;	
		SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), '</tns:PozycjeSzczegolowe>\n');
		IF 	_Year < 2017 THEN
			SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), '<tns:Pouczenie>Za podanie nieprawdy lub zatajenie prawdy grozi odpowiedzialność przewidziana w Kodeksie karnym skarbowym.</tns:Pouczenie>\n');
		ELSE
			SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), '<tns:Pouczenie>1</tns:Pouczenie>\n');	
		END IF;	
		SET @xml.IC = @xml.IC - 1;	 
		SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), '</tns:Deklaracja>');
		
					
		SET _RepContent = @eVAT.Content;		
		SELECT IFNULL(@eVAT.Content, '') AS _RepContent;
		
		-- teraz kluczowa sprawa - wstawienie wygenerowanego XMLa do e_doc
		SET _IDN = _varINT(_Param_A);
		CALL e_doc_tools('e_doc_po.insert.or.edit', _IDN, IFNULL(@eVAT.Content, ''), 'CREATE_XML', 'ORYG', '', '', '', '');
		
	
	END IF; 	-- _MODE = 'vatUE.xml.create'

	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'xml.ins.poz.kor'  
	Pozycje korekty deklaracji 
	
	Parametry
		_MODE		  Tryb pracy			 
		INOUT _RecGUID     GUID  rekordu
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/				
	
	IF _MODE = 'xml.ins.poz.kor' THEN
	BEGIN	
      	DECLARE _koryg INTEGER;
		DECLARE _kontrGUID  VARCHAR(38);	
				
		DECLARE _c_kontrah CURSOR FOR	-- wiersze deklaracji (sa pogrupowane po kontrahencie) 	w ramach danej sekcji (C,D,E)	
		SELECT  
			DISTINCT kontrGUID -- id_VAT_kontrah
		FROM 
			ht_dekl_vat_ue_poz
		WHERE deklGUID = _RecGUID AND grupa = @_Grupa
		;	
		
		
		DECLARE _c_wiersz_sekcji CURSOR FOR			
		SELECT  
			kod_kraju, id_VAT_kontrah, kwota, trojstronna, koryg
		FROM 
			ht_dekl_vat_ue_poz
		WHERE deklGUID = _RecGUID AND grupa = @_Grupa AND kontrGUID = _kontrGUID  	-- id_VAT_kontrah = _id_VAT_kontrah
		ORDER BY koryg 
		LIMIT 2  -- jest albo jeden rekord (koryg = 1) albo dwa (koryg = 0, 1)
		;
						
						
		SELECT COUNT(*) 
		FROM ht_dekl_vat_ue_poz WHERE deklGUID = _RecGUID AND grupa = @_Grupa
		INTO _Jest;
		
		/*  <tns:Grupa1>
		  <tns:P_Da>BE</tns:P_Da>
		  <tns:P_Db>125874</tns:P_Db>
		  <tns:P_Dc>12</tns:P_Dc>
		  <tns:P_Dd>2</tns:P_Dd>
		  </tns:Grupa1>  */
		
		IF _Jest > 0 THEN
				
			CASE @_Grupa
				WHEN 1 THEN SET @_pre = 'tns:P_D';
				WHEN 2 THEN SET @_pre = 'tns:P_N';
				WHEN 3 THEN SET @_pre = 'tns:P_U';
			END CASE;	
				
			OPEN _c_kontrah;
			loop_sekcja: LOOP 
				FETCH 
					_c_kontrah
				INTO 	
					_kontrGUID; -- _id_VAT_kontrah;
				IF _done THEN
					LEAVE loop_sekcja;  
				ELSE
					SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), CONCAT('<tns:Grupa', @_Grupa, '>\n'));  -- <tns:Grupa1>				    
					SET @xml.IC = @xml.IC + 1;	 
					-- jedna sekcja to jeden ('jest') lub dwa wiersze ('bylo', 'jest') 
				    OPEN _c_wiersz_sekcji;  
					SET @wiersz.lp = 0;
					loop_wiersze: LOOP
						FETCH 
							_c_wiersz_sekcji
						INTO 
							_kod_kraju, _id_VAT_kontrah, _kwota_transakcji,  _trojstronna, _koryg;
						IF _done THEN
							SET @xml.IC = @xml.IC - 1;	 
						    SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), CONCAT('</tns:Grupa', @_Grupa, '>\n'));  -- </tns:Grupa1>
							LEAVE loop_wiersze;  
						ELSE
						    SET @wiersz.lp = @wiersz.lp +1;
							SET _pre = CONCAT(@_pre, IF(_koryg = 1, 'J', 'B') );  
							SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), '<', _pre, 'a>', _kod_kraju, '</', _pre, 'a>\n');																		
							SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), '<', _pre, 'b>', _id_VAT_kontrah, '</', _pre, 'b>\n');
							SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), '<', _pre, 'c>', _kwota_transakcji, '</', _pre, 'c>\n');
							IF @_Grupa < 3 THEN  -- dla grupy 3 (sekcja E na wydruku) ponizsze pole nie wystepuje
								SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), '<', _pre, 'd>', _trojstronna, '</', _pre, 'd>\n');	-- 1: nie dotyczy; 2: dotyczy 																							
							END IF;		
						END IF;
						-- SET _done = FALSE;  	
					END LOOP loop_wiersze;						
				--	SET @xml.IC = @xml.IC - 1;	 
				--	SET @eVAT.Content = CONCAT(@eVAT.Content, SPACE(@xml.IC*cSL), CONCAT('</tns:Grupa', @_Grupa, '>\n'));  -- </tns:Grupa1>
					SET _done = FALSE;  
				END IF;	
			
			END LOOP;
			CLOSE _c_kontrah;
		END IF; -- _Jest > 0 THEN
  	
	END;
	END IF;  -- IF _MODE = 'xml.ins.poz.kor' THEN

	
	
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'vatUE.poz.select'
		Pobranie danych do okna edycyjnego deklaracji VAT UE
		Parametry
		_MODE			Tryb pracy		
		INOUT _RecGUID     GUID tworzonego rekordu		- tylko ten parametr jest tu używany
				
		CALL e_dekl_vat_tools('vatUE.poz.select', '', '', 'VAT_UE_2013_6', @_eDeklContent, '', '');
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/		

	IF _MODE = 'vatUE.poz.select' THEN
						
		SELECT 
		-- 'wenwątrzwspólnotowych dostawach towarów' 
		-- 'wenwątrzwspólnotowych nabyciach towarów' 	
		--  'wenwątrzwspólnotowym świadczeniu usług' 
		   p.GUID, p.deklGUID,  -- p.grupa, 
		   /* (CASE p.grupa WHEN 1 THEN 	1 		
		              WHEN  2 THEN 	2		
					  WHEN  3 THEN 	3 		
		   END) AS grupa,   -- lub CASE p.grupa ... END 1 - Dostawa (sekcja C), 2 - Nabycie (D), 3 - Uslugi (E)  */
		   p.grupa,
		   p.kod_kraju, p.id_VAT_kontrah, p.kwota, p.trojstronna 
		FROM 
			ht_dekl_vat_ue_poz p
		WHERE deklGUID = _RecGUID
		ORDER BY grupa;
								
	END IF; 	-- _MODE = 'vatUE.poz.select'
	
	/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
	'vatUE.poz.select'
		Pobranie danych do okna edycyjnego deklaracji VAT UE
		Parametry
		_MODE			Tryb pracy		
		INOUT _RecGUID     GUID tworzonego rekordu		- tylko ten parametr jest tu używany
				
		CALL e_dekl_vat_tools('vatUE.poz.select', '', '', 'VAT_UE_2013_6', @_eDeklContent, '', '');
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/		

	IF _MODE = 'vatUE.kor.poz.select' THEN
						
		SELECT 		
		   p.GUID, p.deklGUID, p.grupa, p.koryg,		  		  
		   p.kod_kraju, p.id_VAT_kontrah, p.kwota, p.trojstronna 
		FROM 
			ht_dekl_vat_ue_poz p
		WHERE deklGUID = _RecGUID
		ORDER BY grupa, koryg;
								
	END IF; 	-- _MODE = 'vatUE.poz.select'
	

END$$

DELIMITER ;