DELIMITER $$


/* ************************************************************************************************************************************************************************
	INT->infoPiek
************************************************************************************************************************************************************************ */	

DROP PROCEDURE IF EXISTS `Int_2_infoPiek`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `Int_2_infoPiek`(
	IN _MODE VARCHAR(250),
	_ID_Sklepu VARCHAR(50),	
	_Param_A VARCHAR(50)	
	)
/*
	CALL Int_2_infoPiek('select.artykuly', '', '');
	CALL Int_2_infoPiek('select.grupy', '', '');
	CALL Int_2_infoPiek('select.grupy', _ID_Sklepu, '');
	CALL Int_2_infoPiek('select.pos.users', '', '');
	
	Zwracajaca tabele ARTYKULY dla wskazanego sklepu wraz z jego cenami.
	CALL _WELT_GET_ARTYKULY(@_ID_Sklepu);
	Zwracajaca grupy wyrobow
	CALL _WELT_GET_GRUPY_ART();
	
*/

S_Int_2_infoPiek: BEGIN

	IF _MODE = 'select.artykuly' THEN
		/* 
		JEST ...
		*/
		
		SET
			@_KlasaCenowa = IFNULL((SELECT k.klasacenowa FROM `kontrah` k WHERE k.magazyn_akwizytora = _ID_Sklepu LIMIT 1), 10)
		;
		DROP TEMPORARY TABLE IF EXISTS `t_Int_2_infoPiek_import_artykuly`;
		CREATE TEMPORARY TABLE `t_Int_2_infoPiek_import_artykuly`(
			idntowr VARCHAR(38) PRIMARY KEY,
			IdnCennik INTEGER,
			artyk_plu INTEGER,
			KEY IdnCennik(IdnCennik)
		);
		INSERT IGNORE INTO `t_Int_2_infoPiek_import_artykuly`
			SELECT 
				t.GUID AS IdnTowr,
				_VarInt(
				(SELECT c.IDN AS IdnCennik FROM `cennik` c WHERE c.IdnTowr = t.GUID AND c.CzyZakup = 0 AND c.Klasa = IF(t.katcol4 != 200, @_KlasaCenowa, 10) LIMIT 1) --	zastanowic sie nad konfiguracja tego prametru c.Klasa	
				) AS IdnCennik,
				_VarINT(IF(IFNULL(t.kod_fiskalny, '0') = '', 0, IFNULL(t.kod_fiskalny, '0'))) AS artyk_plu
			FROM `TowrNg` t
			WHERE
				TRUE
				-- AND t.promocja_status != 2 
				AND
				(
				(t.katcol3 = 1 AND t.kod_fiskalny != '')
				OR
				(t.katcol4 = 200 AND t.kod_fiskalny = '')
				)
			HAVING IdnCennik IS NOT NULL
		;
		
		SELECT 
			(NOT t.deleted AND (t.promocja_status != 2)) AS artyk_akt, -- czy pozycja jest aktywna ?
			t.IDN AS artyk_hex, -- id wyroby
			t.katcol4 AS artyk_gru, -- grupa wyrobow
			t.Nazwa AS artyk_naz, -- nazwa wyrobu
			t.kasafiskalnanazwa AS artyk_skr, -- nazwa skrocona wyrobu
			_VarDouble(100*IFNULL(v.Value, 0)) AS artyk_vat, -- stwka vat numerycznie
			SUBSTR(v.Name, 8, 6) AS artyk_vac, -- stawka vat tekstowo
			v.IDFiskalny AS artyk_vfi, -- symbol stawki na urzadzeniu fiskalnym
			j.Nazwa AS artyk_jed, -- jednostka sprzedazy, magazynowania
			_VarInt(j.precyzja != 0) AS artyk_pod, -- czy mozna sprzedawac czesci ulamkowe wyrobu 
			_VarInt(0) AS artyk_sor, -- sortowanie wlasne !!!? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
			_VarInt(0) AS artyk_pop, -- zawsze 0 
			
			_VarDOUBLE(_Rnd2(
				IF(_Param_A != 'zakup',
					IF(CURRENT_DATE BETWEEN IFNULL(c.waznoscod, '2012-01-01') AND IFNULL(c.waznoscdo, '2212-01-01') AND (IFNULL(c.waznoscod, c.waznoscdo) IS NOT NULL), 
						c.cena_promocyjna, 
						c.cena
					)*IF(kl.czy_ceny_brt, 1, 1+v.Value),
					t.cenazkpnet
				)
			)) AS artyk_cen, -- cena promocyjna
			
			_VarDOUBLE(_Rnd2(
				c.Cena *
				IF(kl.czy_ceny_brt, 1, 1+v.Value)
			)) AS artyk_ceb, -- cena brutto
		 -- 	c.Cena,(1+v.Value),
			t.kod_kreskowy1 AS artyk_kod, -- kod kreskowy
			_VarInt(0) AS artyk_typ, -- typ wyrobu 0 = pobrana z centrali 1=wpisany z reki 
			-- _VarInt(t.kod_fiskalny) AS artyk_plu, -- kod PLU  
			tt.artyk_plu,
			t.GUID AS ARTYK_GUID,
			t.waga, 
			IFNULL(t.sklad, '') AS sklad, 
			t.dni_waznosci
		FROM `t_Int_2_infoPiek_import_artykuly` tt
		INNER JOIN `TowrNg` t ON t.GUID = tt.IdnTowr
		INNER JOIN `v_erp_vat` v ON v.ID = t.vat AND NOT not_Used
		LEFT JOIN `Jednostki` j ON j.IDN = t.jednostka
		INNER JOIN `cennik` c ON c.Idn = tt.IdnCennik
		LEFT JOIN `klasycen` kl ON kl.IDN = c.Klasa
		WHERE
			TRUE
		;
		DROP TEMPORARY TABLE IF EXISTS `t_Int_2_infoPiek_import_artykuly`;
		/*
		BYŁO
		SELECT 
			(NOT t.deleted AND (t.promocja_status != 2)) AS artyk_akt, -- czy pozycja jest aktywna ?
			t.IDN AS artyk_hex, -- id wyroby
			t.katcol4 AS artyk_gru, -- grupa wyrobow
			t.Nazwa AS artyk_naz, -- nazwa wyrobu
			t.kasafiskalnanazwa AS artyk_skr, -- nazwa skrocona wyrobu
			_VarDouble(100*IFNULL(v.Value, 0)) AS artyk_vat, -- stwka vat numerycznie
			SUBSTR(v.Name, 8, 6) AS artyk_vac, -- stawka vat tekstowo
			v.IDFiskalny AS artyk_vfi, -- symbol stawki na urzadzeniu fiskalnym
			j.Nazwa AS artyk_jed, -- jednostka sprzedazy, magazynowania
			_VarInt(j.precyzja != 0) AS artyk_pod, -- czy mozna sprzedawac czesci ulamkowe wyrobu 
			_VarInt(0) AS artyk_sor, -- sortowanie wlasne !!!? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
			_VarInt(0) AS artyk_pop, -- zawsze 0 
			
			_VarDOUBLE(_Rnd2(
				IF(CURRENT_DATE BETWEEN IFNULL(c.waznoscod, '2012-01-01') AND IFNULL(c.waznoscdo, '2212-01-01') AND (IFNULL(c.waznoscod, c.waznoscdo) IS NOT NULL), 
					c.cena_promocyjna, 
					c.cena
				)*
				IF(kl.czy_ceny_brt, 1, 1+v.Value)
			)) AS artyk_cen, -- cena promocyjna
			
			_VarDOUBLE(_Rnd2(
				c.Cena *
				IF(kl.czy_ceny_brt, 1, 1+v.Value)
			)) AS artyk_ceb, -- cena brutto
		 -- 	c.Cena,(1+v.Value),
			t.kod_kreskowy1 AS artyk_kod, -- kod kreskowy
			_VarInt(0) AS artyk_typ, -- typ wyrobu 0 = pobrana z centrali 1=wpisany z reki 
			_VarInt(t.kod_fiskalny) AS artyk_plu, -- kod PLU  
			t.GUID AS ARTYK_GUID
		FROM `TowrNg` t
		INNER JOIN `v_erp_vat` v ON v.ID = t.vat AND NOT not_Used
		LEFT JOIN `Jednostki` j ON j.IDN = t.jednostka
		INNER JOIN `cennik` c ON c.IdnTowr = t.GUID AND c.CzyZakup = 0 AND c.Klasa = 10	--	zastanowic sie nad konfiguracja tego prametru c.Klasa
		LEFT JOIN `klasycen` kl ON kl.IDN = c.Klasa
		WHERE
			TRUE
			-- AND t.promocja_status != 2 
			AND t.katcol3 = 1
			AND (t.kod_fiskalny != '')
		;
		*/
	END IF;		--	_MODE = 'select.artykuly'

	IF _MODE = 'select.grupy' THEN
		
		SELECT
			t.katcol4 AS artg_hex, -- id grupy wyrobow
			k.valuex AS artg_naz, -- nazwa grupy
			_VarInt(0) AS artg_sor, -- sortowanie !!!? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
			_VarInt(1) AS artd_akt, -- czy grupa aktywna ?
			_VarInt(0) AS artg_typ -- typ grupy 0=pobrana z centrali 1=pobrana z reki
		FROM `TowrNg` t
		INNER JOIN `katcols` k ON k.Typ = 1 AND k.Colnr = 5 AND k.Klucz = t.katcol4
		WHERE
			TRUE
			AND t.promocja_status != 2 
		GROUP BY artg_hex
		;
		
	END IF;		--	_MODE = 'select.grupy'
	
	IF _MODE = 'select.pos.users' THEN

		SELECT 
			o.IDN AS ID, 
			o.idnUser AS Nazwa, 
			_VarStr(CONCAT(o.Nazwisko, ' ', o.Imiona)) AS NazwiskoImiona, 
			_VarStr(IF(o.editinfo = '', o.IDN, o.editinfo)) AS Haslo,
			_VarInt(eh.Status = 0) AS Aktywny,
			-- c.ID AS Card_ID
			IFNULL(c.ID,'') AS Card_ID
		FROM `erp_area_nodes_hr` eh
		INNER JOIN `osoby` o ON o.GUID = eh.osobaGUID
		-- LEFT JOIN `hr_cards` c ON c.OsobaGUID = eh.osobaGUID AND c.kind = 'RAB' AND c.STATUS = 0 AND c.res_type = 'HR'
		LEFT JOIN `hr_cards` c ON c.OsobaGUID = eh.osobaGUID AND c.kind = 'RCP' AND c.STATUS = 0 AND c.res_type = 'HR'
		WHERE
			TRUE
			-- AND eh.Status = 0
		GROUP BY o.IDN
		-- GROUP BY ID
		ORDER BY o.IDN
		;
		
	END IF;		--	_MODE = 'select.pos.users'
	
	IF _MODE = 'select.pos.sklepy' THEN

		SELECT 
			-- n.IDN AS ID, 
			m.IdnMagazynu AS ID, 
			n.Nazwa AS Sklep_Nazwa, n.Symbol AS Sklep_Symbol,
			m.IdnMagazynu,
			m.Opis AS Magazyn_Opis,
			_VarInt(1) AS Aktywny
		FROM `erp_area_nodes_hr` eh
		INNER JOIN `erp_area_nodes` n ON n.GUID = eh.areaGUID
		INNER JOIN `Magazyny` m ON m.AreaGUID = n.GUID
		WHERE
			TRUE
			AND n.Symbol > '000'
		GROUP BY ID
		ORDER BY ID
		;
	END IF;		--	_MODE = 'select.pos.sklepy'
	
END$$


/* ************************************************************************************************************************************************************************
	infoPiek->INT
************************************************************************************************************************************************************************ */	

DROP PROCEDURE IF EXISTS `infoPiek_2_Int`$$

DROP PROCEDURE IF EXISTS `infpiek_int_Tools`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `infpiek_int_Tools`(
	IN _MODE VARCHAR(250),
	_Param_A VARCHAR(50),	
	_Param_B VARCHAR(50)	
	)
/*
	CALL infpiek_int_Tools('set.Status', IDnaglowka, 'F');
	
	1. jako CALL _POS_INT_2_POS('set.Status', _IDOK, 'F');
	2. CALL _POS_POS_2_INT('refresh.one.rec
	
*/
S_infpiek_int_Tools: BEGIN
	
	IF _MODE = 'set.Status' THEN
		UPDATE `infpiek_int_ng`
		SET
			INT_Status = _Param_B
		WHERE
			DOWN_HEX = _Param_A
		;
	END IF;		-- 	'set.Status'
	
END$$


/* ************************************************************************************************************************************************************************
	INT_2_POS
************************************************************************************************************************************************************************ */	

DROP PROCEDURE IF EXISTS `_POS_INT_2_POS`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `_POS_INT_2_POS`(
	IN _MODE VARCHAR(250),
	_IDOK VARCHAR(50),	
	_Param_A VARCHAR(50)	
	)
/*
	HT tylko!!!
	CALL _POS_INT_2_POS('get.ng', '', '');
	CALL _POS_INT_2_POS('get.po', _IDOK, '');
		CALL _POS_INT_2_POS('set.Status', _IDOK, 'F');
	dla INT
		CALL _POS_INT_2_POS('refresh.PZ', '', '3');		--	w _Param_A ile dni wstecz
	
*/

S_POS_INT_2_POS: BEGIN
	DECLARE _IS_USED_LOCK BOOLEAN DEFAULT FALSE;
	DECLARE _Process, _LOCK_infopiek VARCHAR(250);
	DECLARE _Ile_Dni_Wstecz INTEGER DEFAULT 1;
	
	IF SCHEMA() != 'ht' AND SCHEMA() != 'httest' THEN LEAVE S_POS_INT_2_POS; END IF;	
	
	IF _MODE = 'get.ng' THEN
		SELECT
			tn.*
		FROM `infpiek_int_ng` tn
		WHERE
			tn.INT_Dir_Status = 'zINT'
			AND
			tn.DOWN_TYP = '9'	-- 9 ????
			AND
			tn.INT_Status = ''	-- nie przetworzone
		;
	END IF;		-- 	'get.ng'
	
	IF _MODE = 'get.po' THEN
		/*
		Najpierw wstaw pozycje - wstawiamy dopiero w tej procedurze bo byc może PZ-ka bedzie poprawiana
		*/
		INSERT IGNORE INTO `infpiek_int_po`
		(WYRO_HEX, WYRO_PLU, DOWN_HEX, DOWP_ILE, DOWP_RAB, DOWP_BRU, OPIS_TXT, INT_GUID, INT_IDNVAT, ARTYK_GUID)
		SELECT
			t.Idn AS WYRO_HEX,
			_VarInt(t.kod_fiskalny) AS WYRO_PLU,
			tn.DOWN_HEX AS DOWN_HEX,
			p.Ilosc AS DOWP_ILE,
			p.Rabat AS DOWP_RAB,
			p.CenaBrt AS DOWP_BRU,
			p.towrnazwa AS OPIS_TXT,
			p.GUID AS INT_GUID,
			p.IdnVat AS INT_IDNVAT,
			p.IdnTowr AS ARTYK_GUID
		FROM `infpiek_int_ng` tn
		INNER JOIN `opng` n ON n.GUID = tn.INT_GUID
		INNER JOIN `oppo` p ON p.IdnOper = n.GUID
		INNER JOIN `TowrNg` t ON t.GUID = p.IdnTowr
		WHERE
			tn.DOWN_HEX = _IDOK
		ON DUPLICATE KEY UPDATE
			DOWP_ILE = p.ILosc,
			DOWN_HEX = tn.DOWN_HEX
		;

		/*
		... i SELECT
		*/
		SELECT
			tp.*
		FROM `infpiek_int_po` tp
		WHERE
			tp.DOWN_HEX = _IDOK
		;
	END IF;		-- 	'get.po'
	
	IF _MODE = 'set.Status' THEN
		CALL infpiek_int_Tools('set.Status', _IDOK, _Param_A);
	END IF;		-- 	'set.Status'

	IF _MODE = 'refresh.PZ' THEN
	/*******************************************************************************************************************************
		PZ-ki do `infpiek_int_ng`
	*******************************************************************************************************************************/
	/*
		SET 
			_Process = CONCAT(" _POS_INT_2_POS / refresh.PZ", ''),
			_LOCK_infopiek = CONCAT('infopiek_', SCHEMA())
		;
				SET @_LOCK_infopiek = _LOCK_infopiek;
		CALL _erp_external_process_log_tools('Insert', _Process, 'Info_piek', 'Start przetw', 0, '', '');
		CALL _erp_external_process_log_tools('Insert', _Process, 'Info_piek', 'GET_LOCK(...)', 0, '', '');
		SET _IS_USED_LOCK = (IFNULL(IS_USED_LOCK(_LOCK_infopiek), 0) > 0);	--	zwraca connection ID (wtedy _IS_USED_LOCK = TRUE) lub 0 (null) i wtedy jest OK (wtedy _IS_USED_LOCK = FALSE)
		SET @_IS_USED_LOCK = _IS_USED_LOCK;
		IF NOT _IS_USED_LOCK THEN
			SET _IS_USED_LOCK = (IFNULL(GET_LOCK(_LOCK_infopiek, 0), 0) = 0);	--	zwraca connection 0 (wtedy _IS_USED_LOCK = TRUE) lub 1 i wtedy jest OK (wtedy _IS_USED_LOCK = FALSE)
			SET @_IS_USED_LOCK = _IS_USED_LOCK;
		END IF;
		IF _IS_USED_LOCK THEN
			CALL _erp_external_process_log_tools('Insert', _Process, 'Info_piek', 'zablokowany proces (IS_USED_LOCK)', 1, '', '');
			CALL _erp_external_process_log_tools('Insert', _Process, 'Info_piek', 'Koniec przetw', 0, '', '');
			LEAVE S_POS_INT_2_POS;
		END IF;

		CALL _Globals_Set(_Process, NOW());
	*/
	
		CALL _Session_Refresh_Variables('', '', '');
		IF _Param_A != '' THEN
			SET _Ile_Dni_Wstecz = _Param_A;
		END IF;
		
		DROP TEMPORARY TABLE IF EXISTS `t_infpiek_int_PZ`;
		CREATE TEMPORARY TABLE  `t_infpiek_int_PZ` LIKE `opng_e`;
		INSERT IGNORE INTO `t_infpiek_int_PZ`
		-- CREATE TEMPORARY TABLE  `t_infpiek_int_PZ`
			SELECT
				n.*
			FROM `opng` n
			LEFT JOIN `infpiek_int_ng` tn ON tn.INT_GUID = n.GUID 
			WHERE
				n.rodzaj = 12
				AND
				n.Status < @COPNG_Status_ZREALIZOWANA 	-- @COPNG_Status_ZREALIZOWANA = 2
				AND
				n.LocalTime > DATE_ADD(NOW(), INTERVAL -_Ile_Dni_Wstecz DAY)
				AND
				IFNULL(tn.INT_Status, '') = ''	--	GDY jest rekord w `infpiek_int_ng` (czyli nie NULL) i INT_Status jest 'F' czyli zakonczono TO NIE POBIERAJ
				AND
				NOT(n.GUID LIKE 'WZ_z_PPT%')
				AND 
				n.domagazynu BETWEEN 201 AND 299
		;
	
		INSERT IGNORE INTO `infpiek_int_ng`
		(DOWN_TYP, DOWN_DAT, DOWN_NUM, DOWN_NET, DOWN_BRU, FAKT_HEX, FAKT_DAT, FAKT_NUM, DOWN_DOS, DOWN_KTO, INT_Status, INT_Dir_Status, INT_UserGUID, INT_GUID, KONT_HEX)
		SELECT
			'9' AS DOWN_TYP, 
			n.DataWplywu AS DOWN_DAT, 
			n.NrDokMag AS DOWN_NUM, 
			n.Netto AS DOWN_NET, n.Brutto AS DOWN_BRU, 
			n.Idn AS FAKT_HEX, n.DataWystaw AS FAKT_DAT, n.nrDokFin AS FAKT_NUM, 
			0 AS DOWN_DOS, 
			0 AS DOWN_KTO, 
			'' AS INT_Status, 
			'zINT' AS INT_Dir_Status, 
			n.OsobaGUID AS INT_UserGUID, 
			n.GUID AS INT_GUID,
			n.DoMagazynu AS KONT_HEX
		FROM `t_infpiek_int_PZ` n
		WHERE
			TRUE
		
		;
	
		DROP TEMPORARY TABLE IF EXISTS `t_infpiek_int_PZ`;
		CALL _Globals_Set(" _POS_INT_2_POS / refresh.PZ", NOW());
		/*
		-- CALL _Globals_Set("CALL _POS_INT_2_POS('refresh.PZ', '', '3');", NOW());
		SET @_RELEASE_LOCK = RELEASE_LOCK(_LOCK_infopiek);
		CALL _erp_external_process_log_tools('Insert', _Process, 'Info_piek', 'RELEASE_LOCK(...)', 0, '', '');
		CALL _erp_external_process_log_tools('Insert', _Process, 'Info_piek', 'Koniec przetw', 0, '', '');
		*/
	END IF;		-- 	'refresh.PZ'
	
	
END$$

GRANT EXECUTE ON PROCEDURE _POS_INT_2_POS TO pos $$
GRANT EXECUTE ON PROCEDURE _POS_INT_2_POS TO pos@'%' $$

/* ************************************************************************************************************************************************************************
	POS_2_INT
************************************************************************************************************************************************************************ */	

		DROP PROCEDURE IF EXISTS `_POS_E_NG`$$
		CREATE DEFINER=`root`@`localhost` PROCEDURE `_POS_E_NG`(
			IN _MODE VARCHAR(250),
			_IDOK VARCHAR(50),	
			_DOWN_TYP VARCHAR(38),
			_IdnOper VARCHAR(38), 
			_Rodzaj INTEGER,
			_KontrGUID VARCHAR(38),
			_ZMagazynu INTEGER,
			_DoMagazynu INTEGER,
			_INT_Dir_Status VARCHAR(50),
			_Param_A VARCHAR(50)	
			)
		/*
			CALL _POS_E_NG('OP.Create.ng', _IDOK, _DOWN_TYP, _IdnOper, _Rodzaj, _KontrGUID, _ZMagazynu, _DoMagazynu, _INT_Dir_Status, '');
		*/

		S_POS_E_NG: BEGIN
			DECLARE _IS_MM BOOLEAN DEFAULT FALSE;
			
			SET @Rodzaj = _Rodzaj;
			
			IF _MODE = 'OP.Create.ng' THEN
				CALL Opng_E_init('INSERT', _IdnOper, 'jmam_alg', '1', 'Server'); 	-- _Param_A jest tu != '' aby nie wywoływać selecta wewn. innej proc. _ng_e_rec_init
				
				CALL Opng_E_init_set('', _IdnOper, @Rodzaj, 0, '', '3', _KontrGUID, _ZMagazynu, _DoMagazynu, 0, 0, '', '', '', 0, '', '', '');
				CALL Opng_E_Run('before.run', _IdnOper, '', '', '');
				CALL Opng_E_Run('', _IdnOper, '', '', '');
				CALL Opng_E_Run('after.run', _IdnOper, '', '', '');
			
				UPDATE	`opng_e` n, `infpiek_int_ng` dn
				SET
					n.NrDokFin = CONCAT(LPAD(_ZMagazynu, 3, '0'), '/', dn.DOWN_NUM, '/', YEAR(dn.DOWN_DAT)),
					-- ???? n.przeliczenie_B_N = 1,
					-- n.paragon_printed = 1,
					n.Datawystaw = IF(dn.DOWN_DAT = '0000-00-00', CURRENT_DATE(), dn.DOWN_DAT),
					n.DataSprzed = IF(dn.DOWN_DAT = '0000-00-00', CURRENT_DATE(), dn.DOWN_DAT),
					n.DataWplywu = IF(dn.DOWN_DAT = '0000-00-00', CURRENT_DATE(), dn.DOWN_DAT),
					-- n.remotetime = dn.IDOK_TIM,
					-- n.id_kasy_fis = dn.IDOK_LIC,
					n.AreaGUID = (SELECT m.AreaGUID FROM Magazyny m WHERE m.IdnMagazynu = _ZMagazynu LIMIT 1),
					n.osobaGUID = (SELECT o.GUID FROM `osoby` o WHERE o.IDN = dn.DOWN_KTO LIMIT 1),
					n.ugrpGUID = 'ALL',
					n.opis = dn.DOWN_OPI
				WHERE
					dn.DOWN_HEX = _IDOK
					AND
					n.GUID = _IdnOper
				;
				/*
				UPDATE	`opng_e` n, `erp_area_nodes` an
				SET
					n.opis = CONCAT('Paragon fisk. z urz.: ', n.id_kasy_fis, ' w : ', an.Nazwa, ' (', n.remotetime, ')')
				WHERE
					n.GUID = _IdnOper
					AND
					an.GUID = n.AreaGUID
				;
				*/
				UPDATE	`opng_e` n, `osoby` o
				SET
					n.idnuser = o.idnuser,
					n.opis = CONCAT(n.opis, ' wyst.: ', o.Nazwisko, ' ', o.Imiona)
				WHERE
					n.GUID = _IdnOper
					AND
					o.GUID = n.osobaGUID
				;
			END IF;		-- 	'OP.Create.ng'
			
			IF _MODE = 'OP.Create.po' THEN
			--	 Operacje
				
SET @_POS_POS_2_INT = "PRZED CALL _POS_E_NG('temp.t_infpiek_dok_po_insert', _IDOK";										
				SET _IS_MM = IFNULL(_Param_A, '') != '';
				IF !_IS_MM THEN
					CALL _POS_E_NG('temp.t_infpiek_dok_po_insert', _IDOK, _DOWN_TYP, _IdnOper, _Rodzaj, _KontrGUID, _ZMagazynu, _DoMagazynu, _INT_Dir_Status, '');
				END IF;
				
SET @_POS_POS_2_INT = "PRZED INSERT IGNORE INTO `oppo_e` ";										
				IF _Rodzaj != @ht.CInwn THEN
				--	NORMALNY DOKUMENT - NIE INWENTARYZACJA
					INSERT IGNORE INTO `oppo_e` 
					(GUID, IdnOper, IdnTowr, Ilosc, CenaBrt, rabat, /* rodzaj_przeliczenia,*/ IdnVat, Info)
						SELECT
							IF(_IS_MM, MD5(dp.GUID), dp.GUID),
							_IdnOper, -- bylo dp.IdnOper,   ale przeciez na dla zwrotu powstaje potem MM-ka a ona ma inny IdnOper
							dp.IdnTowr,
							IF(_Rodzaj IN (@ht.CMGZW), -ABS(dp.Ilosc), ABS(dp.Ilosc)),
							dp.CenaBrt,
							dp.rabat,
							-- ??? dp.rodzaj_przeliczenia, 	-- Brutto z ceny brutto
							dp.IdnVat,
							CONCAT(_Param_A, ' Rodzaj:', _Rodzaj, ', ilosc:', IF(_Rodzaj IN (@ht.CMGZW), -ABS(dp.Ilosc), ABS(dp.Ilosc)), ', z mag:', _ZMagazynu, ', do mag:', _DoMagazynu)
						FROM `t_infpiek_dok_po_insert` dp
						-- INNER JOIN `TowrNg` t ON t.GUID = dp.IdnTowr !!!!!
						ORDER BY dp.TowrSymbol
					ON DUPLICATE KEY UPDATE
						`oppo_e`.IdnTowr = dp.IdnTowr,
						`oppo_e`.Ilosc = IF(_Rodzaj IN (@ht.CMGZW), -ABS(dp.Ilosc), ABS(dp.Ilosc))
					;
				ELSE
				--	INWENTARYZACJA
SET @_POS_POS_2_INT = "SELECT IFNULL(MAX(DataWplywu), '2001-01-01') AS DataWplywu FROM oppo WHERE Rodzaj = 51 INTO @_DataBO;";						
					SELECT DATE(IFNULL(MAX(DataWplywu), '2001-01-01')) AS DataWplywu FROM oppo WHERE Rodzaj = 51 INTO @_DataBO;
					SELECT DOWN_DAT AS DOWN_DAT FROM `infpiek_int_ng` dn WHERE dn.DOWN_HEX = _IDOK INTO @_DataINW;
					
				
					DROP TEMPORARY TABLE IF EXISTS `t_inwentaryzacja_stan_na_dzien`;
					CREATE TEMPORARY TABLE `t_inwentaryzacja_stan_na_dzien`(
						idntowr VARCHAR(38) PRIMARY KEY,
						iloscbylo DECIMAL(16,6),
						iloscjest DECIMAL(16,6)
					);
					
					INSERT IGNORE INTO `t_inwentaryzacja_stan_na_dzien`
						SELECT 
							o.idntowr, 
							-- SUM(IFNULL(o.ilosc, 0)) AS iloscbylo 
							SUM(IFNULL(o.ilosc, 0)) AS iloscbylo,
							SUM(IFNULL(o.ilosc, 0)) AS iloscjest 
						FROM `oppo_mag` o 
						WHERE 
							o.datawplywu BETWEEN @_DataBO AND @_DataINW
							AND o.tymczasowa = 0 
							AND (o.magazyn=_DoMagazynu) 
						GROUP BY o.idntowr 
					;
					
					INSERT IGNORE INTO `t_inwentaryzacja_stan_na_dzien`
					(IdnTowr, iloscbylo, iloscjest)
						SELECT
							dp.IdnTowr,
							0,
							dp.Ilosc
						FROM `t_infpiek_dok_po_insert` dp
					ON DUPLICATE KEY UPDATE
						`t_inwentaryzacja_stan_na_dzien`.iloscjest = dp.Ilosc
					;
					
SET @_POS_POS_2_INT = "INSERT IGNORE INTO `oppo_e` ";						
					INSERT IGNORE INTO `oppo_e` 
					(GUID, IdnOper, IdnTowr, iloscbylo, iloscjest, CenaBrt, rabat, Info)
						SELECT
							NEWGUID(),
							@IdnOper, -- bylo dp.IdnOper,   ale przeciez na dla zwrotu powstaje potem MM-ka a ona ma inny IdnOper
							t.IdnTowr,
							t.iloscbylo,
							t.iloscjest,
							0,
							0,
							''
						FROM `t_inwentaryzacja_stan_na_dzien` t
					;
					DROP TEMPORARY TABLE IF EXISTS `t_inwentaryzacja_stan_na_dzien`;
					
					/*
					UPDATE `oppo_e` p, `t_infpiek_dok_po_insert` dp
					SET
						p.GUID = dp.GUID,
						p.iloscjest = dp.Ilosc,
						-- p.ilosc = -1,
						p.Tymczasowa = 1
					WHERE
						p.IdnOper = @IdnOper
						AND
						p.IdnTowr = dp.IdnTowr
					;
					*/

		-- LEAVE S_POS_E_NG;
					
				END IF; 	--	INWENTARYZACJA

SET @_POS_POS_2_INT = "CALL oppo_E_Let_Update('from_opng_e', '', _IdnOper, '', ''); ";										
				
				CALL oppo_E_Let_Update('from_opng_e', '', _IdnOper, '', '');
				--	IdnVat TRACĘ w triggerze `oppo_e` po wstawieniu IdnTowr - zatem raz jeszcze go wstawiam
				
SET @_POS_POS_2_INT = "UPDATE `oppo_e` p, `t_infpiek_dok_po_insert` dp";										
				UPDATE `oppo_e` p, `t_infpiek_dok_po_insert` dp
				SET
					p.IdnVat = dp.IdnVat
				WHERE
					p.GUID = dp.GUID
				;

					-- CALL oppo_E_Let_Update('one_rec', _GUID, '', '', '');
				
SET @_POS_POS_2_INT = "CALL opng_E_Let('Post', _IdnOper, '', ''); ";						
				CALL opng_E_Let('Post', _IdnOper, '', '');
				-- CALL ng_vat_e_build_from_po('', 'OP', _IdnOper, '', '');              Niepotrzebne wolane juz w opng_E_Let('Post', ...
				CALL _pozycje_cenyrabat_oppo_e('dla.IdnOper', _IdnOper, FALSE, FALSE, '', '');  --	ustaw ceny

				CALL opng_E_Let('Post', _IdnOper, '', '');
				
SET @_POS_POS_2_INT = "CALL opng_E_Let('ApplyAndClear', _IdnOper, '', '');";						
				CALL opng_E_Let('ApplyAndClear', _IdnOper, '', '');
				CALL opng_E_Let('Clear', _IdnOper, '', '');
				
			END IF;		-- 	'OP.Create.po'

			IF _MODE = 'ZM.Create.ng' THEN
				IF _INT_Dir_Status = 'PPT' THEN
				--	PPT
					CALL zmng_E_init('EDIT', _IdnOper, 'jmam_alg', '', 'Server');
				ELSE
				--	 ZAMOWIENIA
					CALL zmng_E_init('INSERT', _IdnOper, 'jmam_alg', '1', 'Server');
					CALL zmng_E_init_set('', _IdnOper, @Rodzaj, 0, '', '3', _KontrGUID, _ZMagazynu, 0, 0, 0, '', '', '', 0, '', '', '');
				END IF;
				
				CALL zmng_E_Run('before.run', _IdnOper, '', '', '');
				CALL zmng_E_Run('', _IdnOper, '', '', '');
				CALL zmng_E_Run('after.run', _IdnOper, '', '', '');
				
				IF _INT_Dir_Status != 'PPT' THEN
					UPDATE	`zmng_e` n, `infpiek_int_ng` dn
					SET
						n.nrzamw = CONCAT(LPAD(_ZMagazynu, 3, '0'), '/', dn.DOWN_NUM, '/', YEAR(dn.DOWN_DAT)),
						-- ??? n.przeliczenie_B_N = 1,
						n.Datawystaw = IF(dn.DOWN_DAT = '0000-00-00', CURRENT_DATE(), dn.DOWN_DAT),
						n.DataWplywu = IF(dn.DOWN_DAT = '0000-00-00', CURRENT_DATE(), dn.DOWN_DAT),
						n.TerminRealizacji = IF(dn.DOWN_TER = '0000-00-00', CURRENT_DATE(), dn.DOWN_TER),
						n.AreaGUID = (SELECT m.AreaGUID FROM Magazyny m WHERE m.IdnMagazynu = _ZMagazynu LIMIT 1),
						n.osobaGUID = (SELECT o.GUID FROM `osoby` o WHERE o.IDN = dn.DOWN_KTO LIMIT 1),
						n.ugrpGUID = 'ALL',
						n.transza_zamow = dn.DOWN_DOS --	Transza = DOWN_DOS
					WHERE
						dn.DOWN_HEX = _IDOK
						AND
						n.GUID = _IdnOper
					;
					UPDATE	`zmng_e` n, `infpiek_int_ng` dn
					SET
					--	bo czesem  Datawystaw zmienia termin realizacji w triggerze
						n.TerminRealizacji = IF(dn.DOWN_TER = '0000-00-00', CURRENT_DATE(), dn.DOWN_TER)
					WHERE
						dn.DOWN_HEX = _IDOK
						AND
						n.GUID = _IdnOper
					;
					UPDATE	`zmng_e` n, `osoby` o
					SET
						n.idnuser = o.idnuser,
						n.uwagi = CONCAT(n.uwagi, ' wyst.: ', o.Nazwisko, ' ', o.Imiona)
					WHERE
						n.GUID = _IdnOper
						AND
						o.GUID = n.osobaGUID
					;
					UPDATE	`zmng_e` n, `kontrah` k 
					SET
						n.KontrSymbol = k.Symbol,
						n.klasacenowa = k.klasacenowa
					WHERE
						n.GUID = _IdnOper
						AND
						k.GUID = n.KontrGUID
					;
				END IF;
			END IF;		-- 	'ZM.Create.ng'
			
			IF _MODE = 'ZM.Create.po' THEN
			--	 ZAMOWIENIA
				CALL _POS_E_NG('temp.t_infpiek_dok_po_insert', _IDOK, _DOWN_TYP, _IdnOper, @Rodzaj, _KontrGUID, _ZMagazynu, _DoMagazynu, _INT_Dir_Status, '');
SET @_POS_POS_2_INT = "INSERT IGNORE INTO `zmpo_e` ";		
				INSERT IGNORE INTO `zmpo_e` 
				(GUID, IdnNG, IdnTowr, Ilosc, CenaBrt, rabat, IdnVat, Uwagi, transza_zamow)
					SELECT
						dp.GUID,
						dp.IdnOper,
						dp.IdnTowr,
						IF(_INT_Dir_Status = 'PPT', dp.Ilosc_Potw, dp.Ilosc),
						dp.CenaBrt,
						dp.rabat,
						dp.IdnVat,
						dp.OPIS_TXT,
						IF(_DOWN_TYP = 'm', 9, dp.DOWN_DOS)		-- gdy zam. chemiczne to transza 9 = Zamwienia.Chemia
					FROM `t_infpiek_dok_po_insert` dp
					-- INNER JOIN `TowrNg` t ON t.GUID = dp.IdnTowr !!!
					ORDER BY dp.TowrSymbol
				ON DUPLICATE KEY UPDATE
					`zmpo_e`.IdnTowr = dp.IdnTowr,
					`zmpo_e`.iloscdo = IF(_INT_Dir_Status = 'PPT', `zmpo_e`.ilosc, `zmpo_e`.Iloscdo),
					`zmpo_e`.Ilosc = IF(_INT_Dir_Status = 'PPT', IF(dp.Ilosc_Potw != 0, dp.Ilosc_Potw, 0), dp.Ilosc)
				;
				--	UWAGA moze byc tak ze w PPT usunieto juz pozycje a w zamowieniu jeszcze jest!!! 
				--	ZATEM usun z zmpo_e te ktorych nie ma w `t_infpiek_dok_po_insert`
				UPDATE `zmpo_e` p
				SET 
					p.Ilosc = 0
				WHERE
					p.IdnNG = _IdnOper
					AND NOT EXISTS(SELECT dp.GUID FROM `t_infpiek_dok_po_insert` dp WHERE dp.GUID = p.GUID LIMIT 1)
				;
				CALL zmpo_E_Let_Update('lp', '', _IdnOper, @ht.COpTypSortTyp_Usluga_TreeNode_Symbol, ''); -- LP nalicz wg symbolu towaru
				CALL zmpo_E_Let_Update('from_zmng_e', '', _IdnOper, '', '');
				--	IdnVat TRACĘ w triggerze `zmpo_e` po wstawieniu IdnTowr - zatem raz jeszcze go wstawiam
				
				UPDATE `zmpo_e` p, `zmng_e` n
				SET
					p.idncennik = n.klasacenowa
				WHERE
					n.GUID = p.IdnNG
				;
				
				UPDATE `zmpo_e` p, `t_infpiek_dok_po_insert` dp
				SET
					p.IdnVat = dp.IdnVat,
					p.Tag = -1
				WHERE
					p.GUID = dp.GUID
				;

					-- CALL oppo_E_Let_Update('one_rec', _GUID, '', '', '');
SET @_POS_POS_2_INT = "CALL zmng_E_Let('Post', _IdnOper, '', '');";		
				
				CALL zmng_E_Let('Post', _IdnOper, '', '');
				
				CALL _pozycje_cenyrabat_zmpo_e('dla.IdnOper', _IdnOper, FALSE, FALSE, '', '');  --	ustaw ceny

				CALL zmng_E_Let('Post', _IdnOper, '', '');
				
SET @_POS_POS_2_INT = "CALL zmng_E_Let('ApplyAndClear', _IdnOper, '', '');";		
				CALL zmng_E_Let('ApplyAndClear', _IdnOper, '', '');
			END IF;		-- 	'ZM.Create.po'
			
			IF _MODE = 'temp.t_infpiek_dok_po_insert' THEN
			--	 Kreuj `t_infpiek_dok_po_insert`
				UPDATE `infpiek_int_po` dp
				SET 
					dp.ARTYK_GUID = RTRIM(dp.ARTYK_GUID)
				WHERE
					dp.DOWN_HEX = _IDOK 
				;		
				UPDATE `infpiek_int_po` dp
				SET
					dp.ARTYK_GUID = 
					IFNULL(
					(SELECT GUID FROM `TowrNg` t WHERE t.kod_fiskalny = dp.WYRO_PLU ORDER BY t.IDN LIMIT 1), ''
					)
				WHERE
					dp.ARTYK_GUID = ''
					AND
					dp.DOWN_HEX = _IDOK 
				;
				DROP TEMPORARY TABLE IF EXISTS `t_infpiek_dok_po_insert`;
				CREATE TEMPORARY TABLE `t_infpiek_dok_po_insert`
					SELECT
						dp.INT_GUID AS GUID, -- 	CONCAT('Infpie_', dp.IPOZ_HEX) AS GUID,
						_IdnOper AS IdnOper,
						dp.ARTYK_GUID AS IdnTowr,
						-- było (SELECT GUID FROM `TowrNg` t WHERE t.kod_fiskalny = dp.WYRO_PLU ORDER BY t.IDN LIMIT 1) AS IdnTowr,
						IFNULL(dp.DOWP_ILE, 0.0) AS Ilosc,
						IFNULL(dp.DOWP_ILE_POTW, 0.0) AS Ilosc_Potw,
						IFNULL(dp.DOWP_BRU, 0.0) AS CenaBrt,
						IFNULL(dp.DOWP_RAB, 0.0) AS rabat,
						-- ??? 5 AS rodzaj_przeliczenia, 	-- Brutto z ceny brutto
						dp.INT_IDNVAT AS IdnVat,
						dp.OPIS_TXT,
						dn.DOWN_DOS - 1 AS DOWN_DOS,
						IFNULL(t.Symbol, '') AS TowrSymbol
					FROM `infpiek_int_po` dp 
					INNER JOIN `infpiek_int_ng` dn ON dn.DOWN_HEX = dp.DOWN_HEX
					LEFT JOIN `TowrNg` t ON t.GUID = dp.ARTYK_GUID
					WHERE
						dp.DOWN_HEX = _IDOK 
						-- AND
						-- dn.DOWN_HEX = dp.DOWN_HEX
				;
			END IF;		-- 	'temp.t_infpiek_dok_po_insert'
			
		END$$



DROP PROCEDURE IF EXISTS `_POS_POS_2_INT`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `_POS_POS_2_INT`(
	IN _MODE VARCHAR(250),
	_IDOK VARCHAR(50),	
	_INT_Dir_Status VARCHAR(50),
	_Param_A VARCHAR(50)	
	)
/*
	HT i ZOO
	
	z tabeli 
	`infpiek_int_ng`
	ZAM/PPT
	
	dla INT
		CALL _POS_POS_2_INT('refresh.XXX', '', 'doINT', '1');		--	w _Param_A ile dni wstecz
		CALL _POS_POS_2_INT('refresh.XXX', '', 'PPT', '1');		--	w _Param_A ile dni wstecz
	
	CALL _POS_POS_2_INT('refresh.ALL', '', '', '');		
*/

S_POS_POS_2_INT: BEGIN
	DECLARE _IS_USED_LOCK BOOLEAN DEFAULT FALSE;
	DECLARE _Process, _LOCK_infopiek VARCHAR(250);
	DECLARE _Ile_Dni_Wstecz INTEGER DEFAULT 1;
	DECLARE _KontrGUID VARCHAR(38) DEFAULT '@ST_ZS';
	DECLARE _IdnOper, _DOWN_TYP VARCHAR(38);
	DECLARE _ZMagazynu INTEGER DEFAULT 0; --	KONT_HEX // juz nie KONT_ZAK
	DECLARE _DoMagazynu INTEGER DEFAULT 0; --	KONT_HEX // juz nie KONT_ZAK
	DECLARE _DOMM_HEX INTEGER DEFAULT 0; --	DOMM_HEX // dla MM-ki to docelowy magazyn/sklep

-- leave S_POS_POS_2_INT;
	
	IF _MODE = 'refresh.ALL' THEN
		CALL _POS_POS_2_INT('refresh.XXX', '', 'doINT', '3');		--	w _Param_A ile dni wstecz
		CALL _POS_POS_2_INT('refresh.XXX', '', 'PPT', '3');		--	w _Param_A ile dni wstecz
		-- CALL _Globals_Set("_POS_POS_2_INT('refresh.ALL', '', '', '');", NOW());
	END IF;		-- 	'refresh.ALL'
	
	IF _MODE = 'refresh.ZamDD' THEN
		CALL _POS_POS_2_INT('refresh.XXX', '', 'doINT', '3');		--	w _Param_A ile dni wstecz
	END IF;		-- 	'refresh.ZamDD'
	
	IF _MODE = 'refresh.PPT' THEN
		CALL _POS_POS_2_INT('refresh.XXX', '', 'PPT', '3');		--	w _Param_A ile dni wstecz
	END IF;		-- 	'refresh.PPT'


	
	IF _MODE = 'refresh.XXX' THEN
		CALL _Session_Refresh_Variables('', '', '');
		SET 
			_Process = CONCAT(" _POS_POS_2_INT / refresh.ALL / ", _INT_Dir_Status),
			_LOCK_infopiek = CONCAT('infopiek_', SCHEMA())
		;
		CALL _erp_external_process_log_tools('Insert', _Process, 'Info_piek', 'Start przetw', 0, '', '');
		CALL _erp_external_process_log_tools('Insert', _Process, 'Info_piek', 'GET_LOCK(...)', 0, '', '');
		SET _IS_USED_LOCK = (IFNULL(IS_USED_LOCK(_LOCK_infopiek), 0) > 0);	--	zwraca connection ID (wtedy _IS_USED_LOCK = TRUE) lub 0 (null) i wtedy jest OK (wtedy _IS_USED_LOCK = FALSE)
		SET @_IS_USED_LOCK = _IS_USED_LOCK;
		IF NOT _IS_USED_LOCK THEN
			SET _IS_USED_LOCK = (IFNULL(GET_LOCK(_LOCK_infopiek, 0), 0) = 0);	--	zwraca connection 0 (wtedy _IS_USED_LOCK = TRUE) lub 1 i wtedy jest OK (wtedy _IS_USED_LOCK = FALSE)
			SET @_IS_USED_LOCK = _IS_USED_LOCK;
		END IF;
		IF _IS_USED_LOCK AND FALSE THEN		--	Tutaj odblokowuje
			CALL _erp_external_process_log_tools('Insert', _Process, 'Info_piek', 'zablokowany proces (IS_USED_LOCK)', 1, '', '');
			CALL _erp_external_process_log_tools('Insert', _Process, 'Info_piek', 'Koniec przetw', 0, '', '');
			LEAVE S_POS_POS_2_INT;
		END IF;

		CALL _Globals_Set(_Process, NOW());
		
SET @_POS_POS_2_INT = "refresh.XXX????";						
	/*******************************************************************************************************************************
		Zamowienia DD w POS czyli -> do ht jako ZM_OO
	*******************************************************************************************************************************/
		IF _Param_A != '' THEN
			SET _Ile_Dni_Wstecz = _Param_A;
		END IF;

		SELECT 
			IFNULL(MAX(tn.INT_localtime), LOCALTIME()) AS Max_INT_localtime 
		FROM `infpiek_int_ng` tn
		WHERE
			tn.INT_Status = 'F'
			AND tn.INT_Dir_Status = 'doINT'
		INTO @Max_INT_localtime
		;

	--	0.	Ustaw INT_Status na '' wszystkim ktorym sie nie udalo zrealizowac czyli majacym INT_Status = 'T' lub 'E' ALE UWAGA!!! maja attempt <= 5!! Gdy > 6 to juz nie obslugujemy
		UPDATE `infpiek_int_ng` tn
		SET
			tn.INT_Status = ''
		WHERE
			tn.INT_Status IN ('T', 'E')
			AND
			tn.INT_Dir_Status = _INT_Dir_Status -- 'doINT', 'PPT' etc
			AND
			tn.INT_localtime > DATE_ADD(NOW(), INTERVAL -_Ile_Dni_Wstecz DAY)
			AND
			tn.DOWN_TYP IN ('0', '1', '3',  '8', 'E', 'R', 'm', 'q', 'w')
			AND
			tn.attempt <= 5
		;
		
	--	1.	kreuję tymcz.
		DROP TEMPORARY TABLE IF EXISTS `t_infpiek_int_ng_2_INT`;
		CREATE TEMPORARY TABLE `t_infpiek_int_ng_2_INT`
			SELECT
				tn.*
			FROM `infpiek_int_ng` tn
			WHERE
				tn.INT_Status = ''
				AND
				tn.INT_Dir_Status = _INT_Dir_Status -- 'doINT', 'PPT' etc
				AND
				tn.INT_localtime > DATE_ADD(NOW(), INTERVAL -_Ile_Dni_Wstecz DAY)
				AND
				tn.DOWN_TYP IN ('0', '1', '3',  '8', 'E', 'R', 'm', 'q', 'w')
		;
		SELECT COUNT(*) FROM `t_infpiek_int_ng_2_INT` INTO @ROW_COUNT;
		-- SELECT ROW_COUNT() INTO @ROW_COUNT;
		IF IFNULL(@_POS_POS_2_INT.Select.ROW_COUNT, FALSE) THEN select @ROW_COUNT; END IF;
		-- IF _Param_A != '' THEN select @ROW_COUNT; END IF;
		IF @ROW_COUNT <= 0 THEN
		--	BRAK rekordów do przetwarzania
			-- DROP TEMPORARY TABLE IF EXISTS `t_infpiek_int_ng_2_INT`;
			CALL _erp_external_process_log_tools('Insert', _Process, 'Info_piek', 'Brak rekordow do przetwarzania', 0, '', '');
SET @_POS_POS_2_INT = CONCAT('_INT_Dir_Status:', _INT_Dir_Status, ' _Ile_Dni_Wstecz:', _Ile_Dni_Wstecz, ' @ROW_COUNT=', @ROW_COUNT, " LEAVE S_POS_POS_2_INT;");
			SET @_RELEASE_LOCK = RELEASE_LOCK(_LOCK_infopiek);
			CALL _erp_external_process_log_tools('Insert', _Process, 'Info_piek', 'RELEASE_LOCK(...)', 0, '', '');
			CALL _erp_external_process_log_tools('Insert', _Process, 'Info_piek', 'Koniec przetw', 0, '', '');
			LEAVE S_POS_POS_2_INT;
		END IF;
		
		CALL _erp_external_process_log_tools('Insert', _Process, 'Info_piek', 
			CONCAT('Petla dok. w liczbie = ', @ROW_COUNT), 
			0, '', '');

	--	2.	ustawiam status na 'T' temporary czyli przetwarzam
		UPDATE `infpiek_int_ng` r, `t_infpiek_int_ng_2_INT` t
		SET
			r.INT_Status = 'T',	--	Temporary czyli przetwarzam
			r.attempt = r.attempt + 1
		WHERE
			r.DOWN_HEX = t.DOWN_HEX
		;
	--	3.	Pętla przetwarzania
SET @_POS_POS_2_INT = "Pętla przetwarzania";						
		SET @ROW_Curr = 0;
		BEGIN
		-- Operacje np. magazynowe
		
			DECLARE done BOOL DEFAULT FALSE;
			DECLARE DOWN_HEX INTEGER DEFAULT 0;
		--	3.1 Kursor	
			DECLARE c_infpiek_int_ng_2_INT CURSOR FOR
				SELECT
					t.DOWN_HEX
				FROM `t_infpiek_int_ng_2_INT` t
			;	
			DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
			DECLARE EXIT HANDLER FOR SQLEXCEPTION 
			BEGIN
				GET DIAGNOSTICS CONDITION 1
					@h.p1 = RETURNED_SQLSTATE, @h.p2 = MESSAGE_TEXT
				;
				CALL _erp_external_process_log_tools('Insert', _Process, 'Info_piek', 
					REPLACE(REPLACE('ERROR (#SQLSTATE#): #MESSAGE_TEXT#', '#SQLSTATE#', IFNULL(@h.p1, '')), '#MESSAGE_TEXT#', IFNULL(@h.p2, '')), 
					1, '', '');
				CALL _erp_external_process_log_tools('Insert', _Process, 'Info_piek', 
					CONCAT('Blad systemu gdy przetwarzano rekord nr: ', @ROW_Curr), 
					1, '', '');
				SET @ROW_Curr = @ROW_Curr - 1;

				-- SET done_err = TRUE;
			END;
			
		--	3.2 Open Kursor	
			OPEN c_infpiek_int_ng_2_INT;
			loop_c_infpiek_int_ng_2_INT: LOOP
				SET done = FALSE;
				FETCH c_infpiek_int_ng_2_INT INTO 
					DOWN_HEX
				;
				IF done THEN
					LEAVE loop_c_infpiek_int_ng_2_INT;
				END IF;
			--	Wykonaj naliczanie
				SET @ROW_Curr = @ROW_Curr + 1;
				CALL _POS_POS_2_INT('refresh.one.rec', DOWN_HEX, _INT_Dir_Status, '');
			END LOOP;
			CLOSE c_infpiek_int_ng_2_INT;
		
		END;
		
		CALL _erp_external_process_log_tools('Insert', _Process, 'Info_piek', 
			CONCAT('Przetwarzono = ', @ROW_Curr), 
			0, '', '');
		
	--	4.	usuń tymczsowkę
		DROP TEMPORARY TABLE IF EXISTS `t_infpiek_int_ng_2_INT`;
	--	5.	przepisz status do infpie_dok_ng
	--	6.	usuń rekordy z `infpie_dok_ng_rec` ze statusem na 'F' czyli zakonczono 
	
		SET @_RELEASE_LOCK = RELEASE_LOCK(_LOCK_infopiek);
		CALL _erp_external_process_log_tools('Insert', _Process, 'Info_piek', 'RELEASE_LOCK(...)', 0, '', '');
		CALL _erp_external_process_log_tools('Insert', _Process, 'Info_piek', 'Koniec przetw', 0, '', '');

	END IF;		-- 	'refresh.XXX'

	IF _MODE = 'refresh.one.rec' THEN
					SET @_POS_POS_2_INT = "refresh.one.rec";						
	/*******************************************************************************************************************************
		Pobiera jeden rekord i ....
	*******************************************************************************************************************************/
	--	1.	ustawiam status na 'E' czyli teraz przetwarzam (E ma znaczenie: error gdy zostanie nie zmieniony na F)
			CALL infpiek_int_Tools('set.Status', _IDOK, 'E'); 	-- 'E' czyli err
		
		SELECT 
			dn.INT_GUID,
			dn.DOWN_TYP,
			dn.KONT_HEX,	--	 juz nie dn.KONT_ZAK,
			IFNULL(
			(SELECT k.GUID FROM `kontrah` k WHERE k.magazyn_akwizytora = dn.KONT_HEX AND k.PlatnikGUID = '200' AND NOT k.deleted LIMIT 1), '200'		-- 200 to spolka z o.o.
			) AS KontrGUID,
			dn.DOMM_HEX
		FROM `infpiek_int_ng` dn
		WHERE
			dn.DOWN_HEX = _IDOK
		INTO
			_IdnOper,
			_DOWN_TYP,
			_ZMagazynu,
			_KontrGUID,
			_DOMM_HEX
		;
		 
		
		SET 
			@Rodzaj = 
				CASE _DOWN_TYP 	
					WHEN '1' THEN @ht.CZmOO 			-- = 27,			--  Zamówienie od odbiorcy 
					WHEN 'E' THEN @ht.CMGZW 			-- = 70,			--  Zwrot towaru do magazynu (ilosci na -) + MM na 7
					WHEN 'R' THEN @ht.CMGZW 			-- = 70,			--  zwrot reklamacyjny  do magazynu  (ilosci na -) + MM na 8
					WHEN '8' THEN @ht.CInwn 			-- = 39,			--  Inwentaryzacja / Remanent 
					WHEN '3' THEN @ht.CRzRW 			-- = 11,			--  RW - Dokument likwidacji (RW)
					-- WHEN 'M' THEN @ht.CMMMM 			-- = 9,				--  MM-ka
					WHEN 'm' THEN @ht.CZmOO 			-- = 27,			--  Zamówienie chemiczne od odbiorcy (sklepu)
					WHEN 'w' THEN @ht.CMM_MP 			-- = 102,			--  Przesunicie magazynowe - przychd
					WHEN 'q' THEN @ht.CMM_MR 			-- = 103,			--  Przesunicie magazynowe - rozchd
					ELSE
					@ht.CZmOO
					/*
					Typy Dokumentow pole `DOWN_TYP`:
					'1' = Zamowienia														ht		ZROBILEM	
					'0' = PPT																ht		ZROBILEM
					
					'E' = Dowod zwrotu do magazynu (ilosci na -)							ht		ZROBILEM
					'R' = Reklamacja - zwrot reklamacyjny  do magazynu (ilosci na -)		ht		ZROBILEM
					
					'3' = Dokument likwidacji (RW)											zoo		ZROBILEM
					'8' = Remanent 															zoo		z apro zrobimy
					
					'9' = Przychod towarow obcych											?
					'6' = Zwrot towarow obcych												?
					'4' = Zwrot na przecene													?  A u p.Jansza jako mm-ka
					'5' = Przyjecie na przecene												?
					*/					
				END,
			
			@IdnOper = _IdnOper,
			@KontrGUID = _KontrGUID,
			@_Tymczasowa = FALSE,
			@G = '',
			@ZMagazynu = _ZMagazynu
		;
		
		IF (_DOWN_TYP IN ('3', '8')) THEN
			IF SCHEMA() != 'zoo' AND SCHEMA() != 'httest' THEN LEAVE S_POS_POS_2_INT; END IF;
		ELSE
			IF SCHEMA() != 'ht' AND SCHEMA() != 'httest' THEN LEAVE S_POS_POS_2_INT; END IF;
		END IF;
						SET @_POS_POS_2_INT = "Wstawia dokument";						
		

	/*******************************************************************************************************************************
		Wstawia dokument
	*******************************************************************************************************************************/
		IF @Rodzaj IN (@ht.CZmOO, @ht.CZmDD) THEN
		/*********************************************************************************************************************
			ZAMOWIENIA/PPT
		*********************************************************************************************************************/
							SET @_POS_POS_2_INT = "IF @Rodzaj IN (@ht.CZmOO, @ht.CZmDD) THEN";		
							-- SET @PPT.Co = 'ZM.Create.ng';
			IF _DOWN_TYP = 'm' THEN
			--	ZMOO ale Chemiczne czyli na Magazyn 101
				SET _ZMagazynu = 101, _DoMagazynu = 101;
				
			END IF;
			
			SET 
				_DoMagazynu = _ZMagazynu,
				@_INT_Dir_Status = _INT_Dir_Status
			;
			
			IF _INT_Dir_Status = 'PPT' THEN
			--	PPT		******************************************************************************************************************
				SET 
					@ZM.Create.ng.Doc.Exists = Exists(
						SELECT n.GUID FROM `zmng` n WHERE n.GUID = _IdnOper
					)
				;
				IF NOT @ZM.Create.ng.Doc.Exists THEN
				--	UWAGA gdy nie ma dokumentu a jest to PPT to... rób jakby to było zamówienie
					SET @_INT_Dir_Status = 'doINT';
				END IF;
			END IF;
									SET @_POS_POS_2_INT = "CALL _POS_E_NG('ZM.Create.ng', _IDOK, _DOWN_TYP, _IdnOper, @Rodzaj, _KontrGUID, _ZMagazynu, _DoMagazynu, @_INT_Dir_Status, '');";		
			--	w @_INT_Dir_Status mamy wypadkowa wartosc zatem NIE ZASTEPUJ zmiennej @_INT_Dir_Status zmienna _INT_Dir_Status !!!!!
			CALL _POS_E_NG('ZM.Create.ng', _IDOK, _DOWN_TYP, _IdnOper, @Rodzaj, _KontrGUID, _ZMagazynu, _DoMagazynu, @_INT_Dir_Status, '');
							-- SET @PPT.Co = 'ZM.Create.po';
									SET @_POS_POS_2_INT = "CALL _POS_E_NG('ZM.Create.po', _IDOK, _DOWN_TYP, _IdnOper, @Rodzaj, _KontrGUID, _ZMagazynu, _DoMagazynu, _INT_Dir_Status, '');";		
			UPDATE `zmng_e` SET MagazynWys = _ZMagazynu;
			--	Tutaj mozna wstawiac _INT_Dir_Status !!!!!
			CALL _POS_E_NG('ZM.Create.po', _IDOK, _DOWN_TYP, _IdnOper, @Rodzaj, _KontrGUID, _ZMagazynu, _DoMagazynu, _INT_Dir_Status, '');
			
			IF _INT_Dir_Status = 'PPT' THEN
			--	PPT	zatem dodatkowo realizu	*****************************************************************************************************
				SET @IdnOperRealiz = CONCAT('WZ_z_PPT_', _IDOK);
SET @_POS_POS_2_INT = "_zmng_Realizuj";		
				-- Test na ile do realizacji!!!!
				CALL _zmng_Update_zrealizowane('zmng', _IdnOper, '', '');
				UPDATE `zmpo` z
				SET
					z.zrealizowano = (SELECT SUM(p.ilosc) FROM `oppo` p WHERE GUIDzm = z.GUID)
				WHERE
					z.IdnNg = _IdnOper
				;	
				
				SET @_zmng_Realizuj.DoRealizacji = 0;
				SELECT
					-- IFNULL(COUNT(p.Ilosc - p.zrealizowano), 0) AS DoRealizacji
					IFNULL(SUM((p.Ilosc - p.zrealizowano) > 0), 0) AS DoRealizacji
				FROM `zmng` z
				INNER JOIN zmpo p ON p.IdnNg = z.GUID
				WHERE
					TRUE
					AND z.GUID = _IdnOper
					AND p.Ilosc > 0
				INTO @_zmng_Realizuj.DoRealizacji
				;
				IF ABS(@_zmng_Realizuj.DoRealizacji) > 0 THEN
					CALL _zmng_Realizuj('', _IdnOper, @IdnOperRealiz, 10, 0, NULL, 0, 0, FALSE, 0, '', '', '', 0, '', '', 'Server', '');
				END IF;
			END IF;
		ELSE
		/*********************************************************************************************************************
			Operacje
		*********************************************************************************************************************/
			IF @Rodzaj IN (@ht.CMGZW, @ht.CInwn, @ht.CMM_MP) THEN
				SET
					_DoMagazynu = _ZMagazynu,
					_ZMagazynu = 0
				;
			ELSEIF @Rodzaj IN (@ht.CMMMM) THEN
				SET
					_DoMagazynu = _DOMM_HEX
				;
			END IF;
			
			CALL _POS_E_NG('OP.Create.ng', _IDOK, _DOWN_TYP, _IdnOper, @Rodzaj, _KontrGUID, _ZMagazynu, _DoMagazynu, _INT_Dir_Status, '');
			CALL _POS_E_NG('OP.Create.po', _IDOK, _DOWN_TYP, _IdnOper, @Rodzaj, _KontrGUID, _ZMagazynu, _DoMagazynu, _INT_Dir_Status, '');
			IF @Rodzaj = @ht.CMGZW THEN
			-- LEAVE S_POS_POS_2_INT;
			/*********************************************************************************************************************
				MM - Zwrot musi konczyc sie MM-ką na 7 lub 8 magazyn
			*********************************************************************************************************************/
				SET 
					-- _IdnOper = CONCAT('MM-', _IDOK), -- MD5(_IdnOper),
					_IdnOper = MD5(_IdnOper),
					_ZMagazynu = _DoMagazynu,
					_DoMagazynu = IF(_DOWN_TYP = 'E', 7, 8),
					@Rodzaj = @ht.CMMMM 		--	= 09  MM 
				;
				SET @IdnOper = _IdnOper;
				CALL _POS_E_NG('OP.Create.ng', _IDOK, _DOWN_TYP, _IdnOper, @Rodzaj, _KontrGUID, _ZMagazynu, _DoMagazynu, _INT_Dir_Status, 'MM-ka!!!!');
				CALL _POS_E_NG('OP.Create.po', _IDOK, _DOWN_TYP, _IdnOper, @Rodzaj, _KontrGUID, _ZMagazynu, _DoMagazynu, _INT_Dir_Status, 'MM-ka!!!!');
				
			END IF;
			
		END IF;
		DROP TEMPORARY TABLE IF EXISTS `t_infpiek_dok_po_insert`;
		
	--	3.	ustawiam status na 'F' czyli zakonczono 
		CALL infpiek_int_Tools('set.Status', _IDOK, 'F'); 	-- 'F' czyli zakonczono 
	END IF;		-- 	'refresh.one.rec'
END$$







DROP PROCEDURE IF EXISTS `P_opng_sieroty_20150123_guidy`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `P_opng_sieroty_20150123_guidy`(
	IN _MODE VARCHAR(250),
	_IdnOper VARCHAR(50),	
	_Param_A VARCHAR(50)	
	)
/*
	CALL P_opng_sieroty_20150123_guidy('', @IdnOper, '');
	CALL P_opng_sieroty_20150123_guidy('WMS:', @IdnOper, '');
	
	CALL P_opng_sieroty_20150123_guidy('LOOP_1', '', '');
	CALL P_opng_sieroty_20150123_guidy('LOOP_2', '', '');
*/

S_P_opng_sieroty_20150123_guidy: BEGIN

	IF _MODE  = '' THEN
		SET @IdnOper = _IdnOper;
		
		CALL opng_E_Let('Clear', _IdnOper, '', '');
		
		CALL Opng_E_init('EDIT', _IdnOper, @session.Registration.UserGUID, '', '');
		CALL Opng_E_Run('before.run', _IdnOper, '', '', '');
		CALL Opng_E_Run('', _IdnOper, '', '', '');
		CALL Opng_E_Run('after.run', _IdnOper, '', '', '');
		
		-- 1	KOntrGUID
		SET @KontrGUID = (SELECT k.GUID FROM `oppo_e` p, `kontrah` k WHERE p.IdnOper = _IdnOper AND k.idn = p.KontrIdn LIMIT 1);
		
		-- 2	init temp + wstaw do init temp
		DROP TEMPORARY TABLE IF EXISTS `t_opng_e_sieroty_20150123`;
		CREATE TEMPORARY TABLE `t_opng_e_sieroty_20150123` LIKE `opng_e`;
		TRUNCATE `t_opng_e_sieroty_20150123`;
		INSERT INTO `t_opng_e_sieroty_20150123` 
			SELECT
				n.*
			FROM `opng` n
			INNER JOIN `oppo_e` p ON p.IdnOper = _IdnOper
			WHERE
				n.KontrGUID = @KontrGUID -- '{DBBD9EEA-5BA0-46FA-9E16-C0BF7C344082}'
				AND n.Rodzaj = p.rodzaj AND n.zmagazynu = p.zmagazynu AND n.domagazynu = p.domagazynu
			ORDER BY idn DESC
			LIMIT 1
		;
		-- 3	update temp
		UPDATE `t_opng_e_sieroty_20150123` t, `oppo_e` p
		SET 
			t.Idn = NULL, t.GUID = _IdnOper, t.datawystaw = p.datawystaw, t.datasprzed = p.datasprzed, t.datawplywu = p.datawplywu,
			t.NrdokMag = 'xxxxx'
		WHERE p.IdnOper = _IdnOper
		;
		-- SELECT * FROM `t_opng_e_sieroty_20150123`;

		INSERT INTO `opng_e` SELECT * FROM `t_opng_e_sieroty_20150123`;

			CALL opng_E_Let('Post', _IdnOper, '', '');
		-- SELECT n.NettoWal, n.CKwotaWal, n.Brutto, n.Vat, n.Netto, n.* FROM `opng_e` n WHERE GUID = _IdnOper;
			CALL opng_E_Let('Apply', _IdnOper, '', '1');
			CALL opng_E_Let('Clear', _IdnOper, '', '');
	END IF;

	IF _MODE  = 'WMS:' THEN
		SET @IdnOper = _IdnOper;
		
		CALL opng_E_Let('Clear', _IdnOper, '', '');
		
		CALL Opng_E_init('EDIT', _IdnOper, @session.Registration.UserGUID, '', '');
		CALL Opng_E_Run('before.run', _IdnOper, '', '', '');
		CALL Opng_E_Run('', _IdnOper, '', '', '');
		CALL Opng_E_Run('after.run', _IdnOper, '', '', '');
		
		DROP TEMPORARY TABLE IF EXISTS `t_opng_e_sieroty_20150123`;
		CREATE TEMPORARY TABLE `t_opng_e_sieroty_20150123` LIKE `opng_e`;
		
		INSERT INTO `t_opng_e_sieroty_20150123` 
		(idn, GUID, Rodzaj, datawystaw, datasprzed, datawplywu, zmagazynu, domagazynu)
			SELECT 
				0, p.IdnOper, p.Rodzaj, p.datawystaw, p.datasprzed, p.datawplywu, p.zmagazynu, p.domagazynu 
			FROM `oppo_e` p 
			WHERE 
				p.IdnOper = _IdnOper 
			LIMIT 1
		;
		
		UPDATE `t_opng_e_sieroty_20150123` t, `oppo_e` p
		SET 
			t.Idn = NULL, 
			t.GUID = p.IdnOper, t.data_vat = p.datawystaw, t.datawystaw = p.datawystaw, t.datasprzed = p.datasprzed, t.datawplywu = p.datawplywu,
			t.idnuser = '<by procedure call>',
			t.NrdokMag = SUBSTRING(p.IdnOper, -14, 14)
		WHERE 
			p.IdnOper = _IdnOper
		;
		-- SELECT * FROM `t_opng_e_sieroty_20150123`;

		INSERT INTO `opng_e` SELECT * FROM `t_opng_e_sieroty_20150123`;

			CALL opng_E_Let('Post', _IdnOper, '', '');
		-- SELECT n.NettoWal, n.CKwotaWal, n.Brutto, n.Vat, n.Netto, n.* FROM `opng_e` n WHERE GUID = _IdnOper;
			CALL opng_E_Let('Apply', _IdnOper, '', '1');
			CALL opng_E_Let('Clear', _IdnOper, '', '');
	END IF;


	IF _MODE  = 'LOOP_1' THEN
		BEGIN
		-- Operacje np. magazynowe
		
			DECLARE done BOOL DEFAULT FALSE;
			DECLARE _GUID VARCHAR(38) DEFAULT '';
		--	3.1 Kursor	
			DECLARE c_opng_sieroty_20150123_guidy CURSOR FOR
				SELECT 
				g.GUID
				FROM `opng_sieroty_20150123_guidy` g
				INNER JOIN `infpiek_int_ng` ing ON CONCAT('WZ_z_PPT_', ing.DOWN_HEX) = g.GUID
				LEFT JOIN `opng` n ON n.GUID = g.GUID
				LEFT JOIN `zmng` z ON z.GUID = ing.INT_GUID
				WHERE
					TRUE
					AND n.GUID IS NULL
			;	
			DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
		--	3.2 Open Kursor	
			OPEN c_opng_sieroty_20150123_guidy;
			loop_c_opng_sieroty_20150123_guidy: LOOP
				FETCH c_opng_sieroty_20150123_guidy INTO 
					_GUID
				;
				IF done THEN
					LEAVE loop_c_opng_sieroty_20150123_guidy;
				END IF;
			--	Wykonaj naliczanie
				CALL P_opng_sieroty_20150123_guidy('', _GUID, '');
			END LOOP;
			CLOSE c_opng_sieroty_20150123_guidy;
		
		END;
		
	END IF;

	IF _MODE  = 'LOOP_2' THEN
		BEGIN
		-- Operacje np. magazynowe
		
			DECLARE done BOOL DEFAULT FALSE;
			DECLARE _GUID VARCHAR(38) DEFAULT '';
		--	3.1 Kursor	
			DECLARE c_opng_sieroty_20150123_guidy CURSOR FOR
				SELECT 
				g.GUID
				FROM `opng_sieroty_20150123_guidy` g
				LEFT JOIN `opng` n ON n.GUID = g.GUID
				WHERE
					TRUE
					AND n.GUID IS NULL
			;	
			DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
		--	3.2 Open Kursor	
			OPEN c_opng_sieroty_20150123_guidy;
			loop_c_opng_sieroty_20150123_guidy: LOOP
				FETCH c_opng_sieroty_20150123_guidy INTO 
					_GUID
				;
				IF done THEN
					LEAVE loop_c_opng_sieroty_20150123_guidy;
				END IF;
			--	Wykonaj naliczanie
				CALL P_opng_sieroty_20150123_guidy('WMS:', _GUID, '');
			END LOOP;
			CLOSE c_opng_sieroty_20150123_guidy;
		
		END;
		
	END IF;

	
END$$

-- DROP USER pos $$
-- CREATE USER pos IDENTIFIED BY 'pos98sql' $$
GRANT SELECT ON TowrNg TO pos $$
GRANT SELECT ON cennik TO pos $$
GRANT SELECT ON Jednostki TO pos $$
GRANT SELECT ON katcols TO pos $$
GRANT ALL ON infpie_dok_ng TO pos $$
GRANT ALL ON infpie_dok_po TO pos $$
GRANT ALL ON infpiek_int_ng TO pos $$
GRANT ALL ON infpiek_int_po TO pos $$
GRANT ALL ON infpie_dok_ng_dobowe TO pos $$

GRANT EXECUTE ON PROCEDURE _WELT_GET_GRUPY_ART TO pos $$
GRANT EXECUTE ON PROCEDURE _WELT_GET_ARTYKULY TO pos $$
GRANT EXECUTE ON PROCEDURE _WELT_GET_USERS TO pos $$
GRANT EXECUTE ON PROCEDURE _WELT_GET_Sklepy TO pos $$

GRANT EXECUTE ON PROCEDURE _WELT_GET_GRUPY_ART TO pos@'%' $$
GRANT EXECUTE ON PROCEDURE _WELT_GET_ARTYKULY TO pos@'%' $$
GRANT EXECUTE ON PROCEDURE _WELT_GET_USERS TO pos@'%' $$
GRANT EXECUTE ON PROCEDURE _WELT_GET_Sklepy TO pos@'%' $$

DELIMITER ;

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

Tabela ARTYKULY
 
artyk_akt = czy pozycja jest aktywna ?
artyk_hex = id wyroby
artyk_gru = grupa wyrobow
artyk_naz = nazwa wyrobu
artyk_skr = nazwa skrocona wyrobu
artyk_vat = stwka vat numerycznie
artyk_vac = stawka vat tekstowo
artyk_vfi = symbol stawki na urzadzeniu fiskalnym
artyk_jed = jednostka sprzedazy, magazynowania
artyk_pod = czy mozna sprzedawac czesci ulamkowe wyrobu
artyk_sor = sortowanie wlasne
artyk_pop = zawsze 0 
artyk_cen = cena promocyjna
artyk_ceb = cena brutto
artyk_kod = kod kreskowy
artyk_typ = typ wyrobu 0 = pobrana z centrali 1=wpisany z reki
artyk_plu = kod PLU  
 
Tabela ARTGRU
 
artg_hex = id grupy wyrobow
artg_naz = nazwa grupy
artg_sor = sortowanie 
artd_akt = czy grupa aktywna ?
artg_typ = typ grupy 0=pobrana z centrali 1=pobrana z reki
 
Potrzebowalbym 2 procedur skladowanych:
1. Zwracajaca tabele ARTYKULY dla wskazanego sklepu wraz z jego cenami.
powiedzmy _WELT_GET_ARTYKULY( @nParam ) gdzie nParam jest to ID sklepu w Waszym systemie.
2. Zwracajaca grupy wyrobow
powiedzmy _WELT_GET_GRUPY)_ART()


SELECT @@event_scheduler;

Anorak%%




*/
